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

目录

  • 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.mzph.cn/web/46457.shtml

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

相关文章

CSS技巧专栏:一日一例 8 - 纯CSS利用mask属性实现按钮边框对称包围特效

CSS技巧专栏:一日一例 8 - 纯CSS利用mask属性实现按钮边框对称包围特效 上篇作业解题 在前一篇文章的最后,给各位看官留了一个作业,如上图所示。本篇文章,我们来公布一下它的源码。 主要实现的思路 四个渐变色的线段,沿着四个方向的依次运动,(运动在加载前执行)使用 …

均值滤波算法及实现

均值滤波器的使用场景&#xff1a; 均值滤波器使用于处理一些如上述蓝色线的高斯噪声场景 红色曲线是经过均值滤波处理后的数据。主要因为均值滤波设置数据缓冲区&#xff08;也即延时周期&#xff09;&#xff0c;使得测量值经过缓冲不会出现特别大的变化。 黄色曲线为高斯噪声…

【iOS】—— 消息传递和消息转发

【iOS】—— 消息传递和消息转发 1. 消息传递SEL选择子IMP快速查找汇编代码查找过程总结消息转送快速查找IMP 慢速查找总结消息传递慢速查找IMP 2. 消息转发动态决议动态解析添加方法 快速转发慢速转发 总结动态决议消息转发消息的三次拯救 1. 消息传递 在iOS中&#xff0c;消…

一、单例模式

文章目录 1 基本介绍2 实现方式2.1 饿汉式2.1.1 代码2.1.2 特性 2.2 懒汉式 ( 线程不安全 )2.2.1 代码2.2.2 特性 2.3 懒汉式 ( 线程安全 )2.3.1 代码2.3.2 特性 2.4 双重检查2.4.1 代码2.4.2 特性 2.5 静态内部类2.5.1 代码2.5.2 特性 2.6 枚举2.6.1 代码2.6.2 特性 3 实现的要…

谷粒商城-全文检索-ElasticSearch

1.简介 一个分布式的开源搜索和分析引擎,可以 秒 级的从海量数据中检索 主要功能:做数据的检索和分析(MySQL专攻于数据的持久化存储与管理CRUD达到百万以上的数据MSQL就会很慢,海量数据的检索和分析还是要用ElasticSearch) 用途:我们电商项目里的所有的检索功能都是由Elasti…

基于X86+FPGA+AI数字化医疗设备:全自动尿沉渣检测仪

助力数字医疗发展&#xff0c;信迈可提供全自动尿沉渣检测仪专用计算机 随着信息技术的不断进步&#xff0c;医疗也进入了一个全新的数字化时代。首先是医疗设备的数字化&#xff0c;大大丰富了医疗信息的内涵和容量&#xff0c;具有广阔的市场发展前景。 数字化医疗设备&…

使用Redis的SETNX命令实现分布式锁

什么是分布式锁 分布式锁是一种用于在分布式系统中控制多个节点对共享资源进行访问的机制。在分布式系统中&#xff0c;由于多个节点可能同时访问和修改同一个资源&#xff0c;因此需要一种方法来确保在任意时刻只有一个节点能够对资源进行操作&#xff0c;以避免数据不一致或…

嵌入式香橙派人工智能AI开发板详细操作与远程聊天实现

大家好&#xff0c;今天给大分享一个OrangePi AIpro&#xff08;20T&#xff09;采用昇腾作为主控芯片的开发板&#xff0c;开箱以及对应功能的详细实现。 第一&#xff1a;板子基本介绍 接通电源给对应的开发板上电&#xff0c;观察其中的现象&#xff0c;如下&#xff1a; 注…

基于HAL库的stm32的OLED显示屏显示(IIC)

OLED OLED&#xff0c;即有机发光二极管( Organic Light Emitting Diode )。OLED由于同时具备自发光&#xff0c;不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性&#xff0c;被认为是下一代的平面显示器…

龙国专利局瑞数6

声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 前言(lianxi a…

配置和保护SSH

使用SSH访问远程命令行 描述Secure Shell SSH&#xff08;Secure Shell&#xff09; 是一种网络协议&#xff0c;用于在不安全的网络上安全地进行系统管理和数据传输。它最初由 Tatu Ylnen 于1995年设计&#xff0c;并成为保护网络服务免受攻击的标准。SSH提供了多种功能&…

基于SpringBoot+Vue的广场舞团系统(带1w+文档)

基于SpringBootVue的广场舞团系统(带1w文档) 基于SpringBootVue的广场舞团系统(带1w文档) 广场舞团&#xff0c;为用户随时随地查看广场舞团信息提供了便捷的方法&#xff0c;更重要的是大大的简化了管理员管理广场舞团信息的方式方法&#xff0c;更提供了其他想要了解广场舞团…

基于Trace的类型特化动态语言JIT编译

文章目录 Explain一、简介二、一个跟踪运行的示例三、跟踪树3.1 Traces类型特化&#xff08;Type specialization&#xff09; 3.2 Trace Trees3.3 黑名单&#xff08;Blacklisting&#xff09; 四、嵌套跟踪树4.1 Nesting Algorithm4.2 Blacklisting with Nesting 五、跟踪树优…

【Pytorch】一文向您详细介绍 torch.randn_like()

&#x1f389;&#x1f525;【Pytorch】一文向您详细介绍 torch.randn_like() &#x1f525;&#x1f389; 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; …

滑动窗口题目

题目描述&#xff1a; 计算两个字符串str1和str2在给定的含有n个元素的字符串数组strs中出现的最短距离。 详细解释&#xff1a; 定义整数变量n&#xff0c;用于存储字符串数组strs的长度。定义一个vector<string>类型的变量strs&#xff0c;用于存储输入的字符串。定义…

破解反爬虫策略 /_guard/auto.js(一) 原理

背景 当用代码或者postman访问一个网站的时候&#xff0c;访问他的任何地址都会返回<script src"/_guard/auto.js"></script>&#xff0c;但是从浏览器中访问显示的页面是正常的&#xff0c;这种就是网站做了反爬虫策略。本文就是带大家来破解这种策略&…

4.3 最小二乘近似

一、最小二乘解 A x b A\boldsymbol x\boldsymbol b Axb 经常无解&#xff0c;一般是因为方程太多了。矩阵 A A A 的行比列要多&#xff0c;即方程要多余未知数&#xff08; m > n m>n m>n&#xff09;。 n n n 个列只能张成 m m m 空间的一小部分&#xff0c;除非…

面向铁路、地铁旅客信息系统(PIS)的上架型整机,铁路专用M12网络接口,满足欧洲铁路应用标准

上架型整机 2U 19寸上架型整机&#xff0c;采用高性能低功耗处理器&#xff0c;能应用在宽温环境下&#xff0c;并满足欧洲铁路应用标准EN50155关于电磁兼容性&#xff0c;冲击和振动测试试验的要求&#xff0c;是一款面向铁路、地铁旅客信息系统&#xff08;PIS&#xff09;的…

C# 关于 PaddleOCRSharp OCR识别的疲劳测试

目录 关于 PaddleOCRSharp 应用范例演示 ​范例运行环境 疲劳测试 添加组件库 方法设计 调用示例 小结 关于 PaddleOCRSharp PaddleOCRSharp 是百度飞桨封装的.NET版本 OCR dll 类库&#xff0c;OCR&#xff08;Optical Character Recognition&#xff09;工具可以将…

【Java面向对象】抽象类和接口

文章目录 1.抽象类2.常见的抽象类2.1 Number类2.2 Calendar 和GregorianCalendar 3.接口4.常见接口4.1 Comparable 接口4.2 Cloneable 接口4.3 深浅拷贝 5.类的设计原则 1.抽象类 在继承的层次结构中&#xff0c;每个新的子类都使类变得更加明确和具体。如果从一个子类向父类追…