px4_command功能包是一个基于PX4开源固件及Mavros功能包的开源项目,旨在为PX4开发者提供更加简洁快速的开发体验。目前已集成无人机外环控制器修改、目标追踪及避障等上层开发代码。px4_command_dev功能包是在此基础上进行的程序学习和程序二次开发。
-
通过二进制的方法安装Mavros功能包
请参考: https://github.com/mavlink/mavros
如果你已经使用源码的方式安装过Mavros功能包,请先将其删除。
-
在home目录下创建一个名为 "px4_ws" 的工作空间
mkdir -p ~/px4_ws/src
cd ~/px4_ws/src
catkin_init_workspace
大部分时候,需要手动进行source,打开一个新终端
gedit .bashrc
在打开的
bashrc.txt
文件中添加source /home/$(your computer name)/px4_ws/devel/setup.bash
-
下载并编译
px4_command
功能包cd ~/px4_ws/src
git clone https://github.com/amov-lab/px4_command.git
cd ..
catkin_make
本功能包中所有变量均为 ENU 坐标系(同Mavros,异于PX4固件)
MAVROS does translate Aerospace NED frames, used in FCUs to ROS ENU frames and vice-versa. For translate airframe related data we simply apply rotation 180° about ROLL (X) axis. For local we apply 180° about ROLL (X) and 90° about YAW (Z) axes
外部定位数据传感器目前支持:视觉定位、激光雷达定位、超声波定位、激光测距传感器定位。
- 该模块可获取视觉定位得到的三维位置和姿态信息。
- 该模块可获取激光雷达定位(cartographer)得到的二维维位置和三维姿态信息。
- 该模块可获取超声波传感器得到的z方向的位置。
- 该模块可获取激光测距传感器得到的z方向的位置。
该模块可单独使用视觉定位或者激光雷达定位和超声波传感器(激光测距传感器)组合的方式获取定位信息,然后将该信息传入飞控进行融合,之后通过MavROS访问fcu获取位置、速度、角度和角速度等信息。
外部定位数据传输涉及三个概念:ros话题、Mavlink消息、uORB消息。简单来说: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消息,并进行相应计算处理,融合得到无人机的位置速度等状态。
- px4_pos_estimator.cpp订阅飞控融合后的无人机定位信息,用于后续外环控制
该模块添加了干扰模拟功能,用于后续外环位置控制器的开发测试。
位置控制器根据不同模式下期望的位置计算出对应的期望推力。位置控制器包括串级PID控制[pos_controller_cascade_PID.h]、PID控制([pos_controller_PID.h])、UDE[pos_controller_UDE.h]、Passivity+UDE[pos_controller_Passivity.h]、NE+UDE[pos_controller_NE.h].其中,串级PID为仿写PX4中位置控制器、Passivity+UDE为无需速度反馈的位置控制器、NE+UDE在速度测量有噪声时由于其他控制器。
如果使用加速度控制则将期望推力对应的加速度发送给'/mavros/setpoint_raw/local', 否则将位置控制器得到的期望推力转换为期望姿态发生给'/mavros/setpoint_raw/attitude'。
- 读取飞控状态 [state_from_mavros.h]
- 发送控制指令至飞控 [command_to_mavros.h]