在三维激光雷达平台上我们飞控采用pixhawk2的飞控。官方给我说这个支持APM和PX4的固件,但是对APM固件的支持性比较好,因此就选用了APM的飞控。在一开始装好飞机后,第一次飞还好好的,但是之后出现了一个问题,就是yaw角会不受控制的自旋。这个找了电机电调的问题还是飞不稳(电调很容易焊接不牢靠)。之后我们把飞控的减震板去掉之后并且再次将电机连接到飞控上,进行了电调的校准,然后就可以很稳定的飞了。之后感觉飞控板质量有问题才导致了这个原因。不管怎么说现在可以在自稳模式平稳飞行了。超声波定高效果也还将就,偶尔会出现掉高的情况,反正先往下走吧(从后来回过头来看这个选择是很明智的)。之后遇到一个问题,AMP 3.5.7固件没有LPE,无法使用外部位置信息融合。如果使用外部位置控制的话有三种方式:1、将外部位置信息当做一个GPS的信息传入飞控,在EKF2中进行融合。2、自己修改EKF2,加上一个外部位置融合的模块。3、位置控制在NUC上进行计算,然后得到期望的姿态给飞机控制。斟酌了一下这些问题,我们决定我们换成PX4飞控来进行我们的工作,因为PX4固件有LPE,可以进行外部位置融合。
换成PX4固件,大概调了一下PID参数,可以定高飞行了(效果也只是一般般)。然后我们准备将雷达的位置信息融合进飞机。但是问题出现了,进不到定点模式,融合数据太差了。经过看飞行日志,发现加速度计的波动在+-0.5G之间,这怎么能用呢。然后我再看了一下其他正常飞行的飞机,加速度计的波动都在+-0.1G左右。这个差距也太大了吧,我们又加了一个比较好的减震板,数据勉强在+-0.3G的噪声,但是还是太差了。不管调参还是怎么搞,都没有改善。为啥不加减震APM固件噪声就比较小,加了这么好的减震PX4固件的加速度计的噪声就这么大,其他硬件都是一样的 啊。这个真的是APM固件比PX4固件好么?那还换回APM固件来试一下吧。APM固件看一下有没有什么方法来融合外部位置,当时想的最坏的不过是把位置控制写在nuc上,总比做不出来强。换后,测试自稳模式和定高模式都很不错,惊喜的是定高不会出现掉高的现象了,看来好的减震板还是有必要的。不错不错,也不枉我们这段时间的折腾。
现在就是位置估计了。查看了在APM论坛上,确实有人讨论外部位置融合的问题。我擦,有大神已经把APM外部位置融合做出来了。并且已经在github上合并到主项目中master版本上了。赶快下载下来试一下。参照官网上的APM编译环境配置,来配置好环境,编译最新的固件,然后看了一下固件版本3.7-dev。确实比我们在地面站上下载下来的固件新不少啊。试一下吧,按照他们说的步骤先设置一下飞机的参数。
Setup the Pixhawk
Connect to the Pixhawk with a ground station (i.e. Mission Planner) and set the following parameters:
-
SERIAL2_PROTOCOL = 1 (the default) to enable MAVLink on the serial port.
-
SERIAL2_BAUD = 921 so the Pixhawk can communicate with the TX1 at 921600 baud.
-
LOG_BACKEND_TYPE = 3 if you are using APSync to stream the dataflash log files to the TX1
You may need to manually disable flow control on Telem2 although this is not normally required:
As a side note the J120’s UART2 appears on the TX1 as /dev/ttyTHS1.
以上是pixhawk2与mavros连接需要设置的。
Configure ArduPilot
Connect to the flight controller with a ground station (i.e. Mission Planner) and check that the following parameters are set as shown below:
-
AHRS_EKF_TYPE = 2 (the default) to use EKF2 (at the time this page was written the EKF3 did not yet support external position estimates)
-
EK2_ENABLE = 1 (the default)
-
EK3_ENABLE = 0 (the default)
-
GPS_TYPE = 0 to disable the GPS
-
EK2_GPS_TYPE = 3 to disable the EKF’s use of the GPS
-
MAG_ENABLE = 0, COMPASS_USE = 0, COMPASS_USE2 = 0, COMPASS_USE3 = 0 to disable the EKF’s use of the compass and instead rely on the heading from ROS and Hector SLAM
After changing any of the values above, reboot the flight controller.
以上是使用EKF2来取消GPS、取消MAG。这个是融合视觉信息的准备工作。
mavros连接到pixhawk2之后将位置信息通过vision_pose话题来发给飞控,然后在QGC上的analysis中可以看到视觉的估计值已经被飞控接收到了,然后就是看是否融合使用了视觉的信息。但是没有变量可以看到融合的位置信息。只能通过飞行日志来看了,让飞机产生一个飞行日志,然后查看EKF的消息中的PN PE来看一下融合进去了没有。看了一下确实融合进去了。并且yaw角使用的视觉yaw角这样的话,外部位置的坐标系和飞机的坐标系就对应起来了。
如果位置信息融合了的话可以看到地面站消息中会有这样的显示。
EKF2 IMU1 initial pos NED = 0.0,0.0,0.0 (m)
EKF2 IMU1 is using external nav data
EKF2 IMU0 initial pos NED = 0.0,0.0,0.0 (m)
EKF2 IMU0 is using external nav data
到这里就把视觉信息传给飞控了。此时还没有测试是否能够定点。之后测试之后再更新吧。
10月13日更新
经过这么久的调试,终于可以使用guided模式来寻点了。
到上面那步可以直接试一下自己的飞机能否准确定点。如果可以的话就可以尝试使用set_point来给飞机发期望的位置。这里有一个位置,有一个四元数。位置是给飞机期望的位置,四元数是给飞机期望的yaw角。通过set_point给飞机期望位置之后飞机就根据你给的位置和yaw角来达到期望的状态。mavros给飞机当前外部位置的时候需要xyz都需要给,要不然融合就会有问题。不能只给x和y,然后z给0,这样的话在定高和定点的时候不会有问题。在guided模式和auto模式的时候就会出现问题,当前的z方向的位置都是0,导致高度控制会产生错误。
reference
http://ardupilot.org/dev/docs/ros-slam.html
https://discuss.ardupilot.org/c/blog
https://github.com/ArduPilot/ardupilot
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)