ROS 2机器人操作系统与Gazebo机器人仿真(微课视频版)课件 第5章-Gazebo基础_第1页
ROS 2机器人操作系统与Gazebo机器人仿真(微课视频版)课件 第5章-Gazebo基础_第2页
ROS 2机器人操作系统与Gazebo机器人仿真(微课视频版)课件 第5章-Gazebo基础_第3页
ROS 2机器人操作系统与Gazebo机器人仿真(微课视频版)课件 第5章-Gazebo基础_第4页
ROS 2机器人操作系统与Gazebo机器人仿真(微课视频版)课件 第5章-Gazebo基础_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ROS2机器人操作系统与Gazebo机器人仿真

第5章Gazebo基础提纲5.1Gazebo简介5.1.1相关术语5.1.2Gazebo架构5.1.3与ROS、RViz和rqt间的区别与联系5.2安装与运行 5.2.1Gazebo安装 5.2.2Gazebo运行5.3GUI功能简介5.3.1GUI界面5.3.2案例:利用GUI控制小车5.4Gazebo命令行工具5.4.1话题5.4.2服务5.4.3消息类型5.5在线模型与本地模型库5.6本章小结 不论是ROS1还是ROS2都没有提供3维物理仿真功能,而物理仿真作为对真实世界的模拟于机器人的开发具有重要的作用。Gazebo作为一款成熟的物理仿真工具已经被广泛应用于机器人仿真中,并成为ROS默认的仿真工具。经过多年的发展Gazebo的仿真功能越来越完善,且与ROS的联系也越来越紧密。特别是ROS2与新一代的Gazebo可以作到密切协同。本章将简要介绍Gazebo的基本信息、安装方法、图形用户界面和命令行工具的使用等内容。5.1Gazebo简介5.1Gazebo简介“Simulatebeforeyoubuild”(实践之前先仿真)是Gazebo的理念,也是其开发团队对Gazebo开发的愿景。中国的古代名言“三思而后行”的观点与Gazebo的理念有相似之处,都是在强调通过思考、规划或模拟来提高决策的有效性,减少风险。相较于用大脑的思考进行机器人的仿真,Gazebo通过结合计算机技术、图形图像技术、计算机视觉技术和物理原理等知识,在计算机中构建了一个模拟世界物理规律的仿真工具,可以代替人脑快速、直观的完成机器人的仿真。Gazebo的发展经历了两个阶段早期的GazeboClassic(版本有Gazebo9和Gazebo11)和新一代的Gazebo。随着GazeboClassic在2025年的退出,基于QML技术的新一代Gazebo成为惟一可用工具,学习和掌握新一代Gazebo将成为必然。5.1Gazebo简介新一代的Gazebo在开发中使用了目前流行的迭代策略,每年都会定期发布一个版本,有些年份的版本会是长期版,具有5年的维护时间。下页表显示了新一代Gazebo各版本的情况,当前仍在维护的有Ionic,Harmonic和Fortress三个版本,其中Harmonic为最新的长期支持版本,开发社区将会持续维护至2028年9月。鉴于GazeboHarmonic同时也是与ROS2Jazzy所适配的版本,因此为了在机器人仿真中选择GazeboHarmonic版本。5.1Gazebo简介版本名发布日期生命周期结束备注Jetty2025年9月2030年9月长期版Ionic2024年9月2026年9月最新版Harmonic2023年9月2028年9月长期版Garden2022年9月2024年11月已结束支持Fortress2021年9月2026年9月长期版Edifice2021年3月2022年3月已结束支持Dome2020年9月2021年12月已结束支持Citadel2019年12月2024年12月长期版已结束支持Blueprint2019年5月2020年12月已结束支持Acropolis2019年2月2019年9月已结束支持5.1Gazebo简介针对早期的GazeboClassic版本中存在的问题,新一代的Gazebo在开发中进行了优化和改进,并注重遵循以下原则:①通用性:Gazebo旨在提供一个功能强大的模拟真实世界的仿真工具,不仅仅限于机器人或某一类机器人的仿真,是一种多用途、通用的物理仿真工具。②稳定性:长期的稳定版本会定期向社区发布。对稳定版本的后续改进努力保持API、ABI和行为的向后兼容性。破坏性更改会在短期发布版本中进行实验和验证。③更新:尽可能地在稳定版本中添加新的向后兼容特性。用户可以在不升级到新版本的情况下享受新特性,并可以推迟升级工作,直到需要发生破坏性更新时再进行版本的彻底升级。5.1Gazebo简介④易用性:默认配置下对初学者友好,方便快速掌握Gazebo的基本使用。例如,Gazebo启动时会创建一个图形界面,方便初学者入门,而高级用户可以在无界面模式下运行,以提升仿真效率。⑤模块化:Gazebo的各个模块在设计时尽可能做到独立,这样各个模块可以在除了Gazebo之外的各种项目中使用。例如,使用Gazebo渲染功能的用户无需安装、编译或了解Gazebo的物理引擎。⑥可扩展性:用户不需要分支核心库或从源代码编译向Gazebo添加新的功能,以插件的形式为Gazebo提供了扩展性,并且在支持C++插件的同时新增了对Python插件的支持。例如,向Gazebo添加一种新型传感器,可使用插件实现。5.1Gazebo简介⑦灵活性:用户在合理的情况下可以选择组合使用某些功能。例如,物理引擎以插件形式集成到Gazebo中,因此用户可以选择加载没有物理引擎的仿真,或选择使用其他物理引擎。⑧可维护性:在开发过程中考虑到代码的长期可维护性。为此,Gazebo遵循了严格的测试、文档、代码检查和风格标准。⑨可移植性:Gazebo支持Linux、macOS和Windows三种主要操作系统。目前在Linux下Gazebo最稳定,相关的学习资源也最丰富。5.1Gazebo简介5.1.1相关术语为了更好的理解使用Gazebo,以下介绍Gazebo中常用的术语及其含义:世界(World):表示整个仿真环境,是对模拟世界的完整描述。世界由可移动和静态的实体、插件、大气、光照、地面等要素构成。在SDF文件中使用<world>标签定义世界,在一次Gazebo仿真中,只能创建和加载一个世界。实体(Entity):表示世界中的每个“对象”,例如,光源、模型、演员(Actor)、连杆(Link)、碰撞体积(Collision)、关节(Joint)等。每个实体都有一个名称(Name),可以包含多个组件。在仿真时,Gazebo会为每个实体分配一个数值作为ID,实体的ID在仿真运行时由Gazebo服务器分配。5.1Gazebo简介5.1.1相关术语组件(Component):表示实体的某种功能或特征,例如姿态(Pose)、名称(Name)、材料(Material)、转动惯量(Inertial)等。Gazebo自身提供多种现成的组件,通过继承BaseComponent类或实例化Component模板来创建自己的组件。系统(System):指定了对所有具有特定组件集的实体进行操作的逻辑,具体来说系统就是可以在Gazebo运行时加载的插件。Gazebo定义了许多不同的系统,例如控制车辆运动的差速运动控制插件,此外,Gazebo也支持用户创建自己的系统为实体添加功能。实体组件管理器(Entity-ComponentManager,ECM):是Gazebo管理仿真场景中所有实体和组件的工具,提供了查询、创建、删除和更新实体和组件的功能。实体组件管理器是新一代Gazebo中核心的功能之一。5.1Gazebo简介5.1.1相关术语层级(Level):表示世界中的一部分,由一个立方体和位于该立方体内的静态实体构成。一个实体可以出现在多个层级中,或不出现在任何层级中。不同层级的立方体可能会相交重叠,也可能不相交相距较远。层级对于场景的渲染和仿真具有加速作用。缓冲区:每个层级都有一个缓冲区,这是层级的立方体在其边界外的膨胀,用于检测表演者何时即将进入层级,或何时已经离开并远到足以将该实体排除在层级之外。模型:在仿真过程中可能会更改层级(能够移动)的所有模拟实体,例如机器人、演员(Actor)和动态模型。全局实体(Globalentities):在世界中所有层级上都具有的实体,直接属于世界,例如光源、地面平面、高程图等。这些实体将在所有层级的仿真中被模拟和运行。5.1Gazebo简介5.1.1相关术语仿真执行器(Simulationrunner):运行整个世界或包含多个层级的世界,但一个仿真执行器一次只能仿真一个世界。仿真执行器拥有一个唯一的ECM,这个ECM包含了仿真世界中的所有实体和组件。仿真执行器通过迭代进行仿真。服务器(Server):负责加载SDF文件并为每个世界创建一个仿真执行器,是GazeboSim的入口点。5.1Gazebo简介5.1.2Gazebo架构Gazebo采用了模块化开方的方式,本身由Cmake、Common、Fuel_tools、Gui、Launch、Math、Msgs、Physics、Plugin、Rendering、Sensors、Sim、Tools、Transport、Utils和SDFormat等模块(库)构成。按照Gazebo开发原则上述各模块间尽可能独立,减少依赖。以下介绍上述几个模块的功能:(1)Sim仿真模块是Gazebo应用程序的入口,直接或间接使用了上述所有其他Gazebo模块。Sim模块提供了一个可执行文件GazeboSim,终端里启动的命令为gzsim,GazeboSim启动时默认创建一个执行仿真的后端服务器进程和一个图形用户界面的客户端进程,两个进程同时来运行仿真。5.1Gazebo简介5.1.2Gazebo架构(2)Fuel_tools模块提供了访问和下载在GazeboFuel服务器上存放的模型等资源的功能,并且也提供了从终端里使用GazeboFuel服务器上资源的命令行工具gzfuel。(3)Msgs模块用于描述和定义Gazebo中的消息类型的格式,与ROS2中消息类型的定义方法不同,Gazebo使用Protobuf3.0标准来定义Gazebo中消息的格式。Protobuf标准是由谷歌开发的一种用于数据序列化和反序列化的标准。(4)GUI模块提供了Gazebo的图形用户界面功能,支持开发自定义带有图形用户界面的插件。5.1Gazebo简介5.1.2Gazebo架构(5)Launch模块提供了一个组织和管理Gazebo启动的便利工具,功能类似于ROS2中的Launch文件。通过XML格式可以编写配置Gazebo启动的Launch文件。(6)Transport模块提供了Gazebo的通信机制,包含话题和服务两种类型的通信手段,用于进程间的通信。Transport提供的通信方式与ROS2中的话题和服务十分类似。(7)Math模块提供了多维向量、旋转、位置等数据类型,提供了立方体、球、圆柱等几何对象的生成方法,以及提供了一些常见算法如PID、K均值聚类、Dijkstra路径规划等。5.1Gazebo简介5.1.2Gazebo架构(8)Sensors模块向Gazebo提供了传感器的功能,可以在仿真时模拟各种各样的传感器,以及向传感器添加噪声。传感器主要用于采集数据,在仿真过程中生成大量数据,从而为开发智能算法提供数据源支持。(9)SDFormat模块提供了解析和生成SDF文件的功能。SDF文件是Gazebo描述仿真环境的一种文件格式。(10)Physics模块提供了Gazebo的物理仿真功能,支持碰撞检测、正逆运动学,以及力的模拟等功能。Physics模块通过插件的方式让Gazebo可以从多种不同的物理仿真引擎中选择。5.1Gazebo简介5.1.2Gazebo架构(11)Plugin模块为Gazebo提供了插件的安装与加载接口,为Gazebo中插件的使用提供了便利。Gazebo的大多数据模块都以插件的形式向外提供接口,例如Physcis模块提供了一个物理仿真的插件由GazeboSim使用。由于插件是在运行时加载的,因此Gazebo不需要重新编译就可以添加或移除插件。上述各个模块由GazeboSim模块整合,并由GazeboSim模块中的入口程序启动整个Gazebo,运行仿真。下图展示了Gazebo的仿真原理,各个模块在仿真时的作用。5.1Gazebo简介5.1Gazebo简介5.1.2Gazebo架构在Gazebo仿真运行后,会产生服务器和客户端两个进程,以及服务器与客户端间的通信。服务器进行整个场景的物理仿真,客户端主要用于显示仿真效果和用户交互。Gazebo运行仿真时的服务器主要由实体组件管理器(ECM)和插件两部分构成。在仿真开始后,服务器会采用迭代的方式沿着时间一步步计算每一时刻的状态。ECM主要负责维护场景中的所有实体,记录和保存了当前仿真场景中所有实体的状态。Gazebo各个模块中的插件可以访问所有实体及其组件,根据当前场景中实体和组件的状态计算下一时刻场景的状态并保存到ECM中,完成一轮的迭代。如此往复推动仿真不断向前地运行。此外,服务器上的有些插件向外界发布信息和接收指令,与外界进行交互。5.1Gazebo简介5.1.2Gazebo架构仿真时客户端会创建一个图形用户界面,从服务器获取仿真场景的信息,在本地创建服务器ECM的一个复本作为客户端显示的数据源。客户端同样包含了多个插件以本地的ECM复本为数据源进行显示和渲染,展示三维场景和相关的数据。在默认情况下,GazeboSim启动后,在客户端和服务器都会加载一些默认的插件,例如Physcis、ScenceBroadcaster和UserCommand三个插件,以向用户提供一些基础的仿真功能。而非默认的许多其他插件是可选的,例如传感器插件,根据具体的仿真需要进行配置和加载。这些默认的和可选的插件都可随时添加或移除,不影响GazeboSim的运行,但相关插件的功能则会启用或停用。5.1Gazebo简介5.1.2Gazebo架构Gazebo在仿真时明确的分为服务器进程和客户端进程两个部分。这两个进程间的通信(无论是从后端到前端的场景广播器,还是从前端到后端的用户命令)必须依赖GazeboTransport和GazeboMsgs两个模块将消息在服务器和客户端间传递。消息本身由GazeboMsgs定义和提供,而进行消息交换的发布者和订阅者的框架则由GazeboTransport提供。例如,场景广播器系统负责从后端不断变化的仿真循环中获取世界状态和所有实体及其组件的状态,将该信息打包成一个非常紧凑的消息格式,定期地将其发送到客户端进程。除了从场景广播器发送到客户端的状态消息外,客户端也利用GazeboTransport和GazeboMsgs还可以使用用户命令系统向服务器发出请求(另一个后端插件)。用户命令系统具有服务,可以由前端GUI请求,用于插入、删除、移动(等)模型、光源和其他实体,并将响应发送回GUI,确认收到并执行。5.1Gazebo简介5.1.2Gazebo架构需要注意的是GazeboSim的服务器和客户端是独立的,在有些情况下可以不启动客户端,从而可省略场景广播器,但这将意味着无法在前端可视化数据,这对于节省计算资源是很有用的,可以提升仿真效率。5.1Gazebo简介5.1.3与ROS、RViz和rqt间的区别与联系在使用ROS和Gazebo进行机器人仿真的过程中,要注重区分Gazebo、ROS、RViz和rqt之间关系,从而在恰当的场景选用适宜的工具,顺利完成机器人仿真。Gazebo、ROS、RViz和rqt之间的关系和功能之间的差异可以从以下几个方面理解:①ROS更像是一种通信和编程的接口,提供了话题、服务和动作等通信手段,以及C++和Python的编程接口;②rqt就是一个调试ROS的可视化界面,实现了ROS命令行工具的大部分功能,并且提供了简单的数据可视化工具;③Rviz是专门用于ROS中数据的可视化高级工具,也提供了一些与ROS交互的工具;5.1Gazebo简介5.1.3与ROS、RViz和rqt间的区别与联系④Gazebo是进行物理仿真,能够较好的模拟真实机器人的特性,用于替代真实机器人。Gazebo的服务器提供了物理仿真的主要功能,而Gazebo的客户端主要提供了显示功能,在这一点上与RViz有一定的相似。以下通过一个火星探测机器人的例子来说明上述四个工具在机器人开发中的功能和作用。假设发射了一辆火星车降落到了火星,目前人类是无法到达火星的,因此也没有办法真实的接触到火星车和火星车面临的环境。火星环境和火星车就可以认为是由Gazebo提供的,Gazebo能够模拟火星车和环境。5.1Gazebo简介5.1.3与ROS、RViz和rqt间的区别与联系火星车利用自身携带的相机、激光雷达、车轮的里程计、加速度传感器和温度传感器等采集和分析数据,并且根据分析结果自动的在火星上导航。火星车完成这些功能可以认为是在ROS操作系统统筹下完成的。在地球上的人类想要了解火星车的状态及其面临的火星环境,只能查看和分析由火星车上传感器采集并从火星上传输来的数据。直接观察这些数据很不直观,而利用可视化技术能够将数据展示为图形、图像就非常直观。此外,人类也需要发送指令到火星车,控制火星车。火星车把数据从火星传输到地球,以及发送指令到火星车可以简单认为由ROS的话题完成通信,而在地球上可视化数据则正是RViz的功能,从而可以在地球上人类无需亲自到火星的情况下直观地观察和分析火星车的状态和火星上的环境。5.1Gazebo简介5.1.3与ROS、RViz和rqt间的区别与联系当然火星车在送往火星前要完成制作和测试,保证其内部各节点通信正常,在部署到火星后能够正常工作。rqt就是火星车在制作和测试时使用的工具。5.2安装与运行5.2安装与运行5.2.1Gazebo安装Gazebo作为开放源代码的软件,在安装上可以从源代码直接编译,也可以安装编译好的二进制程序。一般使用中直接安装官方编译好的二进制程序既快捷又方便。Gazebo一方面作为物理仿真工具其是一个独立的应用,另一方面其向ROS2提供了机器人仿真功能可以看作是ROS2的一个组件。针对上述两种情况Gazebo分别提供了相应的安装方法。以下对这两种Gazebo的安装方法进行介绍。(1)以独立应用安装。首先,下载和保存Gazebo的GPG公钥到系统。打开终端执行命令:sudowget/gazebo.gpg-O/usr/share/keyrings/pkgs-osrf-archive-keyring.gpg5.2安装与运行5.2.1Gazebo安装其次,包含Gazebo软件包源的信息添加到系统的APT源列表中,并使用上述安装Gazebo的GPG公钥进行签名验证,以便通过包管理器安装Gazebo。在终端中执行命令:echo"deb[arch=$(dpkg--print-architecture)signed-by=/usr/share/keyrings/pkgs-osrf-archive-keyring.gpg]/gazebo/ubuntu-stable$(lsb_release-cs)main"|sudotee/etc/apt/sources.list.d/gazebo-stable.list>/dev/null5.2安装与运行5.2.1Gazebo安装最后,更新软件源列表和安装GazeboHarmonic。在终端中执行命令:sudoapt-getupdatesudoapt-getinstallgz-harmonic此外,删除Gazebo的命令是:sudoaptremovegz-harmonic&&sudoaptautoremove5.2安装与运行5.2.1Gazebo安装(2)作为ROS2的功能包进行安装。在安装好ROS2的条件下,直接在终端里执行命令:sudoaptinstallros-jazzy-ros-gz-y以上两种安装对于Gazebo的使用都没有影响,安装完成后验证安装结果执行命令:gz注意:在已经有安装好的ROS2时,推荐使用第二种安装Gazebo的方法。5.2安装与运行5.2.1Gazebo安装上述命令是Gazebo所有工具的入口命令(类似于ROS2中的ros2命令),本身不提供具体的功能,具体功能通过二级命令提供,运行后会显示Gazebo所包含的所有工具,命令的运行效果如图所示。5.2安装与运行5.2.1Gazebo安装下表列出了Gazebo中的各工具的名称和功能简介,其中启动Gazebo仿真程序的sim命令使用最为常用。名称功能名称功能model显示模型相关信息sim启动Gazebo仿真程序sdfSDF文件的便利程序gui启动图像用户界面msg显示消息的相关信息fuel管理仿真资源plugin显示插件的相关信息param查询、显示和设置参数信息topic显示话题相关信息service显示服务相关信息log记录和回放话题help显示帮助信息5.2安装与运行5.2.2Gazebo运行启动Gazebo仿真的命令为:gzsim上述命令在第一次运行时会启动一个导航窗口,效果如图5.3所示。导航窗口头部显示了程序名称和版本,左侧显示了一个包含六个示例的机器人仿真环境,右侧列表为Gazebo中一些自带的默认仿真环境,当选中一个仿真文件(例如shapes.sdf)后,导航窗口的右下角按钮RUN激活,点击该按钮启动仿真。5.2安装与运行5.2.2Gazebo运行注意:如果是首次运行左侧的5个示例仿真环境,Gazebo需要连网下载相关资源后才会进入正常仿真,在下载时Gazebo的GUI会出现不响应(假死)状态。5.2安装与运行5.2.2Gazebo运行在仿真启动后,GazeboSim会解析SDF文件生成仿真的场景,并在启动的GUI中显示仿真场景,如图所示。5.2安装与运行5.2.2Gazebo运行gzsim<SDFfile>命令用于Gazebo直接打开SDF仿真文件,其中<SDFfile>参数为SDF文件的路径或Gazebo自带仿真示例的名称。例如打开上述Gazebo自带仿真示例的shapes.sdf文件,可执行命令:gzsimshapes.sdf此外,gzsim还支持添加相关参数用于设置仿真的相关信息。以下介绍其中几个常用的参数:5.2安装与运行5.2.2Gazebo运行①-vnum,num为0~4之间的整数,用于设置终端里输出的信息级别,值越大越详细(可用于调试Gazebo),默认值是1,如果不带num参数,只使用-v时,默认值为3。②-r,使得Gazebo在启动后自动地开始运行仿真。③-s,只启动Gazebo的服务器使仿真在后台运行,不启动图5.4所示的用户界面。因为省去了向用户界面的数据传输和渲染,能够提升仿真效率。④-g,只启动Gazebo的客户端,需要有Gazebo的服务器端才可以显示仿真环境。此外,通过gzsim-help命令可查看更多Gazebo参数的功能和设置。5.2安装与运行5.2.2Gazebo运行对于Gazebo自带的示例仿真环境在启动时只需要提供仿真环境的文件名即可,而这些仿真文件的实际路径则由Gazebo自身提供。Gazebo自带的所有示例仿真环境(如上述加载的shapes.sdf)根据安装的方式不同,实际路径有所不同。如果以ROS2功能包的形式安装了Gazebo,那么所有122个示例仿真环境位于/opt/ros/jazzy/opt/gz_sim_vendor/share/gz/gz-sim8/worlds目录下。合理地利用和参考这些Gazebo自带的示例仿真环境能够快速掌握Gazebo仿真的使用方法。5.2安装与运行5.2.2Gazebo运行此外,Gazebo在启动时会使用以下几个重要的环境变量:①GZ_SIM_RESOURCE_PATH:设置本地模型库的目录,Gazebo可根据该环境变量识别和加载本地模型库中的模型。该环境变量可添加多个路径,路径间用冒号分割。②GZ_SIM_SYSTEM_PLUGIN_PATH:设置GazeboSim自定义插件的目录,Gazebo可根据该环境变量识别和加载插件。该环境变量可添加多个路径,路径间用冒号分割。③GZ_SIM_SERVER_CONFIG_PATH:设置GazeboSim服务器配置文件的路径。④GZ_GUI_PLUGIN_PATH:设置GUI插件的路径。该环境变量可添加多个路径,路径间用冒号分割。5.2安装与运行5.2.2Gazebo运行⑤GZ_GUI_RESOURCE_PATH:设置GUI资源(如GUI配置文件)的地址。在.bashrc文件中可以根据需要设置上述Gazebo使用的环境变量,当在终端中启动Gazebo时能够识别和获取相应的环境变量。例如,将用户主文件夹下子目录gz_models中的模型添加到Gazebo中只需要在.bashrc文件中添加和设置环境变量GZ_SIM_RESOURCE_PATH,代码如下:exportGZ_SIM_RESOURCE_PATH=~/gz_models如果还需要添加一个新的文件夹gz_robots作为模型库,则只需修改上述代码为:exportGZ_SIM_RESOURCE_PATH=~/gz_models:~/gz_robots5.2安装与运行5.2.2Gazebo运行上述添加环境变量GZ_SIM_RESOURCE_PATH后,每次在终端里启动Gazebo后,Gazebo就会识别环境变量GZ_SIM_RESOURCE_PATH所指向文件夹内的模型,并且能够在Gazebo中使用。其他4个环境变量的设置方法与GZ_SIM_RESOURCE_PATH环境变量的设置方法相似。这些环境变量具体的作用和效果将在后续进行介绍。5.3GUI功能简介5.3GUI功能简介GUI是Gazebo的客户端程序,是仿真中最常使用和接触最多的工具。Gazebo的图形用户界面提供了显示仿真环境,管理配置仿真环境和调试仿真环境等功能。GazeboGUI一般是通过gzsim命令将服务器与GUI界面同时启动,也可以使用gzgui命令单独启动GUI界面。5.3GUI功能简介5.3.1GUI界面以下通过Gazebo中自带的一个示例仿真文件介绍GazeboGUI界面常用功能的用法。首先启动一个差速小车的仿真环境,执行命令:gzsimdiff_drive.sdf上述命令会启动服务器,并根据默认的GUI设置显示图形用户界面。GUI启动后的效果如图所示,Gazebo的GUI可以分为工具栏,右边栏,场景三部分。5.3GUI功能简介5.3.1GUI界面5.3GUI功能简介5.3.1GUI界面(1)工具栏:位于标题GazeboSim的下方,提供了两个工具,分别位于工具栏的最左侧和最右侧。左侧工具的图标是,提供了文件菜单,点击后调出如图所示的选项,提供了保存仿真世界,加载和保存GUI配置,设置GUI样式,查看Gazebo信息,以及退出Gazebo等功能。5.3GUI功能简介5.3.1GUI界面右侧工具的图标是

,提供了向仿真环境中添加Gazebo插件的功能,点击时会弹可用的插件,选择使用的插件点击后即可在右边栏加入该插件,是仿真中使用频率最高的工具,在后续的仿真中将会介绍部分相关插件的使用方法。5.3GUI功能简介5.3.1GUI界面(2)场景:占据GUI最大的区域,主要用于显示仿真环境,使仿真更真观形象。在场景中提供了鼠标的交互功能,鼠标左键按下移动时可移动视角,鼠标中键按下移动时可旋转视角,鼠标右键按下时可缩放视野。此外,在场景的左上角提供了两行管理和操作场景的便利工具,在左下角提供了控制仿真的工具,在右下角提供了显示仿真进度的信息。5.3GUI功能简介5.3.1GUI界面在下图显示的工具中,每个图标提供一种功能,第一行的功能是向仿真环境中添加立方体、球体、圆锥、圆柱和胶囊体5种基本几何体,以及添加点光源、方向光源和聚光光源等三种不同类型;第二行的功能分别是选择实体、移动实体、旋转实体、设置对齐的数值、保存当前场景到图像、复制实体和粘贴实体等功能。5.3GUI功能简介5.3.1GUI界面下图显示了场景中的仿真控制工具。该工具位于仿真场景的左下角提供了三个功能,分别是启动仿真,仿真指定步数和重置仿置功能。注意:只有点击了启动仿真按钮后,Gazebo才会运行仿真。初学时往往会忘记该步骤,从而观察不到仿真。此外,可以在打开仿真时向gzsim命令添加-r参数以自动启动仿真。5.3GUI功能简介5.3.1GUI界面下图显示了场景中仿真进度的信息提示工具。该工具位于仿真场景的右下角,可通过<形的按钮进行展开和折叠,显示了仿真时间、真实时间和仿真的步数等信息。5.3GUI功能简介5.3.1GUI界面(3)右边栏:位于仿真场景的右侧,用于显示加载的插件。在图所示的右边栏中有两个插件,功能分别是显示实体信息和管理仿真环境中的实体。在EntityTree插件中列出了场景中的所有实体,在鼠标选中后,会在显示实体信息的插件中显示实体的信息,并可通过鼠标右键打开实体的上下文件菜单。5.3GUI功能简介5.3.1GUI界面实体的上下文件菜单提供了对指定实体的一些方便的功能,如移动、跟随、移除、复制、粘贴和改变实体显示方式等,如图所示。改变实体显示方式可对构建和检查机器人模型提供便利。5.3GUI功能简介5.3.2案例:利用GUI控制小车本案例中将向上述仿真场景中添加和移动一个圆锥几何体,保存编辑后的仿真场景,在开始仿真后利用差速控制插件Teleop控制车辆移动,并通过改变车辆的显示方法观察车在移动时关节的转动。具体步骤如下:(1)编辑场景。在上述打开的仿真环境中使用场景左上的工具栏上的工具向场景添加一个圆锥,然后使用平移和旋转工具将圆锥移动到地面以上,并旋转一定角度,如图所示。5.3GUI功能简介5.3.2案例:利用GUI控制小车(2)保存场景。使用工具栏左侧的文件菜单中的SaveWorldas功能,设置保存的路径为用户主目录且文件名为myworld.sdf,并勾选Expandincludetags选项,完成后点击确认。保存完成后,在用户主目录下会出现一个名为myworld.sdf的文件。该文件记录了Gazebo中全部完整的仿真场景,其本质上是一种定义了特殊标签的XML格式文件。这种由Gazebo定义的用于描述仿真场景的文件格式称为SDFormat,简称为SDF。5.3GUI功能简介5.3.2案例:利用GUI控制小车(3)加载仿真环境。在终端里使用Ctrl+C键关闭上述仿真环境,然后使用Gazebo打开编辑过的仿真环境,执行命令:gzsimmyworld.sdf上述命令运行后,Gazebo就会打开保存的myworld.sdf仿真场景,与保存前添加了圆锥的场景一致。(4)启动仿真。点击仿真场景中左下角的运行按钮启动仿真。在仿真开启后,Gazebo服务器使用物理引擎对场景中的各实体进行模拟仿真,位于空中的圆锥受重力影响下落到地面。5.3GUI功能简介5.3.2案例:利用GUI控制小车(5)加载差速控制插件。点击工具栏右侧的插件按钮,在搜索框输入Teleop,在结果中点击相应的插件。Teleop插件则会出现在右侧边栏,如图所示。(6)利用Teleop插件控制小车移动。设置Teleop插件中Topic(话题)为/model/vehicle_blue/cmd_vel。点击Teleop下方的上、下、左和右等几个方向键即可发布控制小车运动的话题,仿真场景中的一个小车就开始了运动。注意:Teleop插件还提供了设置速度,以及提供了键盘和滑动条控制等方法的功能。5.4Gazebo命令行工具5.4Gazebo命令行工具为了能够与ROS2进行联合仿真,Gazebo也参考和借鉴了ROS2中的通信机制,提供了话题和服务两种通信机制,以及参数和消息类型等相关的概念。相应的Gazebo在命令行工具中也提供了对话题、服务、参数和消息类型的查询、管理和使用等功能。下面仍然以上一节中使用的diff_drive.sdf为例介绍Gazebo中几个常用命令行工具的使用方法。首先用Gazebo打开diff_drive.sdf并启动仿真,执行命令:gzsimdiff_drive.sdf-r5.4Gazebo命令行工具5.4.1话题gztopic命令提供了有关话题的一些功能。常用的的功能有:(1)查询所有话题。gztopic-l上述命令运行后,会查询当前仿真环境中发布和接收的所有话题。5.4Gazebo命令行工具5.4.1话题/clock/gazebo/resource_paths/gui/camera/pose/gui/currently_tracked/gui/track/model/vehicle_blue/odometry/model/vehicle_blue/tf/model/vehicle_green/odometry/model/vehicle_green/tf/stats/world/diff_drive/clock/world/diff_drive/dynamic_pose/info/world/diff_drive/pose/info/world/diff_drive/scene/deletion/world/diff_drive/scene/info/world/diff_drive/state/world/diff_drive/stats/model/vehicle_blue/cmd_vel/model/vehicle_blue/enable/model/vehicle_green/cmd_vel/model/vehicle_green/enable/world/diff_drive/light_config/world/diff_drive/material_color5.4Gazebo命令行工具5.4.1话题在上述话题中,有些是Gazebo场景中发布环境信息的话题,有些是场景中实体发布的话题。(2)查询指定话题的详细信息。例如查询控制蓝色小车的话题/model/vehicle_blue/cmd_vel,执行命令:gztopic-i-t/model/vehicle_blue/cmd_vel上述命令的运行结果如下所示,在输出结果中显示了在话题/model/vehicle_blue/cmd_vel上没有发布者,只有一个接收者,在该话题上传输的消息类型是gz.msgs.Twist。Nopublishersontopic[/model/vehicle_blue/cmd_vel]Subscribers[Address,MessageType]:tcp://13:35633,gz.msgs.Twist5.4Gazebo命令行工具5.4.1话题(3)发布话题。例如向话题/model/vehicle_blue/cmd_vel发布控制小车速度的话题,驱动仿真环境中小车移动,执行命令:gztopic-t/model/vehicle_blue/cmd_vel-mgz.msgs.Twist-p"linear:{x:1.0},angular:{z:0.5}"上述命令运行后会创建一个话题发布者,通过-t参数设置话题名称,-m参数设置发送的消息类型,-p参数设置消息的具体数据,将线速度设置为1.0m/s,角速度设置为0.5rad/s。在接收到话题后,Gazebo就会控制小车转圈,与使用GUI中Teleop插件的功能相同。5.4Gazebo命令行工具5.4.1话题同理,使另一辆小车移动,只需要向控制另一辆小车的话题发布速度控制话题即可,命令如下:gtopic-t/model/vehicle_green/cmd_vel-mgz.msgs.Twist-p"linear:{x:1.0},angular:{z:0.5}"上述命令运行后就会看到两个小车在仿真环境中都开始进行转圈运动了。(4)接收话题。用于查看在某话题上传输的数据。例如在仿真运行时,仿真环境中的小车会发布一种叫作里程计(Odometry)的话题,类似于汽车中的码表,给出小车的位置和速度信息。仿真环境中,查询其中一个小车的里程计话题执行命令:gztopic-e-t/model/vehicle_blue/odometry5.4Gazebo命令行工具5.4.1话题上述命令运行后会创建一个话题订阅者,会将接收到小车里程计信息显示在终端里:在输出的一组小车的里程计信息中包含了时间戳,坐标系,位置,朝向,线速度和角速度等信息。header{stamp{sec:923}data{key:"frame_id"value:"vehicle_blue/odom"}data{key:"child_frame_id"value:"vehicle_blue/chassis"}}pose{position{x:-1.3950742001690866y:0.19881787719710337}orientation{z:-0.7085906685745913w:0.70561977325540826}}twist{linear{x:0.50000000001659828}angular{z:0.50000000002000888}...(省略输出)5.4Gazebo命令行工具5.4.2服务gzservice命令提供了有关服务的一些功能。常用的功能有:(1)列出所有服务。gzservice-l上述命令在运行后,会在终端里显示当前Gazebo中的所有服务:/gazebo/resource_paths/add/gazebo/resource_paths/get/gazebo/resource_paths/resolve/gazebo/worlds/gui/camera/view_control/gui/screenshot...(省略输出)/server_control/world/diff_drive/control/world/diff_drive/control/state/world/diff_drive/create/world/diff_drive/remove/world/diff_drive/scene/graph...(省略输出)5.4Gazebo命令行工具5.4.2服务(2)查询指定服务的详细信息。命令格式是gzservice-i-s<服务名称>,例如查看移除仿真场景中实体的服务/world/diff_drive/remove的详细信息,执行命令:gzservice-i-s/world/diff_drive/remove命令的运行结果如下所示,显示了客户端请求的消息类型为gz.msgs.Entity,服务器响应的消息类型为gz.msgs.Boolean类型,以及服务器的地址。Serviceproviders[Address,RequestMessageType,ResponseMessageType]:tcp://13:40057,gz.msgs.Entity,gz.msgs.Boolean5.4Gazebo命令行工具5.4.2服务(3)调用服务。根据服务名称和服务的详细信息可以构造一个客户端向服务器发起请求,完成特定的服务。例如,删除仿真场景中的一个小车,执行命令:gzservice-s/world/diff_drive/remove--reqtypegz.msgs.Entity--reptypegz.msgs.Boolean--timeout3000--req'name:"vehicle_blue",type:2'5.4Gazebo命令行工具5.4.2服务在上述命令中,通过-s参数设置了调用服务的名称,--reqtype设置了请求消息的类型,--reptype设置了服务器响应消息的类型,--req设置了服务请求的消息类型gz.msgs.Entity的数据,其中name为删除的实体名称,type为实体的类型。Gazebo对实体总共定义了10种类型,分别是NONE=0,LIGHT=1,MODEL=2,LINK=3,VISUAL=4,COLLISION=5,SENSOR=6,JOINT=7,ACTOR=8,WORLD=9。下图显示了服务调用前后的效果,在服务调用后,仿真场景中的一辆小车被移除。5.4Gazebo命令行工具5.4.3消息类型发布话题和调用服务都需要根据消息类型的详细结构构造出符合要求的消息结构。gzmsg命令提供了查询消息类型的一些功能,从而可以获得指定消息类型的详细结构从而为构造指定消息类型的数据提供参考。gzmsg命令常用以下两个功能:(1)列出所有的消息类型。gzmsg-l5.4Gazebo命令行工具5.4.3消息类型上述命令会列出Gazebo中现有的所有共100余种消息类型,输出结果如下:gz.msgs.Actorgz.msgs.Actuators...(省略输出)gz.msgs.Imagegz.msgs.ImageGeomgz.msgs.Inertial...(省略输出)gz.msgs.WorldResetgz.msgs.WorldStatisticsgz.msgs.Wrench5.4Gazebo命令行工具5.4.3消息类型(2)查看指定消息类型的详细结构。使用命令gzmsg-i<消息类型>的格式可查看指定消息类型的详细结构。如查看表示控制小车速度的消息gz.msgs.Twist的消息结构,执行命令:gzmsg-igz.msgs.Twist上述命令的输出结果如下:Name:gz.msgs.TwistFile:gz/msgs/tomessageTwist{.gz.msgs.Headerheader=1;.gz.msgs.Vector3dlinear=2;.gz.msgs.Vector

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论