ROS理论与实践(以移动机器人为例)连载(五) ——构建机器人仿真平台

本文介绍了如何使用ROS构建机器人仿真平台,重点讲解了通过xacro优化URDF模型,详细步骤包括添加惯性参数、碰撞属性、gazebo标签和传动装置,以及配置gazebo控制器插件。此外,还讨论了创建物理仿真环境的两种方法,并探讨了摄像头、RGB-D摄像头和激光雷达的仿真及应用。
摘要由CSDN通过智能技术生成

在这里插入图片描述
O(∩_∩)O哈哈哈~ 特想放张伟!我是什么颜色???



参考功能包链接

https://github.com/XFFer/ROS_Resource

1. 优化物理仿真模型

使用xacro文件优化URDF模型

连载(四) 中我们使用URDF建模遇到了很多问题,比如多个轮子需要重复书写代码;不能进行参数计算,各个link的位置需要逐个输入参数。
在这里插入图片描述

URDF模型的进化版本——xacro模型文件

官方Wiki地址跳转

  • 精简模型代码
    • 创建宏定义
    • 文件包含
  • 提供可编程接口
    • 常量
    • 变量
    • 数学计算
    • 条件语句
① 常量的定义与使用

常量定义

<xacro:property name="M_PI" value="3.14159" />

举例:

<!-- PROPERTY LIST -->
<xacro:property name="M_PI" value="3.1415926" />
<xacro:property name="base_radius" value="0.20" />
<xacro:property name="base_length" value="0.16" />

<xacro:property name="wheel_radius" value="0.06" />
<xacro:property name="wheel_length" value="0.025" />
<xacro:property name="wheel_joint_y" value="0.19" />
<xacro:property name="wheel_joint_z" value="0.05" />

<xacro:property name="caster_radius" value="0.015" />
<xacro:property name="caster_joint_x" value="0.18" />

常量使用

<origin xyz="0 0 0" rpy="${M_PI/2} 0 0"/>

举例:

<joint name="base_footprint_joint" type="fixed">
	<origin xyz="0 0 ${base_length/2 + caster_radius*2}" rpy="0 0 0" />
	<parent link="base_footprint" />
	<child link="base_link" />
</joint>

<link name="base_link">
	<visual>
		<origin xyz="0 0 0" rpy="0 0 0" />
		<geometry>
			<cylinder length="${base_length}" radius="${base_radius}" />
		</geometry>
		<material name="yellow" />
	</visual>
</link>
② 数学计算

所有数学运算都会转换成浮点数进行,以保证运算精度。

<origin xyz="0 ${(motor_length+wheel_length)/2} 0" rpy="0 0 0" />

举例:

<joint name="base_footprint_joint" type="fixed">
	<origin xyz="0 0 ${base_length/2 + caster_radius*2}" rpy="0 0 0" />
	<parent link="base_footprint" />
	<child link="base_link" />
</joint>
③ 宏

宏定义

类似于函数,可以实现创建一个轮子的模型,通过再次调用修改参数,创建相同形状,多个轮子模型。

<xacro:macro name="name" params="A B C">
......
</xacro:macro>

举例:

<!--Macro for robot wheel-->
<xacro:macro name="wheel" param="prefix reflect">
	<joint name="${prefix}_wheel_joint" type="continuous">
		<origin xyz="0 ${reflect*wheel_joint_y} ${-wheel_joint_z}" rpy="0 0 0" />
		<parent link="base_link" />
		<child link="${prefix}_wheel_link" />
		<axis xyz="0 1 0" />
	</joint>

	<link name="${prefix}_wheel_link">
		<visual>
			<origin 
  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值