pxmlw6n2f/Gazebo_Distributed_TCP/gazebo/gui/JointControlWidget.hh

322 lines
12 KiB
C++

/*
* Copyright (C) 2012 Open Source Robotics Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
#ifndef _GAZEBO_GUI_JOINTCONTROLWIDGET_HH_
#define _GAZEBO_GUI_JOINTCONTROLWIDGET_HH_
#include <memory>
#include <string>
#include "gazebo/gui/qt.h"
#include "gazebo/util/system.hh"
namespace gazebo
{
namespace msgs
{
class Model;
}
namespace gui
{
class JointControlWidgetPrivate;
class JointForceControl;
class JointForceControlPrivate;
class JointPIDPosControl;
class JointPIDPosControlPrivate;
class JointPIDVelControl;
class JointPIDVelControlPrivate;
/// \class JointControlWidget JointControlWidget
/// gui/JointControlWidget.hh
/// \brief Widget to control joints via application of force, position
/// PID controller, or velocity PID controller.
class GZ_GUI_VISIBLE JointControlWidget : public QWidget
{
Q_OBJECT
/// \brief Constructor.
/// \param[in] _parent Pointer to the parent of the widget.
public: JointControlWidget(QWidget *_parent = 0);
/// \brief Destructor.
public: virtual ~JointControlWidget();
/// \brief Set the name of the model to control.
/// \param[in] _modelName Name of the model.
public: void SetModelName(const std::string &_modelName);
/// \brief On reset callback.
private slots: void OnReset();
/// \brief On force changed callback.
/// \param[in] _value Value of the force.
/// \param[in] _name Name of the joint.
private slots: void OnForceChanged(double _value,
const std::string &_name);
/// \brief On position PID changed callback.
/// \param[in] _value Value of the position.
/// \param[in] _name Name of the joint.
private slots: void OnPIDPosChanged(double _value,
const std::string &_name);
/// \brief On position PID P gain changed callback.
/// \param[in] _value Value of the gain.
/// \param[in] _name Name of the joint.
private slots: void OnPPosGainChanged(double _value,
const std::string &_name);
/// \brief On position PID D gain changed callback.
/// \param[in] _value Value of the gain.
/// \param[in] _name Name of the joint.
private slots: void OnDPosGainChanged(double _value,
const std::string &_name);
/// \brief On position PID I gain changed callback.
/// \param[in] _value Value of the gain.
/// \param[in] _name Name of the joint.
private slots: void OnIPosGainChanged(double _value,
const std::string &_name);
/// \brief On velocity PID changed callback.
/// \param[in] _value Value of the velocity.
/// \param[in] _name Name of the joint.
private slots: void OnPIDVelChanged(double _value,
const std::string &_name);
/// \brief On velocity PID P gain changed callback.
/// \param[in] _value Value of the gain.
/// \param[in] _name Name of the joint.
private slots: void OnPVelGainChanged(double _value,
const std::string &_name);
/// \brief On velocity PID D gain changed callback.
/// \param[in] _value Value of the gain.
/// \param[in] _name Name of the joint.
private slots: void OnDVelGainChanged(double _value,
const std::string &_name);
/// \brief On velocity PID I gain changed callback.
/// \param[in] _value Value of the gain.
/// \param[in] _name Name of the joint.
private slots: void OnIVelGainChanged(double _value,
const std::string &_name);
/// \brief On position PID units changed callback.
/// \param[in] _index Index into the drop-down menu.
private slots: void OnPIDPosUnitsChanged(int _index);
/// \brief Add a tab widget with a scrollable area.
/// \param[in] _tabPane Tab pane that will have all the controls.
/// \param[in] _tabLayout Layout for the controls in the tab.
/// \param[in] _name Name of the tab.
private: void AddScrollTab(QTabWidget *_tabPane,
QGridLayout *_tabLayout,
const QString &_name);
/// \brief Layout the force tab.
/// \param[in] _modelMsg Message used to create the joint controls
private: void LayoutForceTab(msgs::Model &_modelMsg);
/// \brief Layout the position PID tab.
/// \param[in] _modelMsg Message used to create the joint controls
private: void LayoutPositionTab(msgs::Model &_modelMsg);
/// \brief Layout the velocity PID tab.
/// \param[in] _modelMsg Message used to create the joint controls
private: void LayoutVelocityTab(msgs::Model &_modelMsg);
/// \internal
/// \brief Pointer to private data.
private: std::unique_ptr<JointControlWidgetPrivate> dataPtr;
};
/// \class JointForceControl JointForceControl gui/JointForceControl.hh
/// \brief Widget to control joints via application of force
class GZ_GUI_VISIBLE JointForceControl : public QWidget
{
Q_OBJECT
/// \brief Constructor.
/// \param[in] _name Name of the joint.
/// \param[in] _layout Layout to add the control to.
/// \param[in] _parent Parent of the widget.
/// \param[in] _index Row index into the grid layout.
public: JointForceControl(const std::string &_name,
QGridLayout *_layout, QWidget *_parent, int _index);
/// \brief Destructor.
public: virtual ~JointForceControl();
/// \brief Reset the controls.
public: void Reset();
/// \brief On force changed callback.
/// \param[in] _value Value of the changed slider.
public slots: void OnChanged(double _value);
/// \brief QT changed signal, used to report the change to the joint
/// controller widget.
/// \param[in] _value Value of the slider.
/// \param[in] _name Name of the joint.
Q_SIGNALS: void changed(double _value, const std::string &_name);
/// \internal
/// \brief Pointer to private data.
private: std::unique_ptr<JointForceControlPrivate> dataPtr;
};
/// \class JointPIDPosControl JointPIDPosControlgui/JointPIDPosControl.hh
/// \brief Widget to control joints via application of position
/// PID controller.
class GZ_GUI_VISIBLE JointPIDPosControl : public QWidget
{
Q_OBJECT
/// \brief Constructor.
/// \param[in] _name Name of the joint.
/// \param[in] _layout Layout to add the control to.
/// \param[in] _parent Parent of the widget.
/// \param[in] _index Row index into the grid layout.
public: JointPIDPosControl(const std::string &_name,
QGridLayout *_layout, QWidget *_parent, int _index);
/// \brief Destructor.
public: virtual ~JointPIDPosControl();
/// \brief Reset the controls.
public: void Reset();
/// \brief Set the units to radians.
public: void SetToRadians();
/// \brief Set the units to degrees.
public: void SetToDegrees();
/// \brief Callback when the value of position slider changed.
/// \param[in] _value Value of the slider.
public slots: void OnChanged(double _value);
/// \brief Callback when the value of P gain slider changed.
/// \param[in] _value Value of the slider.
public slots: void OnPChanged(double _value);
/// \brief Callback when the value of I gain slider changed.
/// \param[in] _value Value of the slider.
public slots: void OnIChanged(double _value);
/// \brief Callback when the value of D gain slider changed.
/// \param[in] _value Value of the slider.
public slots: void OnDChanged(double _value);
/// \brief QT changed signal, used to report the change to the joint
/// controller widget.
/// \param[in] _value Value of the slider.
/// \param[in] _name Name of the joint.
Q_SIGNALS: void changed(double _value, const std::string &_name);
/// \brief QT changed signal, used to report the change to the joint
/// controller widget.
/// \param[in] _value Value of the slider.
/// \param[in] _name Name of the joint.
Q_SIGNALS: void pChanged(double _value, const std::string &_name);
/// \brief QT changed signal, used to report the change to the joint
/// controller widget.
/// \param[in] _value Value of the slider.
/// \param[in] _name Name of the joint.
Q_SIGNALS: void dChanged(double _value, const std::string &_name);
/// \brief QT changed signal, used to report the change to the joint
/// controller widget.
/// \param[in] _value Value of the slider.
/// \param[in] _name Name of the joint.
Q_SIGNALS: void iChanged(double _value, const std::string &_name);
/// \internal
/// \brief Pointer to private data.
private: std::unique_ptr<JointPIDPosControlPrivate> dataPtr;
};
/// \class JointPIDVelControl JointPIDVelControl gui/JointPIDVelControl.hh
/// \brief Widget to control joints via application of a
/// velocity PID controller.
class GZ_GUI_VISIBLE JointPIDVelControl : public QWidget
{
Q_OBJECT
/// \brief Constructor.
/// \param[in] _name Name of the joint.
/// \param[in] _layout Layout to add the control to.
/// \param[in] _parent Parent of the widget.
/// \param[in] _index Row index into the grid layout.
public: JointPIDVelControl(const std::string &_name,
QGridLayout *_layout, QWidget *_parent, int _index);
/// \brief Destructor.
public: virtual ~JointPIDVelControl();
/// \brief Reset the controls.
public: void Reset();
/// \brief Callback when the value of velocity slider changed.
/// \param[in] _value Value of the slider.
public slots: void OnChanged(double _value);
/// \brief Callback when the value of P gain slider changed.
/// \param[in] _value Value of the slider.
public slots: void OnPChanged(double _value);
/// \brief Callback when the value of I gain slider changed.
/// \param[in] _value Value of the slider.
public slots: void OnIChanged(double _value);
/// \brief Callback when the value of D gain slider changed.
/// \param[in] _value Value of the slider.
public slots: void OnDChanged(double _value);
/// \brief QT changed signal, used to report the change to the joint
/// controller widget.
/// \param[in] _value Value of the slider.
/// \param[in] _name Name of the joint.
Q_SIGNALS: void changed(double _value, const std::string &_name);
/// \brief QT changed signal, used to report the change to the joint
/// controller widget.
/// \param[in] _value Value of the slider.
/// \param[in] _name Name of the joint.
Q_SIGNALS: void pChanged(double _value, const std::string &_name);
/// \brief QT changed signal, used to report the change to the joint
/// controller widget.
/// \param[in] _value Value of the slider.
/// \param[in] _name Name of the joint.
Q_SIGNALS: void dChanged(double _value, const std::string &_name);
/// \brief QT changed signal, used to report the change to the joint
/// controller widget.
/// \param[in] _value Value of the slider.
/// \param[in] _name Name of the joint.
Q_SIGNALS: void iChanged(double _value, const std::string &_name);
/// \internal
/// \brief Pointer to private data.
private: std::unique_ptr<JointPIDVelControlPrivate> dataPtr;
};
}
}
#endif