本文主要是介绍控制小车在仿真环境中移动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
urdf——Gazebo——ros_control——MoveIt
1、gazebo_ros程序包路径 /opt/ros/kinetic/share/gazebo_ros
worlds路径 /usr/share/gazebo-7/worlds
记得怎么运行完 gazebo的launch之后 键入命令行 killall gzserver ;否则,打开另一个launch会黑屏。
urdf和Gazebo中的单位应以米和千克为单位,重力加速度为 9.81 m/s^2。
2、roslaunch启动gazebo
2-1、roslaunch参数:
paused 以暂停状态启动Gazebo(默认为false)
use_sim_time 告诉ROS节点要求时间获取Gazebo发布的模拟时间,通过ROS主题/时钟发布(默认为true)
gui 启动Gazebo的用户界面窗口(默认为true)
headless (不推荐) recording 启用状态日志记录
debug 使用gdb以调试模式启动gzserver(Gazebo Server)(默认为false)
verbose 使用--verbose运行gzserver和gzclient,将错误和警告打印到终端(默认为false)
实例:(在明令行加入参数)
roslaunch gazebo_ros empty_world.launch paused:= true use_sim_time:= false gui:= true throttled:= false recording:= false debug:= true verbose:= true
2.2 world file
无特殊要求均可用 empty.world
2.3
在catkinMake 文件里添加依赖的包,在package.xml文件里添加依赖项。
2.4 将urdf文件加载到gazebo中
2.4.1 方法一:ROS服务调用Spawn
这种方法保持机器人相对于ROS包路径的位置,但需要使用小型(python)脚本进行ROS服务调用。
方法原理:使用一个python脚本--spawn_model
向gazebo_ros
中的ROS节点(在rostopic命名空间中简称为“gazebo”)发出服务调用请求,以将自定义URDF添加到Gazebo中。该spawn_model
脚本位于gazebo_ros
包中。
方法实例:
rosrun gazebo_ros spawn_model -file `rospack find MYROBOT_description`/urdf/MYROBOT.urdf -urdf -x 0 -y 0 -z 1 -model MYROBOT
rosrun gazebo_ro spawn_model -file urdf文件的绝对路径 -urdf -x ? -y ? -z ? -model 模型名 (xyz为模型加载到gazebo初始坐标)
可将该服务调用直接集成到ROS启动文件中,在</launch>
标记之前添加以下内容:
<!-- Spawn a robot into Gazebo -->
<node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-file $(find baxter_description)/urdf/baxter.urdf -urdf -z 1 -model baxter" />
<node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-param urdf中robot的参数 -urdf -model urdf模型名" />
针对于xacro文件
<!-- Convert an xacro and put on parameter server -->
<param name="robot_description" command="$(find xacro)/xacro.py $(find pr2_description)/robots/pr2.urdf.xacro" /><!-- Spawn a robot into Gazebo -->
<node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-param robot_description -urdf -model pr2" />
2.4.1方法二:模型数据库法
第二种方法允许您将机器人包含在.world
文件中
3、在Gazebo中使用URDF
Universal Robotic Description Format (URDF) 是ROS用于描述机器人的所有元素的XML文件格式。要在Gazebo中使用URDF文件,必须添加一些其他特定于模拟的标记才能与Gazebo一起正常工作。
3.1 背景
虽然URDF在ROS中是一种有用且标准化的格式,但它们缺乏许多功能,并且尚未更新以应对机器人技术不断变化的需求。URDF只能单独指定单个机器人的运动和动态属性。URDF无法在一个世界中指定机器人本身的姿势。它也不是通用描述格式,因为它不能指定关节循环(并联连接),并且它缺乏摩擦和其他属性。在实现方面,URDF语法在大量使用XML属性的情况下破坏了正确的格式,这反过来又使URDF更加不灵活。也没有向后兼容的机制。
为了解决这个问题,创建了一种称为模拟描述格式(SDF)的新格式 ,用于Gazebo以解决URDF的缺点。SDF是从世界级到机器人级的所有内容的完整描述。它具有可扩展性,可以轻松添加和修改元素。SDF格式本身使用XML进行描述,这有助于使用简单的升级工具将旧版本迁移到新版本。为了解决这个问题,创建了一种称为模拟描述格式(SDF)的新格式 ,用于Gazebo以解决URDF的缺点。SDF是从世界级到机器人级的所有内容的完整描述。它具有可扩展性,可以轻松添加和修改元素。SDF格式本身使用XML进行描述,这有助于使用简单的升级工具将旧版本迁移到新版本。
3.2概述
必要的标签:
可选标签:
3.3<gazebo> 元素
<gazebo>
元素是URDF的扩展,用于指定Gazebo中模拟所需的其他属性。它允许您指定以SDF格式找到的未包含在URDF格式中的属性。元素中的<gazebo>
元素都不是必需的,因为将自动包含默认值。有三种不同类型的<gazebo>
元素 - 一种用于<robot>
标记,一种用于<link>
标记,一种用于<joint>
标记。
- rrbot.gazebo 是一个Gazebo特定文件,包含我们大多数特定于Gazebo的XML元素,包括 标签
- materials.xacro 一个简单的Rviz颜色文件,用于存储rgba值,不是必需的,但是一个很好的约定
3.3.1 <robot>标签的<gazebo>
元素
如果在没有reference=""
属性的情况下使用<gazebo>
元素,则假定该<gazebo>
元素用于整个机器人模型。
<gazebo>标签的内部元素<robot>元素列在下表中:
Name | Type | Description |
---|---|---|
static | bool | If set to true, the model is immovable. Otherwise the model is simulated in the dynamics engine. |
如果您希望将URDF模型永久地附加到世界框架(地平面),则必须创建“world”link并将其固定到模型基础的关节。
3.3.2 <collision>
和<visual>
元素
这些标签在Gazebo中与在Rviz中的标签基本相同。尽管如此,重要的是要指定两者,因为与某些ROS应用程序不同,如果您没有明确指定元素,Gazebo将不会将您的<visual>
元素用作<collision>
元素<collision>
。
urdf中的颜色属性无法在gazebo中显示需要借助 gazebo 辅助文件来完成,必须为每个link指定Gazebo材质标记<material>
。
3.3.3 link的<gazebo>元素
Name | Type | Description |
---|---|---|
material | value | Material of visual element |
gravity | bool | Use gravity |
dampingFactor | double | Exponential velocity decay of the link velocity - takes the value and multiplies the previous link velocity by (1-dampingFactor). |
maxVel | double | maximum contact correction velocity truncation term. |
minDepth | double | minimum allowable depth before contact correction impulse is applied |
mu1 | double | Friction coefficients μ for the principal contact directions along the contact surface as defined by the Open Dynamics Engine (ODE) (see parameter descriptions in ODE's user guide) |
mu2 | ||
fdir1 | string | 3-tuple specifying direction of mu1 in the collision local reference frame. |
kp | double | Contact stiffness k_p and damping k_d for rigid body contacts as defined by ODE (ODE uses erp and cfm but there is a mapping between erp/cfm and stiffness/damping) |
kd | ||
selfCollide | bool | If true, the link can collide with other links in the model. |
maxContacts | int | Maximum number of contacts allowed between two entities. This value overrides the max_contacts element defined in physics. |
laserRetro | double | intensity value returned by laser sensor. |
3.4 joint的 <gazebo> 元素
并非URDF中记录的所有元素都适用于Gazebo
必须: <origin>
,<parent>
,<child>
省略:<calibration>,<safety_controller>
可选:<dynamics>
标签只有damping可用,
<limit>
标签中的所有属性都是可选的
Name | Type | Description |
---|---|---|
stopCfm | double | Joint stop constraint force mixing (cfm) and error reduction parameter (erp) used by ODE |
stopErp | ||
provideFeedback | bool | Allows joints to publish their wrench data (force-torque) via a Gazebo plugin |
implicitSpringDamper | bool | If this flag is set to true, ODE will use ERP and CFM to simulate damping. This is a more stable numerical method for damping than the default damping tag. The cfmDamping element is deprecated and should be changed to implicitSpringDamper. |
cfmDamping | ||
fudgeFactor | double | Scale the excess for in a joint motor at joint limits. Should be between zero and one. |
3.5 验证urdf是否能转成SDF
gz sdf -p MODEL.urdf
4、在Gazebo的插件
Gazebo插件为您的URDF模型提供更多功能,可以为传感器输出和电机输入提供ROS消息和服务调用。
4.1 插件类型
Gazebo支持 多种插件类型,并且所有插件类型都可以连接到ROS,但只能通过URDF文件引用几种类型:
- ModelPlugins,提供对physics :: Model API的访问
- SensorPlugins,提供对sensors:: Sensor API的访问
- VisualPlugins,提供对rendering :: Visual API的访问
4.2添加 ModelPlugin
modelplugin插件 插入到<robot>元素内的<gazebo>元素下.
<robot>... robot description ...<gazebo><plugin name="differential_drive_controller" filename="libdiffdrive_plugin.so">... plugin parameters ...</plugin></gazebo>... robot description ...
</robot>
4.3添加 SensorPlugin
添加 传感器插件略有不同, 将sensor 插件看成link形式与gazebo联系.
<robot>... robot description ...<link name="sensor_link">... link description ...</link><gazebo reference="sensor_link"><sensor type="camera" name="camera1">... sensor parameters ...<plugin name="camera_controller" filename="libgazebo_ros_camera.so">... plugin parameters ..</plugin></sensor></gazebo></robot>
4.4 gazebo_plugins中提供的插件
4.4.1
4.4.2
4.4.3
这篇关于控制小车在仿真环境中移动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!