概念
如上图所示,ROS control就是中间的controller + RobotHW部分,在编写完机器人的urdf文件之后,为了使机器人的关节和ros control关联,需要在urdf文件做出一些修改,RobotHW是对机器人硬件的软件抽象,在urdf中定义,对于controller来说,ros_control本身提供一些位置、速度、力控制器。
修改
transmission
<transmission name="tran1">
<type>transmission_interface/SimpleTransmission</type>
<joint name="head_pan_joint">
<hardwareInterface>EffortJointInterface</hardwareInterface>
</joint>
<actuator name="motor1">
<hardwareInterface>EffortJointInterface</hardwareInterface>
<mechanicalReduction>1</mechanicalReduction>
</actuator>
</transmission>
gazebo
<gazebo>
<plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so">
<robotNamespace>/pi_robot</robotNamespace>
<robotSimType>gazebo_ros_control/DefaultRobotHWSim</robotSimType>
</plugin>
</gazebo>
launch
<node name="controller_spawner" pkg="controller_manager" type="spawner" respawn="false"
output="screen" ns="/pi_robot" args="head_pan_joint_position_controller head_tilt_joint_position_controller torso_joint_position_controller left_shoulder_forward_joint_position_controller right_shoulder_forward_joint_position_controller left_shoulder_up_joint_position_controller right_shoulder_up_joint_position_controller left_elbow_joint_position_controller right_elbow_joint_position_controller left_wrist_joint_position_controller right_wrist_joint_position_controller joint_state_controller"/>
这里是运行了controller_manager节点,命令如下:
- load
- unload
- start
- stop
- spawn: load & start
- kill: stop & unload
文件中选用了spawn。
yaml
pi_robot:
# Publish all joint states -----------------------------------
joint_state_controller:
type: joint_state_controller/JointStateController
publish_rate: 50
# Position Controllers ---------------------------------------
head_pan_joint_position_controller:
type: effort_controllers/JointPositionController
joint: head_pan_joint
pid: {p: 100.0, i: 0.01, d: 10.0}