机器人学习之项目- Project1 : Go Chase it!(二)

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中的增强机器人模型。

注:遵循以下步骤来增强前面创建的基本机器人模型。

猜你喜欢

转载自blog.csdn.net/jeffliu123/article/details/129720067