本文介绍如何在ROS中使用urdf创建机器人3D模型。
机器人的3D模型在ROS中是通过URDF文件实现,URDF(Unified Robot Description Format)就是描述机器人硬件尺寸布局的模型语言。它是同ROS通信的渠道,通过机器人的物理尺寸来配置机器人模型,ROS就可以有效的进行自主导航(Navagation)和碰撞检测(collision detect)了。
在ROS中,所有的ROS软件(包括我们创建的软件)都被组织成软件包的形式。因此,在工作空间catkin_ws/src/目录下通过catkin_create_pkg来创建硬件描述包:
$ catkin_create_pkg autolabor_description urdf
通过catkin_create_pkg创建了一个autolabor_description的包,该命令的最后一个参数是引入urdf库。
ROS中创建包详情请参考:
在新建的包中创建 urdf 和 launch 文件夹用于存储 *.urdf 和 *.launch 文件。可以在catkin_ws/src/目录下看到:
(当然,这一步并不是必要的,你也可以通过配置urdf文件来得到小车的模型,详情参考第四步)
通过机器人小车的物理参数,使用3D制图软件绘制机器人小车的3D模型
在autolabor_description包的目录下,新建meshes文件夹,将绘制的3D模型复制到在路径下
在urdf文件夹下创建文件 autolabor_description.urdf文件,并将下列代码放在 autolabor_description.urdf文件中
如果绘制了3D模型,建立urdf文件
<robot name="autolabor_description"> <link name="base_link"><inertial><originxyz="0. 0. 0."rpy="0. 0. 0." /><massvalue="0.251988675650349" /><inertiaixx="0.000595579869264794"ixy="5.99238175321912E-08"ixz="-1.98242615307314E-08"iyy="0.00102462329604677"iyz="-1.73115625503396E-05"izz="0.00060561972360446" /></inertial><visual><originxyz="0. 0. 0.05"rpy="1.57 0. 1.57" /><geometry><meshfilename="package://autolabor_description/meshes/base_link.stl" /></geometry><materialname=""><colorrgba="0.792156862745098 0.819607843137255 0.933333333333333 1" /></material></visual></link></robot>
如果未绘制3D模型,通过配置urdf来得到模型,这里仅展示一个简单的example
<?xml version="1.0"?>
<robot name="smartcar"><link name="base_link"><visual><geometry><box size="0.25 .16 .05"/></geometry><origin rpy="0 0 1.57075" xyz="0 0 0"/><material name="blue"><color rgba="0 0 .8 1"/></material></visual></link><link name="right_front_wheel"><visual><geometry><cylinder length=".02" radius="0.025"/></geometry><material name="black"><color rgba="0 0 0 1"/></material></visual></link><joint name="right_front_wheel_joint" type="continuous"><axis xyz="0 0 1"/><parent link="base_link"/><child link="right_front_wheel"/><origin rpy="0 1.57075 0" xyz="0.08 0.1 -0.03"/><limit effort="100" velocity="100"/><joint_properties damping="0.0" friction="0.0"/></joint><link name="right_back_wheel"><visual><geometry><cylinder length=".02" radius="0.025"/></geometry><material name="black"><color rgba="0 0 0 1"/></material></visual></link><joint name="right_back_wheel_joint" type="continuous"><axis xyz="0 0 1"/><parent link="base_link"/><child link="right_back_wheel"/><origin rpy="0 1.57075 0" xyz="0.08 -0.1 -0.03"/><limit effort="100" velocity="100"/><joint_properties damping="0.0" friction="0.0"/></joint><link name="left_front_wheel"><visual><geometry><cylinder length=".02" radius="0.025"/></geometry><material name="black"><color rgba="0 0 0 1"/></material></visual></link><joint name="left_front_wheel_joint" type="continuous"><axis xyz="0 0 1"/><parent link="base_link"/><child link="left_front_wheel"/><origin rpy="0 1.57075 0" xyz="-0.08 0.1 -0.03"/><limit effort="100" velocity="100"/><joint_properties damping="0.0" friction="0.0"/></joint><link name="left_back_wheel"><visual><geometry><cylinder length=".02" radius="0.025"/></geometry><material name="black"><color rgba="0 0 0 1"/></material></visual></link><joint name="left_back_wheel_joint" type="continuous"><axis xyz="0 0 1"/><parent link="base_link"/><child link="left_back_wheel"/><origin rpy="0 1.57075 0" xyz="-0.08 -0.1 -0.03"/><limit effort="100" velocity="100"/><joint_properties damping="0.0" friction="0.0"/></joint><link name="head"><visual><geometry><box size=".02 .03 .03"/></geometry><material name="white"><color rgba="1 1 1 1"/></material></visual></link><joint name="tobox" type="fixed"><parent link="base_link"/><child link="head"/><origin xyz="0 0.08 0.025"/></joint>
</robot>
其中配置解释如下:
<link>对应模型的一个模块,可以通过标签joint让子模块与base_link进行关联;<visual>描述一个link的外观,大小,颜色,材质纹理等;<geometry>定义该link的几何模型,包含该几何模型的尺寸,单位:米;<box> 矩形,定义属性:size(包含长宽高,数据用空格隔开);<cylinder> 圆柱体,定义属性:length,radius;<sphere> 球体,定义属性:radius;<material> 定义颜色和透明度(RGBA),取值区间 [0,1] ;<collision> 描述碰撞检测属性;<origin> 用来描述模块的位置;<inertial> 定义惯性;
*.launch文件的作用是:同时启动多个节点,使用roslaunch命令运行.launch文件中指定的节点。在launch文件夹中创建文件display.launch,并编辑,代码如下:
<launch><arg name="model" /><arg name="gui" default="false" /><param name="robot_description" textfile="$(find autolabor_description)/urdf/autolabor_description.urdf" /><param name="use_gui" value="$(arg gui)" /><node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" /><node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" /><node name="rviz" pkg="rviz" type="rviz" args="-d $(find autolabor_description)/urdf.rviz" />
</launch>
第一个输入参数 model 就是要启动的urdf文件路径。
第二个输入参数 gui 指定是否启用关节转动控制面板窗口。
两个参数表示:分别描述要启动的模型描述文件(urdf)和关节转到控制窗口(gui,对应各个joint)。
三个节点:分别用于发送joint的信息,robot的控制信息,和rviz的启动。至此,模型搭建完毕,启动模型进行测试。
进入工作空间目录下,编译文件,使用roslaunch命令来启动它:
$ cd ~/catkin_ws/
$ source devel/setup.bash
$ catkin_make$ roslaunch autolabor_description display.launch
在启动rviz后,需要将上面标记的topic的参数改成上述图中,否则是无法观测到的,到此,就建立并启动了自己的机器人小车了
autolabor_urdf下载
本文发布于:2024-02-08 19:40:54,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170739247868376.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |