随着人工智能技术的不断发展,无人机的智能化水平也在逐步提高,未来的无人机技术将更加注重智能化、自主化、协同化的发展。智能化无人机能够通过机器学习和深度学习技术,自主完成复杂的任务,如目标识别、避障、自主导航、任务规划、集群协同、智能控制等。通过智能化技术,无人机能够更好地适应复杂环境,提高执行任务的效率和精度,减少对人工操作的依赖。
另外 随着无人机载荷能力的增强,未来的无人机将能够搭载更多种类的任务载荷,包括高清晰度摄像头、多种传感器、武器系统等,以满足更多的应用需求。
一款科研吊舱的特点
光电吊舱做无人机智能应用开发的核心组件之一,当前随着AI技术在无人机平台应用的越来越广泛,非常需要一个合适的吊舱用来视频图像做处理并作为目标检测、跟踪、定位、避障、起降、导航等应用的输入。
- 价格便宜
价格便宜能够极大降低试错成本,攒一架无人机也就几千元的成本,如果吊舱上万的话基本没得玩,除非团队不缺钱或者技术成熟度很高,飞行没太多风险。
- 体积小,重量轻
吊舱越大、越重需要的无人机就越大、越重,但是前期验证开发阶段,一般建议采用起飞重量5kg以下的多旋翼无人机,否则飞行安全、装机成本、使用维护等等都太不方便!
- 具备良好通信控制接口
云台吊舱要能受你控制!要能给你反馈数据!大家比较喜欢的是UART通信控制或者LAN通信控制!早起很多吊舱都是PWM控制,连S.BUS控制的都不多,你还需要额外搞一个USB转PWM的嵌入式模块,好麻烦。
另外很多工业级吊舱使用SDI、HDMI或者RS422等方式输出视频数据,但是主流的机载计算机如Jetson、NUC、树莓派等只提供USB、网口等,故吊舱输出最好能够与之无缝连接!大家最熟悉的USB网络摄像头,直接cv2.VideoCapture(0)即可!软硬件接口友好性,通用化水平,决定该型吊舱使用难度程度。
- 最好具备基础的AI智能应用
具备目标识别、跟踪、锁定和测距等功能。
某三轴方形光电吊舱
在某演示项目中,需要一款小型的侦查无人机对目标进行搜索,团队经过调研发现了下面这款三轴小型光电吊舱。
吊舱参数
- 定焦可见光:镜头类型8.5mm,分辨率3840 * 2160;
- 三轴云台:俯仰轴:-120°~20° ;航向轴:-90°~90°;翻滚轴:-40°~40°
- 重量:≤132g(不含AI板、散热板、减震连接件)
- 尺寸:≤66mm(长度)*66mm(宽度)*76mm(高度),不含AI板、散热板、减震连接件
- 供电:12V,功率≤8w
- 性能:探测2000米,AI识别700米
特色点评
- 体积小,重量轻,仅130g,轻松挂飞
- 支持rtsp网络视频输出,H265编码格式
- 吊舱控制信号走网络通信,不额外占用硬件接口
- 开放吊舱通信协议,提供API接口,快速开发
- 具备1-2路视频AI识别(人、车等),任意目标跟踪等AI功能
跟踪效果
汽车跟踪,稳得一逼。
人等小目标跟踪效果,如下:
该光电吊舱使用手册
获取视频
rtps流地址为:rtsp://192.168.0.152/live,可使用QGC地面站、VLC等打开视频。如果使用机载计算机进行上层应用开发,用户可以使用Opencv获取和解析视频。使用opencv获取视频代码示例:
import cv2
rtsp_url = 'rtsp://192.168.0.152/live'
capture = cv2.VideoCapture(rtsp_url)
while capture.isOpened():
res, frame = capture.read()
cv2.imshow("video", frame)
key = cv2.waitKey(1) & 0xFF
if key == ord('q'):
break
capture.release()
cv2.destroyAllWindows()
如果有条件也可以采用硬解码的方式去解析视频流,例如Jetson系列计算机,具备硬解码芯片,配合GStreamer使用能够达到更高的性能!不占用软件解码资源,效率更高。
import cv2
pipeline = 'rtspsrc location=rtsp://192.168.0.152/live latency=100 ! '\
'rtph265depay ! h265parse ! omxh265dec ! nvvidconv ! '\
'video/x-raw, width=(int)1280, height=(int)720, '\
'format=(string)BGRx ! '\
'videoconvert ! appsink'
print(pipeline)
capture = cv2.VideoCapture(pipeline, cv2.CAP_GSTREAMER)
while capture.isOpened():
res, frame = capture.read()
cv2.imshow("video", frame)
key = cv2.waitKey(1) & 0xFF
if key == ord('q'):
break
capture.release()
cv2.destroyAllWindows()
以上代码已在Jetson Nano和Jetson AGX验证,但前提使需要重新编译opencv,增加对gstreamer的支持!
控制协议
吊舱采用TCP通信,数据包格式使用json,上电后吊舱启动TCP服务端等待连接,用户程序被定义为客户端。
(1)用户获取吊舱的姿态数据
{
"task": 0, #指令ID
"gimbal_yaw": 10, #云台偏航⻆,单位deg
"gimbal_pitch": 10, #云台俯仰⻆,单位deg
}
(2)用户发送指定控制吊舱
注意:以下指令,每次发送只能控制一个角度。也就是控制偏航角和控制俯仰角不能在一个指令中同时设置,需要分两次发送,也就是一次发送俯仰角,二次发送偏航角,两个角度没有先后顺序。
- 设置吊舱角度,使吊舱转动至特定角度
{
"task":13, #指令ID
"angle":50, #⽬标⻆度,pitch 15~-90(上正下负),yaw:-90~90(左负右正)
"isPitch":false #true:控制pitch,
#false:控制yaw
}
- 设置转动步进角度,在当前姿态角度基础上,再转动一个相对角度!
{
"task": 6, #指令ID
"pitch": 0或1, #0表示向上移动云台,1表示向下移动云台,
"yaw": 0或1, #0表示向左移动云台,1表示向右移动云台
"angle":0.1, #每次转动⻆度,精度是0.1
"reset": true/false, #true为回中
}
- 设置转动速度
{
"task":13,
"speed":50, #转动速度范围(int类型)是+200~-200deg/s,正为上或者右,负为下或者左
#根据下个参数控制轴转动
"isPitch":false #true:控制pitch,
#false:控制yaw
}
参考代码
使用python写了一个吊舱驱动接口,能够获取吊舱视频并显示、获取吊舱姿态数据、控制吊舱转动,具体见:
注意事项
- 上电时尽量保证吊舱水平,且尽量保证吊舱静止,如果手拿着吊舱上电很可能造成自检不通过;
- 上电后自检需要一些时间,吊舱图像和姿态数据不会马上下发。
关于NextPilot飞控
NextPilot飞控系统是一款基于px4和rt-thread的国产开源自动驾驶仪,由NextPilot开发团队(nextpilot@qq.com)负责维护。它能够便捷的应用于教育、研究和工业等领域,让工程师专注于自己的擅长领域(比如嵌入式、控制算法、应用业务)进行高效的开发。
官方网站:https://www.nextpilot.org
开发指南:https://www.nextpilot.org/develop
用户手册:https://www.nextpilot.org/manual
开源仓库:https://github.com/nextpilot/nextpilot-flight-control
开发工具:https://github.com/nextpilot/nextpilot-windows-toolchain
联系我们:nextpilot@qq.com