pixhawk消息流与框架介绍(阿木)

这里面我觉得很重要的一点就是指出了

如果我们想控制飞行器飞行到一个地方,那么我们就应该去发布position_setpoint_triplet主题,mavlink作为主题的发起者,它可以发布这个主题,那么我们也可以发布,我们的功能模块应该喝mavlink站在同一层上。

你是不能直接发布姿态控制消息的

 

可以结合这篇博文来看

https://blog.csdn.net/sinat_16643223/article/details/107874349

 

来源:阿木实验室

 

在介绍框架之前,首先要说明一点,px4的代码十分庞大,但是本章介绍的侧重点仅仅是功能模块代码,这些代码位于源代码跟路径:/src/modules/

 

在px4源码中对二次开发比较重要的代码模块有:

commander

ekf2

mavlink

mc_att_control

mc_pos_control

navigator

 

1.commander

commander模块主要处理一些px4的常用命令,如传感器效准、模式切换、加锁解锁、起飞降落、紧急断电等等的命令。

commander模块的输入topic是vehicle_command。模块会根据不同的命令id将命令分解成其他的topic并发布出去供其他模块响应。如果我们想使用commander模块带来的便利,我们可以在自己的程序代码中直接发布主题:vehicle_command

 

2.ekf2

ekf2模块主要处理飞控上的传感器数据融合,如gps、加速度计、指南针等等。

ekf2的输入参数都是又px4的硬件驱动模块提供的,我们在进行二次开发的过程中不需要关心具体的topic。

ekf2的输出topic有:

vehicle_attitude

vehicle_local_position

vehicle_global_position

 

vehicle_attitude:当前飞控的姿态

vehicle_local_position:当前飞控的本地位置,坐标系为ned,以飞控加点第一次得到的点为原点

vehicle_global_position:当前飞控的全球位置

 

如果我们在自己的代码中有需求,可以直接订阅这三个主题,ekf2保证这些数据的实时更新,我们不需要去关系具体硬件。

 

3.mavlink

mavlink模块主要处理mavlink通讯,mavlink的输入总是由飞控的数传串口,输出总是将mavlink封包分解后的各个topic。这也是我们分析飞控的重点模块,是在px4中处于最上层的模块之一。

 

4.mc_att_control

mc_att_control模块是处理姿态控制的模块,所有的上层模块的飞行决策最终都将化为topic vehicle_attitude_setpoint作为mc_att_control模块的输入参数。但是我们自己的代码中请不要直接发布此主题,因为px4中对此主题有完整的响应链,如果我们直接发布期望姿态,那么很可能引起混乱,一定要仔细分析,直到分析道最上层的决策topic。

mc_att_control模块的输出topic有:

actuator_controls_0

当然其他还有另外7个控制topic

actuator_controls_1

actuator_controls_2

actuator_controls_3

actuator_controls_4

actuator_controls_5

actuator_controls_6

actuator_controls_7

分别代表8个混控器control group,px4中混控器的作用主要是将期望姿态信息roll pitch yaw映射到实际的电机转速或者舵机角度,当然这又是另外一个话题了,这里我们只需要知道actuator_controls_0就是mc_att_control模块的最终输出,他的输出在通过混控器之后会实际的改变电机转速或者舵机角度。

 

5.mc_pos_control

mc_pos_control模块是处理位置控制的模块,位置模块的输出参数永远都是topic vehicle_attitude_setpoint。可以看出,位置控制模块是处于姿态控制模块的上层,他的输出作为了姿态控制模块的输入,到这里,我们就可以清楚,为什么我们不能直接控制发布姿态主题了,如果我们直接发布了姿态topic,那么就很有可能与位置控制发布的姿态topic冲突进而产生飞行器的不稳定。

位置控制模块的输入参数比较特殊,分别是:

manual_control_setpoint

position_setpoint_triplet

 

manual_control_setpoint是遥控器的当前输入值,比如你的油门打到了100%,那么topic中对应的参数可能就是100

position_setpoint_triplet是期望位置信息(本地坐标系ned),主题来自于其他很多地方,如:

mavlink模块(地面站的控制)

navigator模块(auto模式发起)

 

到这里我们就可以看出,如果我们想控制飞行器飞行到一个地方,那么我们就应该去发布position_setpoint_triplet主题,mavlink作为主题的发起者,它可以发布这个主题,那么我们也可以发布,我们的功能模块应该喝mavlink站在同一层上。

 

在看另外一个主题manual_control_setpoint是遥控器的输入,我们可以想象,遥控器已经是最上层的决策了,并且有一点很重要,遥控器是直接控制的飞行器的姿态,而并不是位置信息,所以,在你的程序中如果你想要控制飞行器的姿态,那么应该发布遥控器主题来命令飞行器,而不应该直接发布期望姿态主题。

 

6. navigator

navigator模块主要掌管飞行器的各种自动飞行模式,比如:

数传丢失的自动处理

跟随模式

进入禁飞区的自动处理

gps故障的自动处理

自动降落

留待模式

自动任务

遥控器丢失自动处理

自动返航

自动起飞

所以navigator的输入参数有非常多的主题,其中最重要的是传感器主题,用于判断当前是否需要紧急机制,第二重要的是来自自动任务的数据,此数据被px4以romfs文件系统保存在一个文件中,记录这从地面站发送的航点任务。

 

但是不管任务有多么复杂,所有的输入参数,最终都会转化为position_setpoint_triplet为位置控制模块提供输入参数。

 

注意:navigator发布position_setpoint_triplet时是处于px4的auto模式的,此模式是px4自己的模式我们无权干涉它的正常执行,我们发布position_setpoint_triplet主题时,一定要让px4处于offboard模式,这种模式才是给用户使用的。

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值