第六章-ROS机器人系统仿真
学习来源:
- 官方文档:http://wiki.ros.org/
- Introduction · Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程
- 《机器人学导论》
本文仅作学习笔记和回顾使用
学习目标
-
了解机器人系统仿真的原理和应用场景
-
urdf语法、xacro语法优化
-
camera、laser的仿真实现
-
urdf、rviz、gazebo集成使用,完成机器人系统的全套仿真
正文
- urdf+rviz
- urdf语法
- xacro优化
- urdf+gazebo
- 实操案例
机器人一般价格不菲,为了降低机器人学习、调试成本,在ROS中提供了系统的机器人仿真实现,通过仿真,可以实现大部分需求
惯性矩阵
- 参考:《机器人学导论》
- 推导
机器人仿真
定义
通过计算机对实体机器人系统进行模拟的技术,在 ROS 中,仿真实现涉及的内容主要有三:对机器人建模(URDF)、创建仿真环境(Gazebo)以及感知环境(Rviz)等系统性实现
作用
-
仿真优势
- 低成本
- 高效
- 高安全性
-
仿真缺陷
-
仿真器所使用的物理引擎目前还不能够完全精确模拟真实世界的物理情况
-
仿真器构建的是关节驱动器(电机&齿轮箱)、传感器与信号通信的绝对理想情况,目前不支持模拟实际硬件缺陷或者一些临界状态等情形
-
三个组件
URDF
URDF是统一(标准化)机器人描述格式,可以以一种 XML 的方式描述机器人的部分结构,比如底盘、摄像头、激光雷达、机械臂以及不同关节的自由度…,该文件可以被 C++ 内置的解释器转换成可视化的机器人模型,是 ROS 中实现机器人仿真的重要组件
rviz
RViz 是ROS的三维可视化工具。它的主要目的是以三维方式显示ROS消息,可以将 数据进行可视化表达。例如:可以显示机器人模型,可以无需编程就能表达激光测距仪(LRF)传感器中的传感 器到障碍物的距离,RealSense、Kinect或Xtion等三维距离传感器的点云数据(PCD, Point Cloud Data),从相机获取的图像值等
gazebo
Gazebo是一款3D动态模拟器,用于显示机器人模型并创建仿真环境,能够在复杂的室内和室外环境中准确有效地模拟机器人。与游戏引擎提供高保真度的视觉模拟类似,Gazebo提供高保真度的物理模拟,其提供一整套传感器模型,以及对用户和程序非常友好的交互方式。
urdf+rviz
1.创建功能包,导入依赖
新建几个目录:
-
urdf
: 存储 urdf 文件的目录 -
meshes
:机器人模型渲染文件(暂不使用) -
config
: 配置文件 -
launch
: 存储 launch 启动文件
2.编写 URDF 文件
3.在 launch 文件中集成 URDF 与 Rviz
- 将urdf文件导入参数服务器中
- 启动rviz
<launch>
<!-- 设置参数 -->
<param name="robot_description" textfile="$(find 包名)/urdf/urdf/urdf01_HelloWorld.urdf" />
<!-- 启动 rviz -->
<node pkg="rviz" type="rviz" name="rviz" />
</launch>
4.在 Rviz 中显示机器人模型
- fixed farme 换成底盘坐标系
- add robotmodel
5.优化 rviz 启动
<launch>
<param name="robot_description" textfile="$(find 包名)/urdf/urdf/urdf01_HelloWorld.urdf" />
<node pkg="rviz" type="rviz" name="rviz" args="-d $(find 报名)/config/rviz/show_mycar.rviz" />
</launch>
urdf语法
- robot 根标签,类似于 launch文件中的launch标签
- link 连杆标签
- joint 关节标签
- gazebo 集成gazebo需要使用的标签
实例说明:
<robot name="robot">
<link name="base_link">
<visual>
<geometry>
<cylinder radius="${base_link_radius}" length="${base_link_length}" />
</geometry