ROS学习笔记(十六) 统一机器人描述格式URDF

统一机器人描述格式URDF

URDF(Unified Robot DScription Fornat)机器人统一描述格式(XML格式)。
语法规范:参考链接:http://wiki.ros.org/urdf/XML
URDF组件,是由不同的功能包和组件组成:

在这里插入图片描述
urdf_paser_plugin是URDF基础的插件,衍生出了urdfdom(面向URDF文件)collar_parser(面向相互文件)(\qquad其中urdf_parser和urder_interface已经在hydro之后的版本中去除了)。在URDF中,当想要描述一个机器人的时候,例如小车的base_link和右轮right,两个link之间需要joint连接。
在这里插入图片描述

制作URDF模型

(1)添加基本模型

以构建一个小车为例,首先构建base_link作为小车的父坐标系,然后在base_link基础上,再构建左轮,右轮 和雷达 link. 最后不同的link之间通过joint来连接。
文件位置:test/urdf/mycar_link_position.urdf

<robot name="mycar">
	<link name="base_link"/>
	<link name="right"/>
	<link name="left"/>
	<link name="rplidar">

	<joint name="right_joint" type="continuous">
		<parent link="base_link"/>
		<child link="right"/>
	</joint>
	<joint name="left_joint" type="continuous">
		<parent link="base_link"/>
		<child link="right"/>
	</joint>
	<joint name="rplidar_joint" type="fixed">
		<parent link="base_link"/>
		<child link="rplidar"/>
	</joint>
</robot>

小技巧:sudo apt-get install liburdfdom-tools,安装完毕后,执行检查check_urdf_my_car.urdf,若一切正常,会显示:
在这里插入图片描述

(2) 添加机器人link之间的相对位置关系

在基础模型之上,我们需要为机器人之间link来设相对位置和朝向的关系,URDF中通过来描述。
文件位置:test/urdf/mycar_link_joint.urdf

<robot name="mycar">
	<link name="base_link"/>
	<link name="right"/>
	<link name="left"/>
	<link name="rplidar">

	<joint name="left_joint" type="continuous">
		<parent link="base_link"/>
		<child link="right"/>
		<origin rpy="1.57075 0 0" xyz="0 -0.2 0.07"/>
	</joint>

	<joint name="right_joint" type="continuous">
		<parent link="base_link">
		<child link="left"/>
		<origin rpy="-1.57075 0 0" xyz="0 0.2 0.07"/>
	</joint>

	<joint name="rplidar_joint" type="fixed">
		<parent link="base_link">
		<child link="rplidar">
		<origin xyz="0.2 0 0.12"/>
	</joint>
</robot>
(3)添加模型的尺寸,形状和颜色等

在设置好模型的link基础上,添加模型的形状(圆柱、长方体等),相对与link的位置,颜色等。
形状用描述,颜色用描述

<robot name="mycar">
	<link name="base_link">
		<visual>
			<geometry>
				<cylinder length="0.06" radius="0.27">
				</cylinder>
			</geometry>
			<origin rpy="0 0 0 " xyz="0 0 0.1"/>
			<material name="white">
				<color rgba="1 1 1 1"/>
			</matertial>
		</visual>
	</link>
	<link name="right">
		<visual>
			<geometry>
				<cylinder length="0.04" type="0.07">
			</geometry>
			<origin rpy="0 0 0" type="0 0 0"/>
			<material name="black">
				<color rgba="0 0 0 1"/>
			</material>
		</visual>
	</link>
	<link name="left">
		<visual>
			<geometry>
				<cylinder length="0.04" radius="0.07"/>
			</geometry>
			<origin rpy="0 0 0" xyz="0 0 0"/>
			<material name="black"/>
		</visual>
	</link>	
</robot>

输入rqt_tf_tree rqt_tf_tree:
在这里插入图片描述可以将launch文件中的param name="use_gui"的值由false改成true会弹出一个窗口,同一移动进度条,可以临时改变joint的朝向。

制作xacro模型

Xacro可以理解为针对URDF的扩展性和配置性设计的宏语言(macro language)。有了Xacro,可以像编程一样写URDF文件,Xacro提供了一些更高级的方法编写机器人描述:

1.Constants

<xacro:property name="WIDTH	" VALUE="2.0"/>

类似于C语言的宏定义,在头部定义后就可以${body_width}进行引用其数值,可以把需要配置的变量进行统一管理和使用。

2.Macros

<xacro:macro name="default_origin">
	<origin xyz="0 0 0" rpy=0 0 0"/>
</xacro:macro>
<xacro:default_prigin/>

Macros是xacro文件中最重要的部分,完成一些最小模块的定义, 方便重用(类似宏函数), 以及可以使用参数来标识不同的部分。

3.include
很多模型都是以宏的形式进行定义,并以最小集团分成很多个文件,于是最终的机器人描述就变得非常简单。urdf文件也是能够直接导入进来的。

<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="ur5">

	<!-- common stuff -->
	<xacro:include filename="$(find ur_description)/urdf/ur5/common.gazebo.xacro"/>
	
	<!-- ur5 -->
	<xacro:include filename="$(find_ur_description)/urdf/ur5/ur5.urdf.xacro"/>
	
	<!-- arm -->
	<xacro:ur5_robot prefix=""joint_linited"=false "/>
	
	<link name="world"/>
	
	<joint name="world_joint" type="fixed">
		<parent link="world"/>
		<child link="base_link"/>
		<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
	</joint>
</robot>

include类似于C语言中的include,先将该文件扩展到包含的位置(但包含进来的文件很有可能只是一个参数宏的定义,并没有被调用)。

制作gazebo模型

对于二轮差动模型添加libgazebo_ros)diff_drive.so插件对小车左右轮控制。

<gazebo>
	<plugin name="differential_drive_controller" filename="libgazebo_ros_diff_drive.so">
		<robotNamespace>/</robotNamespace>
		<alwaysOn>true</alwaysOn>
		<legacyMode>false</legacyMode>
		<updateRate>50</updateRate>
		<leftJoint>mybot_left_wheel_hinge</leftJoint>
		<rightJoint>mybot_right_wheel_hinge</rightJoint>
		<wheelSeparation>${chassisWidth+wheelWidth}</wheelSeparation>
		<wheelDiameter>${2*wheelRadius}</wheelDiameter>
		<torque>20</torque>
		<commandTopic>mybot_cmd_vel</commandTopic>
		<odometryTopic>mybot_odom</odometryTopic>
		<odometryFrame>odom</odometryFrame>
		<robotBaseFrame>mybot_link</robotBaseFrame>
	</plugin>
</gazebo>

通过添加libgazebo_ros_p3d.so来计算里程。

<gazebo>
	<plugin name="ground_truth" filename="libgazebo_ros_p3d.so">
		<frameName>map</frameName>
		<bodyName>mybot_chassis</bodyName>
		<topicName>odom</topicName>
		<updateRate>30.0</updateRate>
	</plugin>
</gazebo>

对gazebo模型中小车左右轮相关PID等参数进行设置

<gazebo reference="mybot_chassis">
  <material>Gazebo/Orange</material>
</gazebo>
<gazebo reference="caster_wheel">
  <mu1>0.0</mu1>
  <mu2>0.0</mu2>
  <material>Gazebo/Red</material>
</gazebo>
<gazebo reference="right_wheel">
  <mu1 value="1.0"/>
  <mu2 value="1.0"/>
  <kp  value="10000000.0" />
  <kd  value="1.0" />
  <fdir1 value="1 0 0"/>
  <material>Gazebo/Black</material>
</gazebo>
<gazebo reference="left_wheel">
  <mu1 value="1.0"/>
  <mu2 value="1.0"/>
  <kp  value="10000000.0" />
  <kd  value="1.0" />
  <fdir1 value="1 0 0"/>
  <material>Gazebo/Black</material>
</gazebo>
</robot>
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值