ROS URDF添加传感器模型
添加传感器模型
添加摄像头
对应的模型文件是camera.xacro, 内容如下
<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="camera">
<xacro:macro name="usb_camera" params="prefix:=camera">
<link name="${prefix}_link">
<inertial>
<mass value="0.1" />
<origin xyz="0 0 0" />
<inertia ixx="0.01" ixy="0.0" ixz="0.0"
iyy="0.01" iyz="0.0"
izz="0.01" />
</inertial>
<visual>
<origin xyz=" 0 0 0 " rpy="0 0 0" />
<geometry>
<box size="0.01 0.04 0.04" />
</geometry>
<material name="black"/>
</visual>
<collision>
<origin xyz="0.0 0.0 0.0" rpy="0 0 0" />
<geometry>
<box size="0.01 0.04 0.04" />
</geometry>
</collision>
</link>
</xacro:macro>
</robot>
以上代码使用了一个名为usb_camera的宏来描述摄像头,输入参数是摄像头的名称。
再创建一个顶层xacro文件,把机器人和摄像头这两个模块拼接在一起。顶层文件mrobot_with_camera.urdf.xacro的内容如下,其中机器人本体描述文件mrobot_body.urdf.xacro的内容可在前一篇博客中找到。
<?xml version="1.0"?>
<robot name="mrobot" xmlns:xacro="http://www.ros.org/wiki/xacro">
<xacro:include filename="$(find mrobot_description)/urdf/mrobot_body.urdf.xacro" />
<xacro:include filename="$(find mrobot_description)/urdf/camera.xacro" />
<xacro:property name="camera_offset_x" value="0.1" />
<xacro:property name="camera_offset_y" value="0" />
<xacro:property name="camera_offset_z" value="0.02" />
<!-- MRobot机器人平台-->
<mrobot_body/>
<!-- Camera -->
<joint name="camera_joint" type="fixed">
<origin xyz="${camera_offset_x} ${camera_offset_y} ${camera_offset_z}" rpy="0 0 0" />
<parent link="plate_2_link"/>
<child link="camera_link"/>
</joint>
<xacro:usb_camera prefix="camera"/>
</robot>
在rviz中显示模型,如下图所示
roslaunch mrobot_description display_mrobot_with_camera_xacro.launch
添加Kinect
Kinect是一种常用的RGB-D摄像头,xacro文件如下
<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="kinect_camera">
<xacro:macro name="kinect_camera" params="prefix:=camera">
<link name="${prefix}_link">
<origin xyz="0 0 0" rpy="0 0 0"/>
<visual>
<origin xyz="0 0 0" rpy="0 0 ${M_PI/2}"/>
<geometry>
<mesh filename="package://mrobot_description/meshes/kinect.dae" />
</geometry>
</visual>
<collision>
<geometry>
<box size="0.07 0.3 0.09"/>
</geometry>
</collision>
</link>
<joint name="${prefix}_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="-1.5708 0 -1.5708"/>
<parent link="${prefix}_link"/>
<child link="${prefix}_frame_optical"/>
</joint>
<link name="${prefix}_frame_optical"/>
</xacro:macro>
</robot>
在可视化中设置标签,可以导入该模型的mesh文件。然后讲Kinect和机器人拼装到一起。顶层xacro文件mrobot_with_kinect.urdf.xacro的内容如下
<?xml version="1.0"?>
<robot name="mrobot" xmlns:xacro="http://www.ros.org/wiki/xacro">
<xacro:include filename="$(find mrobot_description)/urdf/mrobot_body.urdf.xacro" />
<xacro:include filename="$(find mrobot_description)/urdf/kinect.xacro" />
<xacro:property name="kinect_offset_x" value="-0.06" />
<xacro:property name="kinect_offset_y" value="0" />
<xacro:property name="kinect_offset_z" value="0.035" />
<!-- MRobot机器人平台-->
<mrobot_body/>
<!-- Kinect -->
<joint name="kinect_frame_joint" type="fixed">
<origin xyz="${kinect_offset_x} ${kinect_offset_y} ${kinect_offset_z}" rpy="0 0 0" />
<parent link="plate_2_link"/>
<child link="camera_link"/>
</joint>
<xacro:kinect_camera prefix="camera"/>
</robot>
在rviz中显示结果如下图所示
其他传感器可以类似的方法进行建模。
参考文献
[1]胡春旭. ROS机器人开发实践[M]. 机械工业出版社, 北京, 2018.5