Gazebo和ROS2的使用说明(部分翻译)

举报
zhangrelay 发表于 2021/07/15 03:42:21 2021/07/15
【摘要】 用于与Gazebo通讯的ROS 2包的集合在名为gazebo_ros_pkgs的meta包中。有关背景信息,请参阅ROS2概述,然后再继续。这些软件包支持ROS 2 Crystal、Dashing和Gazebo 9,可以从debian软件包或源代码安装。 Dolly是虚拟机器人小车,可作为Gazebo和ROS 2的实用介绍。机器人操作系统的最新版本ROS 2提供了熟悉的工具...

用于与Gazebo通讯的ROS 2包的集合在名为gazebo_ros_pkgs的meta包中。有关背景信息,请参阅ROS2概述,然后再继续。这些软件包支持ROS 2 Crystal、Dashing和Gazebo 9,可以从debian软件包或源代码安装。

  • Dolly是虚拟机器人小车,可作为Gazebo和ROS 2的实用介绍。
  • 机器人操作系统的最新版本ROS 2提供了熟悉的工具和功能,同时扩展到新的用例。
  • Gazebo是一个功能强大的机器人模拟器,供工业界和学术界使用,可以计算物理,生成传感器数据并提供方便的界面。
  • 开源软件正在降低进入门槛并加快机器人技术的进步。
  • 世界各地的机器人专家正在利用Gazebo和ROS的应用,从人形机器人、无人机、物流机器人和自动驾驶汽车。

 


参考文献:

  1. http://gazebosim.org/tutorials?tut=ros2_installing
  2. https://github.com/chapulina/dolly

介绍

用于与Gazebo通信的ROS 2包的集合包含在名为gazebo_ros_pkgs的meta包中。有关背景信息,请参阅ROS2概述,然后再继续。这些软件包支持ROS 2 Crystal和Gazebo 9,可以从debian软件包或源代码安装。

预备条件

了解ROS 2的基本概念,并学习了一些 ROS 2教程

安装ROS 2

可以通过二进制包安装或源安装来安装ROS2,请参阅ROS 2安装页面。目前稳定的分布是Crystal、Dashing

提示:不要忘记按照ROS安装页面上的说明更新脚本。根据安装方法,确切的命令会有所不同(setup.bash)

如:source /opt/ros/dashing/setup.bash

安装Gazebo软件

从源代码或预制软件包安装Gazebo。请参阅安装Gazebo

安装Gazebo 9。如果从源代码安装,请确保编译 gazebo9发行版目前ROS2只支持Gazebo9+版本。

提示:如果在查找插件和其他资源时遇到困难,可能需要获取Gazebo的安装文件。例如:。source /usr/share/gazebo/setup.sh

安装gazebo_ros_pkgs

按照说明从debian软件包安装,或从源代码安装说明。

从debian软件包安装(在Ubuntu上)

假设已经安装了一些Dashing debian软件包,请gazebo_ros_pkgs按如下方式安装 :

sudo apt install ros-dashing-gazebo-ros-pkgs
  

从源代码安装(在Ubuntu上)

如果您是一名活跃的开发人员,可以为代码库做出贡献,建议您安装源代码,因为它可以提供对工作流程的更多访问和控制。

提示:这些说明需要使用colcon构建工具,这是ROS 2中使用的标准工具。

需要gazebo_ros_pkgs根据您正在使用的ROS 2版本选择对应发行版。目前支持的发行版是:

  • crystal+dashing:适用于Crystal debians或Crystal、Dashing的 ros2.repos
  • ros2:指向下一个未发布的ROS 2龟,目前是Dashing。它适用于主 ros2.repos

以下设置假定使用ros2分支安装gazebo_ros_pkgs

  1. 确保git安装在您的Ubuntu机器上:

    sudo apt install git
        
  2. 为colcon工作区创建一个目录并移入其中:

    mkdir -p ~/ws/src
        
  3. 复制此文件,获取gazebo_ros_pkgs所需的其他包:

    
         
    1. cd ~/ws
    2. wget https://bitbucket.org/api/2.0/snippets/chapulina/geRKyA/f02dcd15c2c3b83b2d6aac00afe281162800da74/files/ros2.yaml

    注意:version yaml文件中的标记表示我们正在检查特定存储库的发行版,例如 版本:ros2检出ros2发行版。

  4. 将包装到src目录中

    
         
    1. cd ~/ws
    2. vcs import src < ros2.yaml
  5. 安装所有依赖项:

    
         
    1. cd ~/ws
    2. rosdep install --from-paths src --ignore-src -r -y
  6. 然后编译所有包:

    
         
    1. cd ~/ws
    2. colcon build --symlink-install

    注意:在编译之前,确保正确获取ROS 2环境。

  7. 如果在编译过程中遇到任何问题,请务必在answers.gazebosim.org上寻求帮助 。

  8. 确保打开的每个新终端获取此工作区的安装设置:

    source ~/ws/install/setup.bash
        

    提示:可以通过运行此命令为每个新终端自动获取此信息:echo "source ~/ws/install/setup.bash" >> ~/.bashrc

测试Gazebo和ROS 2集成

假设您的ROS 2和Gazebo环境已经正确设置和构建,您现在应该能够加载包含ROS 2插件的Gazebo世界,并在运行时插入具有ROS 2插件的模型。

Gazebo ROS软件包为您提供了几个演示世界,让您可以快速了解插件。可以在此处找到演示世界 ,默认安装在 。/opt/ros/<distro>/share/gazebo_plugins/worlds/

每个世界文件都附带顶部的说明,其中包含一些示例命令,您可以运行这些命令来测试其功能,请务必检查出来!

现在尝试加载其中一个!

  1. 打开一个新终端

  2. 安装ROS 2时按照说明获取ROS 2。

  3. 确保安装了一些核心工具:

    sudo apt install ros-dashing-ros-core ros-dashing-geometry2
        
  4. 如果gazebo_ros_pkgs从源安装,请使用工作区:

    . ~/ws/install/setup.bash
        
  5. 使用Gazebo加载阿克曼汽车模型:

    gazebo --verbose /opt/ros/dashing/share/gazebo_plugins/worlds/gazebo_ros_ackermann_drive_demo.world
        
  6. Gazebo GUI应该带有一个简单的车辆:

  1. 在新终端(这是第二个)上,运行以下命令以查看world文件。

    gedit /opt/ros/dashing/share/gazebo_plugins/worlds/gazebo_ros_ackermann_drive_demo.world
        
  2. 看看顶部的块如何有一些示例命令?打开第三个终端,再次,导入ROS 2,gazebo_ros_pkgs如上所述。

  3. 然后运行其中一个命令,例如:

    ros2 topic pub /demo/cmd_demo geometry_msgs/Twist '{linear: {x: 0.2}}' -1
        
  4. 或者使用图形化工具: rqt

     

  5. 你会看到车辆转向前进:


多莉机器人

它是一只绵羊,它是一个小车,它是一个跟随机器人。克隆多莉吧!

用于启动Dolly演示的软件包,使用Gazebo和ROS 2。

多莉已通过测试:

  • ROS 2版本:
    • ROS水晶:crystal分支
    • ROS Dashing:master分支
  • 操作系统:
    • Ubuntu Bionic
    • OSX Sierra(谢谢,@ Karsten1987!)

安装

安装Ubuntu Bionic的说明。

  1. 按照此处的说明安装相应的ROS 2版本。

  2. 安装gazebo_ros_pkgs,也安装Gazebo。替换<distro>crystaldashing

     sudo apt install ros-<distro>-gazebo-ros-pkgs
    
       
  3. 克隆多莉:

    
        
    1. mkdir -p ~/ws/src
    2. cd ~/ws/src
    3. git clone https://github.com/chapulina/dolly
  4. 编译和安装:

    
        
    1. cd ~/ws
    2. colcon build

运行

  1. 设置环境变量(顺序很重要):

    
        
    1. . /usr/share/gazebo/setup.sh
    2. . ~/ws/install/setup.bash
  2. 在城市中启动Dolly(这需要一些时间来下载模型):

     ros2 launch dolly_gazebo dolly.launch.py world:=dolly_city.world
    
       
  3. 在一个空无的世界中启动Dolly:

     ros2 launch dolly_gazebo dolly.launch.py world:=dolly_empty.world
    
       

功能包

此存储库包含3个包:

  • dolly:Metapackage,提供所有其他包。
  • dolly_follow:为节点提供跟随逻辑。
  • dolly_gazebo:机器人模型,模拟世界和启动脚本。

将来完善

  • 让Doliz的模型可用于RViz

多莉是一只机器人羊。多莉随身携带你的重物。Dolly有两个电动轮,可以让机器人转向,还有一个激光扫描仪可以检测前方的物体。它还有一些代码可以在激光扫描中找到最近的物体(可能是你)并控制车轮跟随它。

莉不是一个真正的机器人。这是一个简单的机器人模拟,作为机器人专家在世界各地使用的一些强大的开源工具的介绍而创建。尽管多莉本身非常简单,但它与许多更复杂的机器人共享其大部分代码,例如自动驾驶汽车,仓库机器人,工业武器,四轴飞行器,人形机器人,甚至是国际空间站中的三个机器人。所有这些软件的共同点是ROS,即  机器人操作系统。确切地说,当今天听到“ROS”这个词时,多莉并没有像大多数人想象的那样运行。多莉实际上正在运行最新一代的ROS,称为ROS 2!

与之前的ROS 1一样,ROS 2是用于机器人应用的开源软件开发套件。ROS 2的开发由Open Robotics公司领导  ,该公司还负责维护Dolly生活的机器人模拟器,称为  Gazebo,以及其他开源机器人软件和硬件。这些项目是在BSD  和  Apache 2.0等许可的开源许可下发布的  ,这使得它们对学术界和行业都具有吸引力。

机器人软件

“机器人”这个词的定义根据你的要求而有所不同,但运行ROS并在Gazebo中模拟的机器人的关键特征是  驱动。所以没有聊天机器人或垃圾邮件; 我们谈论的是机器人能够与他们的环境进行交互,移动自己甚至是其他物体。而且他们也不是盲目地移动玩具; 他们配备了传感器,可以观察周围世界的变化。将所有这些结合在一起,他们有逻辑理解这些观察结果,以便做出明智的决定,决定接下来完成特定任务的动作。这被称为感觉 - 思考 - 行为周期,而多莉的软件被组织起来以反映这三个部分。

ROS 2正在开发中,其目标是为工业界和学术界提供标准软件平台,从研究和原型设计到部署和生产将为他们提供支持。ROS 2建立在ROS 1的成功基础之上,ROS 1目前已在世界各地的各种机器人应用中使用。这种转变的一个重要部分是维护核心ROS概念和工具,使ROS在机器人社区中取得如此成功。这些众所周知的概念之一是“ 节点”,“这是一个负责特定任务的计算单位。每个Dolly的sense-think-act循环都被映射到一个节点。“激光”节点感知世界,“跟随”节点处理该数据以找到前方最近的点并生成具有移动方向的命令,并且“差异驱动”节点按指令移动轮子(所谓因为多莉是差速轮式机器人)。随着Dolly移动,其激光读数发生变化,周期再次开始。Dolly的软件只有三个节点以简化,但大型机器人应用程序可能有数百个节点协同工作,每个节点负责一个离散的明确定义的任务。

ROS中最基本的通信方法是通过称为“ 主题 ”的通道使用多对多发布者 - 订阅者机制。激光节点在“扫描”主题上发布扫描,跟随节点订阅; 反过来,follow节点在diffd驱动节点订阅的“cmds”主题上发布移动命令。Dolly只使用主题,但除了这种单向通信之外,ROS还提供了一种称为“服务”的请求 - 响应机制,以及用于触发更长行为的“行动”。

在使用这些通信模式时,ROS开发人员倾向于尽可能使用标准化消息,这样便于在各种项目之间共享节点。在这种分布式体系结构中,节点不关心他们正在与哪些其他节点通信,他们只关心正在使用哪个主题,服务或操作。这意味着,如果有一天有人决定移除Dolly的轮子并将它们交换为螺旋桨将其变成飞羊,则他们将不需要触摸激光器或跟随节点。他们只需要将diff-drive节点交换为其他能够以与机器人的新主体相匹配的方式转换cmds主题上的移动命令的东西。

代码重用的简易性是ROS最大的优势之一,因为它允许开发人员尽可能地利用彼此的工作。通过在ROS生态系统中构建现有软件,开发人员可以专注于其特定应用程序的独特方面。实际上,实现Dolly只需要编写  跟随节点,该节点少于100行代码。激光和差分驱动节点由gazebo_ros_pkgs提供 ,一个标准的ROS包,它在模拟特定逻辑和非特定逻辑之间建立桥梁。当Dolly准备好成为一个物理机器人时,这些节点将由特定于硬件的驱动程序和控制器代替,但是后续节点可以保持相同,因为它发布和订阅标准消息。但是你可以想象,跟随节点并不是最亮的机器人逻辑。事实上,多莉无法从树上告诉一个人。在实际应用程序中,开发人员将利用社区提供的其他功能,例如  导航堆栈,这将允许Dolly在世界范围内自主移动。

上面提到的所有通信模式都已经从ROS 1迁移到ROS 2并且在此过程中得到了改进。虽然ROS 1使用自定义通信层,但ROS 2构建在DDS之上  。DDS是在航空和核电等关键任务应用中得到验证的行业标准。您可以 在InfoQ上阅读本文中有关DDS集成的更多详细信息  。

除了消息传递系统,ROS 2还提供了强大的开发人员工具。例如,  RViz  是ROS主题的可视化工具,在应用程序开发和调试期间非常宝贵。它有一个3D场景,来自应用程序任何部分的数据可以一起显示,例如点云和坐标框架。RViz还提供控制界面,例如可以拖动以移动真实机器人的3D标记。 RQT 是另一个方便的图形工具,它允许开发人员快速组装小部件以与其机器人应用程序的任何方面进行交互,无论是否模拟。下图显示了Doliz在RViz中的激光扫描以及Gazebo的视图,显示了模拟中的可视化。RViz将以相同的方式显示扫描,无论它们是模拟还是来自硬件。

模拟

多莉住在Gazebo,这是一个机器人模拟器,可以执行物理计算,生成合成传感器数据并提供方便的界面。界面范围从图形工具到C ++ API,允许用户和开发人员更快地实现他们的目标。Gazebo的目的是成为物理机器人的最佳软件替代品。Gazebo的一些用途包括新机器人的原型设计,新算法和行为的开发,持续集成测试和教育。

在模拟中,物理引擎处理Dolly如何与环境交互。这包括诸如重力将Dolly拉到地面,车轮和人行道之间的接触以及施加在车轮上的扭矩等行为。Gazebo没有实现自己的物理引擎; 相反,它提供了一个抽象层,允许集成多个引擎。这样,开发人员一次描述和编程他们的机器人,然后在运行时选择最合适的物理引擎。默认情况下,Gazebo使用  Open Dynamics Engine(ODE),但它也支持  BulletDART  和  Simbody

Dolly配备了单个传感器,激光扫描仪,但Gazebo支持十几种传感器,如彩色和深度相机,IMU和GPS。开发人员还可以通过C ++ API创建新的传感器。像摄像机和激光扫描仪这样的传感器使用  Ogre3D  渲染引擎生成世界图像,而IMU和声纳等传感器则利用物理引擎。模拟传感器的缺点是,与物理传感器相比,它们往往有点过于完美。因此,传感器API的一个重要方面是能够向生成的数据添加各种类型的噪声并且还会干扰它们的更新速率。

Gazebo具有丰富的图形界面,可帮助用户构建,内省并与其模拟进行交互。例如,Dolly的城市环境是使用eRuby  脚本,UI的3D视图和小部件的组合构建的  ,这些小部件提供有关场景中每个模型的详细信息。在模拟运行时,3D视图也是一种可视化激光扫描的方便方法,也可以内省各种其他方面,如关节位置,质心,甚至惯性矩。在迭代算法时,这种模拟能够提供场景的空中X射线视图的能力非常有用,并且在现实世界中很难(如果不是不可能的话)。

Gazebo还允许开发人员与他们的机器人进行交互,就像在现实世界中一样。理论上,你可以戴上一些VR护目镜并使用控制器来踢多莉像一些机器人专家那样喜欢他们真正的机器人。请注意,这里绝对不鼓励滥用机器人。相反,您可以使用稍微更精细的方法,例如推动机器人检查其恢复行为的3D箭头。它也可以移动人类,添加另一个机器人,改变城市的布局......任何有助于您的特定项目的开发。

使用模拟描述格式描述Gazebo中的世界  。SDF是一种XML格式,允许指定模拟的各个方面,从Dolly's waggy尾巴上的弹簧到太阳光的颜色。用户可以将在线数据库中的3D模型与他们自己的自定义模型相结合,为他们的机器人创建各种环境。实际上,Dolly周围的整个城市环境都是由Ignition Fuel  在线数据库中的免费模型组成  。Dolly本身就是一个自定义模型,它的所有细节都可以通过UI或直接在其SDF文件中进行调整和改进。

Dolly的例子是Gazebo可以做的最简单的模拟之一,但网上有各种精心设计的例子。基于模拟的比赛,如  虚拟机器人挑战赛,  太空机器人挑战赛  和即将举行的  地下挑战赛等  都是很好的例子。一些机器人制造商也在免费分发他们机器人的Gazebo模拟,例如  Fetch Robotics的仓库机器人和  Parrot的无人机。 

为了解决新的使用案例,Open Robotics团队正积极致力于Gazebo的下一代产品,即  Ignition。这种重构将Gazebo打造成更小,更可重用的库,具有物理和渲染引擎的抽象层,支持运行分布在云中的机器上的大型模拟,以及使用现代GUI(QtQuick)和传输(ZeroMQ)库。

克隆多莉!

Gazebo和ROS 2现在只需几次击键即可。您可以  克隆Dolly并按照说明启动并运行一个简单的示例。还有关于  ROS索引  和  Gazebo教程  的各种教程,涵盖了各种各样的功能和用例。您可以在社区中找到有关ROS Discourse  和  Gazebo社区的更多深入讨论  ,以及有关ROS Answers  和  Gazebo Answers的技术问题的  答案。最后,但并非最不重要的是,观看ROS开发者年度会议ROSCon的视频,并确保为澳门发生的ROSCon 2019预留座位  。

关于作者

Louise Poubel  是Open Robotics的软件工程师  ,致力于机器人技术的免费和开源工具,如机器人模拟器Gazebo和机器人操作系统(ROS)。


 

文章来源: zhangrelay.blog.csdn.net,作者:zhangrelay,版权归原作者所有,如需转载,请联系作者。

原文链接:zhangrelay.blog.csdn.net/article/details/100547011

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。