组合:
非仿真环境:使用URDF结合rviz直接显示感知的真实环境信息
仿真环境:需要使用URDF结合Gazebo搭建仿真环境,结合Rviz显示感知到的虚拟环境信息
URDF
步骤:
- 建立功能包,头文件包含:urdf, xacro
- 在src下分别建立以下层级目录
- 编写urdf文件
- 编写launch文件
- /config(保存设置的rviz格式)
- /launch(保存launch文件)
- /meshes(保存皮肤)
- /urdf/urdf(保存urdf文件,即机器人结构部分)
- /urdf/xacro
语法:
关节:joint
属性:
name
type 关节运动形式
- continuous 旋转关节 沿单轴无限旋转
- revolute 旋转关节,类似于continuous 但是有角度限制
- prismatic 滑动关节 沿着某一轴线移动的关节,有位置极限
- planer 平面关节 允许在平面正交方向上平移或移动
- floating 浮动关节,允许平移旋转
- fixed- 固定关节
子标签
- parent (设置parent link)
- child(设置 child link)
- orgin(xyz=偏移量,rpy=偏移弧度)
- axis(xyz用于设置围绕哪个关节运动)
<!-- 添加机器人底盘 并添加摄像头 --> <robot name="myrobot"> <!-- 底盘link --> <link name="base_link"> <visual> <!-- 形状 --> <geometry> <!-- 立方体 --> <box size="0.3 0.2 0.1"/> </geometry> <!-- 偏移与倾斜弧度 --> <origin xyz="0 0 0" rpy="0 0 0" /> <!-- 颜色 --> <material name="car_color"> <color rgba="0.2 0.5 0.7 0.5" /> </material> </visual> </link> <!-- 摄像头link --> <link name="camera"> <visual> <!-- 形状 --> <geometry> <!-- 立方体 --> <box size="0.02 0.05 0.05"/> </geometry> <!-- 偏移与倾斜弧度 --> <origin xyz="0.0 0 0" rpy="0 0 0" /> <!-- 颜色 --> <material name="camera_color"> <color rgba="0.7 0.5 0.2 0.5" /> </material> </visual> </link> <!-- 关节 --> <joint name="camer_car" type="continuous"> <!-- 父 --> <parent link="base_link" /> <!-- 子 --> <child link="camera" /> <!-- 设置偏移量 --> <origin xyz="0.15 0 0.05" rpy="0 0 0"/> <!-- 设置关节旋转参考的坐标轴 --> <axis xyz="0 0 1"/> </joint> </robot>
可见摄像头嵌入到箱体里面,所以需要重新设置偏移量;
而且存在报错,显示两者没有连接No transform from [camera] to [base_link]
修改launch文件
<launch> <!-- 在参数服务器中载入urdf文件 --> <param name="robot_description" textfile="$(find urdf01)/urdf/urdf/joint.urdf" /> <!-- 启动rviz --> <node pkg="rviz" type="rviz" name="rviz" args="-d $(find urdf01)/config/show_mycar.rviz"/> <!-- 显示报错 No transform from [camera] to [base_link] 原因:rviz显示URDF时必须发布不同的部件之间的坐标系关系 解决:ROS中提供了关于机器人模型显示的坐标发布相关节点 --> <!-- 关节姿态发布 --> <node pkg="joint_state_publisher" type="joint_state_publisher" name="joint_state_publisher" /> <!-- 机器人姿态发布 --> <node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher" /> </launch>
效果图如下:
再修改偏移量
将摄像头 z轴上的偏移量从0改为0.025,这样下沉的另一半就可以恢复到箱体以上了
连杆:link
属性:name
可视化:visual
geometry 连杆的形状
- box(盒状)(size=x,y,z)
- cylinder(圆柱体)(radius length)
- sphere(球体)(radius)
- mesh(为连杆添加皮肤)(filename=资源路径)
<!-- 设置不同形状的机器人部件 --> <robot name="mycar"> <link name="base_link"> <visual> <!-- 形状 --> <geometry> <!-- 立方体 --> <box size="0.3 0.2 0.1"/> <!--圆柱 --> <cylinder radius="0.5" length="1"/> <!-- 球体 --> <sphere radius="0.1" /> <!-- 皮肤 --> <mesh filename="package://urdf01/meshes/sim_demo-main/autolabor_mini.stl" /> </geometry> </visual> </link> </robot>
origin 设置偏移量与倾斜弧度
- xyz = x y z的偏移
- rpy=x翻滚 y俯仰 z偏航
<!-- 偏移与倾斜弧度 --> <origin xyz="0 0 0" rpy="1.57 0 0" />
metrial 设置材料属性(颜色)
<!-- 颜色 --> <material name="car_color"> <color rgba="0.2 0.5 0.7 0.5" /> </material>
碰撞属性:collision
惯性矩阵:Inertial