本文将一些注意点记录下来,适合于开发调试:
- 目前只是分段调试通了,带后续联合开发的时候在来补充还有没有什么注意点(过程也算麻烦,也算不麻烦);
- ROS组网,optitrack 台式机(windows系统)与 ROS服务器(这里称为服务器,感觉比较合适),四旋翼在同一个局域网内。其中四旋翼本次采用Pixracer (烧录px4,v1.10.1版本), 通过tel2与树莓派链接,树莓派采用4B型号,烧录ubuntu mate18.04版本,安装ros-melodic。
- 期间需要树莓派当master,第一开始采用的是服务器当master,没有成功。这个地方仍然需要后续考虑。也就是说我把服务器当master, 并且完成optitrack的数据转发。将树莓派当做slave加入到master。此时,master中可以看到所有树莓派上提供的消息并且显示,px4飞控无法收到/mavros/vision_pose/pose,且最后查/mavros/local_position/pose没有数据。这个地方需要注意的是master和slaver都要将自己的IP和命名放在etc/hosts中,才可以完成互相的通信。
- 服务器上可以采用rosbag record -a 来记录所有的消息信息。(如果需要画曲线的话,建议吧rosbag放在树莓派上进行,cpu负载率50%左右,还是可以接受的)ROS中记录数据与回放,然后在matlab中解析Rosbag,rosbag-matlab。这个地方参照的是
bag = rosbag('ex_multiple_topics.bag');
bSel = select(bag,'Topic','/turtle1/pose');
msgStructs = readMessages(bSel,'DataFormat','struct');
xPoints = cellfun(@(m) double(m.X),msgStructs);
yPoints = cellfun(@(m) double(m.Y),msgStructs);
plot(xPoints,yPoints)
这里,我们可以把他写成matlab脚本文件,就可以当飞行数据显示在matlab中了。
5. 期间修改了px4中mavlink发送频率,由于要进行姿态控制,所以将频率都提到了最高。如果进行位置控制,则可以忽略。
6. 在vrpn_client_node包中的sample.launch中,修改了一个同步时间的参数use_server_time:本来默认参数为false,结果被我修改成了true。造成在消息中查看vision_pose是正确存在的,local_position/pose中刚开始有参数,一会之后就发散然后变成0了。这个时候在QGC中进行查看,首先在mavlink_console中的local_position是确定为0的,然后在查看ls /obj,找到vehicle_visiual_odometry中是正确的数值,表示px4代码是收到了正确的optitrack数据的,紧接着又查看了ekf2中的status,发现此时local_position_estimator 显示invalid。 很是无语,此时猜测EKF2某些参数造成他发散了(其实后来在源码中发现了有一个超时的选项的,这个是通过ekf2 invalid 顺藤摸瓜找到的),尝试着修改了一些EKF2的延迟参数,无果。转而将代码修改成LPE模式,不在使用EKF2(在rc中修改ekf2 start 替换成local position estmator start 没有用,在QGC中system选现中可以进行修改),再成功修改成LPE模式后,再次启动程序,发现在树莓派中一段时间后总是显示LPE 超时,这个时候我才意识到可能是同步时间出了问题,以前修改过sample中的一个和时间同步有关的参数。最后,修改过来之后,一切都正常了。
7. optitrack 可以提升传输速率,最大200Hz。
8. 在多机飞行是,按照上述完成配置,出现一种情况,/uav1/mavros/vision_pose/pose是确定已经发送过去了,按照第6步的操作,在地面站中查看vehicle_visual_odometry也是存在正确的数据的。飞控收到数据,但是local_position没有数据的原因,应该是vision_pose的数据和飞控中的数据时间戳没有对上,造成飞控中ekf的解算发散了,解决方法是需要同步时间。可以采用的方法是在添加一个Node,只进行时间戳到修改。
9. 减少路由器延时及树莓派5G自动断线重连问题。(该问题由师弟整理)
a. 打开浏览器,进入192.168.50.1,登录路由器设置界面。
b. 更改路由器地区,改为US。(树莓派wifi地区也改为美国。) 无线网络->专业设置->地区
c. 更改ASUS_10_5G信道。无线网络->一般设置->频道(设为36~40之间,该信段使用较少)
->频道带宽(设为20,带宽越小传输距离约远,抗干扰能力越强)