欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

无人机姿态融合——EKF

程序员文章站 2022-04-15 23:45:17
...

联系方式:aaa@qq.com

一、实验目的

使用惯性测量单元IMU和磁场传感器(磁力计)的信息,通过EKF对四旋翼无人机进行姿态融合。

二、实验环境

ROS机器人操作系统

三、实验步骤

1. 安装hector quadrotor
hector quadrotor 是德国老牌理工学校Technische Universität Darmstadt大学开发的ros包,整合了ros和gazebo,可以进行uav相关的很多仿真实验,例如飞行动力学,机载传感器例如imu、gps、camera,复杂环境仿真,姿态融合,SLAM等等。

首先下载和编译hector quadrotor的ros包(注意自己安装的ros版本,这里用的是kinetic版)

~$ mkdir catkin_ws/src/hector_quadrotor_tutorial
~$ cd catkin_ws/src/hector_quadrotor_tutorial
$ wstool init src https://raw.github.com/tu-darmstadt-ros-pkg/hector_quadrotor/kinetic-devel/tutorials.rosinstall
$ cd ../..
~/catkin_ws$ catkin_make
~/catkin_ws$ source devel/setup.bash

然后可以启动launch文件(共有两个,一个是outdoor,一个是indoor)测试无人机了。

~/catkin_ws$ roslaunch hector_quadrotor_demo outdoor_flight_gazebo.launch

或者

~/catkin_ws$ roslaunch hector_quadrotor_demo indoor_slam_gazebo.launch

想要用键盘控制无人机首先要启动无人机的电机

$ rosservice call /enable_motors true

再启动键盘控制节点

$ rosrun teleop_twist_keyboard teleop_twist_keyboard.py

测试效果图
outdoor
无人机姿态融合——EKF
无人机姿态融合——EKF

indoor
无人机姿态融合——EKF
无人机姿态融合——EKF

参考教程

2. EKF姿态融合

这里使用了两种EKF方法进行姿态融合
第一种的参考文献在此
第二种的参考文献在此
其中第二种基于四元数实现。

算法实现及使用:
首先下载和编译算法代码ros包

~$ cd catkin_ws/src/
~/catkin_ws/src$ git clone https://github.com/DajunZhou/uav_att_EKF.git
~/catkin_ws/src$ cd ..
~/catkin_ws$ catkin_make
~/catkin_ws$ source devel/setup.bash

启动测试环境(可以自己写一个empty world的测试环境):

~/catkin_ws$ roslaunch hector_quadrotor_demo outdoor_flight_gazebo.launch
~/catkin_ws$ roslaunch uav_att_EKF uav_att_est.launch

(上面使用了两个终端)

启动算法节点(因为是使用python实现,包含了自己实现的类,所以用python启动)
第一种算法

~/catkin_ws$ cd src/uav_att_EKF/scripts/
$ python uav_att_node.py

启动键盘控制

$ rosservice call /enable_motors true
$ rosrun teleop_twist_keyboard teleop_twist_keyboard.py

姿态融合效果

第二种算法

~/catkin_ws$ cd src/uav_att_EKF/scripts/
$ python uav_att_2stageEKF_node.py

启动键盘控制

$ rosservice call /enable_motors true
$ rosrun teleop_twist_keyboard teleop_twist_keyboard.py

姿态融合效果

四、结果分析

从视频上看,在旋转时,对于无人机的偏航角第一种方法比第二种方法响应更快,估计更准。分析原因:第一种算法使用加速度/磁力计矫正时,可同时对俯仰角、滚动角和偏航角进行矫正,且状态矩阵共12维,包含信息更多;第二种方法状态使用的是四元数,加速度计不矫正偏航角,磁力计只矫正偏航角,由于实验环境中IMU的频率是100Hz,磁力计是10Hz,所以无人机偏航角的估计会比较慢。但从计算量和计算时间的角度来说,第二种方法应该会优于第一种方法。

参考文献
Comprehensive Simulation of Quadrotor UAVs Using ROS and Gazebo
A Double-Stage Kalman Filter for Orientation Tracking With an Integrated Processor in 9-D IMU