ROS | URDF模型—阿克曼(Ackermann)四轮小车模型

news/2024/11/25 9:44:25/

ROS | URDF模型—阿克曼(Ackermann)四轮小车模型

  • 1. 模型描述
  • 2. URDF文件
  • 3. link元素
  • 4. link属性详解
  • 5. joint元素
  • 6. joint属性详解
  • 7. Rviz可视化
    • 7.1 创建launch文件
    • 7.2 启动Rviz

Github链接: https://github.com/chanchanchan97/ROS

1. 模型描述

本项目的目的是创建一个基于阿克曼转向机构(Ackermann steering)的简易四轮小车模型,该模型采用后轮双驱,而前轮在设计时选择独立转向,之后通过算法对两个前轮单独控制,模拟阿克曼转向模型。车体以简单的立方体来表示,并且在前端创建一个小立方体表示摄像头。

2. URDF文件

URDF全称为Unified Robot Description Format(统一机器人描述格式),是一种基于XML规范、用于描述机器人结构的格式。
从机构学角度讲,机器人通常被建模为由连杆(link)和关节(joint)组成的结构。连杆(link)是带有质量属性的刚体,而关节(joint)是连接、限制两个刚体相对运动的结构。通过关节将连杆依次连接起来,就构成了一个个运动链(也就是这里所定义的机器人模型)。URDF文件即描述了这样的一系列关节与连杆的相对关系、惯性属性、几何特点和碰撞模型,简单来说包含了机器人模型的运动学与动力学描述、机器人的几何表示、机器人的碰撞模型。

3. link元素

link元素描述了具有惯性,视觉特征和碰撞特性的刚体。以小车主体部分为例,创建如下的URDF文件内容。

<link name="base_link"> <inertial><origin xyz="0 0 0.055"/><mass value="1.0" /><inertia ixx="${1*(0.16*0.16+0.02*0.02)/12}" ixy="0.0" ixz="0.0" iyy="${1*(0.25*0.25+0.02*0.02)/12}" iyz="0.0" izz="${1*(0.16*0.16+0.25*0.25)/12}"/></inertial><visual><origin xyz="0 0 0.055" rpy="0 0 0" /><geometry>  <box size="0.25 0.16 0.02"/>  </geometry>   <material name="blue">  <color rgba="0 0 0.8 1"/>  </material>  </visual>  <collision><origin xyz="0 0 0.055" rpy="0 0 0" /><geometry>  <box size="0.25 0.16 0.02" />  </geometry>  </collision>
</link>

在这里插入图片描述

4. link属性详解

(1) name (必选)
link的名字,可以任意指定,在这里名字为base_link。
(2) inertial (可选)

  • origin (可选:如果未指定,则默认为identity)
    这是惯性参考系相对于链路参考系的姿态。惯性参考系的原点需要位于重心处。惯性参考系的轴不需要与惯性的主轴对齐。
    • xyz (可选:如果未指定,默认为零向量)
      表示link刚体的重心位置分别在x轴,y轴,z轴方向上的偏移量。
    • rpy (可选:如果未指定,则默认为identity)
      以弧度表示固定轴的滚动,俯仰和偏航角度。
  • mass
    链接的质量由此元素的value属性表示。
  • inertia
    3x3转动惯量矩阵,以惯性框架表示。因为转动惯量矩阵是对称的,所以这里使用属性ixx,ixy,ixz,iyy,iyz,izz指定该矩阵的6个以上对角线元素。

(3) visual (可选)
link的可视属性。此元素指定对象的形状(例如:立方体(box),圆柱(cylinder)等)以用于可视化目的。
注意:同一链接(link)可以存在多个visual标记实例。

  • name
    指定链接(link)几何的一部分的名称。不常用属性。
  • origin (可选:如果未指定,则默认为identity)
    这是惯性参考系相对于链路参考系的姿态。惯性参考系的原点需要位于重心处。惯性参考系的轴不需要与惯性的主轴对齐。
    • xyz (可选:如果未指定,默认为零向量)
      表示link刚体的重心位置分别在x轴,y轴,z轴方向上的偏移量,单位米。
    • rpy (可选:如果未指定,则默认为identity)
      以弧度表示的固定轴滚动,俯仰和偏航角度。
  • geometry (必选)
    • box (立方体)
      size属性包含框的三个边长。立方体的原点在它的中心。
    • cylinder (圆柱)
      指定半径和长度。圆柱的原点位于其中心。
    • sphere (球)
      指定半径。球体的原点位于其中心。
    • mesh
      当想添加更为复杂的模型时,可以通过.stl等mesh文件导入模型。
  • material (可选)
    视觉元素的材料。允许在顶层robot元素中指定link对象之外的材质元素。然后,您可以在链接元素中按名称引用材料。
    • name
      材料的名称。
    • color (可选)
      rgba由四个数字组成的材料颜色,分别表示红色/绿色/蓝色/alpha,每个数字的范围为[0,1]。alpha即色彩空间,也就是透明度/不透明度。
    • texture (可选)
      材质的纹理由文件名指定。

(4) collision (可选)
链接(link)的碰撞属性。请注意,这可能与链接的可视属性不同,例如,通常使用更简单的碰撞模型来减少计算时间。
注意:同一链接可以存在多个collision标记实例。
它们定义的几何的联合形成了链接的碰撞表示。该属性主要是在模拟时模型会与其他模型发生碰撞,不设置该属性的话会出现两个模型相互穿过的情况,设置该属性后在geometry设定的形状内两个模型会发生碰撞。

  • name (可选)
    指定链接几何的一部分的名称。这对于能够引用链接几何的特定位是有用的。
  • origin (可选:如果未指定,则默认为identity)
    碰撞元素的参考系相对于链接的参考系。
    • xyz (可选:如果未指定,默认为零向量)
      表示link刚体的重心位置分别在x轴,y轴,z轴方向上的偏移量,单位米。
    • rpy (可选:如果未指定,则默认为identity)
      以弧度表示的固定轴滚动roll,俯仰pitch和偏航yaw角度。
  • geometry
    请参阅上述可视元素中的几何描述。

5. joint元素

joint元素描述了机器人关节的运动学和动力学,并且指定了关节的安全限制。以小车左后轮的关节为例,创建如下的URDF文件内容。

<joint name="left_back_wheel_joint" type="continuous"><axis xyz="0 0 1"/><parent link="base_link"/><child link="left_back_wheel"/><origin rpy="0 ${M_PI/2} ${M_PI/2}" xyz="-0.08 0.08 0.025"/><dynamics damping="0.0"/><limit effort="100" velocity="100"/><joint_properties damping="0.0" friction="0.0"/>
</joint>

在这里插入图片描述

6. joint属性详解

(1) name (必选)
指定joint的名字(唯一的)
(2) type (必选)

  • 指定joint的类型,有下列选项:

    • revolute - 可以绕着一个轴旋转的铰链关节,有最大值和最小值限制。
    • continuous - 连续型的铰链关节,可以绕一个轴旋转,没有最大值和最小值限制。
    • prismatic - 滑动关节,可以沿着一个轴滑动,有最大值和最小值限制。
    • fixed - 这不是一个实际的关节,因为它无法运动,所有的自由度都被锁定。这种类型的关节不需要指定轴、动力学特征、标度和最大值最小值限制。
    • floating - 这是一个具有6个自由度的关节。
    • planar - 此关节在一个平面内运动,垂线是运动轴。
  • origin (可选:如果未指定,则默认为identity)
    从parent link到child link的变换,joint位于child link的原点,具体如图所示。

    • xyz (可选:如果未指定,默认为零向量)
      表示link刚体的重心位置分别在x轴,y轴,z轴方向上的偏移量,单位米。
    • rpy (可选:如果未指定,则默认为identity)
      以弧度表示的固定轴滚动,俯仰和偏航角度。
  • parent (必选)
    parent link的名字是一个强制的属性,是这个link在机器人结构树中的名字。 可以理解为parent是主题,child是固定在主体上的配件。

  • child (必选)
    child link的名字是一个强制的属性,是这个link在机器人结构树中的名字。

  • axis (可选: 默认为(1,0,0))
    joint的axis轴在joint的坐标系中。这是revolute joint旋转的轴,prismatic joint移动的轴,是planar joint的标准平面。这个轴在joint坐标系中被指定。fixed和floating类型的joint不需要用到这个字段。

  • xyz (必选)
    代表轴向量的x,y,z分量,这应该是一个标准化的向量。

  • calibration (可选)
    joint的参考点,用来矫正joint的绝对位置。

  • rising (可选)
    当joint正向运动时,参考点会触发一个上升沿。

  • falling (可选)
    当joint正向运动时,参考点会触发一个下降沿。

  • dynamics (可选)
    该元素用来指定joint的物理性能。它的值被用来描述joint的建模性能,尤其是在仿真的时候。

  • damping (可选,默认为0)
    joint的阻尼值(移动关节为 N ⋅ s m \frac{N⋅s}{m} mNs,旋转关节为 N ⋅ m ⋅ s r a d \frac{N⋅m⋅s}{rad} radNms)

  • friction (可选,默认为0)
    joint的摩擦力值(移动关节为 N N N,旋转关节为 N ⋅ m N⋅m Nm)

  • limit (只有type为revolute and prismatic时必选)
    该元素包含以下属性:

  • lower (可选,默认为0)
    指定joint运动范围下界的属性(revolute joint的单位为弧度,prismatic joint的单位为米),连续型的joint忽略该属性。

  • upper (可选,默认为0)
    指定joint运动范围上界的属性(revolute joint的单位为弧度,prismatic joint的单位为米),连续型的joint忽略该属性。

  • effort (必选)
    该属性指定了joint运行时的最大的力,|applied effort|<|effort|。

  • velocity (必选)
    该属性指定了joint运行时的最大的速度。

  • mimic (可选) (New with ROS Groovy. See issue)
    这个标签用于指定已定义的joint来模仿已存在的joint。这个joint的值可以用公式计算 value = multiplier * other_joint_value + offset. 有如下可选的属性:

    • joint (必选)
      需要模仿的joint的名字。
    • multiplier (可选)
      指定上述公式中的乘数因子。
    • offset (可选)
      指定上述公式中的偏移项。默认值为0 (revolute joint的单位为弧度,prismatic joint的单位为米)。
  • safety_controller (可选)
    该元素包含下列属性:

    • soft_lower_limit (可选,默认为0)
      该属性指定了joint安全控制边界的下界,是joint安全控制的起始限制点。这个值需要大于上述的limit中的lower值。
    • soft_upper_limit (可选,默认为0)
      该属性指定了joint安全控制边界的上界,是joint安全控制的起始限制点。这个值需要小于上述的limit中的upper值。
    • k_position (可选,默认为0)
      本属性用于说明位置和速度之间的关系。
    • k_velocity (必选)
      本属性用于说明力和速度之间的关系。

7. Rviz可视化

Rviz是ROS官方提供的一款3D可视化工具,几乎我们需要用到的所有机器人相关数据都可以在Rviz中展现,但是不能模拟碰撞、重力等物理现象。

7.1 创建launch文件

创建完URDF文件后,可以通过launch文件在Rviz中查看所创建的模型,launch文件具体内容如下。

<launch>     <arg name="model" />      <arg name="gui" default="true" />     <param name="robot_description" textfile="$(find smartcar_description)/urdf/urdf/smartcar.urdf" />      <param name="use_gui" value="$(arg gui)"/>     <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" ></node>      <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />      <node name="rviz" pkg="rviz" type="rviz" args="-d $(find smartcar_description)/config/smartcar.rviz" required="true"/>  
</launch>

说明:

  • <arg name=“gui” default=“true” />的作用是使能joint_state_publisher节点的GUI界面,发布各个关节(joint)消息,验证各个关节(joint)功能。
    在这里插入图片描述

  • 启动joint_state_publisher节点和robot_state_publisher节点,joint_state_publisher发布/joint_states话题消息,robot_state_publisher则接收/joint_states话题消息,发布tf变换关系,并由Rviz显示出来。
    在这里插入图片描述

  • args="-d $(find smartcar_description)/config/smartcar.rviz"表示加载和保存的Rviz配置文件路径。

7.2 启动Rviz

打开一个新的终端,输入以下指令,启动Rviz,查看所创建的模型。

$ roslaunch smartcar_description base_urdf_rviz.launch

说明:

  • 若Rviz中没有正确显示模型,首先检查是否添加RobotModel,然后检查Fixed Frame是否为base_link。
  • 若在左栏中添加TF,可以显示各个link之间的TF关系。

在这里插入图片描述


http://www.ppmy.cn/news/225567.html

相关文章

简约低调的双塔风冷,散热效果还不赖,九州风神AK620上手

在DIY主机上面,CPU散热器是对平台性能影响很大的一个组件,不仅选择的时候要为CPU和机箱量体裁衣,而且用过一段时间也要做些清洁维护,这样才能确保CPU的性能表现。在散热器的选择上,风冷和水冷各有优势,仅就安装来说,一般风冷会更方便一些。 目前我用的是AMD R9 3900X,这…

FFT倒序算法—雷德算法

在实现FFT计算的时候&#xff0c;第一步要做的就是实现倒位序的实现&#xff0c;这里有一种算法&#xff0c;叫做雷德&#xff08;Rader&#xff09;算法。自然序排列的二进制数&#xff0c;其下面一个数总比上面的数大1&#xff0c;而倒序二进制数的下面一个数是上面一个数在最…

推动全品系的迭代升级 东风风神全面迈进马赫时代

9月9日&#xff0c;东风马赫动力品牌第10万台发动机在东风风神武汉工厂正式装机&#xff0c;搭载该发动机正式量产下线的正是东风风神即将上市的全新车型——全新奕炫马赫版。该车的量产下线标志着东风风神全面迈入马赫“芯”时代&#xff0c;进一步深化在动力领域对高端性能的…

IC人物志-硅谷之父弗雷德里克·特曼(Frederick Terman)

在《硅谷始祖-仙童半导体浮沉录》中花了大半的篇幅讲述了晶体管之父威廉肖克利&#xff0c;中间也提到了硅谷之父弗雷德里克特曼&#xff0c;但是没怎么仔细介绍&#xff0c;但是回顾整个硅谷的发展&#xff0c;弗雷德里克特曼绝对是元老级别存在&#xff0c;同时Intel 惠普等公…

弗雷德里克·特曼:硅谷之父、斯坦福大学前副校长——(转自新浪网)

帮助并指导两位学生创办HP公司&#xff0c;并建立斯坦福工业园&#xff0c;成为硅谷高科技产业发展的源头。有人说&#xff0c;当今硅谷之中99%的电子工业都与弗雷德特曼有关&#xff0c;对于硅谷的诞生与发展&#xff0c;特曼起了企业孵化器的作用&#xff0c;可以认为特曼是企…

《弗雷德里克夫人》摘抄

温庭筠笔下“衰桃一树近浅池&#xff0c;似惜红颜镜中老”我如今这个年纪&#xff0c;面对一份真正烤得恰到好处的牛排&#xff0c;就会觉得爱情、抱负、财富全都黯然失色了。当一个女人彻底声名狼藉的时候&#xff0c;穿衣服才能真正穿出味道——这是命运不公平的地方之一。洗…

【雷达系统导论】-雷达方程

目录 简单的雷达方程 最小可检测信号对雷达方程的影响 目标的雷达散射截面积 发射机功率 脉冲重复频率 天线参数 系统损耗 其它考虑 雷达方程将雷达作用距离与发射机、接收机、天线和目标的特性及环境关联起来。 几个名词解释 天线增益&#xff1a;定向天线所辐射的最…

程序员——应届生毕业,竟有20k高薪岗位?!

马士兵优极限训练营让我在技术和个人能力上都有了很大的提升。在未来的职业生涯中&#xff0c;我会继续努力&#xff0c;不断学习和成长&#xff0c;为自己和社会做出更大的贡献 01 选择大数据 只因更有前景 我是计算机专业出身&#xff0c;但是在大学的时候我对大数据行业更…