PX4控制接口简介

网友投稿 798 2022-09-18

PX4控制接口简介

PX4控制接口简介

PX4固件版本:1.12.3稳定版 本文主要介绍PX4中各个控制接口,在PX4中各个接口可以直接给入期望的控制量,从而实现无人机的自主控制,包括位置、速度、加速度、姿态角、姿态角速度和控制力矩。 本文以位置控制接口为例进行介绍。其他的控制接口的使用是一样的。进入OFFBOARD模式并解锁 vehicle_status_s _status; vehicle_command_s _command = {}; offboard_control_mode_s ocm{}; uORB::Publication _offboard_control_mode_pub{ORB_ID(offboard_control_mode)}; uORB::Publication _vehicle_command_pub{ORB_ID(vehicle_command)}; uORB::Subscription _vehicle_status_sub{ORB_ID(vehicle_status)}; _vehicle_status_sub.copy(&_status); _command.target_system = _status.system_id; _command.target_component = _status.component_id; ocm.timestamp = hrt_absolute_time(); _offboard_control_mode_pub.publish(ocm); _command.command =vehicle_command_s::VEHICLE_CMD_DO_SET_MODE; _command.param1=1.0f; _command.param2 = PX4_CUSTOM_MAIN_MODE_OFFBOARD; _command.timestamp = hrt_absolute_time(); _vehicle_command_pub.publish(_command); usleep(10000); _command.command = vehicle_command_s::VEHICLE_CMD_COMPONENT_ARM_DISARM; _command.param1 = 1.0f; _command.timestamp = hrt_absolute_time(); _vehicle_command_pub.publish(_command); 其中offboard_control_mode消息是OFFBOARD模式的心跳包,必须以最低两Hz的频率发布,注意发布时必须赋值系统时间戳,否则会自动推出OFFBOARD模式,切换OFFBOARD模式并解锁是利用vehicle_command消息来实现的,将​​command​​ 成员赋值为​​vehicle_command_s::VEHICLE_CMD_DO_SET_MODE​​,然后将​​param1​​赋值为​​1.0f​​,将​​param2​​ 赋值为​​PX4_CUSTOM_MAIN_MODE_OFFBOARD​​即可切换为OFFBOARD模式。解锁则是将​​command​​赋值为​​vehicle_command_s::VEHICLE_CMD_COMPONENT_ARM_DISARM​​,将​​param1​​ 赋值为​​1.0f​​并发布。发布期望位置 我这里以本地位置为例vehicle_local_position_setpoint_s sp_local{};uORB::Publication _trajectory_setpoint_pub{ORB_ID(trajectory_setpoint)}; sp_local.x=0; sp_local.y=0; sp_local.z=-5; sp_local.timestamp = hrt_absolute_time(); _trajectory_setpoint_pub.publish(sp_local); ocm.position=true; ocm.timestamp = hrt_absolute_time(); _offboard_control_mode_pub.publish(ocm); 由于是发布的期望位置,因此需要将​​ocm.position​​置为true,同时赋值​​trajectory_setpoint​​消息并发布,无人机将按期望的位置进行飞行。 我这里是让飞机原地上升5米,如果想让无人机自动降落,可以用​​command​​消息将飞行模式设置为LAND模式即可,LAND模式输入从模式,因此需要设置参数如下 _command.command =vehicle_command_s::VEHICLE_CMD_DO_SET_MODE; _command.param1=1.0f; _command.param2 = PX4_CUSTOM_MAIN_MODE_AUTO; _command.param3 = PX4_CUSTOM_SUB_MODE_AUTO_LAND;

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:15. 面向对象编程:接口与多态
下一篇:14. Go语言流程控制:defer 延迟调用(14.00mm的美瞳算大么)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~