4.机器人基本设置
让我们通过创建URDF文件来构建一个基本的移动机器人模型,并在一个空的Gazebo world中启动它。我们可以把工作分解成更小的组件——机器人底座、轮子和传感器。
对于这个模型,我们将创建一个立方体的基础与两个脚轮。脚轮有助于稳定这个模型,它们并不总是必需的,但它们可以帮助分配重量,防止机器人沿z轴倾斜。
创建URDF文件
1)在my_robot包中创建urdf目录
$ cd /home/workspace/catkin_ws/src/my_robot/
$ mkdir urdf
2)在urdf目录中创建机器人的xacro文件
$ cd /home/workspace/catkin_ws/src/my_robot/urdf/
$ touch my_robot.xacro
3)复制以下代码到my_robot. xacro文件
<?xml version='1.0'?>
<robot name="my_robot" xmlns:xacro="http://www.ros.org/wiki/xacro">
<link name="robot_footprint"></link>
<joint name="robot_footprint_joint" type="fixed">
<originxyz="0 0 0" rpy="0 0 0" />
<parent link="robot_footprint"/>
<child link="chassis" />
</joint>
<linkname='chassis'>
<pose>0 0 0.1 0 0 0</pose>
<inertial>
<massvalue="15.0"/>
<origin xyz="0.0 0 0"rpy=" 0 0 0"/>
<inertia
ixx="0.1" ixy="0" ixz="0"
iyy="0.1" iyz="0"
izz="0.1"
/>
</inertial>
<collision name='collision'>
<origin xyz="0 0 0" rpy=" 0 0 0"/>
<geometry>
<box size=".4 .2 .1"/>
</geometry>
</collision>
<visual name='chassis_visual'>
<origin xyz="0 0 0" rpy=" 0 0 0"/>
<geometry>
<box size=".4 .2 .1"/>
</geometry>
</visual>
<collision name='back_caster_collision'>
<origin xyz="-0.15 0 -0.05" rpy=" 0 0 0"/>
<geometry>
<spherer adius="0.0499"/>
</geometry>
</collision>
<visual name='back_caster_visual'>
<origin xyz="-0.15 0 -0.05" rpy=" 0 0 0"/>
<geometry>
<sphere radius="0.05"/>
</geometry>
</visual>
<collision name='front_caster_collision'>
<origin xyz="0.15 0 -0.05" rpy=" 0 0 0"/>
<geometry>
<sphereradius="0.0499"/>
</geometry>
</collision>
<visual name='front_caster_visual'>
<origin xyz="0.15 0 -0.05" rpy=" 0 0 0"/>
<geometry>
<sphereradius="0.05"/>
</geometry>
</visual>
</link>
</robot>
有一个单一的链接,name定义为“底盘”,包括基座以及脚轮。每个链接都有特定的元素,比如惯性元素或碰撞元素。可以快速查看前一节中介绍的这些元素的详细信息。底盘是一个立方体,而脚轮是球形的,由它们的<geometry>标签表示。每个链接(或关节)也有一个原点(或姿态)。该链接或关节的每个元素都有自己的原点,它将相对于该链接的参照系。
对于这个基座,脚轮包括作为稳定链接的一部分,不需要任何额外的链接来定义脚轮,因此不需要连接它们的关节。但脚轮有为它们定义的friction(摩擦系数),这些摩擦系数暂设置为0,允许在移动时自由运动。
启动机器人
现在已经构建了基本的机器人模型,让我们创建一个启动文件,将其加载到一个空的Gazebo世界中。
1)创建一个新的启动文件来加载URDF模型文件
$ cd /home/workspace/catkin_ws/src/my_robot/launch/
$ touch robot_description.launch
2)将以下代码复制到robot_description.launch文件
<?xml version="1.0"?>
<launch>
<!-- send urdf to param server -->
<paramname="robot_description" command="$(find xacro)/xacro --inorder '$(find my_robot)/urdf/my_robot.xacro'" />
</launch>
要从Xacro文件生成URDF文件,必须首先定义一个参数robot_description。该参数将设置一个命令,使用xacro包(urdf/Tutorials/Using Xacro to Clean Up a URDF File - ROS Wiki)从xacro文件生成URDF。
3)更新world. launch文件,以便Gazebo可以加载机器人URDF模型
将以下内容添加到启动文件(在<launch>之后):
<!-- Robot pose -->
<argname="x"default="0"/>
<argname="y"default="0"/>
<argname="z"default="0"/>
<argname="roll"default="0"/>
<argname="pitch"default="0"/>
<argname="yaw"default="0"/>
<!-- Launch other relevant files-->
<includefile="$(find my_robot)/launch/robot_description.launch"/>
在启动文件中添加以下内容(在</launch>之前):
<!-- Find my robot Description-->
<param name="robot_description" command="$(find xacro)/xacro --inorder '$(find my_robot)/urdf/my_robot.xacro'"/>
<!-- Spawn My Robot -->
<node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
args="-urdf -param robot_description -model my_robot
-x $(arg x) -y $(arg y) -z $(arg z)
-R $(arg roll) -P $(arg pitch) -Y $(arg yaw)"/>
gazebo_ros包(gazebo_ros - ROS Wiki)从robot_description帮助生成的URDF中生成模型。
启动
$ cd /home/workspace/catkin_ws/
$ catkin_make
$ source devel/setup.bash
$ roslaunch my_robot world.launch
注意:第一次使用一个模型启动Gazebo可能需要一些时间来加载所有东西。
注:按照以下步骤使用URDF文件建模一个基本的机器人
5.机器人加强
已经构建了机器人的基本模型,现在对其进行加强并添加轮子,每个车轮表示为一个link(链接),并通过joint(关节)连接到基础链接(底盘)。
创建车轮Links(链接)
首先,使用下面给出的规范为每个车轮创建链接,并将其添加到Xacro文件。对于每个车轮,各有一个碰撞,惯性和视觉元素,以及以下属性:
link name链接名称-“SIDE_wheel”,其中SIDE是左或右。
geometry几何形状-“圆柱体”,半径0.1,长度0.05。
origin每个元素的原点- [0,0,0,0,1.5707,1.5707]
mass每个轮子的质量-“5”。
为了简单起见,可以使用与底盘相同的inertia惯性值:
ixx="0.1" ixy="0" ixz="0"
iyy="0.1" iyz="0"
izz="0.1"
为两个轮子创建Joints关节
定义了链接之后,需要创建相应的关节。以下元素将在左轮(子链接)和机器人底盘(父链接)之间创建一个关节:
<joint type="continuous" name="left_wheel_hinge">
<origin xyz="0 0.15 0" rpy="0 0 0"/>
<child link="left_wheel"/>
<parent link="chassis"/>
<axis xyz="0 1 0" rpy="0 0 0"/>
<limit effort="10000" velocity="1000"/>
<dynamics damping="1.0" friction="1.0"/>
</joint>
关节类型joint type设置为“连续”,类似于转动关节,但对其旋转没有限制,这意味着关节可以连续旋转。关节有自己的旋转轴axis。此外,关节有一定的限制limits,以强制该关节的最大“出力”和“速度”。这些极限对于真实机器人来说是很有用的约束条件,在仿真中也有帮助。ROS有关于安全限值的良好文档(pr2_controller_manager/safety_limits - ROS Wiki)。此外,关节将具有特定的关节动力学dynamics,对应于关节的物理特性,如“阻尼”和“摩擦”。
将左车轮关节添加到Xacro文件中。然后使用它作为模板,创建右车轮和底盘之间的关节。
启动
出色的工作!现在可以启动empty.world文件,以可视化在Gazebo中的增强机器人模型。
注:遵循以下步骤来增强前面创建的基本机器人模型。