此文编写参照古月居的课程,如有错误之处,欢迎指正。
一、机器人的组成
从控制的角度来看,机器人的组成如下框图所示:
下面是四个系统之间的关系
控制系统可以是可以基于x86或者是ARM平台,一般用来完成信息处理,控制系统下发命令给到驱动系统,然后驱动系统将控制系统下达的命令转换成执行机构需要的信号,最后驱动执行机构,从而作用到工作对象中,这里的工作对象是指机器人本身,但是单有执行不行,机器人还得感知周围的环境,所以还有一个传感器系统,而传感器系统又分为外部传感器系统和内部传感器系统,内部传感器系统主要检测机器人内部的运动状态,而外部传感器系统则主要检测机器人外部环境的状态,最后控制系统再根据传感器系统的反馈来去控制机器人自身的各种状态,这样也就形成了一个闭环反馈系统了。
二、URDF建模
1、什么是URDF
URDF,英文是Unified Robot Description Format,即统一机器人描述格式。
2、URDF文件中的常用XML标签
三、从零写URDF模型
1、创建机器人描述功能包
2、在该功能包中创建如下几个文件夹
其中:
urdf:用于存放机器人模型的URDF文件或者xacro文件
meshes:用于放置URDF中引用的模型渲染文件
launch:用于保存相关启动文件
config:用于保存rviz的配置文件
3、在urdf下导入第一urdf文件
文件内容如下所示:
<?xml version="1.0" ?>
<robot name="mbot">
<!-- / COLOR /
这部分是用来描述颜色信息的,这里定义了四种颜色, <color rgba="0 0 0 1"/>这里面的四个值分别是表示RGB三个通道的比例,它们都是从0到1,最后一个a是表示透明度,所以到了后面用来描述link的颜色值的时候,就不用重复的去定义这些RGB的颜色值了,直接就可以通过名称来去调用如Yellow
-->
<material name="Black">
<color rgba="0 0 0 1"/>
</material>
<material name="White">
<color rgba="1 1 1 0.95"/>
</material>
<material name="Blue">
<color rgba="0 0 1 1"/>
</material>
<material name="Yellow">
<color rgba="1 0.4 0 1"/>
</material>
<!-- / BASE / -->
<link name="base_link">
<visual>
<!-- 此处的origin的xyz是指相对于base而言的, -->
<origin xyz=" 0 0 0" rpy="0 0 0" />
<geometry>
<cylinder length="0.16" radius="0.20"/>
</geometry>
<material name="Yellow"/>
</visual>
</link>
<!-- / WHEEL / -->
<link name="left_wheel_link">
<visual>
<!-- 此处rpy主要是为了让轮子立起来 -->
<origin xyz="0 0 0" rpy="1.5707 0 0" />
<geometry>
<cylinder radius="0.06" length = "0.025"/>
</geometry>
<material name="White"/>
</visual>
</link>
<joint name="left_wheel_joint" type="continuous">
<!-- 这里的orign是用来描述轮子和底盘之间的坐标关系 -->
<origin xyz="0 0.19 -0.05" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="left_wheel_link"/>
<!-- 这里是指轮子绕y轴旋转 -->
<axis xyz="0 1 0"/>
</joint>
<link name="right_wheel_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0" />
<geometry>
<cylinder radius="0.06" length = "0.025"/>
</geometry>
<material name="White"/>
</visual>
</link>
<joint name="right_wheel_joint" type="continuous">
<origin xyz="0 -0.19 -0.05" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="right_wheel_link"/>
<axis xyz="0 1 0"/>
</joint>
<!-- / CASTER / -->
<!-- 这两个是支撑轮,前支撑轮和后支撑轮, -->
<link name="front_caster_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<sphere radius="0.015" />
</geometry>
<material name="Black"/>
</visual>
</link>
<joint name="front_caster_joint" type="fixed">
<origin xyz="0.18 0 -0.095" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="front_caster_link"/>
</joint>
<link name="back_caster_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<sphere radius="0.015" />
</geometry>
<material name="Black"/>
</visual>
</link>
<joint name="back_caster_joint" type="fixed">