前言
本文主要介绍在ROS中使用urdf实现Gazebo中仿真时需要配置的基本内容(机器人关节控制相关)。流程上包括URDF标签结构,ROS下的关节发布(robot_state_publisher),ROS与Gazebo间插件配置,launch文件配置(模型robot_description参数加载,相关ros_control控制器yaml配置与加载,一般包含使Gazebo向ROS发布关节信息的控制器类型,ROS控制Gazebo中机器人关节运动的控制器等)
另,如果由错漏的地方,希望大家及时指出,同时也多多包涵。
1. 基础预备
下面通过准备工作了解ros,ros_control与真实机器人或gazebo间的结构及数据流。
1.1 准备工作1:ros_control
https://wiki.ros.org/ros_control
大概是作为ROS与机器人交互的中介,其使用结构如图。左侧是控制器类型设置,右侧是数据流。例如对于joint_position_controller,以机器人当前关节数据及ROS目标点为输入数据,再通过PID控制器实现输出控制。
1.2 准备工作2:Gazebo与ROS间的关系
http://gazebosim.org/tutorials?tut=ros_control&cat=connect_ros
通过ros_control与Gazebo插件实现gazebo中机器人运动仿真。具体结构如下
2. 主要教程
官方教程:https://wiki.ros.org/urdf/Tutorials/Using%20a%20URDF%20in%20Gazebo
对应github: https://github.com/ros/urdf_sim_tutorial
Gazebo方面教程:http://gazebosim.org/tutorials?tut=ros_control&cat=connect_ros
urdf中的gazebo标签及其他:http://gazebosim.org/tutorials/?tut=ros_urdf
对应github: https://github.com/ros-simulation/gazebo_ros_demos
上面两个教程结合参考以后,会更加清晰。本文按官方教程顺序展开,并进行适当补充说明。
(个人认为gazebo方面的教程更有条理)
2.1 通用的启动文件格式内容
以官方教程下的gazebo.launch文件来介绍通用的启动文件格式内容。
<!-- We resume the logic in empty_world.launch, changing only the name of the world to be launched -->
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="debug" value="$(arg debug)" />
<arg name="gui" value="$(arg gui)" />
<arg name="paused" value="$(arg paused)"/>
<arg name="use_sim_time" value="$(arg use_sim_time)"/>
<arg name="headless" value="$(arg headless)"/>
</include>
<param name="robot_description" command="$(find xacro)/xacro.py $(arg model)" />
<!-- push robot_description to factory and spawn robot in gazebo -->
<node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model"