1.设备:轴距350四旋翼
机载电脑:Jeston xavier NX 电脑
飞控:pixhawk2.4.8
飞控固件版本:PX4 1.13.3
使用的技术文档:XTdrone配置仿真平台基础配置(仿真平台基础配置(对应PX4 1.13版))
阿木实验室的坐标转换文件:
1.optitrack的标定操作
需要注意的是标定杆和标定坐标系使用的不是一个,如果使用错的话,精度标定上升值会很小,正常是1s几百数值的增加。
首先我们先检查是否有反光点,去除反光点。
该界面保持默认。
此时我们使用标定杆在场地挥舞,确保最小值也超过10000,最后检查各个摄像头的精度。
下一步我们标定坐标系,杆都已经给了推荐的方向,可以注意到它的x,y,z坐标系方向与我们之前不同,y轴朝上,我们熟悉的可能是z轴朝上。这个我们可以在软件的设置页面修改。
使用vrpn_clinet_ros
功能包来得到地面软件发出的定位信息(只需要将地面软件所在的电脑和机载电脑接入同一个局域网,IP设置正确即可。此时,动捕捕获的位置数据会通过话题广播的数据发送出去,如果我们想要接收到的话,机载电脑就必须要和动捕的电脑连在同一个局域网下
例如:如果你把机体命名为 robot1
,你会得到一个主题,比如 /vrpn_client_node/robot1/pose
关于具体的配置,大家可以看:配置获取动捕数据
2.px4 坐标系和mavros坐标系
MAVROS的坐标系是ENU,也就是x朝东,y朝北,z朝上。需要特别注意的是!!!:上述坐标可以旋转,比如说x朝北,y朝西,z朝上也属于ENU坐标系,只是在原坐标系方向向西旋转了90°。(当时我们整这个坐标系问题半个月,对enu理解有误,来回修改文件,其实刚开始的就是对的。。。。)我们检验坐标系 是否正确,打开地面站,mavlink消息检测的local_position,它是否是ENU坐标系,如果正确,不用去管其它的
optitrack原始数据的坐标系是ENU(我们使用Z轴朝上,也就是topic /vrpn_client_node/robot1/pose 原始数据是ENU坐标系
),px4的坐标系是NED,mavros的坐标系是ENU,中间的转换采用的是阿木实验室的坐标转换:px4_pos_estimator.cpp
整体流程是:
- 首先是传感器测量得到,由机载电脑中的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消息,并进行相应计算处理,融合得到无人机的位置速度等状态。
飞控参数设置:EKF2
- EKF2_AID_MASK 设置为24(即勾选vision position fusion and vision yaw fusion)
- EKF2_HGT_MODE 设置为VISION (默认为气压计)
-
MAV_1_CONFIG= TELEM 2(刚开始没有参数,先设置它)
MAV_1_MODE = Onboard
SER_TEL2_BAUD = 921600
EKF2_AID_MASK =24
EKF2_HGT_MODE 设置为 Vision,有激光定高的可设为Range sensor
MAV_ODOM_LP设置1