ROS理论与实践(以移动机器人为例)连载(四) ——URDF机器人建模

ROS理论与实践(以移动机器人为例)连载(四) ——URDF机器人建模_第1张图片

文章目录

  • 1. 机器人的定义与组成
    • (1)定义
    • (2)组成(控制的角度)
  • 2. URDF建模方法
    • (1)什么是URDF?
    • (2)link
    • (3)joint
    • (4)robot
  • 3.URDF机器人模型案例分析
    • (1)创建一个机器人建模的功能包
    • (2)使用圆柱体创建一个车体模型
    • (3)创建左右轮
    • (4)创建前、后置万向轮
    • (5)添加kinect
    • (6)检查URDF模型整体结构

老规矩先放张URDF机器人建模出的图片,养养眼smirk~

ROS理论与实践(以移动机器人为例)连载(四) ——URDF机器人建模_第2张图片


1. 机器人的定义与组成

ROS日常中最常见的机器人就是TurtleBot了叭↓
ROS理论与实践(以移动机器人为例)连载(四) ——URDF机器人建模_第3张图片

(1)定义

  • 诞生
    • 1920年捷克斯洛伐克作家卡雷尔·恰佩克在他的科幻小说《罗萨姆的机器人万能公司》中,根据Robota(捷克文,原意为“劳役、苦工”)和Robotnik(波兰文,原意为“工人”),创造出“机器人”这个词。
  • 百度百科
    ROS理论与实践(以移动机器人为例)连载(四) ——URDF机器人建模_第4张图片
    • 机器人(Robot)是自动执行工作的机器装置。它既可以接受人类指挥,又可以运行预先编排的程序,也可以根据以人工智能技术制定的原则纲领行动。它的任务是协助或取代人类工作,例如生产业、建筑业,或是危险的工作。
  • 美国机器人协会(RIA)
    RIA
    • 机器人是用以搬运材料、零件、工具的可编程序的多功能操作器或是通过可改变程序动作来完成各种作业的特殊机械装置。

(2)组成(控制的角度)

ROS理论与实践(以移动机器人为例)连载(四) ——URDF机器人建模_第5张图片
优质参考推荐

  • 里程计 Odormeter https://www.cnblogs.com/21207-iHome/p/8066135.html
  • 惯性测量单元IMU Inertial measurement unit https://blog.csdn.net/RoboChengzi/article/details/87720255
    • 陀螺仪 Gyroscope https://www.cnblogs.com/liuzhenbo/p/10763558.html
    • 加速度计 Accelerometer https://blog.csdn.net/lmonkey000/article/details/50884690

ROS理论与实践(以移动机器人为例)连载(四) ——URDF机器人建模_第6张图片

  • 执行机构:人体的手和脚,直接面向工作对象的机械装置。
  • 驱动系统:人体的肌肉和经络,负责驱动执行机构,将控制系统下达的命令转换成执行机构需要的信号。
  • 传感系统:人体的感官和神经,主要完成信号的输入和反馈,包括内部传感系统和外部传感系统。
  • 控制系统:人体的大脑,实现任务及信息的处理,输出控制命令信号。

补充:

什么是闭环? 闭环(闭环结构)也叫反馈控制系统,是将系统输出量的测量值与所期望的给定值相比较,由此产生一个偏差信号,利用此偏差信号进行调节控制,使输出值尽量接近于期望值。
ROS理论与实践(以移动机器人为例)连载(四) ——URDF机器人建模_第7张图片
常见的有对电机的闭环控制驱动板:

ROS理论与实践(以移动机器人为例)连载(四) ——URDF机器人建模_第8张图片

2. URDF建模方法

(1)什么是URDF?

  • Unified Robot Description Format,统一机器人描述格式;
  • ROS中一个非常重要的机器人模型描述格式;
  • 可以解析URDF文件中使用XML格式描述的机器人模型;
  • 包含link(近似与大臂和小臂,是不能旋转的)和joint(用于连接link)自身及相关属性的描述信息,外界的环境同样可以用URDF去描述。
    ROS理论与实践(以移动机器人为例)连载(四) ——URDF机器人建模_第9张图片

示例:


<robot name="mbot">

	<link name="base_link">
		<visual>
			<origin xyz=" 0 0 0 " rpy=" 0 0 0 " />
			<geometry>
				<cylinder length="0.16" radius="0.20" />
			geometry>
			<material name="yellow">
				<color rgba="1 0.4 0 1" />
			material>
		visual>
	link>

	<joint name="left_wheel_joint" type="continuous">
		<origin xyz="0 0.19 -0.05" rpy="0 0 0" />
		<parent link="base_link" />
		<child link="left_wheel_link" />
		<axis xyz="0 1 0" />
	joint>

	<link name="left_wheel_link">
		<visual>
			<origin xyz="0 0 0" rpy="1.5707 0 0" />
			<geometry>
				<cylinder radius="0.06" length="0.025" />
			geometry>
			<material name="while">
				<color rgba="1 1 1 0.9" />
			material>
		visual>
	link>

robot>

(2)link

  • 描述机器人某个刚体部分的外观和物理属性;
  • 描述连杆尺寸(size)、颜色(color)、形状(shape)、惯性矩阵(inertial matrix)(刚体运动时参照的参数)、碰撞参数(collision properties)(近似于描述刚体边界,会发生物理碰撞,在图中表现为一个浅色的边框(做了简化))等;
    ROS理论与实践(以移动机器人为例)连载(四) ——URDF机器人建模_第10张图片
  • 每个link会成为一个坐标系(便可以使用TF坐标变换)

刚体部分外观过于复杂时,可以使用SolidWorks建模,导出.stl文件

SolidWorks建模导出URDF文件常见错误解决方法
ROS理论与实践(以移动机器人为例)连载(四) ——URDF机器人建模_第11张图片

<link name="link_4">
	<visual>
		<geometry>
			<mesh filename="link_4.stl" />
		geometry>
		<origin xyz="0 0 0" rpy="0 0 0" />
	visual>
	<collision>
		<geometry>
			<cylinder lenth="0.5" radius="0.1" />
		geometry>
		<origin xyz="0 0 -0.05" rpy="0 0 0" />
	collision>
link>

(3)joint

  • 描述两个link之间的关系,分为六种类型;
关节类型 描述
continuous 旋转关节,可以围绕单轴无限旋转
revolute 旋转关节,类似于continuous(如:机械臂)
prismatic 滑动关节,沿某一轴线移动的关节,带有位置极限
planar 平面关节,允许在平面正交方向上平移或者旋转
floating 浮动关节,允许进行平移、旋转运动
fixed 固定关节,不允许运动的特殊关节(如:桌腿)
  • 包括关节运动的位置和速度限制;
  • 描述机器人关节的运动学和动力学属性。
    ROS理论与实践(以移动机器人为例)连载(四) ——URDF机器人建模_第12张图片
<joint name="joint_2" type="revolute">
	<parent link="link_1" />
	<child link="link_2" />
	<origin xyz="0.2 0.2 0" rpy="0 0 0" />
	<axis xyz="0 0 1" />
	<limit lower="-3.14" upper="3.14" velocity="1.0" />
joint>
  • 例中velocity模拟了电机或者舵机的旋转速度,lower/upper确定了revolute最大旋转角(弧度制)
  • axis代表了该joint沿哪个轴旋转,例中绕z轴旋转

(4)robot

  • 完整机器人模型的最顶层标签
  • 标签都必须包含在标签内
  • 一个完整的机器人模型,由一系列组成

ROS理论与实践(以移动机器人为例)连载(四) ——URDF机器人建模_第13张图片

<robot name="" >
	<link> ...... link>
	<link> ...... link>

	<joint> ...... joint>
	<joint> ...... joint>	
robot>

3.URDF机器人模型案例分析

(1)创建一个机器人建模的功能包

$ catkin_create_pkg mbot_description urdf xacro
  • urdf: 存放机器人模型的URDF或xacro文件
  • meshes: 放置URDF中引用的模型渲染文件
  • launch: 保存相关启动文件
  • config: 保存rviz的配置文件

(2)使用圆柱体创建一个车体模型

首先,在udrf文件夹下创建底盘文件

$ touch mbot_base.urdf

开始码…


<robot name="mbot">
	
	<link name="base_link">
		<visual>
			
			<origin xyz="0 0 0" rpy="0 0 0" />
			<geometry>
				
				<cylinder length="0.16" radius="0.20" />
			geometry>
			<material name="yellow" >
				
				<color rgba="1 0.4 0 1" />
			material>
		visual>
	link>
	
robot>

这时已经得到了一个这个在这里插入图片描述颜色的圆柱体(查rgba色彩工具),随后使用 .launch 文件将该模型在rviz中显示出来。


<launch>
	
	<param name="robot_description" textfile="$(find mbot_description)/urdf/mbot_base.urdf" />

	
	<param name="use_gui" value="true" />

	
	
	<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />

	
	
	<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />

	
	
	<node name="rviz" pkg="rviz" type="rviz" args="-d $(find mbot_description)/config/mbot_urdf.rviz" required="true" />
launch>

效果图:
ROS理论与实践(以移动机器人为例)连载(四) ——URDF机器人建模_第14张图片

(3)创建左右轮

在上面内继续添加

	<joint name="left_wheel_joint" type="continuous">
		<origin xyz="0 0.19 -0.05" rpy="0 0 0">
		<parent link="base_link" />
		<child link="left_wheel_link" />
		<axis xyz="0 1 0" />
	joint>
	
	<link name="left_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" >
				<color rgba="1 1 1 0.9" />
			material>
		visual>
	link>
	
	<joint name="right_wheel_joint" type="continuous" />
		<origin xyz="0 -0.19 -0.05" rpy="0 0 0"/>
		<parent name="base_link" />
		<child name="right_wheel_link" />
		<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" >
				<color rgba="1 1 1 0.9" />
			material>
		visual>
	link>

效果图:
ROS理论与实践(以移动机器人为例)连载(四) ——URDF机器人建模_第15张图片

(4)创建前、后置万向轮

	<joint name="front_caster_joint" type="continuous" />
		<origin xyz="0.18 0 -0.095" rpy="0 0 0"/>
		<parent name="base_link" />
		<child name="front_caster_link" />
		<axis xyz="0 1 0" />
	joint>
	
	<link name="front_caster_link">
		<visual>
			<origin xyz="0 0 0" rpy="0 0 0" />
			<geometry>
				<sphere radius="0.015" />
			geometry>
			<material name="black" >
				<color rgba="0 0 0 0.95" />
			material>
		visual>
	link>
	
	<joint name="back_caster_joint" type="continuous" />
		<origin xyz="-0.18 0 -0.095" rpy="0 0 0"/>
		<parent name="base_link" />
		<child name="back_caster_link" />
		<axis xyz="0 1 0" />
	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" >
				<color rgba="0 0 0 0.95" />
			material>
		visual>
	link>

效果图:ROS理论与实践(以移动机器人为例)连载(四) ——URDF机器人建模_第16张图片

(5)添加kinect

首先将网盘中文件放入meshes文件夹内

链接: https://pan.baidu.com/s/1vER7NlLcjuIXuj04ni1Y0A 密码: 9p9v

编辑一个.urdf文件,这里就不将修改后的.launch文件贴出了,仅在

<param name="robot_discription" textfile="$(find mbot_discription)/urdf/mbot_with_kinect.urdf" />

做出相对要显示模型的.urdf文件的路径修改即可。

mbot_with_kinect.urdf(完整版):


<robot name="mbot">
	
	<link name="base_link">
		<visual>
			
			<origin xyz="0 0 0" rpy="0 0 0" />
			<geometry>
				
				<cylinder length="0.16" radius="0.20" />
			geometry>
			<material name="yellow" >
				
				<color rgba="1 0.4 0 1" />
			material>
		visual>
	link>
	
	
	<joint name="left_wheel_joint" type="continuous">
		<origin xyz="0 0.19 -0.05" rpy="0 0 0">
		<parent link="base_link" />
		<child link="left_wheel_link" />
		<axis xyz="0 1 0" />
	joint>
	
	<link name="left_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" >
				<color rgba="1 1 1 0.9" />
			material>
		visual>
	link>
	
	
	<joint name="right_wheel_joint" type="continuous" />
		<origin xyz="0 -0.19 -0.05" rpy="0 0 0"/>
		<parent name="base_link" />
		<child name="right_wheel_link" />
		<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" >
				<color rgba="1 1 1 0.9" />
			material>
		visual>
	link>
	
	
	<joint name="front_caster_joint" type="continuous" />
		<origin xyz="0.18 0 -0.095" rpy="0 0 0"/>
		<parent name="base_link" />
		<child name="front_caster_link" />
		<axis xyz="0 1 0" />
	joint>
	
	<link name="front_caster_link">
		<visual>
			<origin xyz="0 0 0" rpy="0 0 0" />
			<geometry>
				<sphere radius="0.015" />
			geometry>
			<material name="black" >
				<color rgba="0 0 0 0.95" />
			material>
		visual>
	link>
	
	
	<joint name="back_caster_joint" type="continuous" />
		<origin xyz="-0.18 0 -0.095" rpy="0 0 0"/>
		<parent name="base_link" />
		<child name="back_caster_link" />
		<axis xyz="0 1 0" />
	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" >
				<color rgba="0 0 0 0.95" />
			material>
		visual>
	link>
	
	
	<joint name="kinect_joint" type="fixed">
		<origin xyz="0.15 0 0.11" rpy="0 0 0" />
		<parent link="base_link" />
		<child link="kinect_link" />
	joint>

	<link name="kinect_link" >
		<visual>
			<origin xyz="0 0 0" rpy="0 0 1.5708" />
			<geometry>
				<mesh filename="package://mbot_description/meshes/kinect.dae" />
			geometry>
		visual>
	link>
	
robot>

效果图:ROS理论与实践(以移动机器人为例)连载(四) ——URDF机器人建模_第17张图片

(6)检查URDF模型整体结构

$ urdf_to_graphiz mbot_base.urdf

ROS理论与实践(以移动机器人为例)连载(四) ——URDF机器人建模_第18张图片
分享一下自己后来随便画了一个

链接: https://pan.baidu.com/s/1cOaxROGak5TVpfg2hd_7Lw
密码: sn72
ROS理论与实践(以移动机器人为例)连载(四) ——URDF机器人建模_第19张图片

内容大概就是这样,忘记的内容会继续作补充,下一期ヾ( ̄▽ ̄)ByeBye

你可能感兴趣的:(ROS)