第 6 章 机器人仿真系统 1 —— 概述 + URDF 集成 Rviz 基本流程 urdf01_rviz

news/2024/5/2 16:18:43/文章来源:https://blog.csdn.net/qq_42731062/article/details/127196636

文章目录

  • 0 学习目标
  • 1 相关组件
    • 1.1 URDF —— 机器人建模
    • 1.2 Rviz —— 感知环境
    • 1.3 Gazebo —— 创建仿真环境
  • 2 课程说明
  • 3 URDF 集成 Rviz 基本流程
    • 3.1 创建功能包,导入依赖 —— 功能包 urdf01_rviz
    • 3.2 编写 URDF 文件 —— demo01_helloworld.urdf
    • 3.3 launch 文件集成 URDF 与 Rviz —— demo01_helloworld.launch
      • 3.3.1 编译执行
      • 3.3.2 Rviz 设置参数
    • 3.4 Rviz 中显示机器人模型(重要)
    • 3.5 优化 rviz 启动 (保存 重要)

0 学习目标

对于ROS新手而言,可能会有疑问:学习机器人操作系统,实体机器人是必须的吗?答案是否定的,机器人一般价格不菲,为了降低机器人学习、调试成本,在ROS中提供了系统的机器人仿真实现,通过仿真,可以实现大部分需求,本章主要就是围绕“仿真”展开的,比如,本章会介绍:

  • 如何创建并显示机器人模型 —— URDF 创建模型
  • 如何搭建仿真环境 —— Gzebo 仿真环境
  • 如何实现机器人模型与仿真环境的交互 —— Rviz

本章预期的学习目标如下:

  • 能够独立使用URDF创建机器人模型,并在Rviz和Gazebo中分别显示
  • 能够使用Gazebo搭建仿真环境
  • 能够使用机器人模型中的传感器(雷达、摄像头、编码器…)获取仿真环境数据

下载素材:主目录下的 sim_demo

  • git clone https://github.com/zx595306686/sim_demo.git

1 相关组件

概念

  • 机器人系统仿真:是通过计算机对实体机器人系统进行模拟的技术,在 ROS中,仿真实现涉及的内容主要有三:对机器人建模(URDF)、创建仿真环境,比如障碍物信息(Gazebo)以及感知环境,以机器人的视角观察世界(Rviz)等系统性实现。

1.1 URDF —— 机器人建模

  • URDF是 Unified Robot Description Format 的首字母缩写,直译为统一(标准化)机器人描述格式,可以以一种XML 的方式描述机器人的部分结构,比如底盘、摄像头、激光雷达、机械臂以及不同关节的自由度…,该文件可以被 C++
    内置的解释器转换成可视化的机器人模型,是 ROS 中实现机器人仿真的重要组件。

1.2 Rviz —— 感知环境

  • RViz 是 ROS Visualization Tool 的首字母缩写,直译为ROS的三维可视化工具。它的主要目的是以三维方式显示ROS消息,可以将数据进行可视化表达。例如:可以显示机器人模型,可以无需编程就能表达激光测距仪(LRF)传感器中的传感器到障碍物的距离,RealSense、Kinect或Xtion等三维距离传感器的点云数据(PCD, Point Cloud Data),从相机获取的图像值等。
  • 以“ros- [ROS_DISTRO] -desktop-full”命令安装ROS时,RViz会默认被安装

1.3 Gazebo —— 创建仿真环境

  • Gazebo是一款3D动态模拟器,用于显示机器人模型并创建仿真环境,能够在复杂的室内和室外环境中准确有效地模拟机器人。与游戏引擎提供高保真度的视觉模拟类似,Gazebo提供高保真度的物理模拟,其提供一整套传感器模型,以及对用户和程序非常友好的交互方式。
  • 以“ros- [ROS_DISTRO] -desktop-full”命令安装ROS时,gzebo会默认被安装

2 课程说明

机器人的系统仿真是一种集成实现,主要包含三部分:

  • URDF 用于创建机器人模型
  • Gzebo 用于搭建仿真环境
  • Rviz 图形化的显示机器人各种传感器感知到的环境信息

三者应用中,只是创建 URDF 意义不大,一般需要结合 Gazebo 或 Rviz 使用,在 Gazebo 或 Rviz 中可以将 URDF 文件解析为图形化的机器人模型,一般的使用组合为:

  • 如果非仿真环境,那么使用 URDF 结合 Rviz 直接显示感知的真实环境信息
  • 如果是仿真环境,那么需要使用 URDF 结合 Gazebo 搭建仿真环境,并结合 Rviz 显示感知的虚拟环境信息

3 URDF 集成 Rviz 基本流程

URDF 不能单独使用,需要结合 Rviz 或 Gazebo,URDF 只是一个文件,需要在 Rviz 或 Gazebo 中渲染成图形化的机器人模型,当前,首先演示URDF与Rviz的集成使用,因为URDF与Rviz的集成较之于URDF与Gazebo的集成更为简单,后期,基于Rviz的集成实现,我们再进一步介绍URDF语法。

  • 需求描述:在 Rviz 中显示一个盒状机器人

实现流程:

  • 准备:新建功能包,导入依赖
  • 核心:编写 urdf 文件
  • 核心:在 launch 文件集成 URDF 与 Rviz
  • 在 Rviz 中显示机器人模型

3.1 创建功能包,导入依赖 —— 功能包 urdf01_rviz

  • 功能包 urdf01_rviz
  • 导入依赖 urdf xacro
  • 创建 4 个 文件夹:launch、urdf、meshes(放皮肤)、config(存储配置文件)

创建一个新的功能包,名称自定义,导入依赖包:urdf与xacro
在当前功能包下,再新建几个目录:

  • urdf:存储 urdf 文件的目录
  • meshes:机器人模型渲染文件(暂不使用)
  • config:配置文件
  • launch:存储 launch 启动文件

3.2 编写 URDF 文件 —— demo01_helloworld.urdf

首先在 URDF 文件下 新建两个文件夹:urdf + xacro
在这里插入图片描述

  • 新建一个子级文件夹:urdf(可选),文件夹中添加一个.urdf文件,复制如下内容
<robot name="mycar"><link name="base_link"> 连杆<visual> 可视化<geometry> 几何模型<box size="0.5 0.2 0.1" /> box是盒子</geometry></visual></link>
</robot>

3.3 launch 文件集成 URDF 与 Rviz —— demo01_helloworld.launch

在launch目录下,新建一个 launch 文件,该 launch 文件需要启动 Rviz,并导入 urdf 文件,Rviz 启动后可以自动载入解析urdf文件,并显示机器人模型。
核心问题:如何导入 urdf 文件? 在 ROS 中,可以将 urdf 文件的路径设置到参数服务器,使用的参数名是:robot_description。

<launch><!-- 1. 在参数服务器载入 urdf 文件 robot_description是固定--><param name="robot_description" textfile="$(find urdf01_rviz)/urdf/urdf/demo01_helloworld.urdf" /><!-- 2. 启动 rviz --><node pkg="rviz" type="rviz" name="rviz" />
</launch>

3.3.1 编译执行

  • 启动窗口1
cd demo03_ws/
source ./devel/setup.bash
roslaunch urdf01_rviz demo01_helloworld.launch

3.3.2 Rviz 设置参数

  1. 点击 Add,在里面添加 RobotModel
  2. 会出现报错
  3. 然后将 Fixed Frame 里面的 map 修改为 base_link(urdf 里面 link name=“base_link”)
  4. Add 里面加坐标系 Axes

3.4 Rviz 中显示机器人模型(重要)

rviz 启动后,会发现并没有盒装的机器人模型,这是因为默认情况下没有添加机器人显示组件,需要手动添加,添加方式如下:
在这里插入图片描述

  • 红色 x 轴 长度
  • 绿色 y 轴 宽度
  • 蓝色 z 轴 高度
    在这里插入图片描述

3.5 优化 rviz 启动 (保存 重要)

重复启动launch文件时,Rviz 之前的组件配置信息不会自动保存,需要重复执行步骤4的操作,为了方便使用,可以使用如下方式优化:

  • 首先,将当前配置 urdf01_rviz 保存进 config 目录,设置文件名 show_mycar
    在这里插入图片描述
  • 然后,launch文件中 Rviz 的启动配置添加参数:args,值设置为 -d 配置文件路径
<launch><param name="robot_description" textfile="$(find 包名)/urdf/urdf/urdf01_HelloWorld.urdf" /><node pkg="rviz" type="rviz" name="rviz" args="-d $(find 报名)/config/rviz/show_mycar.rviz" />
</launch>
  • 就是将 rviz 读进来
<launch><!-- 1. 在参数服务器载入 urdf 文件 robot_description是固定--><param name="robot_description" textfile="$(find urdf01_rviz)/urdf/urdf/demo01_helloworld.urdf" /><!-- 2. 启动 rviz --><node pkg="rviz" type ="rviz" name="rviz" args ="-d $(find urdf01_rviz)/config/show_mycar.rviz"/>
</launch>

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

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

相关文章

读取文件报错:FileNotFoundError: [Errno 2] No such file or directory

文章目录问题描述问题分析解决办法问题描述 使用 img Image.open(data/DSC_8923.jpg) 读取一张图片时&#xff0c;报 FileNotFoundError: [Errno 2] No such file or directory: data/DSC_8923.jpg 的错误&#xff0c;如下图所示&#xff1a; 问题分析 很明显&#xff0c…

yolov5 原理解析

1、 网络结构 关于YOLOv5的网络结构其实网上相关的讲解已经有很多了。网络结构主要由以下几部分组成&#xff1a; Backbone: New CSP-Darknet53Neck: SPPF, New CSP-PANHead: YOLOv3 Head激活函数 通过和上篇博文讲的YOLOv4对比&#xff0c;其实YOLOv5在Backbone部分没太大变…

基础 | NIO - [0 复制]

INDEX1 0 复制1 0 复制演进1 示例1 0 复制 通常在进行 IO 操作时&#xff0c;涉及到 2 种复制 DMA 复制 不需要 CPU 参与&#xff0c;效率极高&#xff0c;但不可避免CPU 复制 就是 0 复制中需要消灭的复制&#xff0c;0 复制其实是指 0 CPU 复制 1 0 复制演进 BIO 用户态/…

如何自己设计一个定时任务分布式调度器

为什么要使用分布式调度器 分布式调度器主要应用于系统中一些任务定时调度处理。通常我们设计一个定时任务&#xff0c;最简单的就是直接使用scheduled注解配置好定时任务&#xff0c;这样开发工作也简单。但是也许会有一种情况&#xff0c;如果发生在生产环境上&#xff0c;需…

FPGA学习笔记(五)Testbench文件编写

这里写目录标题Testbench文件时间单位/精度测试模块输入信号初始化always 语句实现信号变化实例化系统函数Testbench文件 编写Testbench的目的是在Modsim中进行仿真验证&#xff0c;查看仿真波形和打印信息验证代码逻辑。 例如下面代码&#xff1a; timescale 1ns/1ns modul…

python数据容器---list

目录 1、列表的定义 1.1 基本语法 1.2 定义变量 1.3 定义空列表 2、列表的下标&#xff08;索引&#xff09; 2.1 基本语法 2.1.1 正向查找 2.1.2 方向查找 2.1.3 嵌套列表 3、列表的常用操作 3.1 查找某元素的下标 3.2 修改特定索引的值 3.3 插入追加元素 3.4 删…

基于java+jsp+ssm水果蔬菜销售系统

生活中,人们买水果或者蔬菜都是去菜市场买,因为那里是卖水果、蔬菜的聚集地。农商们把水果、蔬菜从远处运到那里,进行销售。但是这种销售方式的不足在于每次运输的数量是有限的,并且运输过程中也影响了水果、蔬菜的口感。随着生活节奏的加快,人们越来越注重高效的在线服务。在线…

让GPU跑的更快

作为一个cuda爱好者 一定要好好看看 不再让CPU和总线拖后腿&#xff1a;Exafunction让GPU跑的更快&#xff01;确实只用cpu会卡的一比... 在云服务中使用 GPU 是获得低延迟深度学习推理服务最经济的方式。使用 GPU 的主要瓶颈之一是通过 PCIe 总线在 CPU 和 GPU 内存之间复制…

关卡一: ajax

【学习前提】 完成前端开发基础和JavaScript基础学习 【阶段说明】 Ajax这个术语源自描述从基于 Web 的应用到基于数据的应用。 Ajax 不是一种新的编程语言&#xff0c;而是一种用于创建更好更快以及交互性更强的Web应用程序的技术。 使用 JavaScript 向服务器提出请求并处理响…

有被惊艳到 复刻一个大型互联网项目有多简单?大型网约车项目实战+东宝商城(附项目白皮书+核心源码)

从上图可以看出&#xff0c;面试准备其实可以分为两个部分&#xff1a;第一个部分是日常工作中对自己负责项目的抽象、提效、数据化表达&#xff1b;不断反思如何用技术的手段提升业务价值&#xff0c;就是我们日常常说的技术为业务赋能&#xff1b;第二个部分才是决定面试后 &…

第八章 CSP 架构 - CSP 网关配置

文章目录第八章 CSP 架构 - CSP 网关配置CSP 网关配置CSP 网关管理器定义服务器访问定义应用程序访问CSP 网关参数第八章 CSP 架构 - CSP 网关配置 CSP 网关配置 CSP 网关是安装在 Web 服务器上并由其加载的 DLL 或共享库。 CSP 网关检测对扩展名为 .csp 或 .cls 的文件的任何…

ApplicationRunner和CommandLineRunner的作用和区别

一、作用 ApplicationRunner和CommandLineRunner都用于在容器启动后&#xff08;也就是SpringApplication.run()执行结束&#xff09;执行某些逻辑。 可用于项目的一些准备工作&#xff0c;比如加载配置文件&#xff0c;加载执行流&#xff0c;定时任务等 二、共同点和区别 …

nodejs+vue+elementui学生成绩管理系统python/php/java445

前台首页功能模块 学生成绩管理系统设计&#xff1b;主要实现首页、优秀教师、优秀班主任、学校简介、教学课件、公告信息、优秀学生、试卷列表、新闻资讯、我的、跳转到后台&#xff0c;功能。 优秀教师&#xff0c;在优秀教师页面可以填写标题、教师工号、荣誉等详细&#xf…

经典论文研读:《F1:A Distributed SQL Database That Scales》

一 简介 F1是Google提出的分布式关系型数据库&#xff0c;支持便捷的水平伸缩。这篇论文是NewSQL分布式数据库架构的基石。论文首先定义了F1分布式数据库设计的关键方向&#xff1a; 可伸缩性&#xff1a;数据库要提供对业务透明的水平扩展能力&#xff0c;并支持数据迁移、数…

全同态加密(FHE)体系概述

同态加密定义 假设有这样一个场景&#xff0c;用户有一组私密数据&#xff0c;被加密存储在了第三方的云平台&#xff0c;现在&#xff0c;该用户想对这组数据进行某种处理&#xff0c;但是处理过程和结果都不想让第三方云平台看到。当然&#xff0c;用户可以选择将数据下载下…

ITU-T G.781解读(一)

引言 本系列是作者在学习ITU-T时做学习笔记之用&#xff0c;ITU-T的标准库是一个非常庞大的系列&#xff0c;尽管网络上有许多对标准的解读&#xff0c;但作者认为要想系统的掌握一个系列的知识&#xff0c;还是要自己看一遍原汁原味的原文。 时钟同步准则 同步信息通过同步…

【操作系统】第三章:内存管理

第三章&#xff1a;内存管理 OVERVIEW第三章&#xff1a;内存管理一、内存管理1.内存管理内容&#xff08;1&#xff09;地址转换&#xff1a;Point1&#xff1a;程序装入Point2&#xff1a;程序链接&#xff08;2&#xff09;内存保护&#xff1a;&#xff08;3&#xff09;内…

Linux命令:netstat【监控TCP/IP网络,可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息】【TCP的11种状态】

netstat命令是一个监控TCP/IP网络的非常有用的工具&#xff0c;它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。 netstat [选项] 选项描述-a显示所有网络连接和监听的所有端口。-b显示创建每个连接或者监听商品的相关可执行程序。有时候有些已知的可执行…

参数传递和重定向

目录 1、参数传递 方法一 &#xff08;1&#xff09;修改路由配置, 主要是router下的index.js中的 path 属性中增加了 :id 这样的占位符 &#xff08;2&#xff09;视图层传递参数 &#xff08;3&#xff09;接收参数 &#xff08;4&#xff09;测试 方法二&#xff08;…

2022年中国研究生数学建模竞赛A题——移动场景超分辨定位问题

目录一、题目原文1、背景2、研究现状3、待解决的问题二、雷达基础知识三、解决方案一、题目原文 1、背景 在日常家庭生活中&#xff0c;人们可能需要花费大量时间去寻找随意摆放在家中某些角落里的小物品。但如果给某些重要物品贴上电路标签&#xff0c;再利用诸如扫地机器人…