1

阿木币

0

精华

5 小时

在线时间

应届白菜

Rank: 1

发表于 2023-7-4 17:10:51 3076 浏览 1 回复

PX4代码进行无人机解锁,没几秒钟就会与地面站失联

本帖最后由 19805188510 于 2023-7-4 17:10 编辑

代码如下:
while (!should_exit()) {

        /*
            获取订阅的信息
            1.订阅无人机状态信息
            2.订阅无人机控制模式信息
        */
        orb_copy(ORB_ID(vehicle_status), vehicle_status_sub_fd, &vehicle_status_sub);
        orb_copy(ORB_ID(vehicle_control_mode), vehicle_control_mode_sub_fd, &vehicle_control_mode_sub);
        orb_copy(ORB_ID(vehicle_local_position), vehicle_local_position_sub_fd, &vehicle_local_position_sub);

        printf("vehicle_control_mode_sub.flag_armed=%d\n",(int)vehicle_control_mode_sub.flag_armed);
        printf("vehicle_local_position_sub.z=%d\n",(int)vehicle_local_position_sub.z);

        /*不断发布模式指令,保持offboard模式和解锁状态, 控制模式根据需求切换*/
        into_armed_mode(vehicle_command_pub, vehicle_status_sub);

        /* 控制pixhawk灯闪烁情况 */
        my_publish_led_control(led_control);

        parameters_update();
    }

void PX4Control::into_armed_mode(vehicle_command_s ¶m1, const vehicle_status_s ¶m2)
{
    //如果没解锁,尝试解锁
    if(param2.arming_state!=2)
    {
        px4_usleep(5000);
        param1.timestamp=hrt_absolute_time();
        param1.param1=1.0f;
        param1.target_system = param2.system_id;
        param1.target_component = param2.component_id;
        //当param1.param2=21196.f时,可以强制解锁/上锁,不用进行预检测
        //param1.param2 = 21196.f;
        param1.command=vehicle_command_s::VEHICLE_CMD_COMPONENT_ARM_DISARM;
         _vehicle_command_pub.publish(param1);
    }
}
图片.png
想知道这是为什么

风帆已获得悬赏 3 阿木币

最佳答案

如果是offboard模式下,如果外部板载计算机没有持续发送期望的位置/速度等信息,会导致PX4无人机自动上锁。这是一种安全机制。

扫一扫浏览分享
回复

使用道具 举报

144

阿木币

0

精华

143 小时

在线时间

技术大V

Rank: 4

发表于 2023-7-5 16:33:29
如果是offboard模式下,如果外部板载计算机没有持续发送期望的位置/速度等信息,会导致PX4无人机自动上锁。这是一种安全机制。
回复 点赞

使用道具 举报

返回列表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表