Gazebo环境下开源UAV与USV联合仿真平台
推荐一个ROS2下基于Gazebo环境的开源UAV与USV联合仿真平台。平台是由两个开源项目共同搭建的。首先是UAV仿真平台,是基于PX4官方仿真平台(https://docs.px4.io/main/en/sim_gazebo_gz);其次是USV仿真平台,是基于VRX仿真平台(https://github.com/osrf/vrx)。二者开源且资料非常详尽,非常适合上手使用。
基于PX4官方仿真平台开发的控制代码可以较为方便地移植至无人机。以我使用的经验为例,根据官方手册在仿真平台写了个很简单offboard模式下的速度环控制模块实现定高及定点飞行,仿真中调试完成后,直接就可以在实际的无人机使用,非常便利。
基于VRX仿真平台的USV竞赛已经举办多届,平台多样的环境和模块能很好地满足USV开发的各种需求。
以我搭建的实际情况为例,软件信息如下:
ubuntu 22.04
ros2 humble
gazebo garden v7.9.0
vrx 2.4.1
PX4-Autopilot 1.14.0
QGC 4.4.0
使用的显卡为:RTX A6000
仿真环境的实际地点为悉尼国际帆船赛中心(sydney_regatta)。仿真水域面积为6km*6km。以下为QGC(上)与Gazebo(下)环境下该水域图示:
仿真环境渲染的效果还算不错,水域中有扰动的模拟,空中也有风力扰动的模拟(PX4官方手册提及)。以下为水域渲染和水面扰动的效果。
VRX仿真平台渲染效果
仿真环境可以进行UAV集群仿真,如以下视频所示。由于我没有写轨迹规划及控制模块,直接使用QGC控制,3辆UAV分别测试一下路径点,区域巡逻,定点导航及返航功能。
PX4+VRX仿真多UAV仿真
仿真环境可以进行USV集群仿真,如以下视频所示。同样由于我没有写轨迹规划及控制模块,简单地对几个推进器输入推力做简单地演示。视频中两艘双体艇为VRX内的模型,另一艘四推的小无人艇是基于我们设计和使用的实体小艇添加的模型。
PX4+VRX多USV仿真
仿真环境也可以进行UAV与USV联合仿真,如以下视频所示。初衷是无人机对目标无人艇的识别与跟踪。个人在USV上写了个简单的云台,基于YOLOV8实时识别无人艇目标,云台控制相机姿态使得目标保持在图像中心区域内。同时云台还能补偿UAV运动时机体倾斜造成的目标丢失的情况。无人机根据云台的姿态调节自身的姿态,使得无人机航向朝向目标方向。无人艇实时发送自身的位置,无人机根据与目标的距离控制前向的飞行速度。由于训练模型时样本不多,后面出现误识别后无人机就慢慢丢失目标了。
PX4+VRX仿真跟踪测试
显然上述是无人艇主动发送位置给无人机,并不是真正的识别与跟踪。但无人艇目标在水面的位置是可以根据其在图像上的位置解算出来的,虽然精度不高,但能满足需求。详情可参考以下博客:基于无人机吊舱单目相机的目标定位算法。曾根据该博客写了个目标定位解算的模块,结合识别模块,可以实现无人机对目标的实时识别与定位。但是没有整合到上述示例中。
仿真对硬件有一定的需求,由于环境渲染效果的关系,GPU需求比较高。但可以把渲染取消。如以下视频所示,将水面渲染插件注释并将水域以蓝色代替,同时取消天空背景模块插入,可大幅降低GPU的需求。除了视觉的观赏性降低以外并没有其余影响,各种环境内扰动的插件依然能正常工作,以进行控制算法的验证。
PX4+VRX仿真跟踪测试2
最后,简要地介绍搭建平台的思路。
一、按教程配置PX4仿真平台及QGC,并能运行教程样例;
二、按教程配置VRX仿真平台,并能运行教程样例;
三、将PX4仿真平台和VRX仿真平台的models文件复制至~/.gz/models内,确保gazebo能索引到;
四、将PX4的仿真环境文件内容替换成VRX的环境内容,即将PX2中.world文件内容替换成VRX中sydney_regatta.sdf中内容;
五、启动PX4仿真,此时载入仿真环境和无人机模型;
六、在VRX的launch文件中注释掉world载入代码,同时添加需求的USV模型,此时只载入USV模型;
七、此时算法验证环境已完成,可启动各种其它模块,如识别,控制等进行算法验证。
按照上述思路,因为每个人的软硬件环境有所差异,所以搭建过程中会遇到不同的各种小问题,但基本可以在网上搜索到解决方法。
虽然得到团队其它成员的认可与支持较少,但我个人认为这是非常好的开源仿真平台。目前需要将主要精力放在其它方向的工作上,后续如果有时间我或许会再把其完善一下,写个好点的教程方法。
相关文章:

Gazebo环境下开源UAV与USV联合仿真平台
推荐一个ROS2下基于Gazebo环境的开源UAV与USV联合仿真平台。平台是由两个开源项目共同搭建的。首先是UAV仿真平台,是基于PX4官方仿真平台(https://docs.px4.io/main/en/sim_gazebo_gz);其次是USV仿真平台,是基于VRX仿真…...

Linux进程调度和进程切换
并行(Parallel) 含义:并行是指多个任务在同一时刻同时执行。 硬件要求:需要多个处理器(如多核CPU)或者多台计算设备来实现,这些执行单元能够真正地同时处理不同的任务。例如,一个具…...

机器学习基本上就是特征工程——《特征工程训练营》
作为机器学习流程的一部分,特征工程是对数据进行转化以提高机器学习性能的艺术。 当前有关机器学习的讨论主要以模型为中心。更应该关注以数据为中心的机器学习方法。 本书旨在介绍流行的特征工程技术,讨论何时以及如何运用这些技术的框架。我发现&…...

Android Framework AMS(01)AMS启动及相关初始化1-4
该系列文章总纲链接:专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明: 说明:本章节主要涉及systemserver启动AMS及初始化AMS相关操作。同时由于该部分内容分析过多,因此拆成2个章节,本章节是第一章节&…...

基于基于微信小程序的社区订餐系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...

[单master节点k8s部署]29.Istio流量管理(五)
测试istio熔断管理。 采用httpbin镜像和fortio镜像,其中httpbin作为服务端,fortio是请求端。这两个的配置yaml文件都在istio的samples/httpbin目录下,fortio的配置文件在samples-client目录下。 [rootmaster httpbin]# ls gateway-api ht…...

Something for 24OI
zyj老师希望我给24OI的同学们写一点东西,虽然感觉我也没有什么先进经验,还是尽力写一些主观的感受吧。 如何平衡文化课和竞赛的关系?不要以牺牲文化课的代价学习竞赛。首先,绝大多数的竞赛同学,或早或晚都会在退役后回…...

【React】事件机制
事件机制 react 基于浏览器的事件机制自身实现了一套事件机制,称为合成事件。比如:onclick -> onClick 获取原生事件:e.nativeEvent onClick 并不会将事件代理函数绑定到真实的 DOM节点上,而是将所有的事件绑定到结构的最外层…...

华为OD的职级与薪资
华为 OD 这几年随着招聘行情的日渐严峻,不少 985 高校出来的学生都开始放宽对"外包"的看法,其中华为 OD 以"待遇断层领先"的姿态成为不少求职者(不得已)的外包首选。 既然如此,我们就好好梳理一下…...

【HTML5】html5开篇基础(4)
1.❤️❤️前言~🥳🎉🎉🎉 Hello, Hello~ 亲爱的朋友们👋👋,这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章,请别吝啬你的点赞❤️❤️和收藏📖📖。如果你对我的…...

HTTP【网络】
文章目录 HTTPURL(Uniform Resource Lacator) HTTP协议格式HTTP的方法HTTP的状态码HTTP常见的Header HTTP 超文本传输协议,是一个简单的请求-响应协议,HTTP通常运行在TCP之上 URL(Uniform Resource Lacator) 一资源定位符,也就是通常所说的…...

MQ延迟消息:原理、实现与应用
在现代分布式系统中,消息队列(Message Queue,简称MQ)已经成为实现异步通信、解耦服务和削峰填谷的重要工具。延迟消息(Delayed Message)作为MQ的一种高级特性,允许消息在指定的延迟时间后投递到…...

计算机网络—大端序和小端序
大端序和小端序 大端序(Big-endian)和小端序(Little-endian)是指在多字节数据类型(如整数或浮点数)的存储和表示方式上的不同。以下是关于大端序和小端序的详细解释: 一、定义 大端序…...

《OpenCV 计算机视觉》—— Harris角点检测、SIFT特征检测
文章目录 一、Harris 角点检测1.基本思想2.检测步骤3.OpenCV实现 二、SIFT特征检测1. SIFT特征检测的基本原理2. SIFT特征检测的特点3. OpenCV 实现 一、Harris 角点检测 OpenCV中的Harris角点检测是一种基于图像灰度值变化的角点提取算法,它通过计算每个像素点的响…...

rtmp协议转websocketflv的去队列积压
websocket server的优点 websocket server的好处:WebSocket 服务器能够实现实时的数据推送,服务器可以主动向客户端发送数据 1 不需要客户端不断轮询。 2 不需要实现httpserver跨域。 在需要修改协议的时候比较灵活,我们发送数据的时候比较…...

Elasticsearch实战应用:构建高效搜索引擎
在大数据时代,如何高效存储和检索海量信息成为了一个重要课题。Elasticsearch作为一个开源的分布式搜索引擎,以其强大的搜索能力和灵活的扩展性,成为了许多企业和开发者的首选。本文将深入探讨Elasticsearch的实战应用,包括基本概…...

Hive数仓操作(四)
一、Hive 创建表案例一(ARRAY数组类型) 1. 准备数据文件 首先,准备一个名为 stu2.txt 的文件,文件内容示例如下: 1001 Alice fish,cat 1002 Bob dog,rabbit 1003 Charlie bird注意: …...

《C++跨平台开发:突破界限,释放无限可能》
在当今的软件开发领域,跨平台开发已成为一种重要趋势。它允许开发者编写一次代码,然后在多个不同的操作系统和硬件平台上运行,极大地提高了开发效率和软件的可扩展性。而 C作为一种强大的编程语言,也具备实现跨平台开发的能力。本…...

速盾:免备案服务器?
速盾是一家提供网络安全服务的公司,其主要产品包括CDN加速、WEB防护、WAF、DDoS防护等。在网站建设过程中,选择一个合适的服务器是非常重要的一步。传统的服务器需要备案,涉及到较多的流程和审批时间,给网站运营带来了一定的麻烦。…...

Electron获取nodejs和chrome版本信息
Electron获取nodejs和chrome版本信息 环境: electron: 30.1.1 nodejs: 20.14.0代码 $ tree . --- index.html --- index.js --- package.jsonindex.html <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>H…...

【React】setState 批量更新
setState 批量更新的过程 React 的 setState 调用是异步的。为了性能原因,React 会将多个 setState 调用合并成一次批量更新。具体过程如下: 1)React 先将调用的每个 setState 所产生的更新对象存储在一个队列中。 2)在所有的同步…...

微信小程序开发日记第二天
坚持在各个平台更新自己写小程序的心得体会,在百度贴吧和csdn更新自己的小程序日记,同时也是个体不断地对于云技术的开发和成长,进行提升!不断地将开源开放创新思维运用到自己的小程序当中,小程序制作的关键就是&#…...

如果您忘记了 Apple ID 和密码,按照指南可重新进入您的设备
即使您的 iPhone 或 iPad 由于各种原因被锁定或禁用,也可以使用 iTunes、“查找我的”、Apple 支持和 iCloud 解锁您的设备。但是,此过程需要您的 Apple ID 和密码来验证所有权并移除激活锁。如果您忘记了 Apple ID 和密码,请按照我们的指南重…...

Top4免费音频剪辑软件大比拼,2024年你选哪一款?
现在我们生活在一个数字化的时代,音频内容对我们来说很重要。不管是给自己拍的视频配背景音乐、整理开会时的录音,还是自己写歌,有个好用的音频剪辑软件都特别重要。今天,我要给大家介绍几款特别好用的音频剪辑软件免费的…...

基于SSM的电影院售票系统设计与实现
文未可获取一份本项目的java源码和数据库参考。 前言 近些年的电影在人们文娱活动中占据重要地位,另外,由于人们的生活越来越富有,越来越多的人们不再选择在家里看电影,而是选择去电影院看电影。但是,以往的售票方式是…...

uniapp 必须掌握的细节
1.使用watch实现实时监控的效果 例如:实时监测手机号码的示例 // 实时监测手机号码 watch(() > UserRegisterForm.value.phone, (newPhone) > {// 简单的手机号码正则表达式验证const phoneRegex /^1[3-9]\d{9}$/;tips.value.tipPhone !phoneRegex.test(n…...

JavaWeb——Vue组件库Element(3/6):常见组件:Dialog对话框、Form表单(介绍、使用、实际效果)
目录 Dialog对话框 介绍 使用 实际效果 Form表单 介绍 使用 实际效果 Dialog对话框 介绍 Dialog对话框:在保留当前页面状态的情况下,告知用户并承载相关操作。 Dialog 对话框组件可以在保留当前页面信息的状态下弹出一个对话框,并…...

一个月学会Java 第2天 认识类与对象
Day2 认识类与对象 第一章 初识类 经过一个程序的编写,应该对程序的结构有点好奇了吧,如果你有基础,接下来的肯定非常的易懂,如果你没有基础也没有关系,反复琢磨一下也就懂了😆 我们来重复一下第一个程序 …...

【WRF数据准备】MODIS静态地理数据下载及制备
【WRF数据准备】MODIS静态地理数据下载及制备 MODIS数据介绍数据下载数据拼接MRT工具介绍基于MRT软件完成数据拼接 格式转换:tif文件转二进制格式编写INDEX修改GEOGRID.TBL以及namelist.wps修改GEOGRID.TBL修改namelist.wps 参考 MODIS数据介绍 MODIS-MCD12Q1 v061…...

MySQL数据库——索引
目录 什么是索引(Index)? 怎样加索引? 索引的特点 索引类型 主键索引(Primary Key) 辅助索引(二级索引) 聚集索引和非聚集索引 聚集索引 非聚集索引 单列索引和联合索引 单列索引 联合索引 创…...