ROS2与Gazebo11入门教程-连接至ROS 2
说明:
- 介绍如何连接Gazebo和ROS
ROS2集成概述
Gazebo是一个独立的应用程序,可以独立于ROS或ROS 2使用。Gazebo与这两个ROS版本中任一版本的集成都是通过一组称为gazebo_ros_pkgs的软件包来完成和实现的。这些软件包在Gazebo的C++ API和传输系统与ROS 2的消息和服务之间架起了桥梁。
尚未将ROS 1中的所有功能都移植到ROS 2中。可以在这个议题上检查其移植进展情况
如果您对移植官方或您自己的自定义插件感兴趣,请查看ROS 2迁移贡献指南。
ROS 2的gazebo_ros_pkgs是一个元软件包,其中包含以下4个具体的软件包:
- 1. gazebo_dev软件包:为ROS发行版的默认Gazebo版本提供cmake配置。因此,下游软件包可以仅依赖于gazebo_dev软件包,而无需自己查找Gazebo。
- 2. gazebo_msgs软件包:用于提供ROS 2与Gazebo交互所使用的消息和服务的数据结构。
- 3. gazebo_ros软件包:提供方便的C++类和函数,其他插件可以使用这些类和函数,例如gazebo_ros :: Node,以及转换和测试实用程序。此外该软件包还提供一些有用的插件。
- 4. gazebo_plugins软件包:提供一系列Gazebo插件,用于将传感器和其他功能提供给ROS 2使用。例如,gazebo_ros_camera插件用于发布ROS 2图像,而gazebo_ros_diff_drive插件则提供了一个接口,用于通过ROS 2控制差分驱动机器人并对其进行自检。
目标版本
从ROS 2的Crystal Clemmys发行版开始,其gazebo_ros_pkgs就已发布了相应的debian软件包。
也可以使用相对于ROS 2主支的这个ros2 Gazebo分支,从源代码构建这些软件包。
当前,支持的Gazebo版本是Gazebo 9及更高版本。
与ROS1的区别
在从ROS 1迁移到ROS 2时,对gazebo_ros_pkgs软件包进行了一些更改和重构。
重构这些软件包的一些目标包括:
充分利用ROS 2的新功能,例如无主节点发现(即非集中式发现)。
删除重复Gazebo中已有功能的代码。
通过标准化通用功能(例如ROS命名空间、参数和话题重映射设置方法)来减少代码重复。
利用最新的SDFormat,Gazebo和Ignition API以及ROS 2的风格准则(style guidelines)和代码检查工具(linters)对代码库进行现代化改造。
为所有移植功能增加测试和演示。
可以在gazebo_ros_pkgs Wiki上找到每个插件的详细迁移指南。请阅读以下几个常见的重点内容。
Init(初始化)
ROS 1集成要求使用gazebo_ros_api_plugin系统插件启动Gazebo,这会初始化ROS。
而ROS 2没有这样的要求。无需任何插件即可启动Gazebo,而且可以在Gazebo运行时添加启用ROS 2的插件。
Node(节点)
在ROS 1中,每个插件通常有一个或多个ros::NodeHandle实例,以与ROS进行交互。
而在ROS 2中,插件使用的是gazebo_ros :: Node,它允许每个插件在ROS计算图中作为自己的节点存在,且带有自己的参数、命名空间、日志记录器等。插件也无需担心旋转节点或保留回调队列,gazebo_ros会在内部处理所有这些事务。
SDF解析
Gazebo ROS插件通常希望通过SDF设置多种配置,而且在ROS 1实现中,插件上有很多重复代码来解析相同的内容,有时还遵循松散的约定。
而在ROS 2中,像命名空间、ROS参数和话题重映射规则这样的常见配置都是由gazebo_ros::Node解析的,因此无需插件每次都重新实现它们。
gazebo_ros_api_plugin
在ROS 1中,gazebo_ros_api_plugin是一个大型插件,捆绑提供了大量功能,给用户提供很少灵活选择加入/退出某些功能的余地。
而在ROS 2中,该插件被拆分为多个更小、功能更集中的插件。
可以在ROS 2迁移:gazebo_ros_api_plugin页面上阅读其详细信息。
参考:
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号