Gazebo Harmonic gz-harmonic 和 ROS2 Jazzy 注意事项

news2024/11/16 0:03:02

激光显示

点呈现

射线呈现 

 

rviz2


新旧版本并存的混乱

本教程旨在为在Ubuntu Jammy(最新支持Gazebo Classic包的Ubuntu版本)上运行Gazebo Classic(如Gazebo 11)的用户提供指导,这些用户计划将其代码迁移到新的Gazebo版本(如Fortress, Garden, 或Harmonic)。教程的目的是展示如何在同一台机器上同时安装Gazebo 11和新版本的Gazebo,以便用户可以并行运行旧项目并探索新版本的特性。

然而,需要注意的是,由于软件版本的快速迭代,本教程中详细介绍的Gazebo Classic版本(如Gazebo 11)可能不会在未来得到更新或支持。因此,推荐用户考虑将代码迁移到新的Gazebo版本作为长期解决方案。

关键步骤和注意事项包括

  1. 确认Ubuntu版本:确保你的Ubuntu系统是Jammy(22.04)或兼容版本。

  2. 安装Gazebo 11:由于Gazebo 11可能不在Ubuntu Jammy的默认仓库中,你可能需要从旧版本的Ubuntu仓库、Gazebo的PPA或其他源安装。这通常涉及添加额外的软件源和依赖项。

  3. 安装新版本的Gazebo:通过ROS(如果你使用的是ROS)或直接从Ubuntu的apt仓库(如果可用)安装新版本的Gazebo。确保选择与你的ROS版本兼容的Gazebo版本。

  4. 管理版本冲突:同时安装两个版本的Gazebo可能会导致版本冲突,特别是当它们共享相同的依赖项时。你可能需要解决这些冲突,或者确保每个版本的Gazebo都使用其自己的依赖项集。

  5. 设置环境变量:为了能够在需要时轻松切换到不同版本的Gazebo,你可能需要设置环境变量来指定默认使用的Gazebo版本。

  6. 查阅文档和社区支持:由于Gazebo和ROS都是不断发展的项目,因此强烈建议查阅最新的官方文档和社区支持资源以获取帮助和更新信息。

最后,虽然本教程提供了同时安装Gazebo 11和新版本Gazebo的指导,但用户应该意识到迁移到新版本的Gazebo是长期维护和支持的更好选择。


如上可以看到各类Gazebo版本的不完全兼容与接口变化,详细可参考:

Gazebo与ROS1、ROS2接口变迁-2005-2024--CSDN博客


简洁的流程

在将使用Gazebo Classic的ROS 2项目迁移到使用新Gazebo(如Harmonic)时,有几个关键的概念性差异需要注意。这些差异主要体现在ROS 2项目与Gazebo交互的方式上。以前,Gazebo Classic通过gazebo_ros_pkgs提供了一套插件,这些插件直接在Gazebo Classic中加载并作为仿真的一部分运行,以提供ROS和Gazebo Classic之间的接口。然而,在新的Gazebo版本中,这一机制已被ros_gz取代,后者主要用作ROS和gz-transport主题之间的桥梁。

本教程旨在指导用户将使用gazebo_ros_pkgs的ROS 2包迁移到使用ros_gz。我们以turtlebot3_simulations包为例,展示迁移过程的步骤。在这个过程中,我们需要注意一些关键变化,并可能需要对项目的配置、启动文件等进行相应的调整。

在开始迁移之前,建议用户按照PC设置指南安装必要的先决条件,以便能够模拟Turtlebot3。这一步骤会安装一些额外的包,如Nav2和Cartographer,这些包在后续教程中可能会用到,因此不应跳过。

完成安装后,用户可以开始修改项目文件,将原来的gazebo_ros_pkgs引用替换为ros_gz,并更新启动文件和其他配置文件以适配新的Gazebo版本。此外,由于Gazebo版本之间可能存在API变更和功能差异,用户可能还需要对仿真场景、机器人模型或传感器配置等进行调整。

总的来说,迁移过程可能涉及多方面的更改,并且需要对Gazebo和ROS 2的新特性有一定的了解。然而,通过遵循本教程的指导,用户可以成功地将他们的ROS 2项目迁移到使用新Gazebo版本的平台,并继续利用Gazebo的强大功能进行机器人仿真和测试。

需要完整的humble-devel的turtlebot3功能包。

总结

在将ROS 2项目从使用Gazebo Classic迁移到使用新Gazebo(如通过ros_gz桥接)时,我们需要进行一系列关键的修改。这些修改涵盖了项目配置、启动文件、世界和模型文件以及ROS话题的桥接。以下是具体需要进行的更改概述:

  1. 修改package.xmlCMakeLists.txt文件
    • 需要将原来依赖于gazebogazebo_ros_pkgs等包的引用替换为ros_gz及其相关包。这包括在package.xml中添加或更新依赖项,以及在CMakeLists.txt中调整find_package和target_link_libraries等指令,以确保项目能够正确链接到新的库和包。
  2. 编辑启动Gazebo的启动文件(如empty_world.launch.py):
    • 需要更新这些文件以使用新Gazebo版本的启动命令和参数。这可能包括更改Gazebo服务器的URI、调整仿真参数或指定新的世界文件。
  3. 更新世界SDFormat文件
    • SDFormat(Simulation Description Format)是用于描述仿真环境的XML格式。需要确保世界文件与新Gazebo版本的兼容性,并可能需要根据新版本的特性进行更新。
  4. 编辑生成模型的启动文件
    • 这些文件负责在仿真环境中生成和放置机器人模型。需要更新它们以使用新Gazebo版本的API和参数,并确保模型能够正确加载和交互。
  5. 编辑模型SDFormat文件
    • 类似于世界文件,模型文件也需要根据新Gazebo版本的SDFormat规范进行更新。这可能包括调整模型属性、传感器配置或插件设置。
  6. 桥接ROS话题
    • 由于ros_gz主要作为ROS和gz-transport之间的桥梁,因此可能需要设置额外的ROS节点或配置,以便在ROS和Gazebo之间桥接话题。这可以确保ROS节点能够接收来自Gazebo的传感器数据,并向Gazebo发送控制命令。

通过这些步骤,我们可以确保ROS 2项目能够顺利迁移到使用新Gazebo版本的平台,并继续利用Gazebo的强大功能进行机器人仿真和测试。需要注意的是,具体的修改步骤可能会根据项目的具体情况和新Gazebo版本的特性而有所不同。因此,在进行迁移时,建议仔细阅读相关文档和迁移指南,并根据需要进行适当的调整。


很麻烦……


新版本

gz sim

#!/usr/bin/env python3
#
# Copyright 2019 ROBOTIS CO., LTD.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Authors: Joep Tool

import os

from ament_index_python.packages import get_package_share_directory
from launch import LaunchDescription
from launch.actions import AppendEnvironmentVariable
from launch.actions import IncludeLaunchDescription
from launch.launch_description_sources import PythonLaunchDescriptionSource
from launch.substitutions import LaunchConfiguration


def generate_launch_description():
    launch_file_dir = os.path.join(get_package_share_directory('turtlebot3_gazebo'), 'launch')
    ros_gz_sim = get_package_share_directory('ros_gz_sim')

    use_sim_time = LaunchConfiguration('use_sim_time', default='true')
    x_pose = LaunchConfiguration('x_pose', default='-2.0')
    y_pose = LaunchConfiguration('y_pose', default='-0.5')

    world = os.path.join(
        get_package_share_directory('turtlebot3_gazebo'),
        'worlds',
        'turtlebot3_world.world'
    )
    set_env_vars_resources = AppendEnvironmentVariable(
            'GZ_SIM_RESOURCE_PATH',
            os.path.join(get_package_share_directory('turtlebot3_gazebo'),
                         'models'))

    gzserver_cmd = IncludeLaunchDescription(
        PythonLaunchDescriptionSource(
            os.path.join(ros_gz_sim, 'launch', 'gz_sim.launch.py')
        ),
        launch_arguments={'gz_args': ['-r -s -v4 ', world]}.items()
    )
    gzclient_cmd = IncludeLaunchDescription(
        PythonLaunchDescriptionSource(
            os.path.join(ros_gz_sim, 'launch', 'gz_sim.launch.py')
        ),
        launch_arguments={'gz_args': '-g -v4 '}.items()
    )

    robot_state_publisher_cmd = IncludeLaunchDescription(
        PythonLaunchDescriptionSource(
            os.path.join(launch_file_dir, 'robot_state_publisher.launch.py')
        ),
        launch_arguments={'use_sim_time': use_sim_time}.items()
    )

    spawn_turtlebot_cmd = IncludeLaunchDescription(
        PythonLaunchDescriptionSource(
            os.path.join(launch_file_dir, 'spawn_turtlebot3.launch.py')
        ),
        launch_arguments={
            'x_pose': x_pose,
            'y_pose': y_pose
        }.items()
    )

    ld = LaunchDescription()

    # Add the commands to the launch description
    ld.add_action(set_env_vars_resources)
    ld.add_action(gzserver_cmd)
    ld.add_action(gzclient_cmd)
    ld.add_action(robot_state_publisher_cmd)
    ld.add_action(spawn_turtlebot_cmd)

    return ld

这个Python脚本是一个ROS 2的启动文件,用于在Gazebo模拟器中启动TurtleBot3的仿真环境。它使用了launch模块来组织和配置不同的启动动作。下面是脚本的主要组成部分及其功能解析:

  1. 导入必要的模块
    • os:用于文件路径操作。
    • ament_index_python.packages:用于获取ROS 2包的共享目录。
    • launch相关的类和函数:用于创建和配置启动描述。
  2. 获取必要的文件路径
    • 使用get_package_share_directory函数获取turtlebot3_gazeboros_gz_sim(这里可能是自定义的或示例中的模拟包,实际ROS 2中可能没有ros_gz_sim,通常会是如gazebo_ros的某个版本)包的共享目录。
    • 设置Gazebo世界的路径和模型资源的路径。
  3. 配置启动参数
    • use_sim_time:一个可选的启动配置,用于指示是否使用仿真时间。
    • x_posey_pose:TurtleBot3在仿真世界中的初始位置。
  4. 设置环境变量
    • 通过AppendEnvironmentVariable添加GZ_SIM_RESOURCE_PATH环境变量,该变量指向TurtleBot3模型的目录,这样Gazebo就能找到并加载这些模型。
  5. 构建Gazebo的启动命令
    • gzserver_cmd:启动Gazebo服务器的命令,它指定了世界文件和启动参数(如实时模式、服务器模式、详细输出)。
    • gzclient_cmd:启动Gazebo客户端的命令,它允许用户通过图形界面与Gazebo交互。
  6. 配置和添加其他ROS 2节点
    • robot_state_publisher_cmd:启动robot_state_publisher节点,该节点发布机器人的状态信息,这对于许多ROS 2组件(如导航)是必需的。
    • spawn_turtlebot_cmd:启动一个用于在Gazebo中生成TurtleBot3的命令,该命令指定了机器人的初始位置。
  7. 创建并返回启动描述
    • 使用LaunchDescription()创建一个空的启动描述。
    • 向该描述中添加之前定义的所有动作(设置环境变量、启动Gazebo服务器和客户端、启动其他ROS 2节点)。
    • 返回该启动描述,以便可以通过ROS 2的launch工具运行它。

注意

  • 脚本中提到的ros_gz_sim包可能是一个虚构的或特定于项目的包,用于封装Gazebo模拟的启动逻辑。在标准的ROS 2发行版中,你通常会使用gazebo_ros包或其他相关的Gazebo ROS 2桥接包。
  • launch_arguments中的字典被转换成了.items(),这在ROS 2的launch模块中是期望的格式,因为launch_arguments期望一个字典的项(键值对)列表。
  • 该脚本假定了一些启动文件的存在(如gz_sim.launch.pyrobot_state_publisher.launch.pyspawn_turtlebot3.launch.py),这些文件需要在相应的路径下被正确实现。

Gazebo,作为一个自2002年起就开始发展的机器人仿真平台,经过超过15年的持续开发,终于迎来了重大的升级和现代化改造。这一变革不仅提升了Gazebo的性能和功能,还将其从传统的单体架构转变为一系列松散耦合的库集合,形成了新的Gazebo架构。为了区分,我们将旧版本的Gazebo(如Gazebo 9和Gazebo 11)称为“Gazebo Classic”,而将新版本(原称为“Ignition”,现以字母名称如Harmonic发布)简称为“Gazebo”。

针对这一重大变更,以下是对迁移Gazebo Classic项目到新版Gazebo的一些关键指导和资源概述:

迁移ROS 2包中使用的Gazebo Classic

对于使用ROS 2并集成了Gazebo Classic的项目,迁移过程需要特别注意ROS 2与新版Gazebo之间的集成方式。这通常涉及更新ROS 2包中的依赖项,并确保所有接口和插件都兼容新版Gazebo。

安装Gazebo11与新Gazebo并行

为了顺利迁移,建议将Gazebo11(或您当前使用的Gazebo Classic版本)与新版本的Gazebo并行安装。这允许在迁移过程中保持对旧版本的访问,以便进行测试和比较。

迁移插件

插件是Gazebo中用于扩展功能的关键组件。从Gazebo Classic迁移到新版Gazebo时,可能需要对插件进行重写或修改,以确保它们兼容新架构。Gazebo提供了详细的迁移指南,涵盖了从Fortress到Harmonic版本的插件迁移。

迁移SDF文件

SDF(Simulation Description Format)是Gazebo用于描述仿真世界的XML格式。从Gazebo Classic迁移到新版Gazebo时,可能需要更新SDF文件以利用新版Gazebo的特性或修正潜在的兼容性问题。

案例研究:迁移ArduPilot ModelPlugin

通过具体的案例研究,如将ArduPilot的ModelPlugin从Gazebo Classic迁移到新版Gazebo,可以更直观地了解迁移过程中可能遇到的挑战和解决方案。

SDF世界的基本描述

了解SDF的基本结构和如何描述仿真世界对于成功迁移至关重要。新版Gazebo可能对SDF的某些方面进行了扩展或修改,因此了解这些变化是必要的。

与Gazebo Classic的功能比较

新版Gazebo在性能、可扩展性和易用性方面进行了诸多改进。了解这些改进以及它们如何与Gazebo Classic进行比较,有助于确定迁移的优先级和策略。

ros_gz文档

ros_gz是ROS 2与Gazebo集成的关键部分。迁移过程中,确保熟悉ros_gz的文档和更新,以便正确集成ROS 2和新版Gazebo。

插件系统列表

了解新版Gazebo中可用的插件系统列表及其功能,有助于在迁移过程中替换或升级现有插件。

总结
迁移Gazebo Classic项目到新版Gazebo是一个复杂但必要的过程,它涉及更新依赖项、重写插件、修改SDF文件等多个方面。通过遵循迁移指南、利用案例研究和熟悉新版Gazebo的特性,可以顺利完成迁移并确保项目的持续运行和发展。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2078417.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大语言模型(LLMs)全面学习指南

大语言模型(LLMs)作为人工智能(AI)领域的一项突破性发展,已经改变了自然语言处理(NLP)和机器学习(ML)应用的面貌。这些模型,包括OpenAI的GPT-4o和Google的gem…

泛运动生态持续破圈,重估Keep时刻来临

在中国超40万亿的庞大消费市场中,从不缺少“燃点”。 前不久举办的巴黎奥运会,就带火了国内规模空前的“奥运经济”。在诸多品牌助力下,这股运动消费热潮持续破圈。 比如,运动科技公司Keep通过发布主题为《心火已燃》的品牌TVC&…

生信圆桌x生信友好期刊:助力生物信息学研究的学术平台

介绍 生物信息学作为一门交叉学科,近年来得到了快速发展。为了促进生信领域的科研交流,许多学术期刊开始关注并专门发表生物信息学相关的研究成果。这些期刊被称为“生信友好期刊”,它们为研究人员提供了一个展示和传播最新科研成果的重要平…

怎么成为ChatGPT使用大神?

成为高效使用ChatGPT的高手,可以通过以下几个方面来提升你的使用体验和效果: 1. 清晰明确的提问 明确问题:尽量将问题表述清楚、具体。例如,“如何提高文章写作技巧?” 比 “写作技巧” 更具体。提供上下文&#xf…

UnrealEngine学习(01):安装虚幻引擎

1. 下载安装 Epic Games 目前下载UE引擎需要先下载Epic Games,官网为我们提供了下载路径: https://www.unrealengine.com/zh-CN/downloadhttps://www.unrealengine.com/zh-CN/download 我们点击图中步骤一即可进行下载。 注释:Unreal Engi…

AI嵌入式开发 ---- pt模型文件 -> ONNX模型 -> rknn模型 -> 部署到RK3588开发板上(以yolov5为例)

目录 一、前言 1.1 任务 1.2 开发板下跑预训练模型流程 二、pt 文件转换为 onnx 或 TorchScript 文件(平台:x86机器Windows系统) 二、将 .onnx 模型文件转换为 .rknn 模型文件【平台:x86上的 Linux虚拟系统】 三、在 Linux虚…

python爬虫控制aiohttp并发数量方式例子解析

在使用Python的aiohttp库进行爬虫开发时,控制并发数量是一个重要的环节,以避免对目标网站造成过大压力或触发反爬机制。以下是一些控制并发数量的方法和示例: 使用Semaphore限制并发数:Semaphore(信号量)是…

用大模型学习大模型-40问掌握大模型入门知识点(上)

采用提问方式,从个人知识盲点开始,渐进式掌握大模型入门知识点。‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍ 1、大模型中7b、70B代表什么 在讨论人工智能领域特别是大型语言模型(LLMs)时,“7b”和“70B”均…

【Kotlin设计模式】Kotlin实现装饰器模式

前言 装饰器模式(Decorator Pattern),用于动态地为对象添加新功能,而无需修改其结构,通过使用不用装饰类及这些装饰类的排列组合,可以实现不同的功能和效果,但是这样的效果就是会增加很多类&…

debian12 - rsyslog的安装/配置/使用

文章目录 debian12 - rsyslog的安装/配置/使用概述笔记实现main.cppmy_syslog.hmy_syslog.cppMakefileMakefile的准备工作END debian12 - rsyslog的安装/配置/使用 概述 以前在debian7.5中用syslog可以。 现在准备在debian12虚拟机中做个rsyslog的实验,看syslog还…

2024年PDF转换成PPT三步走,职场小白秒变高手

这个信息满天飞的时代,我们几乎天天都得处理一堆文件,PDF和PPT这对搭档简直就是我们工作学习中的老面孔。你有没有碰到过这种头疼事:急着要把PDF转成PPT来准备个演讲,但就是找不到个又快又好使的招?别慌,今…

一文搞懂大模型!基础知识、 LLM 应用、 RAG 、 Agent 与未来发展

LLM 探秘:想要深入了解人工智能界的“新宠”大型语言模型(LLM)吗?本文将带你走进 LLM 的世界,从入门知识到实际应用,全方位解读这个充满魔力的“大模型”。我们将一起揭开 LLM 的神秘面纱,领略其…

代码随想录算法训练营第三十九天 | 198.打家劫舍 , 213.打家劫舍II , 337.打家劫舍III

目录 198.打家劫舍 思路 1.确定dp数组(dp table)以及下标的含义 2.确定递推公式 3.dp数组如何初始化 4.确定遍历顺序 5.举例推导dp数组 方法一: 动态规划-一维 方法二:动态规划-二维 方法三:动态规划-两个变…

零知识证明-基础数学(二)

零知识证明(Zero—Knowledge Proof),是指一种密码学工具,允许互不信任的通信双方之间证明某个命题的有效性,同时不泄露任何额外信息 导数、偏导数 ,互质数,费马小定理,欧拉定理 1 导数 导数是微积分学中的重要概念&am…

从《黑神话:悟空》看中国3A游戏之路:历史回顾与未来展望

近年来,随着中国游戏行业的不断发展,一款名为《黑神话:悟空》的游戏引发了全球的广泛关注。这款游戏不仅在视觉效果和动作设计上令人惊艳,还被誉为中国3A游戏的里程碑。然而,从《黑神话:悟空》的发布&#…

STM32-PWM驱动呼吸灯——HAL库

(根据B站up主keysking的STM32教程视频的笔记) 【STM32】动画讲解轻松学会STM32的PWM_哔哩哔哩_bilibili 什么是PWM? PWM,全称为脉冲宽度调制(Pulse Width Modulation),是一种调制技术&#xf…

对各项数据的统计汇总,集中展示,便于查看厂区情况的智慧物流开源了。

智慧物流视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。构建基于Ai技术的…

【云原生】Kubernetes中常见的Pod故障排查定位与解决方案

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

3D环绕音效增强软件 Boom3D for Mac v2.0.2 中文破解版下载

Boom3D for Mac 专业的3D环绕音效增强软件中文版,Boom 3D是适用于Mac和Windows系统的专业音效增强软件,旨在通过播放器,媒体或流媒体服务等介质,在不同类型的耳机上以3D环绕效果播放媒体内容。您无需使用昂贵的耳机或其他附加环绕…

第十四章- 面对墙壁

这是最后的例子:一个完整的游戏。 我们添加键盘快捷键并引入鼠标事件到CannonField。我们在CannonField周围放一个框架并添加一个障碍物(墙)使这个游戏更富有挑战性。 lcdrange.h包含LCDRange类定义lcdrange.cpp包含LCDRange类实现cannon.h…