注:本文利用roboware studio工具建立urdf模型
创建机器人描述功能包
右键单击工作空间catkin_ws/src
文件夹,点击新建ROS包
,将功能包命名为mrobot_description
,如下:
手动添加功能包依赖项,打开CMakeLists.txt
文件,如图所示添加urdf、xacro
在功能包中新建四个文件夹,分别为
urdf
:用于存放机器人模型的urdf或者xacro文件。
meshes
:用于放置urdf中引用的模型渲染文件。
launch
:用于保存相关启动文件。
config
:用于保存rviz的配置文件。
创建机器人底盘描述文件mrobot_chassis.urdf
这个机器人底盘模型有7个link和6个joint。7个link包括1个机器人底板、2个电机、2个驱动轮和2个万向轮;6个joint负责将驱动轮、万向轮、电机安装在底板上,并设置相应的连接方式。
在mrobot_description/urdf文件夹下新建mrobot_chassis.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>
在检查并解析新建的urdf文件之前,需要先对工作空间进行编译:
cd ~/catkin_ws
catkin_make
urdf提供了一些命令行工具,可以帮助我们检查、梳理模型文件,需要在终端进行独立安装,命令如下:
$ sudo apt-get install liburdfdom-tools
安装完成后,检查并解析上述新建的urdf文件的命令如下(注:在check_urdf命令之前,需要进入urdf所在文件夹):
cd ~/catkin_ws
source ./devel/setup.bash
cd
cd ~/catkin_ws/src/mrobot_description/urdf
check_urdf mrobot_chassis.urdf
若一切正常,会出现如下信息
建立launch命令文件
在mrobot_description/launch文件夹下新建display_mrobot_chassis_urdf.launch文件,如下:
<launch>
<param name="robot_description" textfile="$(find mrobot_description)/urdf/mrobot_chassis.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 mrobot_description)/config/mrobot_urdf.rviz" required="true" />
</launch>
在rviz中显示机器人底盘模型
打开ros,编译一下mrobot_description功能包,然后设置环境变量,运行launch文件,命令如下:
roscore
cd ~/catkin_ws
catkin_make
source ./devel/setup.bash
roslaunch mrobot_description display_mrobot_chassis_urdf.launch
运行成功后,显示如下。这里不仅启动了rviz,还出现了一个叫joint_state_publisher
的UI,这是因为我们在启动文件中启动了joint_state_publisher
节点,该节点可以发布每个joint(除了fixed)的状态,拖动控制条可以改变轮子的运动状态。
不过此时并没有出现模型,并且还有错误,修改如下:
在Global Options中的Fixed Frame下拉菜单中选择base_link,点击Add选项,添加RobotModel,如图
修改后如下