SDF文件在Gazebo中的实现与控制
引言
最近尝试在Gazebo中仿真轮腿式机器人,目的是实现在Gazebo中实现控制。但是发现轮腿属于闭链机器人,无论是RM常用五连杆还是ascento或sk8o这类的机器人,URDF格式都是不支持的,只能使用SDF。
在Gazebo中实现
主要参考了油管上的Gazebo Q&A,介绍了如何在Gazebo中显示SDF文件模型
如何需要观看链接放在最下面
首先依旧是创建功能包,最后这两个依赖不能少,否则运行不起来
catkin_create_pkg _name_ rospy gazebo_ros
catkin_make
没有报错后在功能包内创建launch和models
spawn_test.launch文件中主要做设置参数,加载Gazebo仿真环境,加载机器人sdf文件
spawn_sdf.launch主要负责将模型在gazebo中实例化
以下是为编写的文件内容,仅供参考
<?xml version="1.0" encoding="UTF-8"?>
<launch>
<!-- 设置launch文件的参数 -->
<arg name="paused" default="false"/>
<arg name="use_sim_time" default="true"/>
<arg name="gui" default="true"/>
<arg name="headless" default="false"/>
<arg name="debug" default="false"/>
<!-- 运行gazebo仿真环境 -->
<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>
<include file="$(find my_sdf)/launch/spawn_sdf.launch">
<arg name="robot_name" value="stoupento" />
<arg name="x" value="0.0" />
<arg name="y" value="0.0" />
<arg name="z" value="1.0" />
<arg name="roll" value="0" />
<arg name="pitch" value="0" />
<arg name="yaw" value="0" />
<arg name="sdf_robot_file" value="$(find my_sdf)/models/stoupento/model.sdf" />
</include>
</launch>
<?xml version="1.0" encoding="UTF-8"?>
<launch>
<arg name="robot_name" default="" />
<arg name="x" default="0.0" />
<arg name="y" default="0.0" />
<arg name="z" default="1.0" />
<arg name="roll" default="0" />
<arg name="pitch" default="0" />
<arg name="yaw" default="0" />
<arg name="sdf_robot_file" default="" />
<node name="$(arg robot_name)_spawn_urdf" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
args="-file $(arg sdf_robot_file) -sdf -x $(arg x) -y $(arg y) -z $(arg z) -R $(arg roll) -P $(arg pitch) -Y $(arg yaw) -model $(arg robot_name)" />
</launch>
SDF控制
事实上,完成SDF显示后我就想着怎么让机器人动动了。最先想到的就是像过去parm加载机器人参数,再发布机器人状态和关节状态,并在rviz中显示。毫无疑问,我失败了。查阅大量资料后,发现rviz只支持URDF,并不支持SDF格式。同时,加载机器人参数的“robot_description”并没有支持sdf的示例,只有urdf和xacro。我在查找,直接发现ros_control都不支持SDF,同时发现,要想实现对SDF格式模型的控制,只有两种办法:其一,将SDF转URDF;其二,通过Gazebo预留的API自己编写控制plugin。
第一个方法首先pass,就是因为URDF不支持闭链运动所以才采用SDF的,没必要再转回去。第二个方法我还不会,但是留下方法,供读者参考,并希望可以有所感悟之后发布一个博客,提醒一下小白我,我必前来学习。
https://classic.gazebosim.org/tutorials?cat=guided_i&tut=guided_i5
对于五连杆的轮腿式机器人,up历识咩咩已经描述的很清楚了,使用了URDF文件外加了一个gazebo的关节去起固定作用,为这边就不再赘述了。