MAVROS +ardupilot +gazebo 无人机集群仿真 (一)

2023-05-16

MAVROS +ardupilot +gazebo 无人机集群仿真 (一)

  • 无人机仿真环境搭建
    • 仿真软件安装
    • 仿真环境测试
    • 无人机多机仿真
      • apm.launch文件修改
      • 修改 iris_ardupilot.world
      • 修改 iris_with_standoffs_demo1/demo2中的model.sdf
    • 多机仿真测试

无人机仿真环境搭建

最近因为天气原因不能出去飞无人机完成实验,所以安心在ubuntu 上跑仿真,却没想到遇到这么多的问题。
仿真环境:
Ubuntu 18.04
ROS-melodic
Gazebo9
Mavros
ardupilot固件
ardupilot_gazebo

仿真软件安装

ubuntu 18.04双系统, ROS的安装以及mavros,ardupilot环境搭建网上教程已经很多了。此处省略。

仿真环境测试

仿真运行
第一个终端:
cd ardupilot/ArduCopter
…/Tools/autotest/sim_vehicle.py -f gazebo-iris --console --map

第二个终端:
gazebo --verbose iris_ardupilot.world
第三个终端: 
进入mavros_ws的launch文件夹运行
roslaunch apm.launch
注:为了方便修改apm.launch,我在mavros_ws文件夹下新建了一个launch文件夹,将mavros原本的apm.launch文件复制了进去。

终端控制无人机起飞
mode guided
arm throttle
takeoff 2

无人机多机仿真

本来以为作无人机多机的仿真很方便的,没想到网上的资料少的可怜,仅有的一些例子还是px4的,借鉴着px4的多机仿真文件,搭建了apm的多机仿真。

apm.launch文件修改

<launch>
	<!-- vim: set ft=xml noet : -->
	<!-- example launch script for ArduPilot based FCU's -->

	<arg name="gcs_url" default="" />
	<arg name="tgt_component" default="1" />
	<arg name="log_output" default="screen" />
	<arg name="fcu_protocol" default="v2.0" />
	<arg name="respawn_mavros" default="false" />

	<group ns="uav0">
	<!-- UAV0 -->
        <!-- MAVROS and vehicle configs -->
        <arg name="ID" value="1"/>
        <arg name="fcu_url" default="udp://127.0.0.1:14551@" />
	<include file="$(find mavros)/launch/node.launch">
		<arg name="pluginlists_yaml" value="$(find mavros)/launch/apm_pluginlists.yaml" />
		<arg name="config_yaml" value="$(find mavros)/launch/apm_config.yaml" />

		<arg name="fcu_url" value="$(arg fcu_url)" />
		<arg name="gcs_url" value="$(arg gcs_url)" />
		<arg name="tgt_system" value="$(arg ID)" />
		<arg name="tgt_component" value="$(arg tgt_component)" />
		<arg name="log_output" value="$(arg log_output)" />
		<arg name="fcu_protocol" value="$(arg fcu_protocol)" />
		<arg name="respawn_mavros" value="$(arg respawn_mavros)" />
        </include>
    	</group>

	<group ns="uav1">
	<!-- UAV1 -->
        <!-- MAVROS and vehicle configs -->
        <arg name="ID" value="2"/>
        <arg name="fcu_url" default="udp://127.0.0.1:14561@" />
	<include file="$(find mavros)/launch/node.launch">
		<arg name="pluginlists_yaml" value="$(find mavros)/launch/apm_pluginlists.yaml" />
		<arg name="config_yaml" value="$(find mavros)/launch/apm_config.yaml" />

		<arg name="fcu_url" value="$(arg fcu_url)" />
		<arg name="gcs_url" value="$(arg gcs_url)" />
		<arg name="tgt_system" value="$(arg ID)" />
		<arg name="tgt_component" value="$(arg tgt_component)" />
		<arg name="log_output" value="$(arg log_output)" />
		<arg name="fcu_protocol" value="$(arg fcu_protocol)" />
		<arg name="respawn_mavros" value="$(arg respawn_mavros)" />
        </include>
    	</group>

	<group ns="uav2">
	<!-- UAV2 -->
        <!-- MAVROS and vehicle configs -->
        <arg name="ID" value="3"/>
        <arg name="fcu_url" default="udp://127.0.0.1:14571@" />
	<include file="$(find mavros)/launch/node.launch">
		<arg name="pluginlists_yaml" value="$(find mavros)/launch/apm_pluginlists.yaml" />
		<arg name="config_yaml" value="$(find mavros)/launch/apm_config.yaml" />

		<arg name="fcu_url" value="$(arg fcu_url)" />
		<arg name="gcs_url" value="$(arg gcs_url)" />
		<arg name="tgt_system" value="$(arg ID)" />
		<arg name="tgt_component" value="$(arg tgt_component)" />
		<arg name="log_output" value="$(arg log_output)" />
		<arg name="fcu_protocol" value="$(arg fcu_protocol)" />
		<arg name="respawn_mavros" value="$(arg respawn_mavros)" />
        </include>
    	</group>

</launch>
  • <group ns="uav0">给每个无人机的mavros一个组名,这样可以同时启动多个mavros节点和每个无人机单独连接,mavros的topic和service名称会相应变为 /uav0/mavros/…
  • <arg name="fcu_url" default="udp://127.0.0.1:14551@" />,mavros和仿真无人机的通信接口,运行sim_vehicle.py时会有显示。
  • <arg name="ID" value="1"/>每个无人机对应一个ID,与sim_vehicle.py中的sysid相对应,sim_vehicle.py在2020年10月的更新中加入了sysid这个属性,不然,还是无法将cmd或者set_mode通过mavros发送给仿真无人机。所以及时把自己的ardupilot库git pull一下。

修改 iris_ardupilot.world

  • iris_ardupilot.world和 后面要修改的iris_with_standoffs_demo都在ardupilot_gazebo文件夹里面

    <model name="iris">
      <pose> 0 0 0 0 0 0 </pose>
      <include>
        <uri>model://iris_with_standoffs_demo</uri>
         <pose> 0 0 0 0 0 0 </pose>
      </include>
    </model>

增添为

    <model name="iris_0">
      <pose> 0 0 0 0 0 0 </pose>
      <include>
        <uri>model://iris_with_standoffs_demo</uri>
         <pose> 0 0 0 0 0 0 </pose>
      </include>
    </model>
	
    <model name="iris_1">
      <pose> 1 0 0 0 0 0 </pose>
      <include>
        <uri>model://iris_with_standoffs_demo1</uri>
         <pose> 1 0 0 0 0 0 </pose>
      </include>
    </model>

    <model name="iris_2">
      <pose> 2 0 0 0 0 0 </pose>
      <include>
        <uri>model://iris_with_standoffs_demo2</uri>
         <pose> 2 0 0 0 0 0 </pose>
      </include>
    </model>
  • 就是世界中原本只有一个无人机模型,现在增添了两个
  • 注意的是<uri>model://iris_with_standoffs_demo</uri>
    <uri>model://iris_with_standoffs_demo1</uri>
    <uri>model://iris_with_standoffs_demo2</uri>
    这里用了3个不同的model,其实就是把第一个model复制粘贴了两遍,稍作修改后,改了一个名字,因为model里面定义了通信接口,所以需要三个不同的model区分不同的通信接口。

修改 iris_with_standoffs_demo1/demo2中的model.sdf

    <plugin name="arducopter_plugin" filename="libArduPilotPlugin.so">
      <fdm_addr>127.0.0.1</fdm_addr>
      <fdm_port_in>9002</fdm_port_in>
      <fdm_port_out>9003</fdm_port_out>

修改为
( iris_with_standoffs_demo1)

    <plugin name="arducopter_plugin" filename="libArduPilotPlugin.so">
      <fdm_addr>127.0.0.1</fdm_addr>
      <fdm_port_in>9012</fdm_port_in>
      <fdm_port_out>9013</fdm_port_out>

(iris_with_standoffs_demo2)

    <plugin name="arducopter_plugin" filename="libArduPilotPlugin.so">
     <fdm_addr>127.0.0.1</fdm_addr>
     <fdm_port_in>9022</fdm_port_in>
     <fdm_port_out>9023</fdm_port_out>
  • 主要是修改 <fdm_port_in>9012</fdm_port_in>
    <fdm_port_in>9012</fdm_port_out>
    后面运行三个sim_vehicle.py文件时,fdm_port_in会依次加10

多机仿真测试

终端一:sim_vehicle.py -v ArduCopter -f gazebo-iris -m --mav10 -I0 --sysid 1
终端二:sim_vehicle.py -v ArduCopter -f gazebo-iris -m --mav10 -I1 --sysid 2
终端三:sim_vehicle.py -v ArduCopter -f gazebo-iris -m --mav10 -I2 --sysid 3
终端四:gazebo --verbose iris_ardupilot.world
此时进入gazebo后应该是可以看到三个无人机的
在这里插入图片描述

终端五:roslaunch apm.launch
终端六:rostopic list
终端六里面应该可以看到/uav0,/uav1,/uav2的所有话题信息

后面我写了个ROS包控制,用键盘控制无人机起飞,后面再更新
放一张同时起飞的照片
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MAVROS +ardupilot +gazebo 无人机集群仿真 (一) 的相关文章

随机推荐

  • Jetson tx2 使用 jetpack 4.3刷机全过程

    1 首先准备一台安装有ubuntu 18 04 ubuntu16 04 系统的主机 xff08 host也就是笔记本 xff09 2 在nvidia官网注册一个nvidia的账号用于下载jetpack 4 3时使用 xff08 刷机过程中需
  • 2020/2/21 Linux Socket编程 高级篇——广播

    广播 xff1a 实现一对多的通信 SO BROADCAST选项 它控制了UDP套接字是否能发广播数据报 xff0c 选项类型是int xff0c 非零表示 是 只有UDP能用 xff0c TCP不能 如果是一个广播地址 xff0c 但SO
  • 大小端字节序(Big Endian和Little Endian)

    那么何为字节序 xff08 Endia xff09 呢 xff1f Big Endian是指低地址存放最高有效字节 xff08 MSB xff09 xff0c 而Little Endian则是低地址存放最低有效字节 xff08 LSB xf
  • GPS定位及通信协议解析

    1 简介 上图为某公司的GPS定位模块 xff0c 自己在使用其进行GPS定位过程中学习到的知识分享给大家 主要参数如下 半双工 UART 3 3V TTL 电平 RS232 IIC CAN 接口输出 xff0c 更快速的应用 xff1b
  • JVM系列(八):堆(Heap)的相关知识介绍

    目录 1 JVM堆的概念 2 JVM堆的特点 3 JVM堆的内部结构 3 1 组成 3 2 堆内存内部空间所占比例 3 3 永久代和元空间区别 4 堆空间的大小设置 5 堆空间垃圾回收 1 JVM堆的概念 JVM中的堆是用来存放对象的内存空
  • C++读写TIF格式

    参考文章 xff1a xff08 1 xff09 https www cnblogs com gywei p 3393816 html xff08 2 xff09 https blog csdn net han jiang xue arti
  • matlab Fourier变换--方波信号的分解与重建

    N 61 200 采用的数据点数 dt 61 4 N 采样的间隔 for n 61 1 N 生成一个方波 if n dt gt 61 2 x n 61 0 8 else x n 61 0 8 end end figure subplot 2
  • matlab 小波分析--高通滤波器和低通滤波器

    xff08 一 xff09 加载一个尺度滤波器 load db8 w 61 db8 figure subplot 4 2 1 stem w title 39 原尺度滤波器 39 计算4个滤波器 Lo D Hi D Lo R Hi R 61
  • C/C++中rand() 函数产生随机数与srand()设置随机数种子

    xff08 1 xff09 rand 产生随机数 xff0c 输出的随机数序列是确定的 xff0c 即每次运行结果一致 include lt iostream gt int main int i j for i 61 0 i lt 10 i
  • matlab与数字图像处理--膨胀和腐蚀

    对于初学者 xff0c 参考一篇很好的说明 xff1a https blog csdn net alw 123 article details 83868878 左边是一个二值化的测试图像 xff0c 白色为图像元素 xff0c 黑色为背景
  • Emmet语法

    Emmet语法 1 1 快速生成HTML结构语法1 2 快速生成CSS样式语法1 3 快速格式化代码 Emmet语法的前身是Zen coding 它使用缩写 来提高html css的编写速度 Vscode内部已经集成该语法 快速生成HTML
  • CString,int,string,char*之间的转换

    C 43 43 标准函数库 中说的 有三个函数可以将字符串的内容转换为字符数组和C string 1 data 返回没有 0 的字符串数组 2 c str xff0c 返回有 0 的字符串数组 3 xff0c copy int 转 CStr
  • C++ TCP网络编程--服务器端多线程处理会话连接

    客户端程序 xff1a include lt winsock h gt include lt iostream gt pragma comment lib 34 ws2 32 lib 34 include lt Windows h gt i
  • matlab复杂函数多元函数拟合

    简介 本文介绍了基于matlab实现的复杂函数以及多元函数的拟合 在工程和研究中偶尔会遇到要用一个非常复杂的数学公式来拟合实验测量数据 xff0c 对这些复杂的数学公式拟合时 xff0c 采用常见的拟合方法往往会失败 xff0c 或者得不到
  • 基于模板替换的word文档自动生成

    简介 word文档自动生成程序是一个根据用户提供的模板word文档以及一些必要的数据文件来渲染生成所要的word文档的工具 关键词 xff1a 批量word文档生成 word文档渲染 自动生成word 使用场景 xff1a 几种典型的可以采
  • word文档-样例1-模板文档

  • word文档-样例1-结果文档

  • Omnibus F4V3 Pro飞控,APM飞控显示电池电压电流

    默认时 xff0c Omnibus F4 Pro烧写APM飞控后 xff0c 电池检测器没有设置的 想要屏幕上显示电池电压和电流信息 xff0c 就需要设置一下 设置信息如下 xff1a BATT MONITOR 61 4 然后重启 xff
  • 网络通信之大小端、字节序转换函数

    在上篇文章中我们提到了UDP xff0c TCP有关函数 xff0c 并知道了一个重要的结构体struct sockaddr 想要实现通信首先要知道通信端的地址 xff0c 所以首先了解一下IPv4套接字地址结构体 span class t
  • MAVROS +ardupilot +gazebo 无人机集群仿真 (一)

    MAVROS 43 ardupilot 43 gazebo 无人机集群仿真 xff08 一 xff09 无人机仿真环境搭建仿真软件安装仿真环境测试无人机多机仿真apm launch文件修改修改 iris ardupilot world修改