ROS2从入门到精通2-3:机器人3D物理仿真Gazebo与案例分析

news2024/9/22 17:22:35

目录

  • 0 专栏介绍
  • 1 什么是Gazebo?
  • 2 Gazebo架构
    • 2.1 Gazebo前后端
    • 2.2 Gazebo文件格式
    • 2.3 Gazebo环境变量
  • 3 Gazebo安装与基本界面
  • 4 搭建自己的地图
    • 4.1 编辑地图
    • 4.2 保存地图
    • 4.3 加载地图
  • 5 常见问题

0 专栏介绍

本专栏旨在通过对ROS2的系统学习,掌握ROS2底层基本分布式原理,并具有机器人建模和应用ROS2进行实际项目的开发和调试的工程能力。

🚀详情:《ROS2从入门到精通》


1 什么是Gazebo?

Gazebo是一款3D物理仿真器,支持机器人开发所需的机器人、传感器和环境模型,并通过其搭载的强大物理引擎产生高品质的图形画面,达到逼真的仿真结果。

在这里插入图片描述
Gazebo功能强大,主要有:

  • 构建机器人运动仿真模型

    Gazebo提供了最基础的球体、圆柱体与立方体,利用它们以及伸缩变换或者旋转变换,可以自主设计机器人三维仿真模型。除此之外,Gazebo提供了CADBlenderSolidWorks等各种2D、3D设计软件接口,可以导入图纸让Gazebo机器人模型更真实。Gazebo提供了 机器人的运动仿真,通过Model Editor下的plugin,添加需要验证的算法文件,就可以在Gazebo里对机器人的运动进行仿真

  • 构建现实世界各种场景的仿真模型

    Gazebo可以建立一个用来测试机器人的仿真场景,通过添加物体库来模仿现实世界,还可以通过添加2D房屋设计图,构建出3D的房屋

  • 构建传感器仿真模型

    Gazebo提供强大的传感器模型库,包括cameradepth cameralaserimu等机器人常用的传感器,并且可以直接使用。Gazebo也允许用户从零创建一个新的传感器,添加它的具体参数,甚至还可以添加传感器噪声模型,让传感器更加真实

  • 为机器人模型添加现实世界的物理性质

    Gazebo提供的物理引擎可以为机器人添加重力、阻力等,提供了在复杂的室内和室外环境中准确有效地模拟机器人群体的能力

2 Gazebo架构

2.1 Gazebo前后端

Gazebo区分

  • 客户端:gzclient,接受数据信息并显示,允许多个客户端存在
  • 服务端:gzserver,运行Gazebo运算分析功能

终端运行指令

gazebo

默认执行指令

gzserver
gzclient

当然也可以分开运行服务端和客户端指令。

2.2 Gazebo文件格式

  • 世界

    扩展名为.world,该文件包含了仿真的所有元素——机器人、环境、传感器等,通过gzserver读取所有信息并构建一个真实的3D场景

  • 模型

    扩展名为.sdf,即仿真描述文件(simulation description format, SDF),模型文件主要用于实现基本组件复用,例如——太阳、平面等,从而简化.world

    下面是一个.world文件,其中包含ground_planesun模型文件

    <?xml version="1.0" ?>
    <sdf version="1.5">
      <world name="default">
        <include>
          <uri>model://ground_plane</uri>
        </include>
        <include>
          <uri>model://sun</uri>
        </include>
        <model name="box">
          <pose>0 0 0.5 0 0 0</pose>
          <link name="link">
            <collision name="collision">
              <geometry>
                <box>
                  <size>1 1 1</size>
                </box>
              </geometry>
            </collision>
          </link>
        </model>  
      </world>
    </sdf>
    

2.3 Gazebo环境变量

Gazebo环境变量表示了内置文件与库的存放位置,列举如下:

  • GAZEBO_MODEL_PATHGazebo所有模型的路径
  • GAZEBO_RESOURCE_PATHGazebo所有资源的路径,例如.world.sdf
  • GAZEBO_MASTER_URI:指定ip与端口,用于Gazebo客户端与服务器连接使用,通常使用服务器运行Gazebo时需要设置
  • GAZEBO_PLUGIN_PATHGazebo搜索插件库的路径
  • GAZEBO_MODEL_DATABASE_URIGazebo下载模型的路径

上述所有的变量查看位置/usr/share/gazebo/setup.sh

3 Gazebo安装与基本界面

Gazebo已经集成在桌面完整版的ROS系统当中
启动与测试

ros2 launch gazebo_ros spawn_entity_demo.launch.py

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w8JqPBGP-1721265452675)(https://i-blog.csdnimg.cn/direct/173a148d437e4222aae25de427d0f56d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATXIuV2ludGVyYA==,size_120,color_FFFFFF,t_70,g_se,x_16#pic_center =650x)]

如上图所示,Gazebo-GUI主要包含以下部分:

  • 场景(Scene):模拟器的主要部分,是仿真模型显示的地方,用户可以在场景中操作仿真对象,使其与环境进行交互

  • 左侧面板

    • WORLD:该选项卡显示当前场景中的模型,并允许查看和修改模型参数
    • INSERT:该选项卡是向仿真场景中添加新对象、模型,可以添加常用模型所在的路径
    • LAYERS:该选项卡组织并显示仿真中可用的不同可视化组,一个图层可以包含一个或多个模型,打开或关闭图层将显示或隐藏该图层中的模型
  • 顶部工具栏:包含与模拟器交互时最常用的选项,如按钮:选择、移动、旋转和缩放;灯光;创建简单形状(例如立方体、球体、圆柱体);复制/粘贴;更改视图;捕捉对齐等。

  • 底部工具栏:显示有关仿真的数据,如仿真时间及其与真实时间。

    • 仿真时间:指当仿真运行时,时间在仿真环境中过得有多快。仿真可以比真实时间慢或快,具体取决于运行仿真所需的计算量
    • 真实时间:指在仿真环境中运行时实际经过的时间。仿真时间和真实时间的比率称为实时因子。
    • 步长:每次仿真迭代都会推进一个固定的秒数,默认情况下,步长为1ms,按“暂停”按钮暂停仿真,并使用“步长”按键一次执行多个步长。

4 搭建自己的地图

本文介绍如何用Gazebo搭建自己的地图,关于Gazebo搭建机器人请参考后面的文章。

4.1 编辑地图

启动Gazebo,依次点击Edit -> Building Editor打开地图编辑器,如下所示

在这里插入图片描述
该编辑器由以下3个区域组成:

  • 调色板:选择建筑特征和材料
  • 2D视图:设计或导入楼层平面图,编辑器会根据平面图自动在3D编辑器中插入墙壁、门窗和楼梯
  • 3D视图:预览平面设计的3D视图,在这里可以为建筑物的不同部分分配颜色和纹理

4.2 保存地图

在顶部菜单上,选择File,然后Save As可以保存模型文件.sdf.config。单击Exit Building Editor退出场景编辑器,注意退出后就不能够再次编辑场景了。

回到主界面再次选择File,然后Save World可以保存世界文件.world

4.3 加载地图

.world中包含模型文件的全部内容,但不利于模型文件.sdf.config复用以及.world文件的可读性,本节进行改进。假设模型文件名为scene1,则模块化加载模型的方式为

  • 存放位置为~/ros2_learning_tutorials/Lecture_2_2/src/gazebo_labmodels/models,则
    <!-- 自定义模型 -->
    <model name='scene1'>
      <include>
        <uri>///home/winter/ros2_learning_tutorials/Lecture_2_2/src/gazebo_lab/models/scene1</uri>
      </include>
    </model>
    
  • 存放位置为~/.gazebo/models,则
    <!-- 自定义模型 -->
    <model name='scene1'>
      <include>
        <uri>model://scene1</uri>
      </include>
    </model>
    

启动地图可以类比turtlebot3_world.launch的结构,将其中的地图改成自己的场景即可,如下所示

<launch>
  <include file="$(find gazebo_ros)/launch/empty_world.launch">
    <arg name="world_name" value="$(find gazebo_lab)/worlds/scene1.world"/>
    <!-- more default parameters can be changed here -->
    <arg name="paused" value="false"/>
    <arg name="use_sim_time" value="true"/>
    <arg name="gui" value="true"/>
    <arg name="headless" value="false"/> <!-- Inert - see gazebo_ros_pkgs issue #491 -->
    <arg name="recording" value="false"/>
    <arg name="debug" value="false"/>
  </include>
</launch>

5 常见问题

  1. Gazebo出现黑屏

    解决方案:更新Gazebo模型库

    cd ~/.gazebo/
    mkdir -p models
    cd ~/.gazebo/models/
    wget http://file.ncnynl.com/ros/gazebo_models.txt
    wget -i gazebo_models.txt
    ls model.tar.g* | xargs -n1 tar xzvf
    
  2. [gazebo-1] process has died [pid 20736, exit code 255, cmd /opt/ros/kinetic/lib/gazebo_ros/gzserver -e ode worlds/empty.world __name:=gazebo __log:=/home/winter/.ros/log/2670202e-5ef6-11ec-847d-347df65d6a56/gazebo-1.log].

    解决方案:关闭已有的Gazebo进程

    killall gzserver
    killall gzclient
    

本文的完整工程代码请通过下方名片联系我获取


🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《机器人原理与技术》
  • 《机器学习强基计划》
  • 《计算机视觉教程》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇

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

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

相关文章

Java案例斗地主游戏

目录 一案例要求&#xff1a; 二具体代码&#xff1a; 一案例要求&#xff1a; &#xff08;由于暂时没有学到通信知识&#xff0c;所以只会发牌&#xff0c;不会设计打牌游戏&#xff09; 二具体代码&#xff1a; Ⅰ&#xff1a;主函数 package three;public class test {…

ExoPlayer架构详解与源码分析(15)——Renderer

系列文章目录 ExoPlayer架构详解与源码分析&#xff08;1&#xff09;——前言 ExoPlayer架构详解与源码分析&#xff08;2&#xff09;——Player ExoPlayer架构详解与源码分析&#xff08;3&#xff09;——Timeline ExoPlayer架构详解与源码分析&#xff08;4&#xff09;—…

SpringData JPA Mongodb 查询部分字段

JPA 网上用的好像不多&#xff0c;找了好多材料以后最终找了这个可行的方案&#xff1a; Query(fields "{tender_id:1,_id:0}")List<MGPltTender> findByTenderIdIsNotNull(PageRequest pageRequest); 调用&#xff1a; Sort sort Sort.by(popularType.getC…

android串口通讯(JAVA)

一、app目录下添加 implementation io.github.xmaihh:serialport:2.1.1 1) 点击Sync Now更新依赖 2) AndroidManifest.xml文件添加读取设备信息权限 <uses-permission android:name"android.permission.READ_PHONE_STATE" /> 二、 使用 1) 创建MySerialPo…

实现了一个心理测试的小程序,微信小程序学习使用问题总结

1. 如何在跳转页面中传递参数 &#xff0c;在 onLoad 方法中通过 options 接收 2. radio 如何获取选中的值&#xff1f; bindchange 方法 参数e, e.detail.value 。 如果想要获取其他属性&#xff0c;使用data-xx 指定&#xff0c;然后 e.target.dataset.xx 获取。 3. 不刷…

Notepad++换安装路径之后,右键打开方式报错:Windows无法访问指定设备、路径或文件。你可能没有适当的权限访问该项目。的处理方法

把Notepad添加到右键打开方式&#xff0c;可以参考下面的3篇文章添加&#xff1a; https://blog.csdn.net/xiaoerbuyu1233/article/details/88287747 https://blog.csdn.net/qq_44000337/article/details/120277317 https://www.cnblogs.com/zhrngM/p/12899026.html 这里主要是…

filebeat,kafka,clickhouse,ClickVisual搭建轻量级日志平台

springboot集成链路追踪 springboot版本 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.3</version><relativePath/> <!-- lookup parent from…

申请https证书的具体流程

申请HTTPS证书的具体流程通常涉及以下步骤&#xff0c;不过请注意&#xff0c;具体细节可能因不同的证书颁发机构&#xff08;CA&#xff09;而有所差异&#xff1a; 1、确定证书类型&#xff1a; 证书类型&#xff1a;根据需求选择合适的SSL证书类型。常见的有DV&#xff08;…

Vue 组件插槽 slot 简单例子

https://andi.cn/page/621582.html

synergy配置

今天介绍一个电脑同步软件synergy。 我们开发时一般会用两套设备&#xff0c;如果使用两套键盘操作起来会很麻烦&#xff0c;这个软件就是解决这个问题&#xff0c;可以使用一套键盘同时操作两台电脑&#xff0c;另一台作为客户端被控制。 安装 在两台电脑上各自下载安装syne…

来参与“向日葵杯”全国教育仿真技术大赛~

可点击进行了解&#xff1a;“向日葵杯”全国教育仿真技术大赛 (sunmooc.cn) 本次大赛共分为四个赛道&#xff1a;自主命题赛道、教育知识图谱设计赛道、FPGA硬件扑克牌对抗赛道、EasyAR元宇宙空间设计赛道。 参赛对象 &#xff1a; 具有正式学籍的在校研究生&#xff0c;本科…

使用Python实现高效的图像处理:基于OpenCV的实战指南

目录 引言 准备工作 安装Python与OpenCV 导入必要的库 基本图像处理操作 读取与显示图像 转换图像颜色空间 图像变换 图像滤波 实战案例&#xff1a;边缘检测 引言 在现代科技快速发展的今天&#xff0c;图像处理已成为众多领域不可或缺的一部分&#xff0c;包括计算…

QT5:简单显示百度页面

目录 前言 一、环境 二、实现过程 1.引入模块 2.环境构建 三、代码示例 总结 参考博客 前言 使用qt5 QT WebEngine 模块实现在Designer 上展示百度页面。 一、环境 qt版本&#xff1a;5.12.7 windows 11 下的 Qt Designer &#xff08;已搭建&#xff09; 编译器&a…

Vue 3项目安装Element-Plus

Element Plus 是一个基于 Vue 3 的现代前端UI框架&#xff0c;它旨在提升开发体验&#xff0c;并为开发者提供高效、优雅的组件。如果你正在使用 Vue 3 进行项目开发&#xff0c;那么安装和集成 Element Plus 是一个不错的选择。在本文中&#xff0c;博主将详细介绍如何在 Vue …

水域救援装备的详细简介_鼎跃安全

水域救援行动需要救援人员配备全面、专业的装备&#xff0c;以应对各种复杂的水域环境和救援任务。水域救援套装应运而生&#xff0c;它集合了水域救援所需的各类关键装备&#xff0c;为救援人员提供全方位的保护和辅助&#xff0c;确保数援行动的高效与安全。 水域救援头盔&am…

2024717-VSCode-1.19.1-部署gcc13-C++23-win10-22h2

2024717-VSCode-1.19.1-部署gcc13-C++23-win10-22h2 一、软件环境 标签:C++ VSCode mingw gcc13分栏:C++操作系统:Windows10 x64 22h2二、操作步骤 1. 下载安装VScode 1.1官网 打开官网【https://code.visualstudio.com/Download】,选择【System Installer】【x64】,按…

19-2 LLM之野望 2 - LLM给到Quora面临的困境

Quora 有一个简单的前提&#xff1a;它是一个分享知识和专业知识的地方&#xff0c;好奇的人可以就任何可以想象到的话题提出问题&#xff0c;并从平台博学的社区获得深思熟虑的、见识广博的答案。 想想雅虎答案 (Yahoo Answers)&#xff0c;它适用于技术员工和格拉德威尔式的…

外企跨境传输应该如何做到安全有效的文件管控?

跨境文件传输并非易事&#xff0c;它面临着多重挑战&#xff0c;尤其是数据安全、隐私保护以及法律法规遵守等问题。所以如何做到安全有效的文件管控&#xff0c;却是一个让许多企业头疼的问题。小编今天将说说跨境文件传输面临的主要挑战&#xff0c;并讨论如何选择合适的加密…

如何在AWS上构建Apache DolphinScheduler

引言 随着云计算技术的发展&#xff0c;Amazon Web Services (AWS) 作为一个开放的平台&#xff0c;一直在帮助开发者更好的在云上构建和使用开源软件&#xff0c;同时也与开源社区紧密合作&#xff0c;推动开源项目的发展。 本文主要探讨2024年值得关注的一些开源软件及其在…

SQL Server实例间同步登录用户

问题痛点&#xff1a;由于AlwaysOn和数据库镜像无法同步数据库外实例对象&#xff0c;例如 登录用户、作业、链接服务器等&#xff0c;导致主库切换之后&#xff0c;应用连接不上数据库或者作业不存在导致每晚跑批任务漏跑等 目前来看&#xff0c;作业等其他实例对象的同步还比…