[ROS 系列学习教程] 建模与仿真 - Gazebo 与 URDF 建模介绍

ROS 系列学习教程(总目录)

本文目录

  • 一、Gazebo 介绍
  • 二、URDF 建模介绍
    • 2.1 一个简单的实体
    • 2.2 rivz显示URDF模型
    • 2.3 保存与加载rviz配置
    • 2.4 launch文件快速启动
    • 2.5 package结构

由于种种原因,有时我们不能直接使用真实的机器人进行调试,这时就需要对机器人进行建模与仿真,在虚拟世界中实现对机器人的控制。

常见的机器人仿真系统有多种,比如 Webots、V-REP、MuJoCo、PyBullet 以及 Gazebo 等。

由于ROS官方默认推荐 Gazebo,我们这里仅以 Gazebo为例介绍机器人的建模与仿真。

一、Gazebo 介绍

Gazebo是一个功能丰富的开源机器人仿真平台,具备以下特点和功能:

  • 动力学仿真:Gazebo支持多种高性能的物理引擎,如ODE、Bullet、SimBody和DART,能够进行精确的动力学计算和仿真。
  • 三维可视化环境:它提供了一个逼真的三维环境,包括光线、纹理和影子,使得仿真场景更加接近现实。
  • 传感器仿真:Gazebo支持模拟多种传感器,如激光雷达、相机等,并能模拟传感器噪声,这对于开发和测试机器人感知系统非常重要。
  • 可扩展插件:用户可以通过开发自定义插件来扩展Gazebo的功能,满足特定的仿真需求。
  • 支持多种机器人模型:Gazebo官方提供了多种机器人模型,如PR2、Pioneer2 DX、TurtleBot等,用户也可以使用自己创建的模型。
  • 网络通信:Gazebo支持TCP/IP传输,可以实现远程仿真,后台仿真和前台显示通过网络通信。
  • 云仿真:Gazebo仿真可以在云平台上运行,如Amazon、Softlayer等,方便进行大规模或分布式仿真。

Gazebo通常与机器人操作系统(ROS)结合使用。以下是一些基本的使用方法:

  • 安装Gazebo:一般安装完整版的ROS会一起安装 Gazebo,如果没有安装 Gazebo,可以使用以下方法安装(以gazebo11为例):

    1.添加源
    sudo sh -c 'echo "deb http://packages./gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'2.设置秘钥
    wget https://packages./gazebo.key -O - | sudo apt-key add -3.更新源
    sudo apt update4.安装
    sudo apt install gazebo11 
    sudo apt install libgazebo11-dev
    
  • 导入模型:在使用Gazebo时,需要导入机器人和环境的模型。这些模型通常是以 urdf/sdf 格式存在的,Gazebo支持这两种格式的文件,并且提供了一些常用的模型库供用户下载和使用。

  • URDF和SDF文件:URDF(Unified Robot Description Format)和SDF(Simulation Description Format)是用于描述机器人和仿真环境的两种文件格式。URDF主要用于描述机器人模型,而SDF则用于描述仿真世界。Gazebo可以处理这两种格式的文件,并且用户可以在这两种格式之间进行转换。

二、URDF 建模介绍

URDF(Unified Robot Description Format,统一机器人描述格式)是ROS中一个非常重要的机器人模型描述格式,是一个标准的 XML格式,它可以反映机器人各个组件之间的位置关系。ROS同时也提供了URDF文件的C++解析器,可以解析URDF文件中使用XML格式描述的机器人模型。可以在任何文本编辑器中创建URDF文件,如果已经存在机器人的 CAD 模型,则可以使用一些工具将 CAD 模型转换为 URDF。

URDF描述机器人有一个基本思想,就是一切实体皆连杆(link),实体间的相对运动关系为称为关节(joint)。

2.1 一个简单的实体

首先,感受一下rviz中的显示,我们写一个简单的URDF文件来描述一个圆柱体,如下:

<?xml version="1.0"?>
<robot name="mbot"><link name="base_link"><visual><geometry><cylinder length="0.1" radius="0.2"/></geometry></visual></link>
</robot>

使用rviz查看如下图:

在这里插入图片描述

2.2 rivz显示URDF模型

rviz是怎么找到所指定的URDF模型的呢?

通过向参数服务器查询,没错,URDF模型是储存在参数服务器中的,需要我们写入。

一般是通过 launch 文件写入,如下:

<launch><param name="urdf_hello_world" textfile="$(find simulation_learning)/urdf/hello_world.urdf" />
</launch>

其中,urdf_hello_world 是参数名字,后面供rviz查询模型;textfile 代表从文件写入参数,值为文件路径,$(find simulation_learning) 是查找simulation_learning功能包的路径。

执行上述launch文件即可将你的URDF文件写入ROS参数服务器。

然后打开rviz,初始界面如下图:

在这里插入图片描述

然后点击Add添加视图,选择By display type 中的 RobotModel ,如下图:

在这里插入图片描述

添加后会发现有报错,查看报错信息如下:

在这里插入图片描述

参数 robot_description 不存在,这是rviz RobotModel 默认的参数名,我们需要将Robot Description一项改成自己设置的参数名,如下图:

在这里插入图片描述

可以发现,修改后,模型显示出来了,但仍有报错,报错为 base_linkmap 没有转换关系。我们的模型实体名称为 base_link ,rviz中设置的固定参考系(Fixed Frame)是 map,我们没有告知系统我们的模型在map中的位置,所以会报这个错。将固定参考系设置为我们的 base_link 即可,如下图:

在这里插入图片描述

2.3 保存与加载rviz配置

每次用rviz加载模型都需要配置信息,甚至更多,为了方便,我们可以导出rviz配置,下次打开直接加载即可。

导出配置:依次选择 File -> Save Config As ,然后选择你要保存的位置即可。

加载配置:依次选择 File -> Open Config ,然后选择你的配置文件即可。

在这里插入图片描述

2.4 launch文件快速启动

有时不仅会使用rviz打开模型并加载配置,还会发布模型位置信息,有时甚至还会打开多个模型,这时手动打开rviz就显得过于笨拙了,我们使用launch文件可以快速执行上述任务,如下是打开 hello_world模型并加载rviz配置的launch内容:

<launch><param name="urdf_hello_world" textfile="$(find simulation_learning)/urdf/hello_world.urdf" /><node pkg="rviz" type="rviz" name="rviz" args="-d $(find simulation_learning)/config/hello_world.rviz"/> 
</launch>

其中,hello_world.rviz 导出的rviz配置。

2.5 package结构

工程中,我们一般把上述文件存放在package结构中,需要时可以作为一个功能包发布,

在这里插入图片描述

其中,

  • config :存放rviz配置文件
  • launch :存放launch文件
  • meshes :存放模型渲染文件
  • urdf :存放URDF模型文件
  • src/include :存放源文件和头文件

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

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

相关文章

C++ 之 newmat 矩阵运算库使用笔记

文章目录 Part.I IntroductionChap.I newmat 简介 Part.II 安装与编译Chap.I 直接使用源码Chap.II 基于 CMake 使用源码Chap.III 编译成库 Part.III 关于矩阵的构造与运算Chap.I 矩阵的构造与初始化Chap.II 矩阵的运算Chap.III 矩阵维数和类型的更改Chap.IV 矩阵最值统计 Refer…

Day23_学点儿JSON_定义、数据格式、和XML比较、插件

1 JSON定义 定义&#xff1a;是一种轻量级的数据交换格式 JSON是JavaScript Object Notation缩写 特点&#xff1a; 易于程序员阅读和编写。易于计算机解析和生成。其实是javascript的子集&#xff1a;原生javascript支持JSON <script type"text/javascript">…

64B/66B GT Transceiver 配置

一、前言 前一篇文章已经讲述了64B/66B的编码原理&#xff0c;此篇文章来配置一下7系列GT的64B/66B编码。并讲述所对应的例子工程的架构&#xff0c;以及部分代码的含义。 二、IP核配置 1、打开7 Series FPGAs Transceiver Wizards&#xff0c;选择将共享逻辑放置在example …

CCS中实时显示ADC采样波形

CCS软件中带有波形显示工具&#xff0c;在调试代码的过程中可以比较方便的将代码中待观测的变量直接用曲线的方式显示出来。   下面就演示一下如何在CCS中使用波形显示。这里使用28335芯片&#xff0c;用一个简单的工程来测试。 显示单个变量 #include "DSP2833x_Devi…

探索NDVI:了解植被指数的意义与应用

随着科技的进步和遥感技术的发展&#xff0c;我们能够更深入地了解地球上的植被覆盖情况&#xff0c;而其中一项重要的工具就是NDVI&#xff08;Normalized Difference Vegetation Index&#xff0c;归一化植被指数&#xff09;。NDVI不仅仅是一个数值&#xff0c;更是一扇窥探…

利用遥感技术反演地表温度的方法与意义

​随着科技的不断进步&#xff0c;遥感技术在地球科学领域的应用变得越来越广泛。其中&#xff0c;利用遥感技术反演地表温度已经成为了一种常见的方法&#xff0c;对于环境监测、气候研究、城市规划等领域具有重要意义。 ​地表温度是指地表或地表以下一定深度范围内的温度&am…

C语言高质量编程之assert()和const

目录 编程中常见的错误 assert() const 编程中常见的错误 在编程中我们通常会遇到三种错误形式&#xff0c;分别是&#xff1a;编译型错误&#xff0c;链接型错误&#xff0c;运行时错误。 编译型错误&#xff1a; 在编译阶段发生的错误&#xff0c;绝大多数情况是由语法错误…

【OpenHarmony】TDD-FUZZ环境配置

零、参考 1、AttributeError: ‘ElementTree‘ object has no attribute ‘getiterator‘&#xff1a;https://blog.csdn.net/suhao0911/article/details/110950742 一、创建工作目录 1、新建工作目录如&#xff1a;D:\0000_TDD_FUZZ\0000_ohos_tdd_fuzz。 2、gitee上下载 t…

流氓软件清理绝杀全家桶

下载地址&#xff1a;流氓软件清理绝杀全家桶.zip 网上仍有不少软件中携带流氓软件&#xff0c;甚至某些所谓的大厂出品的工具中也会有一些捆绑&#xff01; 对于玩机经验不太丰富的小白来说&#xff0c;也许一不小心&#xff0c;桌面就会被某些流氓软件搞得乌烟瘴气&#xf…

论文笔记:Teach LLMs to Phish: Stealing Private Information from Language Models

iclr 2024 reviewer 评分 588 1 intro 提出了一种“神经网络钓鱼攻击” 一种新的针对在敏感用户数据上训练或finetune的LLMs的攻击向量攻击者将看似无害的投毒数据插入到模型的训练数据集中&#xff0c;以“教会LLMs进行钓鱼”&#xff0c;即诱导模型记住他人的个人身份信息&…

阿里云优惠券如何领取(阿里云优惠券领取入口)

在云计算日益普及的今天&#xff0c;阿里云作为国内领先的云计算服务提供商&#xff0c;受到了众多企业和个人的青睐。为了回馈广大用户&#xff0c;阿里云经常推出各种优惠活动&#xff0c;其中就包括优惠券的发放。那么&#xff0c;阿里云优惠券如何领取呢&#xff1f;本文将…

Ubuntu-22.04安装KVM虚拟机并安装Windows10

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、KVM是什么&#xff1f;二、安装步骤1.检查虚拟化2.查看KVM虚拟化3.安装KVM4.启用后台进程5.添加用户组6.重启电脑 三、使用步骤1.添加虚拟机2.配置虚拟机3.…