admin 管理员组文章数量: 887021
ROS无人机小车追踪培训
目录
学习流程
第一天:无人机硬件讲解
1.1初步了解
1.2硬件学习
Intel T265
Intel D435i
激光雷达
机架动力套
电机旋转与机身运动关系
MINI HOMER
驱动
第二天:软件仿真
2.1为什么仿真
2.2仿真硬件选择
CPU选择
GPU选择
2.2仿真预装软件与环境
2.3 Prometheus地面站
第三天:自主追踪小车实验仿真复现
第四天:真机部署
知识积累
PX4开源项目
MAVROS协议
SpireCV开源项目
Prometheus开源项目
YOLOv5开源项目
总结
-
学习流程
-
第一天:无人机硬件讲解
1.1初步了解
首先作为项目开发,清晰的开发思路必不可少,那么这次的开发功能即为“如何实现无人机追踪小车”。当我第一次看到这个问题,感觉应该是一项挺复杂的工作,不过不慌,我们先了解瞧瞧,听课看图我还是很在行的。
要实现这项“智能无人机开发”,我们整体可以分为两个部分:
第一个为“基础”部分,起码我们需要一台由飞行控制,机架以及动力系统组成的无人机,同时需具备一台轻量化的机载电脑或者开发好的集成芯片(这种多为成品,功能单一,不适用于开发)。在这里我们使用的是P450无人机,PX4为核心控制软件。
第二个为“高阶”部分,也就是我们开发的重点位置,即实现追踪小车这项智能化的功能。那最起码的开发工具我们不难想到使用ROS(机器人操作系统)开发,也就是现在最普遍的智能机器人开源框架。看到这里大家可能会想到,我直接使用ROS中开源的视觉感知代码,不就能实现识别小车的功能了嘛,再加个跟踪算法搞定啦。没错,我就是这么想的。那么问题来了,无人机在识别到小车之后如何使自身与小车维持特定的距离和角度?在小车移动时又如何判断其运动的方向和距离并改变自身的飞行轨迹?在处理视觉图像时会不会产生由2D到3D转化的误差呢?果然,理想很丰满,现实很骨感呐!带着这些问题,我们继续了解。
那么到这里呢,我们可以看下面这个逻辑图(图1),我们能看到许多专有的名词,没错,我和你们一样,感觉挺清晰,但还是不知道具体都是怎么实现的。因为培训时间有限,老师也只是一笔带过,那现在就是需要我们课下自己来了解了,具体的各名词的个人理解和学习网站我汇总到了第二个大模块(二,知识积累),有颜色标注的名词大家自行选择至下面查阅,大家可以跟着我的节奏,由浅入深,边走边学习。
图1 任务逻辑图
1.2硬件学习
好,在探寻高阶部分前我们先打好基础,先来认识一下我们的研究主体无人机的硬件设备。
在介绍之前,还是先总体了解一下硬件框架来帮助我们记忆。我们可以看图2(硬件框架),整体可分为两个部分:
图2 硬件框架
第一是传感器设备,或者可以称为外接设备,这一部分就好比人的五大感官,是获取外接信息主要来源。包括摄像头,激光雷达,GPS和加速度计/陀螺仪/磁罗盘等用来获取图像数据,激光点云信息,位置信息和无人机的姿态信息等。
这些信息就传到了第二部分也就是控制系统。例如我们的图像数据和激光点云信息传入机载电脑,利用写好的算法进行路径规划和环境感知。而GPS和无人机的姿态信息数据传入飞控,通过产生EKF滤波和PID控制信号来操控无人机桨叶的电机,产生不同的生力来维持无人机姿态稳定并执行由机载电脑下达的移动命令。
补充一点,机载电脑对飞控下达命令之间是通过MAVROS协议实现的。
接下来是无人机搭载的具体硬件参数介绍,不感兴趣的玩家可以跳过此部分:
Intel T265
是一款由英特尔开发的深度视觉立体相机,它提供了高精度的定位和跟踪功能。以下是际t T265的部分参数:
最大深度范围:0.2m-5m
实时定位与地图构建(SLAM)技术
通过视觉特征和惯性测量单元(IMU)进行位置和姿态跟踪
姿态精度:0.1度
惯性测量单元(IMU):加速度计、陀螺仪
数据接口:USB 3.1 Gen1 Type-C
使用教程网址:Intel Realsense T265使用教程-CSDN博客
Intel D435i
其特点是不仅提供深度传感器模组,还配备了一个IMU单元。RGB-D(红绿蓝-深度)相机是3D相机,其在像素级输出具有颜色和深度信息的图像。
一对立体红外传感器(IRStereo Camera),一个红外激光发射器(IRProjector)和一个彩色相机(RGB传感器)
USB供电;
更大的85度左右的镜头视场(FOV)
摄像机的捕捉最远距离可以达10米
输出1280x720分辨率的深度画面
视频传输方面可以达到90fps
使用指南网址:Intel RealSense D435i 深度相机介绍_realsense d435i介绍-CSDN博客
激光雷达
介绍说明书:LDS-50C-2蓝海光电激光雷达使用说明书 V1.4.pdf-原创力文档 (book118)
使用说明书:蓝海光电激光雷达说明书.pdf (amovlab)
机架动力套
机架动力套定义为:已组装好无人机的机身结构部分,以及电源模块,电机电调模块的套件,被定义为机架动力套。相当于一个无人机的半成品物料,或者是传统的航模。
基础款无大机一机架动力套一(航模)+一控自主无大机=基础款无人机+机载计算机
这里提供一个徒手组装F450飞行器指南:BetaFlight & BeeRotorF3 四轴飞行器配置F450_f450机架图纸参数-CSDN博客
电机旋转与机身运动关系
这里放一张图片大家就很好理解了,如图3利用不同电机转速(升力)的差别实现各个方向的移动和自旋转。
图3 电机与机身关系图
MINI HOMER
MINI HOMER是高性价比,小体积,远距离,抗阻挡,强穿透的一款图传链路产品。我想可以理解为wifi一样的功能,利用无线通信方式传送网络信息和串口透传信息。最大传输带宽11M,网内同时支持3路1080P视频传输。
点对点传输最大距离:室外1200 室内1F-4F
其包含移动端和地面端两部分,实现无人机通讯需要两部分,在无人机机身需安装两个移动端,其对应的一个地面端链接遥控器,另一个链接操作人员的电脑(需有网线接口)。
使用手册:阿木实验室 (amovlab)
驱动
所谓驱动就是操作系统与硬件之间的桥梁,其本质是硬件设备工作的代码模块。作用是让操作系统明白如何使用该硬件,可以理解为是API,让系统能调用这些API函数来操纵设备,实际上操作系统使用这些硬件设备的功能是个很复杂的过程,而且驱动就相当于设备的说明书,让操作系统只需把工作丢给驱动即可实现相应的操作。至于驱动是怎么开发的就不是非专业人员需要了解的了。
那么回到我们无人机这个项目,首先我们需要确定机载计算机的ROS环境中存在相应的驱动,如T265/D435i相机的驱动。
其次,启动相机节点:在启动ROS节点管理器(roscore)后,我们需要启动相机节点。例如:
T265: roslaunch realsense2_camera rs t265.launch
D435i. roslaunch realsense2_camera rs_camera.launch
使用rostopic list查看发布的主题:rostopic list
查看T265相机发布的话题
使用rostopic echo/rqt_image_view查看相机数据:
T265: rostopic echo /camera/odom/sample
D435i: rostopic echo /camera/color/image_raw rostopic echo /camera/depth/image_rect_raw rqt_image_view /camera/color/image_raw
使用rqt_graph查看节点和主题的关系
rq_graph
使用realsense-viewer工具
realsense-viewer
在该工具中,你可以看到相机的图像输出、相机状态以及各种传感器数据。
API是什么:什么是API?(看完你就理解了)_api是什么意思-CSDN博客
驱动详解:(13 封私信) 虽然经常听说驱动,但是驱动具体是啥? - 知乎 (zhihu)
-
第二天:软件仿真
在对无人机的硬件结构了解的差不多了之后,接下来学习软件的部分,也就是仿真模块,这一部分可以说是科研玩家的草稿本,提供了自由的研发平台和无数次试错的机会。如果把这部分学精还是比较麻烦,但使用的话还算OK,本次培训呢使用的是配置好的仿真笔记本,假如大家自己安装使用的话请看下面的详细讲解,大部分模块我已简单介绍并停供详细使用的手册,大家可以各取所需。
2.1为什么仿真
仿真是作为学习理论知识到现实实践之间的一个过渡,一步一步熟悉而不是一下“拉上战场”
对于需要做二次开发的用户来说,部署自己程序算法在仿真代码上远比直接上真机要快速和低成本的。仿真通过,代表基本的逻辑算法没有问题。
仿真无缝切换真机,室内笔记本跑完仿真,马上就可以带着笔记本无人机室外飞行,只需要修改少数的launch文件。
综上所述,仿真就是实战前的训练,为了达到便捷的效果,仿真需满足与实战极为相符,几乎一模一样的效果。
2.2仿真硬件选择
CPU选择
ROS1开发者,最后一个版本是ROS noetic,它对应的Ubuntu版本是20.04。Ubuntu22.04以后的Ubuntu版本对应ROS2
Ubuntu20.04的Linux内核程序的最新的版本是5.15,此版本的大版本号于2020年发布,当时最新支持了Intel的12代CPU和当时的AMD ZEN3处理器(锐龙 5000,例如Ryzen7 5800等CPU)。(使用命令:cat /proc/version 可以査看Linux内核的版本号等信息,培训的仿真笔记本的版本号是5.15)
因此:建议ROS1的开发者,使用Intel12代CPU,或AMDZEN3系列处理器获得更好的支持
GPU选择
GPU方面,如果涉及到YOLO等视觉训练的工作,建议选择12G以上显存的GPU显
如果只是做普通的Prometheus大部分开发工作,比如运动规划,任务模块,视觉目标追踪等现在选型的2050系显卡够用。
YOLO等模型,一般会生成一个wts文件,这个wts文件,需要再进行转换,生成TensoRT加速的engine文件,这个engine文件,在不同的硬件平台都不一样,比如同样是英伟达的平台jetson和桌面显卡不一样,桌面显卡之间也不一样,需要自行转换模型。
2.2仿真预装软件与环境
Prometheus仿真开发套件(培训设备)预装Ubuntu 20.04操作系统及ROS noetic环境,同时包含PX4及Prometheus开发环境可免去复杂的配置过程。
预装软件: 功能:
PX4源代码 PX4源码编译及烧录、PX4软件在环仿真
Gazebo素材包 Gazebo官方提供的素材库
遥控器驱动包 支持遥控器输入控制
Mavros功能包 支持PX4与ROS通信
Prometheus源代码 Prometheus仿真开发,包括控制、路径 规划及目标识别
Prometheus仿真启动器 一键启动\关闭仿真功能、
PrometheusProt面站 无人机数据实时监控、简单指令操作
2.3 Prometheus地面站
图3Prometheus地面站界面
该软件是使用Qt开发的基于Prometheus自主无人机开源项目的人机交互界面,简化了Prometheus的操作和使用流程,同时采用TCP/UDP通信机制,避免了ROS1多机通信繁琐的配置。
该地面站可以让用户更快复现Prometheus中的各种功能,且同时适用于真机和仿真系统。
该地面站目前已适配了Prometheus项目中绝大数功能。包括但不限于单机、集群、吊舱、视觉控制操作、以及数据的实时反馈等。
地面站使用手册:Prometheus地面站 - Prometheus使用手册 (amovlab)
下图是地面站代码框架,感兴趣的可以了解一下:
图4 Prometheus地面站代码框架图
当我们具备了仿真环境后,即可按照wiki教程运行已经打包好的demo,然后我们可以找到对应的脚本或launch文件,进而学习其开发流程,从而仿照着进行二次开发,当然ROS和编程语言的学习是基础。
提供一个思路,我们找到运行的代码文件,将其看懂,并在我们想要扩展的功能模块进行修改再编译即可,或是用另一个模型替换原有模型,说简单也不简单,毕竟涉及领域知识较多,初学者一般会云里雾里,只能慢慢摸索。只管去学,交给时间啦~
第三天:自主追踪小车实验仿真复现
我们先了解以下一个目标检测的算法——YOLOv5,详细内容我放到了知识积累模块,大家根据兴趣自行点击跳转学习链接。
好了,如果你完整的了解了以上的内容,那么恭喜你,起码这项目都在干什么你已经完全可以看懂了,不信我们再看一开始这张图:
这张图的专有名词起码我们已经都了解过了,那我们就再深入看一下逻辑关系。左边不用说了,右侧的高阶部分在一开始我们只是初步的认为调用ROS代码给小车就好了,并没有搞懂其具体如何实现。现在我们小有雏形再来分析:
首先图上的,智能化实现方法指向了ROS开发,这我们所想的是没有问题的,那么ROS开发和PX4则通过mavros通信协议沟通,即智能化指令最终要传递信息给px4飞控实现无人机的显示操作(移动等)。
那右侧的Prometheus开源项目则是ROS开发的一个上层应用,我们可以理解为Prometheus是实现智能化功能的上层软件(用户操作),而ROS和PX4则是底层的操作系统(机器操作)。
而最下面的SpireCV则是使用了YOLOv5模型的目标识别工具(SDK),来实现视觉感知小车的功能,其本质上就是ROS开发的具体内容。ROS的目标识别系统就把获取到的无人机的速度,通过mavros传递给PX4飞控,进而让无人机作出相应的反应。
这就是实现该智能化项目的大致逻辑。至于跟踪小车的仿真复现,我们按照仿真使用手册即可完成,当然若想完全搞懂仿真的逻辑,一句两句话是讲不明白的,还是需要学习以上提到的知识内容。前路漫漫,任重而道远~
仿真手册:Prometheus仿真套件文档 - YOLO点击跟踪 (amovlab)
第四天:真机部署
理论有了,接下来就是实战,无人机的具体操作规定就不再赘述,大家可以参考下面的使用手册,这里主要说一下ROS节点的启动流程。
实际操作其实很简单,如下图所示,首先需要开启无人机和地面端笔记本,按照使用手册分别检查Prometheus地面站,QGC地面站,NoMachine和无人机的连接情况。
接下来就是在NoMachine中机载计算机显示终端中操作,我们只需在Prometheus文件夹中找到以下三个脚本并分别运行:
p450 autoload.sh
p450 indoor onboard.sh
car detection with tracking d435i.sh
图5 ROS节点启动流程图
每一个脚本在图中指向的蓝字为脚本所在的功能包名
下图为三个脚本成功运行的节点:
图6机载电脑运行节点图
至此,如果不出意外的话,无人机已经蓄势待发啦!接下来就是看我们王牌飞行员炫酷操控飞机起飞啦。如果顺利的话,我们会在无人机摄像头传来的画面中看到被识别的目标(小车),我们只需点击小车并进入offboard模式(自动驾驶模式)无人机就能自主跟踪小车啦!
P450无人机用户手册:p450-v2-rtk文档 - 遥控器充电 (amovlab)
-
知识积累
PX4开源项目
PX4是一款专业开源的自动驾驶仪,也就是我们的飞控,是现在主流使用的仪器。飞控可以理解为是无人机的小脑,和人一样一架无人机的任何机械性动作和姿态信息都由飞控操作。
由图二可以看出,飞控是无人机行动命令的“执行者”,将机载电脑发送的命令识别转化为机械语言,来实现例如电机旋转速度的改变。
PX4简介:PX4-入门基础篇-CSDN博客
PX4详情:【PX4学习笔记】01.PX4硬件基础_px4的硬件连接图-CSDN博客
PX4学习:PX4二次开发快速入门-CSDN博客
ROS学习笔记之——PX4开发初入门-CSDN博客
back
MAVROS协议
Mavlink是一种串行的通信协议(数据的传输格式规则,在不同的设备之间进行信息交互的同一通道)。其包含了很多无人机相关的信息和命令,用于飞控与地面站之间通信。
而MAVROS是一个开源的ROS包,将ROS和MAVLINK连接起来,实现ROS和无人机的通讯,即相当于一种语言转换器,让两个外国人能彼此交流。
至于怎么使用,作者经查找相关资料,感觉就象是一种插件,安装上并测试通过后即可。待到学成归来时再回来修改看法。
MAVLINK基础知识:MAVLink 基础知识-CSDN博客
MAVLINK使用指南:MAVLink 飞控通讯协议开发详解-CSDN博客
MAVROS基础知识:【ROS】MAVROS基础知识和使用-CSDN博客
SpireCV开源项目
SpireCV是一个专为智能无人系统打造的边缘实时感知SDK(软件开发工具包),主要功能包括相机/吊舱控制、视频保存与推流、目标探测识别与跟踪、边缘数据管理迭代等。旨在为移动机器人开发者提供高性能、高可靠、接口简洁、功能丰富的视觉感知能力。
在本次实验中主要用到了目标检测+点击跟踪的功能,以下为分开原理。
检测跟踪原理
目标检测基于深度学习模型来实现,SpireCV-SDK使用预训练的深度学习模型来识别图像中的对象,并根据这些对象的特征来对其进行分类和定位。其原理是通过卷积神经网络(CNN) 对图像进行前向传播,提取出图像的特征,并使用这些特征来预测图像中每个像素的类别。一旦目标被检测到,SpireCV-SDK会将其位置、大小、旋转角度等信息提取出来。
跟踪算法原理
点击跟踪是SpireCV-SDK的高级功能之一,它基于目标检测和图像处理技术来实现。使用目标检测算法来识别图像中的对象,并根据这些对象的特征来对其进行分类和定位。并根据提取出每个对象的轮廓信息来计算出每个对象的形状和大小。一旦目标被检测到并定位,SpireCV-SDK会根据用户的点击位置和目标的位置来计算出点击点和目标之间的距离和角度等信息。
使用手册:SpireCV文档 - 项目介绍 (amovlab)
名词SDK详解:什么是SDK? SDK是什么意思?-CSDN博客
Prometheus开源项目
Prometheus开源项日是一个将PX4开源飞控固件设置为底层控制模块,ROS机器人操作系统作为上层大脑的开源应用程序包。在ROS端完成建图与定位,视觉目标检测,运动规划,任务规划等块,然后通过mavros发送控制指令给PX4飞控程序。
图7 Prometheus系统软件框架
Prometheus使用手册:阿木实验室-Prometheus使用手册 (amovlab)
Prometheus-自主无人机开源项目 - Prometheus使用手册 (amovlab).
YOLOv5开源项目
YOLOv5算法是目前最广泛的目标检测算法之一,基于深度学习技术,可以广泛的应用于视频监控,智能交通,人工智能等领域。其原理简单明了,在实际应用中与具备效果稳定,运行快速等优点。
以下有几张解析图供大家参考:
图8 YOLOv5深度神经网络训练解析
图9 深度神经网络训练过程
图10 YOLOv5使用步骤图
YOLOv5算法详解:YOLOv5算法详解-CSDN博客
YOLOv5论文精读:论文精读——YOLOv5_yolov5论文原文-CSDN博客
-
总结
好了,现在我们已经基本完成了对无人机自主追踪小车的实验,其中涉及的相关知识点也为大家提供了我认为是比较有用的网址供大家参考。那么,还没完,我们在一开始提了三个问题我们再回顾一下。
1.无人机在识别到小车之后如何使自身与小车维持特定的距离和角度?
假如我们阅读了相关代码,或者即便没有看代码但是仅凭着对这个项目的了解和自己的分析猜想,我们也许能想到:无人机在跟踪小车时,小车始终在无人机摄像画面的中央,即当小车出现偏移,无人机会根据设定的距离高度计算小车的移动距离和方向,进而计算得到应移动的距离和方向。
2.在小车移动时又如何判断其运动的方向和距离并改变自身的飞行轨迹?
哈哈哈没想到和上一个问题答案闭环了。我想应该是用到我们的深度相机,利用深度学习算法进行深度估计来判断,但是这么说还是有点敷衍,具体的原因作者还会继续探究和学习,欢迎大家指正。
3.在处理视觉图像时会不会产生由2D到3D转化的误差呢?
这个答案是会的,通过实践我们发现,当无人机往无人机的方向移动时,因为无人机看到的画面下侧是地面,颜色较均匀,导致无人机出现了不知道小车是在往后走还是往地下走。假如无人机认为小车在往地下走的话,无人机也会跟着下降,容易发生炸机风险。
最后总结一下~能看到这里也不容易,大家都是好样的!可能因为这篇文章写的比较久,可能会出现文章风格从实验的流程总结向知识学习的形式转变,希望大家理解,也是因为作者也在慢慢学习,大部分名词都不理解,这也算是一遍笔记,供以后学习使用。这次培训学习也给我带来了很多收获,我遇到了很多优秀的朋友,在他们身上我学到了对科研的执着精神和严谨的态度,也算是被打鸡血啦~感谢你们~好啦,这篇文章到此结束,以后也会继续分享学习收获。
版权声明:本文标题:智能无人机自主追踪小车实验——基础篇(全面总结) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1729141786h1323027.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论