PX4 如何切换到offboard 模式

本文详细探讨了在PX4中如何切换到offboard模式。通过跟踪源代码,发现关键在于设置status_flags->offboard_control_signal_lost为0。这涉及到处理commander模块的handle_command函数、main_state_transition函数,以及offboard_control_mode的timestamp更新。要成功切换,需要发送频率大于2Hz的MAVLink SET_POSITION_TARGET_LOCAL_NED消息。
摘要由CSDN通过智能技术生成

最近研究px4的offboard模式,如何切换到offboard模式一筹莫展,便跟踪源代码至commander module。

一、 handle_command函数

  从dronekit发送设定offboard模式的mavlink信息至飞控,相关命令经mavlink模块解析得到关于vehicle_command的主题。

def PX4setMode(mavMode): vehicle._master.mav.command_long_send(vehicle._master.target_system, vehicle._master.target_component, mavutil.mavlink.MAV_CMD_DO_SET_MODE, 0, 1, mavMode, 0, 0, 0, 0, 0)


由handle_command函数中

                                } else if (custom_main_mode == PX4_CUSTOM_MAIN_MODE_OFFBOARD) {
/* OFFBOARD */
main_ret = main_state_transition(status_local, commander_state_s::MAIN_STATE_OFFBOARD, main_state_prev, &status_flags, &internal_state);
}

相关信息要跟踪至main_state_transition。

二、main_state_transition

   main_state_transition(struct vehicle_status_s *status, main_state_t new_main_state, uint8_t &main_state_prev,
     status_flags_s *status_flags, struct commander_state_s *internal_state)
{
transition_result_t ret = TRANSITION_DENIED;


/* transition may be denied even if the same state is requested because conditions may have changed */
switch (new_main_state) {

case commander_state_s::MAIN_STATE_OFFBOARD:


/* need offboard signal */
if (!status_flags->offboard_control_signal_lost) {
ret = TRANSITION_CHANGED;
}


break;


     if (ret &

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值