ros-在gazebo中运动控制-ros回炉再强化学习(4)
笔者工作环境:
ubuntu16.04
ros-kinetic
笔者代码文件:
https://gitee.com/qiuzhixiaoniao/arm_1.0.git
本文实现四轴机械臂在gazebo中的控制运动
本文工作是在urdf模型可以显示在rviz和gazebo中的工作基础上进行的,如果还有对这两方面不清楚的可以参考我前面几章的博客,希望对渎职有点帮助。
本文用到的主要文件:
arm1_test
├── CMakeLists.txt
├── config
│ └── controllers.yaml------------------(每个关节的controller关节控制器)
├── launch
│ ├── display.launch--------------------(将urdf模型显示在rviz中)
│ ├── gazebo.launch---------------------(将urdf模型显示在gazebo中)
│ ├── robot_control.xml
│ └── robot_description.xml
├── meshes--------------------------------(模型)
│ ├── base_link.STL
│ ├── camera.dae
│ ├── gripper_Link.STL
│ ├── kinect2.STL
│ ├── left_Link.STL
│ ├── link1.STL
│ ├── link2.STL
│ ├── link3.STL
│ ├── link4.STL
│ └── right_Link.STL
├── package.xml
├── scripts
│ └── simple_mover----------------------(编写代码实现对gazebo中的四轴机械臂控制)
├── urdf
│ ├── arm1.gazebo.xacro-----------------(为模型添加gazebo的标签和----)
│ └── arm1.urdf.xacro-------------------(模型的urdf.xacro描述性文件)
└── urdf.rviz
1.添加gazebo标签
arm1.gazebo.xacro的主要功能是,添加gazebo_ros_control插件,将ros和gazebo连接起来。
arm1.gazebo.xacro
<?xml version="1.0"?>
<robot>
<!-- ros_control plugin -->
<gazebo>
<plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so">
<robotNamespace>/arm1</robotNamespace>
<robotSimType>gazebo_ros_control/DefaultRobotHWSim</robotSimType>
</plugin>
</gazebo>
<!--base_link-->
<gazebo reference="base_link">
<material>Gazebo/White</material>
</gazebo>
<!--link_1-->
<gazebo reference="link1">
<mu1>0.2</mu1>
<mu2>0.2</mu2>
<material>Gazebo/Orange</material>
</gazebo>
<!--link_2-->
<gazebo reference="link2">
<mu1>0.2</mu1>
<mu2>0.2</mu2>
<material>Gazebo/White</material>
</gazebo>
<!--link_3-->
<gazebo reference="link3">
<mu1>0.2</mu1>
<mu2>0.2</mu2>
<material>Gazebo/Orange</material>
</gazebo>
<!--link_4-->
<gazebo reference="link4">
<mu1>0.2</mu1>
<mu2>0.2</mu2>
<material>Gazebo/White</material>
</gazebo>
<!--gripper_base_link-->
<gazebo reference="gripper_link">
<mu1>0.2</mu1>
<mu2>0.2</mu2>
<material>Gazebo/Orange</material>
</gazebo>
<!--right_finger_link-->
<gazebo reference="right_link">
<mu1>1.2</mu1>
<mu2>1.2</mu2>
<material>Gazebo/White</material>
</gazebo>
<!--left_finger_link-->
<gazebo reference="left_link">
<mu1>1.2</mu1>
<mu2>1.2</mu2>
<material>Gazebo/White</material>
</gazebo>
<!--camera_link-->
<gazebo reference="camera_link">
<material>Gazebo/Grey</material>
</gazebo>
<!-- camera-->
<gazebo reference="camera_link">
<sensor type="camera" name="rgb_camera">
<update_rate>5.0</update_rate>
<camera name="rgb_camera">
<horizontal_fov>1.4</horizontal_fov>
<image>
<width>640</width>
<height>480</height>
<format>R8G8B8</format>
</image>
<clip>
<near>0.02</near>
<far>300</far>
</clip>
</camera>
<plugin name="camera_controller" filename="libgazebo_ros_camera.so">
<alwaysOn>true</alwaysOn>
<updateRate>0.0</updateRate>
<cameraName>rgb_camera</cameraName>
<imageTopicName>image_raw</imageTopicName>
<cameraInfoTopicName>camera_info</cameraInfoTopicName>
<frameName>camera_link</frameName>
<hackBaseline>0.0</hackBaseline>
<distortionK1>0.0</distortionK1>
<distortionK2>0.0</distortionK2>
<distortionK3>0.0</distortionK3>
<distortionT1>0.0</distortionT1>
<distortionT2>0.0</distortionT2>
</plugin>
</sensor>
</gazebo>
</robot>
在urdf文件中
(1) 在urdf文件中,需要对joint打上gazebo使用的transmission标签,transmission把TF(ros)的连接关系与仿真平台上的驱动设备(gazebo)联系在了一起,有了执行器,gazebo就可以在物理层面上对模型进行驱动了。
(2) 我们需要定义world link,然后再将base link 和world link连接起来,这样模型才能在gazebo世界中固定。
(3) 在arm1.urdf.xacro文件中需要导入进去,在下面文件第9\10行。