从零手写移动机器人URDF模型学习记录(一)_urdf material-CSDN博客
1. ros工作空间站建立和编译
mkdir -p ~/moveit_ws/src
cd ~/moveit_ws/src
catkin_init_workspace
cd ~/moveit_ws/
catkin_make
# echo "source ~/moveit_ws/devel/setup.bash" >> ~/.bashrc
# source ~/.bashrc
2. 创建urdf包
cd ~/moveit_ws/src/
catkin_create_pkg mbot_description urdf xacro
# urdf和xacro都是用来解析模型的功能包依赖项。
# 创建urdf文件夹用以存放机器人模型的urdf或者xacro文件,meshes文件夹用以防止urdf中引用的模型渲染文件(如使用solidworks导出的stl文件等),launch文件夹用以保存相关launch启动文件,config文件夹用以保存rviz的配置文件。
3. 创建urdf模型
cd ~/moveit_ws/src/mbot_description/urdf/
touch mbot.urdf
gedit mbot.urdf
# 添加robot标签
# robot标签是用以描述整个机器人的。这里要注意的是xml语言中标签是要闭合的,要是不闭合的话后面是会报错误
# 使用link标签创建底盘
# link标签是用以描述机器人某个刚体部分的外观和物理属性的,其参数包括连杆尺寸(size)、颜色(color)、形状(shape)、惯性矩阵(inertial matrix)、碰撞参数(collision properties)等。
# 这里的material标签与函数功能相类似,后面在link标签中间使用material标签并赋予对应颜色的名字参数,即可将link渲染成目标颜色。color参数rgba分别代表红色、蓝色、绿色、透明度的比例,取值为0-1。
# 添加颜色参数 在两个robot标签中间添加
# 配置底盘参数 在color代码下添加
# visual标签用以描述底盘的外观状态,在visual标签中间可对link外观进行具体设置;origin标签定义底盘所处位置,其中xyz为所处空间三维坐标,rpy则是底盘在该坐标下旋转的角度;geometry标签用以定义底盘的形状,这里cylinder定义底盘形状为圆柱体,length是圆柱体的高(单位是米),radius是圆柱体的半径(单位是米),要是想使用自己所画出的几何模型stl文件,在geometry标签中也可通过格式"mesh filename=“xxx.stl”"进行导入;material标签用以对底盘颜色进行定义。
# 保存urdf文件,底盘创建完成。
"
<?xml version="1.0" ?>
<robot name="mbot">
<!-- / COLOR / -->
<material name="Black">
<color rgba="0 0 0 1"/>
</material>
<material name="White">
<color rgba="1 1 1 0.95"/>
</material>
<material name="Blue">
<color rgba="0 0 1 1"/>
</material>
<material name="Yellow">
<color rgba="1 0.4 0 1"/>
</material>
<!-- / BASE / -->
<link name="base_link">
<visual>
<origin xyz=" 0 0 0" rpy="0 0 0" />
<geometry>
<cylinder length="0.16" radius="0.20"/>
</geometry>
<material name="Yellow"/>
</visual>
</link>
<!-- / WHEEL / -->
<link name="left_wheel_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0" />
<geometry>
<cylinder radius="0.06" length = "0.025"/>
</geometry>
<material name="White"/>
</visual>
</link>
<link name="right_wheel_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0" />
<geometry>
<cylinder radius="0.06" length = "0.025"/>
</geometry>
<material name="White"/>
</visual>
</link>
<joint name="left_wheel_joint" type="continuous">
<origin xyz="0 0.19 -0.05" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="left_wheel_link"/>
<axis xyz="0 1 0"/>
</joint>
<joint name="right_wheel_joint" type="continuous">
<origin xyz="0 -0.19 -0.05" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="right_wheel_link"/>
<axis xyz="0 1 0"/>
</joint>
<!-- / CASTER / -->
<link name="front_caster_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<sphere radius="0.015" />
</geometry>
<material name="Black"/>
</visual>
</link>
<joint name="front_caster_joint" type="fixed">
<origin xyz="0.18 0 -0.095" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="front_caster_link"/>
</joint>
<link name="back_caster_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<sphere radius="0.015" />
</geometry>
<material name="Black"/>
</visual>
</link>
<joint name="back_caster_joint" type="fixed">
<origin xyz="-0.18 0 -0.095" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="back_caster_link"/>
</joint>
<!-- / LASER / -->
<link name="laser_link">
<visual>
<origin xyz=" 0 0 0 " rpy="0 0 0" />
<geometry>
<cylinder length="0.05" radius="0.05"/>
</geometry>
<material name="Black"/>
</visual>
</link>
<joint name="laser_joint" type="fixed">
<origin xyz="0 0 0.105" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="laser_link"/>
</joint>
<!-- / KINECT / -->
<link name="kinect_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 1.5708"/>
<geometry>
<mesh filename="package://mbot_description/meshes/kinect.dae" />
</geometry>
</visual>
</link>
<joint name="kinect_joint" type="fixed">
<origin xyz="0.15 0 0.11" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="kinect_link"/>
</joint>
</robot>
"
4. 编写launch文件并查看底盘创建效果
cd ~/moveit_ws/src/mbot_description/launch/
touch display_mbot_urdf.launch
gedit display_mbot_urdf.launch
"
<launch>
<!-- 设置机器人模型路径参数 -->
<param name="robot_description" textfile="$(find mbot_description)/urdf/mbot.urdf" />
<!-- 运行joint_state_publisher节点,发布机器人的关节状态 -->
<node name="joint_state_publisher_gui" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" />
<!-- 运行robot_state_publisher节点,发布tf -->
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
<!-- 运行rviz可视化界面 -->
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find mbot_description)/config/mbot_urdf.rviz" required="true" />
</launch>
"
cd ~/moveit_ws/
catkin_make
roslaunch mbot_description display_mbot_urdf.launch