本文主要是介绍ROS URDF、rviz、gazebo(1),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 1.URDF优化_xacro:
- 1.1.xacro语法:
- 1.2.xacro之launch集成:
- 2.arbotix控制机器人运动:
- 2.1.编写arbotix配置文件:
- 2.2.配置launch文件:
- 2.3.向话题发布信息:
- 3.URDF集成gazebo:
- 3.1.创建功能包并导入相关依赖:
- 3.2.编写URDF文件:
- 3.2.1.collision:
- 3.2.2.inertial:
- 3.2.3.颜色设置:
- 3.3.集成到launch文件并打开gazebo:
1.URDF优化_xacro:
1.1.xacro语法:
1.解析声明:xmlns
robot标签后添加一个属性xmlns:xacro=http://www.ros.rog/wiki/xacro
。
2.属性定义:<xacro:property name="xxx" value="yyy" />
3.属性调用:${属性名称}
4.属性运算:${数学表达式}
5.宏定义:xacro:macro name="宏名称" params="参数列表(多参数之间使用空格分隔)"
<xacro:macro name ="宏名称" params="参数列表(多参数之间使用空格分隔)">...调用参数格式:${参数名}
</xacro:macro >
6.宏调用:<xacro:宏名称 参数1=xxx 参数2=xxx/>
7.文件包含:<xacro:include filename="文件名.xacro"/>
1.2.xacro之launch集成:
在launch文件中添加:
<param name="robot_description" command="$(find xacro)/xacro $(find 功能包名)/urdf/xacro/文件名加后缀"/>
2.arbotix控制机器人运动:
2.1.编写arbotix配置文件:
# 该文件是控制器配置,一个机器人模型可能有多个控制器,比如: 底盘、机械臂、夹持器(机械手)....
# 因此,根 name 是 controller
controllers: {# 单控制器设置base_controller: {#类型: 差速控制器type: diff_controller,#参考坐标base_frame_id: base_footprint, #两个轮子之间的间距base_width: 0.2,#控制频率ticks_meter: 2000, #PID控制参数,使机器人车轮快速达到预期速度Kp: 12, Kd: 12, Ki: 0, Ko: 50, #加速限制accel_limit: 1.0 }
}
文件配置错误可能会导致节点发布话题异常(无odom
话题)的问题。
2.2.配置launch文件:
添加:
<node pkg="arbotix_python" type="arbotix_driver" name="driver" output="screen"><rosparam file="$(find prac_urdf)/config/control.yaml" command="load"/><param name="sim" value="true"/></node>
2.3.向话题发布信息:
使用命令rostopic pub -r 10 /cmd_vel geometry_msgs/Twist ...(Tab)
3.URDF集成gazebo:
3.1.创建功能包并导入相关依赖:
urdf xacro gazebo_ros gazebo_ros_control gazebo_plugins五个依赖。
3.2.编写URDF文件:
<robot name="mycar"><link name="base_link"><visual><geometry><box size="0.5 0.3 0.1"/></geometry><material name="yellow"><color rgba="0.5 0.3 0.0 0.5"/></material><origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/></visual><collision><geometry><box size="0.5 0.3 0.1"/></geometry><origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/></collision><inertial><origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/><mass value="2"/><inertia ixx="1" ixy="0" ixz="0" iyy="0" iyz="1" izz="1"/></inertial></link><gazebo reference="base_link"><material>Gazebo/Red</material></gazebo></robot>
这里要注意gazebo中颜色的设置需要使用gazebo
标签,reference
属性,前面的颜色设置在gazebo中不会生效。碰撞参数和惯性矩阵后续需要加深学习。
3.2.1.collision:
如果机器人link是标准的几何体形状,和link的 visual 属性设置一致即可。
3.2.2.inertial:
惯性矩阵的设置需要结合link的质量与外形参数动态生成,标准的球体、圆柱与立方体的惯性矩阵公式如下(已经封装为 xacro 实现):
球体惯性矩阵:
<!-- Macro for inertia matrix --><xacro:macro name="sphere_inertial_matrix" params="m r"><inertial><mass value="${m}" /><inertia ixx="${2*m*r*r/5}" ixy="0" ixz="0"iyy="${2*m*r*r/5}" iyz="0" izz="${2*m*r*r/5}" /></inertial></xacro:macro>
圆柱惯性矩阵:
<xacro:macro name="cylinder_inertial_matrix" params="m r h"><inertial><mass value="${m}" /><inertia ixx="${m*(3*r*r+h*h)/12}" ixy = "0" ixz = "0"iyy="${m*(3*r*r+h*h)/12}" iyz = "0"izz="${m*r*r/2}" /> </inertial></xacro:macro>
立方体惯性矩阵:
<xacro:macro name="Box_inertial_matrix" params="m l w h"><inertial><mass value="${m}" /><inertia ixx="${m*(h*h + l*l)/12}" ixy = "0" ixz = "0"iyy="${m*(w*w + l*l)/12}" iyz= "0"izz="${m*(w*w + h*h)/12}" /></inertial></xacro:macro>
需要注意的是,原则上,除了 base_footprint 外,机器人的每个刚体部分都需要设置惯性矩阵,且惯性矩阵必须经计算得出,如果随意定义刚体部分的惯性矩阵,那么可能会导致机器人在 Gazebo 中出现抖动,移动等现象。
3.2.3.颜色设置:
在 gazebo 中显示 link 的颜色,必须要使用指定的标签(在link外设置):
<gazebo reference="link节点名称"><material>Gazebo/Blue</material>
</gazebo>
PS:material 标签中,设置的值区分大小写,颜色可以设置为 Red Blue Green Black …
3.3.集成到launch文件并打开gazebo:
需要在launch文件中添加:
<launch><param name="robot_description" textfile="$(find urdf02_gazebo)/urdf/demo01_helloworld.urdf"/><include file="$(find gazebo_ros)/launch/empty_world.launch"/><node pkg="gazebo_ros" type="spawn_model" name="sp" args="-urdf -model car -param robot_description"/><!--显示机器人模型 -->
</launch>
分别在参数服务器中加载机器人模型、打开gazebo、将参数服务器中的模型载入gazebo。
未完待续…
这篇关于ROS URDF、rviz、gazebo(1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!