Gazebo是一种多机器人仿真器,可用于室内外机器人仿真。Gazebo在ROS中有良好的接口,包含ROS和Gazebo的所有控制。
若要实现ROS到Gazebo的通信,我们必须安装ROS-Gazebo接口。
应该安装以下软件包:
$ sudo apt install ros-melodic-gazebo-ros-pkgs ros-melodic-gazebo-msgs ros-melodic-gazebo-plugins ros-melodic-gazebo-ros-control
*gazebo_ros_pkgs : 它包含用于将ROS和Gazebo连接的封装和工具。
*gazebo-msgs : 它包含ROS和Gazebo交互的消息和服务的数据结构。
*gazebo-plugins : 它包含用于传感器、执行结构的Gazebo插件。
*gazebo-ros-control : 它包含用于在ROS和Gazebo之间通信的标准控制器。
安装后,请使用以下命令检查Gazebo是否安装正确:
$ roscore & rosrun gazebo_ros gazebo
一.为Gazebo创建机械臂仿真模型
我们可以通过添加仿真参数来更新现有的机器人描述,从而创建一个机械臂仿真模型。
我们需要去创建一个软件包:
$ catkin_create_pkg seven_dof_arm_gazebo gazebo_msgs gazebo_plugins gazebo_ros gazebo_ros_control mastering_ros_robot_description_pkg
也可以在相应的Git库中获得完整的软件包。如下:
$ git clone https://github.com/jocacace/seven_dof_arm_gazebo.git
可以在seven_dof_arm.xacro文件中看到机器人的完整仿真模型,上一章讲过。
该文件包含了URDF标签,这对于仿真是必要的,我们将定义碰撞、惯性、传动、关节、连杆、以及Gazebo。
我们可以使用seven_dof_arm_gazebo软件包来启动现有的仿真模型,启动文件为:seven_dof_arm_world.launch的启动文件。
代码如下:
1 <launch> 2 3 <!-- these are the arguments you can pass this launch file, for example paused:=t rue --> 4 <arg name="paused" default="false"/> 5 <arg name="use_sim_time" default="true"/> 6 <arg name="gui" default="true"/> 7 <arg name="headless" default="false"/> 8 <arg name="debug" default="false"/> 9 10 <!-- We resume the logic in empty_world.launch --> 11 <include file="$(find gazebo_ros)/launch/empty_world.launch"> 12 <arg name="debug" value="$(arg debug)" /> 13 <arg name="gui" value="$(arg gui)" /> 14 <arg name="paused" value="$(arg paused)"/> 15 <arg name="use_sim_time" value="$(arg use_sim_time)"/> 16 <arg name="headless" value="$(arg headless)"/> 17 </include> 18 19 <!-- Load the URDF into the ROS Parameter Server --> 20 <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find ma stering_ros_robot_description_pkg)/urdf/seven_dof_arm.xacro'" /> 21 22 23 <!-- Run a python script to the send a service call to gazebo_ros to spawn a URDF robot --> 24 <node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" out put="screen" 25 args="-urdf -model seven_dof_arm -param robot_description"/> 26 27 28 </launch>
启动以下命令来显示仿真机械臂
$ roslaunch seven_dof_arm_gazebo seven_dof_arm_world.launch
模型如下:
接下来我们来详细的讨论一下机器人的仿真模型文件
1.为Gazebo机器人模型添加颜色和纹理
在机器人仿真中我们可以看到每个连杆都有不同的颜色和纹理。在xacro文件中,下面的标签可以为机器人的连杆提供纹理和颜色:
140 <gazebo reference="bottom_link"> 141 <material>Gazebo/White</material> 142 </gazebo> 172 <gazebo reference="base_link"> 173 <material>Gazebo/White</material> 174 </gazebo> 210 <gazebo reference="shoulder_pan_link"> 211 <material>Gazebo/Red</material> 212 </gazebo>
2.添加transmission标签来启动模型
为了使用ROS控制器来启动机器人,我们需要定义<transmission>(传动)标签来连接执行机构和关节,以下是为传动的宏:
92 <xacro:macro name="transmission_block" params="joint_name"> 93 <transmission name="tran1"> 94 <type>transmission_interface/SimpleTransmission</type> 95 <joint name="${joint_name}"> 96 <hardwareInterface>hardware_interface/PositionJointInterface</hardwareIn terface> 97 </joint> 98 <actuator name="motor1"> 99 <hardwareInterface>hardware_interface/PositionJointInterface</hardwareIn terface> 100 <mechanicalReduction>1</mechanicalReduction> 101 </actuator> 102 </transmission> 103 </xacro:macro>
在这里<joint name="">是连接启动器的关节。<type>标签是传动类型。目前,仅支持简单的传动transmission_interface/SimpleTransmission. <hardwareInterface>
标签是要加载的硬件接口类型(位置、速度或力度),在该示例中,使用了位置控制硬件接口。这个硬件接口由gazebo_ros_control插件加载,下一节将看到。
3.添加gazebo_ros_control插件
在添加传动标签后,我们应该在仿真模型中添加gazebo_ros_control插件来解析传动标签并分配适当的硬件接口和控制管理器。代码如下:
563 <gazebo> 564 <plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so"> 565 <robotNamespace>/seven_dof_arm</robotNamespace> 566 </plugin> 567 </gazebo> 568
<plugin>标签指定了要加载的插件名是libgazebo_ros_control.so。可以将<robotNamespace>标签作为机器人的名称,
如果我们没有指定名称,它将从URDF 自动加载机器人的名称。我们还可以在参数服务器(<robotParam>)上指定控制器刷新速率(<control-Period>),robot_description(URDF)
的位置以及机器人硬件接口的类型(<robotSimType>).默认的硬件接口可以是:JointStateInerface、EffortJointInterface或VelocityJointInterface.
4.在Gazebo中添加3D视觉传感器
来源:https://www.cnblogs.com/tanshengjiang/p/12293024.html