ROS:机器人描述(URDF、XACRO)
来源:互联网 发布:脱脂牛奶 知乎 编辑:程序博客网 时间:2024/04/30 08:55
ROS:机器人描述(URDF、XACRO)
Urdf语法详解
Urdf教程:https://wiki.ros.org/urdf/Tutorials/Create%20your%20own%20urdf%20file
1.创建一个树型结构
Urdf中采用link和joint构成树状的结构来描述机器人。
首先需要定义一个base_link,在坐标系的原点。
2.添加位置
Urdf中通过orgin标签来定义link所在的位置。
<?xml version="<?xml version="1.0"?><robot name="test_robot"> <link name="base_link" /> <link name="link2" /> <link name="link3" /> <link name="link4" /> <joint name="joint1" type="continuous"> <parent link="base_link"/> <child link="link2"/> <origin xyz="0.3 0 0" rpy="1 0 0" /> </joint> <joint name="joint2" type="continuous"> <parent link="base_link"/> <child link="link3"/> <origin xyz="0 0.3 0" rpy="0 1 0" /> </joint> <joint name="joint3" type="continuous"> <parent link="base_link"/> <child link="link4"/> <origin xyz="0 0 0.3" rpy="0 0 1" /> </joint></robot>
origin:xyz以parent link为原点,child link的三维坐标系位置。
origin:rpy child link绕z轴旋转的滚动角(roll),绕y轴方向旋转的俯仰(pitch)角,和绕x轴旋转的偏转(yaw)角.
图中以base_link为基准,红色为x轴,绿色为y轴,蓝色为z轴。
3.添加link外观
Deometry定义link形状
Material 定义link材料
Origin 定义link相对于自己原来的位置的变化
<link name="base_link"> <visual> <geometry> <box size="0.25 .16 .05"/> </geometry> <origin rpy="0 0 0" xyz="0 0 0"/> <material name="blue"> <color rgba="0 0 .8 1"/> </material> </visual> </link>
4.添加限制
Collision标签(碰撞)
Collision的内容与visiual中内容一样。
Axis joint定义旋转轴,例如(0 0 1)为以z轴旋转,(1 1 1)为以向量1 1 1为轴旋转,不指定以x轴旋转。
Limit 标签,限制joint的旋转范围。
<limit lower="-3.14" upper="3.14" effort="150.0" velocity="3.15"/>, 从标签中可以看到, 上下限以及速度, 力矩等都是可以指定的.
建立一个smartcar模型
1.新建一个smartcar包
catkin_create_pkg smartcar std_msgs rospy roscpp urdf
2.包文件夹下新建urdf文件夹,且在urdf文件夹下新建smartcar.urdf文件
依据上面的语法创建的内容为
<?xml version="1.0"?><robot name="test_robot"> <link name="base_link"> <visual> <geometry> <box size="0.25 .16 .05"/> </geometry> <origin rpy="0 0 0" xyz="0 0 0"/> <material name="blue"> <color rgba="0 0 .8 1"/> </material> </visual> </link> <link name="wheel_1"> <visual> <geometry> <cylinder length=".02" radius="0.025"/> </geometry> <material name="red"> <color rgba="1 0 0 1"/> </material> </visual> </link> <joint name="joint1" type="continuous"> <axis xyz="0 0 1"/> <parent link="base_link"/> <child link="wheel_1"/> <origin rpy="1.5707 0 0" xyz="0.08 0.1 -0.03"/> <limit effort="100" velocity="100"/> <joint_properties damping="0.0" friction="0.0"/> </joint> <link name="wheel_2"> <visual> <geometry> <cylinder length=".02" radius="0.025"/> </geometry> <material name="black"> <color rgba="0 0 0 1"/> </material> </visual> </link> <joint name="joint2" type="continuous"> <axis xyz="0 0 1"/> <parent link="base_link"/> <child link="wheel_2"/> <origin rpy="1.57075 0 0" xyz="0.08 -0.1 -0.03"/> <limit effort="100" velocity="100"/> <joint_properties damping="0.0" friction="0.0"/> </joint><link name="wheel_3"> <visual> <geometry> <cylinder length=".02" radius="0.025"/> </geometry> <material name="red"> <color rgba="1 0 0 1"/> </material> </visual> </link> <joint name="joint_3" type="continuous"> <axis xyz="0 0 1"/> <parent link="base_link"/> <child link="wheel_3"/> <origin rpy="1.57075 0 0" xyz="-0.08 0.1 -0.03"/> <limit effort="100" velocity="100"/> <joint_properties damping="0.0" friction="0.0"/> </joint> <link name="wheel_4"> <visual> <geometry> <cylinder length=".02" radius="0.025"/> </geometry> <material name="black"> <color rgba="0 0 0 1"/> </material> </visual> </link> <joint name="joint_4" type="continuous"> <axis xyz="0 0 1"/> <parent link="base_link"/> <child link="wheel_4"/> <origin rpy="1.57075 0 0" xyz="-0.08 -0.1 -0.03"/> <limit effort="100" velocity="100"/> <joint_properties damping="0.0" friction="0.0"/> </joint></robot>
检查urdf文件语法:
check_urdf smartcar.urdf
可视化模型:
roslaunch urdf_tutorial display.launch model:=path/to/your/xxx.urdf gui:=true
3.新建launch文件夹,且在launch文件夹下新建smartcar_rviz.launch文件
仿照上面的display.launch文件,编辑smartcar_rviz.launch文件
smartcar_rviz.launch
<launch> <arg name="model" /> <arg name="gui" default="False" /> <arg name="rvizconfig" default="$(find urdf_tutorial)/rviz/urdf.rviz" /> <param name="robot_description" command="$(find xacro)/xacro.py $(find smartcar_description)/urdf/smartcar.urdf" /> <param name="use_gui" value="$(arg gui)"/> <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" ></node> <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" /> <node name="rviz" pkg="rviz" type="rviz" args="-d $(arg rvizconfig)" required="true" /></launch>
出来的效果与上一步中可视化的效果相同。
- ROS:机器人描述(URDF、XACRO)
- <ROS> 机器人描述--URDF和XACRO
- ROS机器人Diego 1#制作(十六)创建机器人的urdf模型描述文件
- ROS环境下机器人建模(XACRO)及常见问题解决
- ROS中新建机器人模型(.xacro)并用rviz显示
- urdf 和 xacro
- ROS专题----机器人模型urdf简明笔记
- (一)ROS中新建机器人模型(urdf格式)并用rviz显示
- 用ROS制作我们的机器人小车(一): URDF简介
- ROS学习(1)使用URDF创建机器人3D仿真模型
- ROS中新建多轴机器人模型(urdf)并用rviz显示
- ROS学习(八):ROS URDF->transmission
- ROS学习(九):ROS URDF->link
- ROS学习(十):ROS URDF->joint
- ROS学习(十一):ROS URDF->model
- ROS学习(十二):ROS URDF->model_state
- ROS --urdf
- ROS(7) urdf 搭建自己的机器人模型
- List排序(匿名方法)
- 【Redis源码剖析】
- 数据结构复习之–“选择排序”-JAVA实现
- thinkPHP删除前弹出确认框的简单实现方法
- Xlistview加小圆点
- ROS:机器人描述(URDF、XACRO)
- ObjectInputStream throws EOFException
- ionic3启动页面
- Ubuntu系统下使用mysql出现start: Unable to connect to Upstart
- 【C#】SQL Server自增ID字段值跳跃问题
- 残差网络resnet学习
- Intellij idea破解办法
- Codeforces Round #359 (Div. 1) A. Robbers' watch 暴力
- Python自学笔记