|
发表于 2023-7-4 17:10:51
2824 浏览 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);
}
}
想知道这是为什么
风帆已获得悬赏 3 阿木币最佳答案
如果是offboard模式下,如果外部板载计算机没有持续发送期望的位置/速度等信息,会导致PX4无人机自动上锁。这是一种安全机制。
|
扫一扫浏览分享
|
|
|
|
|
|
|
发表于 2023-7-5 16:33:29
如果是offboard模式下,如果外部板载计算机没有持续发送期望的位置/速度等信息,会导致PX4无人机自动上锁。这是一种安全机制。 |
|
|
|
|
|
|
|