机器人建模与仿真(二)——机器人URDF模型仿真

机器人建模与仿真(二)——机器人URDF模型仿真

目录

    • 总述
    • 一、创建机器人描述功能包
    • 二、创建URDF模型
    • 三、URDF模型解析
    • 四、在rviz中显示模型
    • 五、改进URDF模型
    • 六、添加传感器模型
    • 七、基于ArbotiX和rviz的仿真器

总述

在ROS中,机器人的模型一般放在RobotName_description功能包下。

一、创建机器人描述功能包

catkin_create_pkg mbot_description urdf xacro

机器人模型、描述文件在ROS里,通常的以 机器人名_description,并且需要依赖urdf功能包,解析模型 和 xacro(优化urdf用的)依赖。
在RobotName_description功能包下创建几个不同作用的文件夹,包含urdf、meshes、launch和config四个文件夹。

  • urdf:存放机器人模型的URDF或xacro文件
  • meshes:放置URDF中引用的模型渲染文件,机器人外观纹理,让外观和实际更相似,通过三维设计软件导出,放置此文件夹下
  • launch:保存相关启动文件
  • config:保存rviz的配置文件、功能包的配置文件

二、创建URDF模型

在了解了URDF模型中常用的标签和语法,使用这些基本语法创建机器人底盘模型。
这个机器人底盘模型有7个link和6个joint。7个link包括1个机器人底板、2个电机、2个驱动轮和2个万向轮;6个joint负责将驱动轮、万向轮、电机安装到底板上,并设置相应的连接方式。

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

    //robot name 标签用于定义所描述机器人的名称

    <link name="base_link">  
        <visual>  //
            <origin xyz=" 0.1 0.1 0.1" 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>

    //link标签描述了机器人某个刚体部分的外观和物理属性,包括尺寸,颜色,形状惯性和碰撞参数等,visual...../visual 标签描述机器人某个部件的外观参数等。origin 标签描述了所绘制外观geometry的坐标起点,一般对于规则形状的外观坐标起点位于规则形状的重心位置, cylinder 标签描述了这个圆柱体的尺寸,material 标签用于描述外观的颜色等信息

    <joint name="base_left_motor_joint" type="fixed"> //joint...../joint标签用于描述机器人关节的运动学和动力属性
        <origin xyz="0.1 0.1 0.1" rpy="0 0 0" />        
        <parent link="base_link"/>
        <child link="left_motor" />
    </joint>

   //上述joint...../joint标签中一般描述origin parent child等参数,origin描述了joint连接点基于parent link="base_link"
     坐标的偏移量,一般在rviz仿真中左上角Fixed Frame 的map选项设置成base_link,则base_link在rviz中为坐标原点,那么        origin所描述的joint为基于坐标原点的偏移量,parent为jiont的支撑连接部件,child为子部件,joint就为子部件和支撑连接部件     的关节

    <link name="left_motor">
        <visual>
            <origin xyz="0.2 0.2 0.2" rpy="0 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>
   //link name="left_motor"标签为base_left_motor_joint连接件的子部件,其中origin描述了该部件基于base_left_motor_joint关节
     坐标的偏移点,base_left_motor_joint关节的坐标原点为origin xyz="0.1 0.1 0.1",若left_motor部件的origin xyz="0.2 0.2 0.2"
     则表示left_motor所描述部件基于base_left_motor_joint关节坐标xyz="0.1 0.1 0.1"的偏移量为xyz="0.2 0.2 0.2"

    <joint name="left_wheel_joint" type="continuous">
        <origin xyz="0.5 0.0485 0" rpy="0 0 0"/>
        <parent link="left_motor"/>
        <child link="left_wheel_link"/>
        <axis xyz="0 1 0"/>
    </joint>

   //连接关节joint name="left_wheel_joint" 为left_motor和left_wheel_link关节点,left_wheel_link为left_motor的子部件,其中
     left_wheel_joint的基础坐标是基于parent link="left_motor"的关节joint name="base_left_motor_joint" 的基础坐标偏移量
     而非left_motor的origin偏移量

.......

..........

</robot>

URDF提供了一些命令行工具,可以帮助我们检查、梳理模型文件,需要在终端中独立安装:

sudo apt-get install liburdfdom-tools

然后使用check_urdf命令对描述机器人文件进行检查:

check_urdf #<机器人描述名称>.urdf

check_urdf命令会解析URDF文件,并且显示解析过程中发现的错误。如果一切正常,在终端中会无报错输出。
还可以使用urdf_to_graphiz命令查看URDF模型的整体结构:

urdf_to_graphiz #<机器人描述名称>.urdf

执行urdf_to_graphiz命令后,会在当前目录下生成一个pdf文件,打开该文件,可以看到模型的整体结构图。

三、URDF模型解析

四、在rviz中显示模型

完成URDF模型的设计后,可以使用rviz将该模型可视化显示出来,检查是否符合设计目标。
编辑launch启动文件

<launch>
    <!-- param是要加载ros的一个参数:robot_description (描述机器人的具体模型)-->
	<param name="robot_description" textfile="$(find mbot_description)/urdf/mbot_base.urdf" />

	<!-- 设置GUI参数,显示关节控制插件 -->
	<param name="use_gui" value="true"/>
	
	<!-- 运行joint_state_publisher节点,发布机器人的关节状态  -->
	<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
	
	<!-- 运行robot_state_publisher节点,发布tf  -->
	<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
	
	<!-- 运行rviz可视化界面 -->
	<node name="rviz" pkg="rviz" type="rviz" args="-d $(find mbot_description)/config/mbot_urdf.rviz" required="true" />
</launch>
  • joint_state_publisher:发布每个joint(除fixed类型)的状态,而且可以通过UI界面对joint进行控制
  • robot_state_publisher:将机器人各个links、joints之间的关系,通过TF的形式,整理成三维姿态信息发布
    打开终端运行该launch文件,如果一切正常,可以在打开的rviz中看到机器人模型。

五、改进URDF模型

1、添加物理和碰撞属性
2、使用xacro优化URDF
(1)使用常量定义
(2)调用数学公式
(3)使用宏定义
3、xacro文件引用
4、显示优化后的模型
(1)将xacro文件转换成URDF文件
(2)直接调用xacro文件解析器

六、添加传感器模型

1、添加摄像头
2、添加Kinect
3、添加激光雷达

七、基于ArbotiX和rviz的仿真器

1、安装ArbotiX
2、配置ArbotiX控制器
<1>创建launch文件
<2>创建配置文件
3、运行仿真环境

你可能感兴趣的:(ROS智能机器人,python,linux)