登录
加入联盟
找回密码
航空人生
新一代连飞客户端下载
空管人生
中国航空运动协会推荐
WEFLY
模拟飞行玩家聊天工具
门户
文章
商城
二手市场
外包服务
模飞软件
硬件设备
飞行体验
学院
云课堂
问答
资料下载
论坛
模拟飞行
低空飞行
太空探索
航圈
资源
素材
下载
企业
无人机论坛
»
论坛
›
无人机DIY专区
›
飞控开发区
›
Pixhawk飞控
›
如何使用外部定位设备作为无人机位置估计 ...
返回列表
发新帖
查看:
650
|
回复:
0
如何使用外部定位设备作为无人机位置估计
[复制链接]
adccarry
adccarry
当前离线
积分
1068
窥视卡
雷达卡
341
主题
380
帖子
1068
积分
金牌飞友
金牌飞友, 积分 1068, 距离下一级还需 1932 积分
金牌飞友, 积分 1068, 距离下一级还需 1932 积分
积分
1068
飞币
681
注册时间
2017-7-19
发消息
发表于 2022-12-24 03:43:08
|
显示全部楼层
|
阅读模式
近很多小伙伴都提出了类似的问题,小编在这里解答一下大家的困惑,大家看不懂的地方,以及大家希望了解的技术细节,可以点开链接(http://amovauto.mikecrm.com/lThqMKF),通过
填表
来告诉我们您想了解什么技术。同时,我们也会开源一些P200科研无人机中的源码给大家使用。
准备工作
飞控固件及版本:PX4(建议用最新的版本)
其他要求:机载电脑(默认已经掌握:如何使用Mavros连接机载电脑和飞控)
Mavros源码链接:https://github.com/mavlink/mavros
旧的PX4手册是没有这部分相关内容的详细说明的,最新版本的手册已经更新了这部分内容,与本文档内容略有重叠,但侧重不同,供大家参考。
官方教程链接:https://dev.px4.io/en/ros/external_position_estimation.html
飞控中的滤波模块(滤波器)
状态估计包括位置估计与姿态估计。在旧版本的飞控中默认使用的是attitude_estimator_q(姿态估计)、position_estimator_inav(位置估计,最新的固件已经删除这个模块了)或local_position_estimator(位置估计)。新版本固件中的默认滤波器是ekf2模块(包含位置及姿态估计)。
本文就将利用ekf2模块中提供的vehicle_visual_odometry.msg(uORB消息)接口实现这个功能。
室内定位需要的信息
一般针对室内情况,需要通过外部设备获得无人机的位置及偏航角(这是由于飞控自身的磁力计在室内的太无力了)。
常见的定位方式
定位方式按照是否机载可以大致分为两大类:外部定位及机载定位。
外部定位:利用动作捕捉系统(motion capture
system,简称mocap)等设备测量无人机当前的位置及姿态。mocap目前主流的是两家国外牌子:Vicon和Optitrack。mocap设备价格较为昂贵(十几万到几百万不等,但是精度很高,可以达到厘米甚至毫米级别的定位,且刷新率很高。机载定位:这大概就是目前比较火的视觉SLAM和激光SLAM。笔者用过的有:HKUST开源的VINS,谷歌开源的cartographer。
如何在记载电脑中接受定位信息
如果是mocap的话,推荐使用vrpn_clinet_ros功能包来得到地面软件发出的定位信息(只需要将地面软件所在的电脑和机载电脑接入同一个局域网,IP设置正确即可。这一步不懂的可以留言,我后期可以补充具体步骤)。
主流的传感器和SLAM算法一般都有相应的ROS功能包,直接按照官方教程安装,运行起来就可以看到其发布的包含定位数据的话题了。
注意:距离单位!!尽管默认的单位都是米,也不排除有例外的。以及大部分姿态都是用四元数表示,这里可能涉及到四元数与欧拉角的转换关系。
小结:无论哪种定位方式,这一步你需要能够在机载电脑中接收到所需要的定位信息(位置xyz+偏航角yaw)。
飞控中如何设置
为了配合机载电脑中传来的定位信息,有两个和ekf2有关的参数需要修改。
EKF2_AID_MASK 设置为24(即勾选vision position fusion and vision yaw fusion)EKF2_HGT_MODE 设置为VISION (默认为气压计)
因为ekf2中默认是不会融合这个外部的定位信息的,这里相当于在ekf2中启用这个功能。至于ekf2参数中还有很多和这个外部定位相关的滤波参数设置,就请参看官网教程吧。我没有改任何参数,但是ekf2代码的话,阿木团队优化过,具体修改笔者也不清楚。
其他说明:
做了以上修改之后,水平校准会遇到问题,所以要修改之前校准水平。修改之后,自稳模式会变得有些奇怪,基本上只能使用位置闭环的控制模式了,也就是offboard模式。
如何将定位信息发送到飞控中
话不多说,直接共享代码 px4_pos_estimator.cpp
px4_pos_estimator.cpp是阿木社区最新推出的P200科研无人机中px4_command功能包中的一个小程序,主要负责的功能就是将外部信息发送到飞控中,代码文件中有详尽的注释(因为是基于ros写的,所以需要一点点ros编程的基础)。该程序也只是提供一个示例及代码框架而已,照搬肯定是不行的,部分地方还是要按照你选择定位方式的具体情况来修改的。
我在这里大致提几点注意事项:
坐标系转换(对应的callback函数中修改):需要将外部定位信息转换至ENU坐标系。mavros中默认使用的是ENU系。这里的ENU系是指:无人机前方为正,左方为正,上方为正,由上向下看飞机逆时针旋转为正。/mavros/vision_pose/pose 这个话题发布的时候必须要加时间戳,不然mavros不会订阅。订阅飞控返回的位置及姿态信息并打印出来,同时打印外部定位信数据,用于检查是否发送成功并确认方向。
具体消息流向
ros话题是机载电脑中传递的消息载体,Mavlink是机载电脑与飞控传递的消息载体,uORB话题是飞控内部传递的消息载体。
这里针对外部定位位置(即一个包含xyz的数据类型)进行梳理:
首先是传感器测量得到,由机载电脑中的ros话题发布出来。px4_pos_estimator.cpp订阅该话题,进行一定处理后,转存至另一个话题/mavros/vision_pose/pose 并发布。Mavros功能包中vision_pose_estimate.cpp订阅/mavros/vision_pose/pose话题,并将其封装成Mavlink消息,发送给飞控。飞控接收到该Mavlink消息,通过mavlink_receiver.cpp接收并处理,转存为相应的uORB消息。飞控中ekf2模块订阅该uORB消息,并进行相应计算处理,融合得到无人机的位置速度等状态。
实现步骤总结
在机载电脑中,利用相应驱动程序或者功能包获得外部定位数据,并以ros话题的形式发布出来。利用px4_pos_estimator.cpp程序订阅该话题,做好相应坐标转换,然后转发该数据至飞控中。打印相应信息,检查飞控是否收到定位信息。前后左右移动飞机,确认方向正确。
调试建议
第四步很重要,基本上问题都出在这,如果实在搞不清方向转换的,就多试几次,因为位置的坐标转换只是正负号的问题,多试几次总能得到正确的结果。基本上飞行的控制精度是取决于这里的定位精度的。理解以下几个概念:静态定位精度,动态定位精度,控制精度。以激光slam为例,静态精度1cm左右,动态精度可能只有5cm了,如果不其他(延时,控制参数等等)影响不显著时,控制精度较好时在正负10cm以内,较差的话正负20cm以内,再差可能飞机就定不住发散了。
无人机
相关帖子
•
Mavic3无人机户外充电箱:电池充电保护的新方案
•
无人机30公里控制不是梦!TP5606飞控数传电台来了!
•
飞龙在天!俄罗斯研制喷火FPV无人机来反击乌克兰无人机
•
低空飞航:小型无人机应用全面开花,从三维数码地图到搜救航拍无所不能,引领业界革新潮流,开启低空经济未来无限想象空间【铿锵集】241109
•
珠海航展结束后,美军印太司令改口:与中国作战不能只靠无人机
•
小型无人机航拍哪个牌子好
•
国内无人机飞控技术比较
•
中国出口这么多先进的无人机,自己用什么?不怕技术外泄吗?
•
国产科技‘’纵列双桨无人机“载重1吨”目前同类型最大载重!2025量产#纵列双桨无人机#载重1吨#低空经济 #eVTOL电动飞机 #科技改变生活
•
2024航展科技走进生活: 无人驾驶物流飞行器 eVTOL电动垂直起降航空器 无人机 移动式低空保障车
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
加入联盟
本版积分规则
发表回复
回帖后跳转到最后一页
快速回复
返回顶部
返回列表