在gazebo仿真环境中加载多个机器人
文章目录
- 前言
- 一、基本概念
- 1、xacro
- 2、Gazebo 加载单个机器人模型
- 二、原先launch文件代码
- 三、 修改launch文件加载多个机器人
- 总结
前言
单个机器人的各项仿真实验都基本完成,也实现了远程控制,接下来主要对多机器人编队进行仿真实验,在进行多机器人编队控制前,先要在gazebo仿真中加载多个机器人。
一、基本概念
在gazebo中添加多个机器人需要写或修改launch文件,通过在网上翻看别人的代码,大致明白了调用gazebo仿真launch文件中各部分代码的意思。下面是一些最最基本的概念,在修改launch前稍微了解一下。
1、xacro
类似于函数实现,提高代码复用率,优化代码结构,提高安全性
(1)宏定义
<xacro:macro name="宏名称" params="参数列表(多参数之前使用空格分隔)">
....参数调用格式:${参数名}
</xacro:macro>
(2)宏调用
<xacro:宏名称 参数1=xxx 参数2=xxx/>
(3)文件包含
机器人由多部件组成,不同部件可能封装为单独的xacro文件,最后再将不同的文件集成,组合为完整机器人,可以使用文件包含实现。
<robot name="xxx" xmls:xacro="http://wiki.ros.org/xacro"><xacro:include filename="my_base.xacro"><xacro:include filename="my_camera.xacro"><xacro:include filename="my_laser.xacro">....
</robot>
在launch文件中直接加载xacro的方法
command="$(find xacro)/xacro $(find 文件名)/urdf/.urdf.xacro(文件名)"
2、Gazebo 加载单个机器人模型
<launch><!-- 将Urdf文件的内容加载到参数服务器--><param name="robot_description"textfile=“$(find文件夹名)/urdf/.urdf文件“><!--启动gazebo--><include file="$(find gazebo_ros)/launch/empty_world.launch"/><!--在gazebo中显示机器人模型--><node pkg="gazebo_ros"type="spawn_model"name="model"args="-urdf-model mycar-param robot_description"/></launch>
二、原先launch文件代码
在大致看了上述的说明后就能看懂,在gazebo仿真环境中加载一个机器人的launch文件了。
复制粘贴如下:根据上面的基本概念可以大概的明白代码所描述的内容。
(如我在图中添加的注释)
<launch>
<!--在所提供的burger, waffle, waffle_pi三种机器人呢模型中选择要加载的类型--><arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/> <!--设置机器人的x,y,z坐标,相当于宏定义方面下面使用和后面的修改--><arg name="x_pos" default="-2.0"/><arg name="y_pos" default="-0.5"/><arg name="z_pos" default="0.0"/><!-- 运行gazebo仿真环境 --><include file="$(find gazebo_ros)/launch/empty_world.launch"><arg name="world_name" value="$(find turtlebot3_gazebo)/worlds/turtlebot3_world.world"/><arg name="paused" value="false"/><arg name="use_sim_time" value="true"/><arg name="gui" value="true"/><arg name="headless" value="false"/><arg name="debug" value="false"/></include><!--在launch文件中直接加载机器人xacro模型描述文件--><param name="robot_description" command="$(find xacro)/xacro --inorder $(find turtlebot3_description)/urdf/turtlebot3_$(arg model).urdf.xacro" /><!--在gazeb中显示机器人模型,并设置初始的坐标位置--><node pkg="gazebo_ros" type="spawn_model" name="spawn_urdf" args="-urdf -model turtlebot3_$(arg model) -x $(arg x_pos) -y $(arg y_pos) -z $(arg z_pos) -param robot_description" /></launch>
gazebo启动结果如下:
三、 修改launch文件加载多个机器人
在理解了launch调用和加载的各项指令后,接下来实现在gazebo中加载多个机器人,相比于单机器人,多机器人仿真需要在原基础上加入标签,做到用同样的descripion配置文件加载多个独立的机器人。
具有ns属性,可以将节点组推送到单独的命名空间中。在前面的基础上,我通过指令touch + test(文件名).launch
创建了新的test.launch文件在launch文件中改写成以下内容:
<launch>
<!--首先我将原先选择机器人模型,全部设置为了waffle机器人模型--><arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type turtlebot3_waffle"/><!--因为需要给每个机器人设置初始位置,我将原先的宏定义删除,选择直接在加载的时候定义机器人的初始位置--><!-- 运行gazebo仿真环境 --> <!-- 没有变化 --><include file="$(find gazebo_ros)/launch/empty_world.launch"><arg name="world_name" value="$(find turtlebot3_gazebo)/worlds/turtlebot3_world.world"/><arg name="paused" value="false"/><arg name="use_sim_time" value="true"/><arg name="gui" value="true"/><arg name="headless" value="false"/><arg name="debug" value="false"/></include><!-- 加载多个机器人时需要加入<group>标签 --><!-- 注意每个机器人都要有一个命名空间,且名字不同--><!--在.urdf.xacro后要声明且在下面显示模型后面也要跟上命名空间的名字 -->
<group ns="1"><param name="robot_description" command="$(find xacro)/xacro --inorder '$(find turtlebot3_description)/urdf/turtlebot3_waffle.urdf.xacro' ns:=1" /><!--在-param robot_description后可以指定机器人的初始位置,类似于默认参数,如果不传入数据默认机器人的初始位置是(0,0,0),传入实参后会改变初始位置 --><node pkg="gazebo_ros" type="spawn_model" name="spawn_urdf" args="-urdf -model 1 -param robot_description -x -2.0" />
</group><group ns="2"><param name="robot_description" command="$(find xacro)/xacro --inorder '$(find turtlebot3_description)/urdf/turtlebot3_waffle.urdf.xacro' ns:=2" /><node pkg="gazebo_ros" type="spawn_model" name="spawn_urdf" args="-urdf -model 2 -param robot_description -x -1.5" />
</group><group ns="3"><param name="robot_description" command="$(find xacro)/xacro --inorder '$(find turtlebot3_description)/urdf/turtlebot3_waffle.urdf.xacro' ns:=3" /><node pkg="gazebo_ros" type="spawn_model" name="spawn_urdf" args="-urdf -model 3 -param robot_description -x -2.0 -y 0.7" />
</group><group ns="4"><param name="robot_description" command="$(find xacro)/xacro --inorder '$(find turtlebot3_description)/urdf/turtlebot3_waffle.urdf.xacro' ns:=4" /><node pkg="gazebo_ros" type="spawn_model" name="spawn_urdf" args="-urdf -model 4 -param robot_description -x -1.5 -y 0.7" />
</group></launch>
运行test.launch文件,即可在Gazebo仿真环境中加载多个机器人模型。
总结
在Gazebo仿真环境中成功加载了多个机器人模型,接下来想办法实现在Gazebo中实现多机器人的编队控制。
相关文章:

在gazebo仿真环境中加载多个机器人
文章目录 前言一、基本概念1、xacro2、Gazebo 加载单个机器人模型 二、原先launch文件代码三、 修改launch文件加载多个机器人总结 前言 单个机器人的各项仿真实验都基本完成,也实现了远程控制,接下来主要对多机器人编队进行仿真实验,在进行…...
少有人走的路阅读笔记
前言 仅记录学习笔记,如有错误欢迎指正。 感受: 刚看完这本书,因为是很多天碎片化的时间看的,所以肯定对最新的内容印象较为深刻;作者是一个心理医生,从他的视角讲述了常人应该怎么样让自己的心灵心智更加…...

极简解析!IP计费的s5爬虫IP
大家好!今天我将为大家分享关于s5爬虫IP服务的知识。对于经常做爬虫的小伙伴来说,需要大量的爬虫IP支持爬虫业务,那么对于选择什么样的爬虫IP,我想我有很多发言权。 下面我们一起了解下IP计费的s5爬虫IP的知识,废话不…...
动静分离和前后端分离
动静分离和前后端分离 一、动静分离 侧重单体项目的静态资源分离 二、前后端分离 前后端完全分离...

【SpringBoot】集成SpringSecurity+JWT实现多服务单点登录,原来这么easy
Spring BootSpring SecurityJWT实现单点登录 源码 链接:https://pan.baidu.com/s/1EINPwP4or0Nuj8BOEPsIyw 提取码:kbue 一.概念 1.1.SSO 介绍: 单点登录(SingleSignOn,SSO),当用户在身份认证服务器上登录一次以…...

手把手教你使用PLSQL远程连接Oracle数据库【内网穿透】
文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程Oracle 前言 Oracle,是甲骨文公司的一款关系…...

浅谈Deep Learning 与 Machine Learning 与Artificial Intelligence
文章目录 三者的联系与区别 三者的联系与区别 “Deep Learning is a kind of Machine Learning, and Machine Learning is a kind of Artificial Intelligence.” 人工智能(AI),机器学习(Machine Learning,简称ML&am…...

和 Node.js 说拜拜,Deno零配置解决方案
不知道大家注意没有,在我们启动各种类型的 Node repo 时,root 目录很快就会被配置文件塞满。例如,在最新版本的 Next.js 中,我们就有 next.config.js、eslintrc.json、tsconfig.json 和 package.json。而在样式那边,还…...

AxureRP制作静态站点发布互联网,实现公网访问【内网穿透】
AxureRP制作静态站点发布互联网,内网穿透实现公网访问 文章目录 AxureRP制作静态站点发布互联网,内网穿透实现公网访问前言1.在AxureRP中生成HTML文件2.配置IIS服务3.添加防火墙安全策略4.使用cpolar内网穿透实现公网访问4.1 登录cpolar web ui管理界面4…...

【好文推荐】openGauss 5.0.0 数据库安全——全密态探究
前言 写此文章的目的,主要是验证: openGauss 5.0.0 数据库能够实现哪种加密方式的全密态全密态数据库的特点 一、全密态介绍 全密态数据库意在解决数据全生命周期的隐私保护问题,使得系统无论在何种业务场景和环境下,数据在传…...

堆的介绍与堆的实现和调整
个人主页:Lei宝啊 愿所有美好如期而遇 目录 堆的介绍: 关于堆的实现及相关的其他问题: 堆的初始化: 堆的销毁: 插入建堆: 堆向上调整: 交换两个节点的值: 堆向下调整&a…...

【广州华锐互动】马属直肠检查3D虚拟仿真课件
随着科技的发展,医疗行业也在不断地进行创新。其中,广州华锐互动开发的马属直肠检查3D虚拟仿真课件,为医学教育和实践操作带来了新的可能性。它不仅可以帮助医生提高诊断准确率,还可以让医学生在没有真实病人的情况下进行实践操作…...

Nuxt 菜鸟入门学习笔记:路由
文章目录 路由 Routing页面 Pages导航 Navigation路由参数 Route Parameters路由中间件 Route Middleware路由验证 Route Validation Nuxt 官网地址: https://nuxt.com/ 路由 Routing Nuxt 的一个核心功能是文件系统路由器。pages/目录下的每个 Vue 文件都会创建一…...
C++基本语法和注释
C程序介绍 C 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互。现在让我们简要地看一下什么是类、对象,方法、即时变量。 对象 - 对象具有状态和行为。例如:一只狗的状态 - 颜色、名称、品种,行为 - 摇动、叫唤、吃…...

CSRF攻击
防御策略 过滤判断换referer头,添加tocken令牌验证,白名单 CSRF攻击和XSS比较 相同点:都是欺骗用户 不同点: XSS有攻击特征,所有输入点都要考虑代码,单引号过滤 CSRF没有攻击特征,利用的点…...

2023 “华为杯” 中国研究生数学建模竞赛(D题)深度剖析|数学建模完整代码+建模过程全解全析
问题一:区域碳排放量以及经济、人口、能源消费量的现状分析 思路: 定义碳排放量 Prediction 模型: CO2 P * (GDP/P) * (E/GDP) * (CO2/E) 其中: CO2:碳排放量 P:人口数量 GDP/P:人均GDP E/GDP:单位GDP能耗 CO2/E:单位能耗碳排放量 2.收集并统计相关…...

【Proteus仿真】【STM32单片机】基于单片机的智能晾衣架控制系统
文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 系统运行后,LCD1604显示传感器检测的温湿度、光线强度和风速,工作模式,以及相应阈值,系统工作状态等;系统默认为自动模式, 可通过K4…...

C/C++代码静态检测工具PC-Lint常见错误总结
目录 1、PC-Lint 概述 2、PC-lint 常见错误列举 3、PC-Lint报告的语法错误 4、总结 VC常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/124272585C软件异常排查从入门到…...

概率深度学习建模数据不确定性
https://zhuanlan.zhihu.com/p/568912284理解论文 What uncertainties do we need in Bayesian deep learning for computer vision? (NeurIPS 2017) [1]中的数据不确定性建模,并给出公式推导。论文[1]指出不确定性uncertainty分为随机不确定性(aleator…...

Jenkins自动化部署前后端分离项目 (svn + Springboot + Vue + maven)有图详解
1. 准备工作 本文的前后端分离项目,技术框架是: Springboot Vue Maven SVN Redis Mysql Nginx JDK 所以首先需要安装以下: 在腾讯云服务器OpenCLoudOS系统中安装jdk(有图详解) 在腾讯云服务器OpenCLoudOS系统…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...

密码学基础——SM4算法
博客主页:christine-rr-CSDN博客 专栏主页:密码学 📌 【今日更新】📌 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 编辑…...

Linux基础开发工具——vim工具
文章目录 vim工具什么是vimvim的多模式和使用vim的基础模式vim的三种基础模式三种模式的初步了解 常用模式的详细讲解插入模式命令模式模式转化光标的移动文本的编辑 底行模式替换模式视图模式总结 使用vim的小技巧vim的配置(了解) vim工具 本文章仍然是继续讲解Linux系统下的…...
拟合问题处理
在机器学习中,核心任务通常围绕模型训练和性能提升展开,但你提到的 “优化训练数据解决过拟合” 和 “提升泛化性能解决欠拟合” 需要结合更准确的概念进行梳理。以下是对机器学习核心任务的系统复习和修正: 一、机器学习的核心任务框架 机…...
raid存储技术
1. 存储技术概念 数据存储架构是对数据存储方式、存储设备及相关组件的组织和规划,涵盖存储系统的布局、数据存储策略等,它明确数据如何存储、管理与访问,为数据的安全、高效使用提供支撑。 由计算机中一组存储设备、控制部件和管理信息调度的…...

Unity-ECS详解
今天我们来了解Unity最先进的技术——ECS架构(EntityComponentSystem)。 Unity官方下有源码,我们下载源码后来学习。 ECS 与OOP(Object-Oriented Programming)对应,ECS是一种完全不同的编程范式与数据架构…...

Linux【5】-----编译和烧写Linux系统镜像(RK3568)
参考:讯为 1、文件系统 不同的文件系统组成了:debian、ubuntu、buildroot、qt等系统 每个文件系统的uboot和kernel是一样的 2、源码目录介绍 目录 3、正式编译 编译脚本build.sh 帮助内容如下: Available options: uboot …...