在gazebo仿真环境中加载多个机器人

news2024/12/27 12:03:37

文章目录

  • 前言
  • 一、基本概念
    • 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后可以指定机器人的初始位置,类似于默认参数,如果不传入数据默认机器人的初始位置是(000),传入实参后会改变初始位置 -->
  <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中实现多机器人的编队控制。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git 命令图形化在线练习

git 命令在线练习网址如下: http://onlywei.github.io/explain-git-with-d3/ 在master上先提交2个commit,创建3个分支,分支1打5个commit,分支2打6commit ,分支3commit,master分支打9commit. git commit -m "master c 1" git commit -m "master c 1"git …

程序员必备神器:He3万能工具箱全解析

He3是一个为前端、后端开发者打造的终极工具箱软件&#xff0c;提供了近400的功能&#xff0c;将开发效率提升到一个新的水平。。本文将介绍 He3 开发者工具箱的主要功能和特点。 He3包含Web版和客户端&#xff0c;客户端支持windows和mac。下载后即可使用非常方便。 先睹为快…

FL Studio v21.1.1.3750 Producer Edition inc crack官方中文免费激活版功能介绍及百度网盘下载

FL Studio v21.1.1.3750 Producer Edition inc crack官方中文免费激活版是一款功能强大的软件音乐制作环境或数字音频工作站&#xff08;DAW&#xff09;。它代表了25多年的创新发展&#xff0c;在一个软件包中拥有您所需的一切&#xff0c;以创作、编排、录制、编辑、混音和掌…

C++之vector元素访问函数operator[]、at、front、back、data总结(二百零三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

如何在 Excel 中计算日期之间的天数

计算两个日期之间的天数是 Excel中的常见操作。无论您是规划项目时间表、跟踪时间还是分析一段时间内的趋势&#xff0c;了解如何在 Excel 中查找日期之间的天数都可以提供强大的日期计算功能。 幸运的是&#xff0c;Excel 提供了多种简单的方法来获取两个日期之间的天数。继续…

Javascript EventListener 事件监听 (mouseover、mouseout)

事件指的是在html元素上发生的事情&#xff0c;例如图片元素被点击事件触发时&#xff0c;可设置执行一段js代码。对事件作出反应&#xff0c;通过元素的事件属性&#xff0c;启用事件监听器。 事件监听器是指 addEventListener (给DOM对象添加事件处理程序) 和 removeEventLis…

441分2023级东南大学920专业基础综合信号和数字电路考研上岸经验分享信息科学与工程学院

写在前面的话 本人是23年考生&#xff0c;本科就读于西电电子信息工程&#xff0c;以441分总分&#xff08;数学一149&#xff0c;英语83&#xff0c;专业课137&#xff0c;政治73&#xff09;考上东南信院电路与系统专业。以下所言皆是考研历程中的重要感悟&#xff0c;因为一…

c语言练习61:malloc和free

malloc和free malloc C语⾔提供了⼀个动态内存开辟的函数&#xff1a; 1 void* malloc (size_t size); 这个函数向内存申请⼀块连续可⽤的空间&#xff0c;并返回指向这块空间的指针。 • 如果开辟成功&#xff0c;则返回⼀个指向开辟好空间的指针。 • 如果开辟失败&…

mysql的变量

在 MySQL 中变量分为三种类型 : 系统变量、用户定义变量、局部变量。 系统变量 系统变量 是 MySQL 服务器提供&#xff0c;不是用户定义的&#xff0c;属于服务器层面。分为全局变量&#xff08; GLOBAL &#xff09;、会话变量&#xff08;SESSION &#xff09;。 查看系统变…

选择适合您网站的SSL证书,保障安全与信任

在如今数字化的时代&#xff0c;拥有一个安全可靠的网站是至关重要的。而SSL证书作为保护网站和用户数据安全的关键工具&#xff0c;选择适合自己网站的SSL证书成为了每个网站管理员必须面对的重要任务。下面将为您分享几个关键因素&#xff0c;帮助您做出明智的选择。 1. 网站…

Linux的调试工具 - gdb(超详细)

Linux的调试工具 - gdb 1. 背景2. 开始使用指令的使用都用下面这个C语言简单小代码来进行演示&#xff1a;1. list或l 行号&#xff1a;显示文件源代码&#xff0c;接着上次的位置往下列&#xff0c;每次列10行。2. list或l 函数名:列出某个函数的源代码。3. r或run: 运行程序。…

链队列的基本操作(带头结点,不带头结点)

结构体 typedef struct linknode{int data;struct linknode* next;后继指针 }linknode; typedef struct {linknode* front, * rear;//队头队尾指针 }linkquene; 初始化队列&#xff08;带头结点&#xff09; int initquene(linkquene* q)//初始化队列 {q->front q->r…

geant4创建自己的physicslist(以电磁物理为例)

1 基本概念 1.1 需要创建一个类继承 G4ModularPhysicist 每个physics都是继承 G4PhysicsConstruct Physicslist 由很多 physics组成&#xff0c;physics里面包含很多的process,也就是物理过程,光电效应就是一个process 1.2 model的概念:实现proces,一个process可以对应多个…

阿里云无影云电脑有什么用?常用使用场景说明

阿里云无影云电脑是一种易用、安全、高效的云上桌面服务&#xff0c;阿里云无影云电脑可用于高数据安全管控、高性能计算等要求的金融、设计、视频、教育等领域&#xff0c;适用于多种办公场景&#xff0c;如远程办公、多分支机构、安全OA、短期使用、专业制图等。阿里云百科来…

ES6(二)

文章目录 对象的扩展对象的展开运算符Object.is()Object.assign() 字符串的扩展includes(), startsWith(), endsWith()repeat()padStart()&#xff0c;padEnd()trimStart()&#xff0c;trimEnd() 运算符扩展指数运算符 Set方法应用 Map方法 对象的扩展 ES6 允许在大括号里面&a…

DC系列靶机5通关教程

信息收集 主机扫描 sudo arp-scan -l端口扫描 nmap -p- -A 192.168.16.172漏洞发现 浏览器访问靶机IP 在Contact找到类似提交数据的地方 点击submit&#xff0c;数字发生变化。不断刷新的话&#xff0c;数字依然会发生变化 使用bp抓包发送重发器查看数据包 再次点击发送查看…

修改了Android Studio 中的这两个面板配置后,代码写的更舒服了~

本文已同步发表于我的微信公众号&#xff0c;微信搜索 代码说 即可关注&#xff0c;欢迎与我沟通交流。 一、 增加打开文件的数量及展示方式 如图&#xff0c;默认AS中打开的文件个数是10个&#xff0c;当超过10个时&#xff0c;超过的部分会直接隐藏&#xff0c;甚至会直接把之…

TCP详解之重传机制

TCP详解之重传机制 TCP 实现可靠传输的方式之一&#xff0c;是通过序列号与确认应答。 在 TCP 中&#xff0c;当发送端的数据到达接收主机时&#xff0c;接收端主机会返回一个确认应答消息&#xff0c;表示已收到消息。 但在错综复杂的网络&#xff0c;并不一定能如上图那么顺…

Oracle SQL操作和查询

文章目录 一、SQL简介二、数据类型讲解三、创建表和约束1.表结构2. 更新表结构3.约束 四、DML语句1.INSERT2.序列号3.UPDATE4.删除语句5.多行插入 五、DQL语句1.简单查询语句1.1 知识点讲解1.2 案例讲解 2.聚合函数3.分组查询4.多表查询 一、SQL简介 SQL是结构化查询语言&…

Procmon.exe在cuckoo中的使用

背景 最近研究了下procmon.exe&#xff0c;该工具用途可大了&#xff0c;Procmon是微软出品用于监视Windows系统里程序的运行情况&#xff0c;监视内容包括该程序对注册表的读写、 对文件的读写、网络的连接、进程和线程的调用情况&#xff0c;procmon 是一款超强的系统监视软…