首页 关于
树枝想去撕裂天空 / 却只戳了几个微小的窟窿 / 它透出天外的光亮 / 人们把它叫做月亮和星星

Gazebo仿真

Gazebo是一个3D动力学仿真器,能够准确的高效的模拟工作在复杂室内和室外环境的机器人。最早是在2002年,由南加州大学的Andrew Howard和他的学生Nate Koenig开发的。 在接下来的几年中Nate在完成他的PhD学位的同时开发着Gazebo。在2009年,Willow公司的一个高级研究工程师JohnHsu,把ROS和PR2与Gazebo整合在一起。自此Gazebo就成为了ROS社区中的一个基本工具。 在2011年的春天,Willow Garage公司开始为Gazebo的开发提供商业支持。在2012年,开源机器人联盟(Open Source Robotics Foundation, OSRF)从Willow Garage公司脱离出来,同时接管了Gazebo项目。

在介绍ROS系统的时候,我们已经简单的接触过Gazebo了。 主要是对Gazebo官方教程中的Beginner和Intermediate部分的翻译和整理, 旨在介绍Gazebo的各种特性,和基本的使用方法。 我们介绍了Gazebo的GUI界面,并用之创建了一个带有深度摄像头的小车。 还用SDF文件对激光雷达Velodyne HDL-32 LiDAR建模, 并为之添加了一个插件可以控制雷达的扫描速度。 然后介绍了如何通过ROS开启Gazebo的世界, 并通过gazebo_ros_control将一个URDF格式描述的机器人GRobot按在Gazebo的世界里摩擦。

本系列文章希望通过编写各种不同的demo来深入Gazebo仿真的各个细节。由于Gazebo的更新比较快,而伴随着ROS安装的版本都比较老。 所以,我们选择源码编译Gazebo 11。 并专门创建了一个Git项目用于维护我们的各个demo, 关于该项目的组织方式参见demo仓库。实际上,Gazebo是可以完全脱离ROS进行仿真的, 一开始demo仓库也是按照这个理念进行设计的。但是因为真香的原因,从v0.0.3版本开始切换到ROS的catkin编译环境下。

第一部分:激光雷达仿真

本部分中,我们将从Gazebo官方提供的Velodyne仿真插件的教程开始,研究如何获取雷达的仿真数据并通过ROS消息发布出去。 了解Gazebo提供的PID控制器,提供调参接口。探索Gazebo与ROS的时钟体系,最后输出激光点云。

从Velodyne的仿真插件开始 本文将在机器人操作系统之ROS系列文章中介绍的关于Velodyne激光雷达插件的基础上进一步完善,提供输出ROS系统中LaserScan消息的功能。 并了解如何获取仿真时间、关节状态,发布tf坐标变换消息。 源码tag:v0.0.2
PID调参与自定义消息 本文中我们将绘制出雷达转速的阶跃响应曲线,研究PID参数对于系统的影响。提供ROS服务和Gazebo订阅模式两种调参接口, 研究如何在Gazebo插件中提供ROS服务,如何通过protobuf自定义Gazebo的消息类型。 源码tag:v0.0.3
Gazebo的系统插件与ROS的仿真时间 本文中我们将简单的了解仿真系统中所涉及到的时间概念,以及如何调整Gazebo中系统中的仿真时间与真实时间的关系。为了统一Gazebo和ROS系统的时间体系, 我们编写了一个Gazebo的系统插件。 源码tag:v0.0.4
输出激光点云 本文比较水,只是提高了雷达的数据输出频率,修改了回调函数OnLaserScanMsg,让他累积一段时间的扫描数据后再以点云的形式输出。 源码tag:v0.0.5

上述的四篇文章都还只是Gazebo官方教程的进一步扩展,旨在了解Gazebo与ROS之间是如何对接的。如果我们只是想要有一个激光雷达来完成建图导航的任务, 那么上述的demo就显得太麻烦了。实际上Gazebo原生提供的ray传感器是支持多线激光的, 而且我还在bitbucket上找到了一个通过URDF文件描述的Velodyne Simulator, 它就是直接使用ray进行多线激光仿真的。

Velodyne仿真插件的新生 重构之后的demo使用Gazebo原生的ray传感器来模拟多线激光雷达。不再需要控制雷达转动,所以将模型文件中唯一的joint改为了fixed类型, 并从代码中删除了所有关于调整雷达转速相关的代码。 源码tag:v0.0.6

第二部分:差速轮小车仿真

本部分中,我们将为Gazebo官方教程提供的差速小车编写插件,订阅和发布ROS消息。 使得我们可以像turtlebot那样通过键盘控制仿真世界中的小车,并提供里程计估计小车的位姿。

差速小车DiffCart 介绍差速驱动的基本原理,根据官方教程创建一个差速驱动的小车DiffCart,并为之编写控制插件。 复用了turtlebot的键盘遥控器,可以方便的控制DiffCart在仿真世界中运动。 此外我们对运行demo的脚本进行了优化,可以一键运行demo了。 源码tag:v0.1.0
差速小车的里程计 分析里程计的工作原理,介绍如何根据左右轮的转速估计DiffCart的线速度和角速度,进而给出机器人位姿的粗略估计。 扩展DiffCart的插件,为之提供里程计,并发布tf坐标变换,可以通过rviz查看机器人运动。 源码tag:v0.1.1
差速小车的IMU 分析Gazebo中用于描述IMU传感器的SDF标签,并扩展DiffCart的插件,将Gazebo中的IMU更新消息转换成ROS的消息发布出去。 源码tag:v0.1.2
差速小车的Cartographer建图 现在,我们要给DiffCart装上一个激光雷达,通过Cartographer进行建图。本文提供了使用多线激光进行3D建图和单线激光进行2D建图的demo。 源码tag:v0.1.3

第三部分:一阶倒立摆仿真

一阶倒立摆模型 源码tag:v0.2.0

附录

Gazebo的Topics Gazebo也使用了和ROS类似的订阅者和发布者模式进行通信,它们的使用套路基本都一样。都是构建节点、通过节点创建发布器或者接收器、通过回调函数来处理消息。 demo
Model插件 简介。



Copyright @ 高乙超. All Rights Reserved. 京ICP备16033081号-1