机器人建模与仿真(二)——机器人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、运行仿真环境