ROS机器人的建模与仿真(一)

学了一天的ros,今天有点累,所以今晚就总结一小部分,以后继续补充,希望走过路过的大神可以指点不足,多多评论鼓励下小白,哈哈哈…..

一.首先先创建工作区间
1.可以在终端输入命令行建立

$mkdir -p ~/catkin_ws/src
$cd ~/catkin_ws/src
$catkin_init_workspace //初始化
//初始化完成后,需要建立个Ros功能包
//如果此时不在catkin_ws/src目录下,则重新输入:
$cd ~/catkin_ws/src
然后:
$catkin_create_pkg ros_robotics roscpp rospy std_msgs tf   //这里需要了解catkin_create_pkg的句法结构
//建立完功能包之后,我们先进行编译
$cd
$cd ~/catkin_ws
$catkin_make
到此步骤为止,基本的最基础的工作做完啦,下面,我们可以继续进行建模前的准备

2.也可以使用RoboWare Studio来建立工作区间。

二.了解URDF统一机器人格式
首先URDF是一种XML格式,专门用来对机器人硬件进行抽象的模型描述的。URDF是统一机器人描述格式,再使用前,需要了解URDF中常用的标签。

<link>它用于描述机器人某个刚体部位的外观,和物理属性,例如:sizecolor,shape,inertial matrixcollision properties

举个例子:

<?xml version="1.0" ?>  //声明该文件使用XML描述
<robot name="mrobot_chassis">   //定义机器人模型,并定义机器人模型的名称
//本代码是泛长代码中的一小部分,描述机器人地盘的link
    <link name="base_link">
        <visual>
            <origin xyz=" 0 0 0" rpy="0 0 0" />  //底盘中心位于界面的原点
            <geometry>
                <cylinder length="0.005" radius="0.13"/>  //定义圆柱体的半径和高
            </geometry>
            <material name="yellow">  //定义底盘的颜色。<material>标签用来表述该部件的颜色
                <color rgba="1 0.4 0 1"/>
            </material>
        </visual>
    </link>

因为采用xml格式,所以必定代码标签有始有终!!

<robot>它是完整机器人模型的最顶层标签,刚才说的<link>以及一会儿要说的<joint>都比素包含在它里面,也就是说,一个完整的机器人模型是由很多<link><joint>组成滴。

接下来<joint>标签:

<joint>用来描述机器人关节的运动学和动力学的属性,包括关节怎样移动,运动,空间位置以及运动速度的限制。机器人关节的主要作用就是连接两个刚体部分<link>,这两个刚体部分分别是:<parent link><child link>

举个例子:

.......
    <link name="base_link">
        <visual>
            <origin xyz=" 0 0 0" rpy="0 0 0" />
            <geometry>
                <cylinder length="0.005" radius="0.13"/>
            </geometry>
            <material name="yellow">
                <color rgba="1 0.4 0 1"/>
            </material>
        </visual>
    </link>
//关节部分
    <joint name="base_left_motor_joint" type="fixed">
        <origin xyz="-0.055 0.075 0" rpy="0 0 0" />        
        <parent link="base_link"/>
        <child link="left_motor" />
    </joint>
//
    <link name="left_motor">
        <visual>
            <origin xyz="0 0 0" rpy="1.5707 0 0" />
            <geometry>
                <cylinder radius="0.02" length = "0.08"/>
            </geometry>
            <material name="gray">
                <color rgba="0.75 0.75 0.75 1"/>
            </material>
        </visual>
    </link>
 .......
 ...

其中的<joint>

//关节部分,用来连接底盘和左电机
    <joint name="base_left_motor_joint" type="fixed">   //fixed是joint关节属性中的一个,表示固定,不允许发生运动。以后gazebo中有类似的建模。
        <origin xyz="-0.055 0.075 0" rpy="0 0 0" />   //定义了左电机的起点        
        <parent link="base_link"/>    //这里定义了父子关系,表示谁与谁连接
        <child link="left_motor" />   //
    </joint>

但是说了这三个URDF的这三种标签,常用的就这么点吗?答案是该否定的,常用的还有好多,在这里在介绍一种标签<gazebo>

<gazebo>这种标签只有在gazrbo仿真中才会写道,既然与gazebo相关,那么它的作用就是和仿真运动有关啦。它描述仿真运动中的参数,包括机器人的材料属性,插件等

But,我们注意到在以上案例中,例如这个描述左电机的link

    <link name="left_motor">
        <visual>
            <origin xyz="0 0 0" rpy="1.5707 0 0" />
            <geometry>
                <cylinder radius="0.02" length = "0.08"/>
            </geometry>
            <material name="gray">
                <color rgba="0.75 0.75 0.75 1"/>
            </material>
        </visual>
    </link>

其中:

1.
<geometry>
    ......
</geometry>
这个小标签又表示什么呢?
答案是:用来描述模块的形状和大小
2.
<visual>
.....
</visual>
来表示模块的视觉效果
3.
<origin>用来描述模块的位置。

最后我,贴一个完整urdf代码,希望与大家一起进步:

<?xml version="1.0" ?>
<robot name="mrobot_chassis">

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

    <joint name="base_left_motor_joint" type="fixed">
        <origin xyz="-0.055 0.075 0" rpy="0 0 0" />        
        <parent link="base_link"/>
        <child link="left_motor" />
    </joint>

    <link name="left_motor">
        <visual>
            <origin xyz="0 0 0" rpy="1.5707 0 0" />
            <geometry>
                <cylinder radius="0.02" length = "0.08"/>
            </geometry>
            <material name="gray">
                <color rgba="0.75 0.75 0.75 1"/>
            </material>
        </visual>
    </link>

    <joint name="left_wheel_joint" type="continuous">
        <origin xyz="0 0.0485 0" rpy="0 0 0"/>
        <parent link="left_motor"/>
        <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.033" length = "0.017"/>
            </geometry>
            <material name="white">
                <color rgba="1 1 1 0.9"/>
            </material>
        </visual>
    </link>

    <joint name="base_right_motor_joint" type="fixed">
        <origin xyz="-0.055 -0.075 0" rpy="0 0 0" />        
        <parent link="base_link"/>
        <child link="right_motor" />
    </joint>

    <link name="right_motor">
        <visual>
            <origin xyz="0 0 0" rpy="1.5707 0 0" />
            <geometry>
                <cylinder radius="0.02" length = "0.08" />
            </geometry>
            <material name="gray">
                <color rgba="0.75 0.75 0.75 1"/>
            </material>
        </visual>
    </link>

    <joint name="right_wheel_joint" type="continuous">
        <origin xyz="0 -0.0485 0" rpy="0 0 0"/>
        <parent link="right_motor"/>
        <child link="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.033" length = "0.017"/>
            </geometry>
            <material name="white">
                <color rgba="1 1 1 0.9"/>
            </material>
        </visual>
    </link>

    <joint name="front_caster_joint" type="fixed">
        <origin xyz="0.1135 0 -0.0165" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="front_caster_link"/>
    </joint>

    <link name="front_caster_link">
        <visual>
            <origin xyz="0 0 0" rpy="1.5707 0 0"/>
            <geometry>
                <sphere radius="0.0165" />
            </geometry>
            <material name="black">
                <color rgba="0 0 0 0.95"/>
            </material>
        </visual>
    </link>

</robot>

这个是官网教程:http://wiki.ros.org/urdf/XML,大家可以翻译看看。
古月大神的资料:http://wiki.ros.org/urdf/XML

猜你喜欢

转载自blog.csdn.net/qq_41058594/article/details/81073277