[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 update
    
    4.安装
    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 :存放源文件和头文件

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Tomcat源码解析——源码环境搭建

一、源码下载 在进行源码阅读前&#xff0c;先下载源码包&#xff0c;这样便于做笔记和debug。 我所用的版本是Tomcat7.0.68&#xff0c; Tomcat7.0.68下载地址&#xff1a;Index of /dist/tomcat/tomcat-7/v7.0.68/src 所有Tomcat的源码包下载地址&#xff1a;Index of /dist/…

【C++庖丁解牛】哈希表/散列表的设计原理 | 哈希函数

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 前言1.哈希概念2.哈希冲突…

每日一题(力扣)---从中序与后序遍历序列构造二叉树

思路 根据中序遍历和后序遍历的特性可知&#xff0c;后序遍历的最后一个元素为根元素。然后找到中序遍历中对应的序号。将中序遍历的划分为两部分&#xff0c;左边为左子树&#xff0c;右边为右子树。 方法 由思路可知&#xff0c;可以使用递归。递归函数的入口为划分的区间…

day57 判断子序列 不同的子序列 两个字符串的删除操作 编辑距离

题目1 392 判读子序列 题目链接 392 判断子序列 题意 判断字符串s是否为字符串t的子序列 &#xff08;子序列的相对位置在原字符串中不改变&#xff09; 就是求最长公共子序列的长度与字符串s的长度是否相等 动态规划 1&#xff09;确定dp数组及下标i的含义 dp[i][j]…

二十款好用的屏幕录制,绿色绿色好用软件工具,云盘下载

本人收藏多年的屏幕录制工具&#xff0c;绿色的&#xff0c;你懂得的。。。。 二十款好用的屏幕录制&#xff0c;绿色绿色好用软件工具&#xff0c;值得收藏 下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1RPTlFfeap4TGMnDPgCEo-w?pwdmaky 提取码&#xff1…

C#简单工厂模式的实现

using System.Diagnostics.Metrics; using System.Runtime.InteropServices; using static 手写工厂模式.Program;namespace 手写工厂模式 {internal class Program{public interface eats {void eat();}//定义了一个接口public class rice : eats{public void eat() {Console.…

【Next】动态路由、加载 UI 和流式传输

动态路由 动态段作为 params 属性传递给 layout、page、route 和 generateMetadata 函数。 /app/blog/[slug]/page.tsx export default function Page({params}: {params:{slug:string}}) {return <h1>Slug Page -- {params.slug}</h1> };/app/shop/[...slug]/pa…

【C++成长记】C++入门 | 类和对象(上) |类的作用域、类的实例化、类的对象大小的计算、类成员函数的this指针

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;C❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、类的作用域 二、类的实例化 三、类对象模型 四、this指针 1、this指针的引出 2 this指针的特…

4.8-4.12算法刷题笔记

刷题 堆1. 堆排序2. 模拟堆 哈希表3. 模拟散列表4. 字符串哈希 DFS5. 排列数字6. n-皇后问题 2. BFS&#xff08;队列&#xff09;7. 字母迷宫8. 滑动谜题 3. 树与图的dfs9. 树的重心 4. 树与图的bfs(最短路)10. 图中点的层次( 无权最短路 ) 5. 拓扑排序11. 课程表 6. 朴素dijk…

C++系列-C++前言

什么是C C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序&#xff0c;对于复杂的问题&#xff0c;规模较大的程序&#xff0c;需要高度的抽象和建模时&#xff0c;C语言则不合适&#xff0c;为了解决软件危机&#xff0c;20世纪80年代&#xff0c;计算机界提出…

iterations迭代列表

今天总结一下这个列表的迭代 情况1&#xff0c;两个列表的迭代 import itertoolsfor x1,x2 in itertools.product([1, 5, 8], [0.5, 4]):print((x1,x2))结果如下 情况2&#xff08;一个列表的迭代&#xff09; import itertools# for x1,x2 in itertools.product([1, 5, 8…

大数据产品有哪些分类?各类里知名大数据产品都有哪些?

随着互联网技术的持续进步和全球数字化转型的推进&#xff0c;我们正处于一个数据爆炸的时代。在这样的大背景下&#xff0c;大数据已经逐渐崭露头角&#xff0c;成为了推动各行各业发展的关键因素和核心资源。大数据不仅仅是指数据的规模巨大&#xff0c;更重要的是它蕴含的价…

人员聚集监测识别摄像机

随着科技的不断发展&#xff0c;人员聚集监测识别摄像机已经成为了现代社会安全管理的重要工具。这种摄像机能够对人员聚集的情况进行实时监测和识别&#xff0c;帮助相关部门及时发现和处理潜在的安全风险。 人员聚集监测识别摄像机可以通过高清晰度的摄像头和先进的人脸识别技…

Java实现短信发送并校验,华为云短信配合Redis实现发送与校验

Java实现短信发送并校验&#xff0c;华为云短信配合Redis实现发送与校验 安装sms4j和redis <dependency><groupId>org.dromara.sms4j</groupId><artifactId>sms4j-spring-boot-starter</artifactId><version>3.2.1</version> <…

【自研网关系列】请求服务模块和客户端模块实现

&#x1f308;Yu-Gateway&#xff1a;&#xff1a;基于 Netty 构建的自研 API 网关&#xff0c;采用 Java 原生实现&#xff0c;整合 Nacos 作为注册配置中心。其设计目标是为微服务架构提供高性能、可扩展的统一入口和基础设施&#xff0c;承载请求路由、安全控制、流量治理等…

【python图形界面问题解决】wxPython创建图形界面程序,在代码编译器中正常运行,但是打包后却不能运行解决办法

一、问题 使用wxPython创建一个图形界面&#xff0c;在VSCODE中正常运行&#xff0c;但是打包后&#xff0c;却不能运行&#xff0c;只出现一个一闪而过的窗口&#xff0c;这时最需要看看这窗口到底显示了什么内容。这里可以使用录屏软件录制屏幕&#xff0c;这里使用LICEcap小…

嵌入式单片机补光灯项目操作实现

1.【实验目的】 用于直播效果的补光 2.【实验原理】 原理框架图2.各部分原理及主要功能 1.充电和供电:采用5V2A tepy_c接口充电,3.7V锂电池供电, 2.功能:产品主要是用于直播或拍照时的补光。分为三个模式:白光/暧光&#x

【web网页制作】html+css网页制作学校网站主题校园网页(5页面)【附源码】

学校网页制作目录 涉及知识写在前面一、网页主题二、网页效果Page1、简介Page2、校园风光Page3、学术研究Page4、校训阐述Page5、留言 三、网页架构与技术3.1 脑海构思3.2 整体布局3.3 技术说明书 四、网页源码4.1 主页模块源码4.2 源码获取方式 作者寄语 涉及知识 学校网站主…

鉴权设计(一)———— 登录验证

1、概述 网站系统出于安全性的考虑会对用户进行两个层面的校验&#xff1a;身份认证以及权限认证。这两个认证可以保证只有特定的用户才能访问特定的数据的需求。 本文先实现一个基于jwt拦截器redis注解实现的简单登录验证功能。 2、设计思路 jwt用于签发token。 拦截器用于拦…

第十二届蓝桥杯真题做题笔记

2、卡片 笔记&#xff1a; 直接巧用排列组合求解即可&#xff1a; 我们通过对样例说明进行分析可知&#xff1a;想要分给n个小孩&#xff0c;那么我们就需要满足C(K, 2) K > n才能满足。 #include<bits/stdc.h> using namespace std;int com(int up, int down){i…