无人机 PX4 飞控 | ROS应用层开发:offboard 模式切换详细总结

本文主要是介绍无人机 PX4 飞控 | ROS应用层开发:offboard 模式切换详细总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

无人机 PX4 飞控 | ROS应用层开发:offboard 模式切换详细总结

  • PX4 offboard 模式介绍
  • 通过mavros 进行offboard模式切换
    • 代码
    • 测试
  • 通过地面站进行offboard模式切换
  • 通过遥控器拨杆切换offboard模式

在这里插入图片描述

PX4 offboard 模式介绍

PX4 是一个广为熟知的开源飞控软件,常用于无人机(UAV)和其它自主飞行器的控制。

在PX4中,offboard模式是一种飞行模式,允许用户通过外部控制源(如地面控制站或机载电脑系统)来控制飞行器,而不是使用PX4内置的自动飞行模式。

在offboard模式下,飞行器接收到的控制指令通常是通过MAVLink协议从外部系统发送的。这意味着飞行器的飞行路径和动作由外部系统决定,而不是由PX4内部的飞行计划或任务管理器控制。这种模式对于需要精确控制和实时调整的应用场景非常有用,例如科学研究、地图制作、搜索和救援任务等。

要使PX4进入offboard模式,通常需要完成以下步骤:

  • 确保飞行器与机载电脑系统或其他控制源之间的通信链路稳定可靠。
  • 在PX4中配置参数。这包括设置MAVLink相关的参数,确保飞行器可以接收并正确解析来自外部控制源的控制指令。
  • 切换到offboard模式。可通过程序发送指令、或地面站发送指令、或配置好遥控器对应拨杆
  • 发送控制指令。在offboard模式下,外部控制源需要发送持续的控制指令流,这些指令通常包括飞行器的速度、位置和方向等信息。
  • 监控飞行器的状态。在offboard模式下,外部控制源还应该接收来自飞行器的状态反馈,以便于实时监控飞行器的状态并进行必要的调整。

请注意,offboard模式下的飞行器操作需要较高的技术水平和谨慎的操作,因为一旦进入offboard模式,飞行器的控制权完全转移到了外部系统。因此,确保所有系统稳定可靠并且有相应的安全措施是非常重要的。

通过mavros 进行offboard模式切换

MAVROS是一个开源的ROS(Robot Operating System)功能包,主要用于将ROS与MAVLink协议连接起来,实现ROS与无人机之间的通信和控制。

mavros中 控制 无人机模式的 server名称为:/mavros/set_mode

类型为:mavros_msgs/SetMode

参数为:base_mode custom_mode

mavros_msgs/SetMode的定义为

# set FCU mode
#
# Known custom modes listed here:
# http://wiki.ros.org/mavros/CustomModes# basic modes from MAV_MODE
uint8 MAV_MODE_PREFLIGHT = 0
uint8 MAV_MODE_STABILIZE_DISARMED = 80
uint8 MAV_MODE_STABILIZE_ARMED = 208
uint8 MAV_MODE_MANUAL_DISARMED = 64
uint8 MAV_MODE_MANUAL_ARMED = 192
uint8 MAV_MODE_GUIDED_DISARMED = 88
uint8 MAV_MODE_GUIDED_ARMED = 216
uint8 MAV_MODE_AUTO_DISARMED = 92
uint8 MAV_MODE_AUTO_ARMED = 220
uint8 MAV_MODE_TEST_DISARMED = 66
uint8 MAV_MODE_TEST_ARMED = 194uint8 base_mode # filled by MAV_MODE enum value or 0 if custom_mode != ''
string custom_mode # string mode representation or integer
---
bool mode_sent # Mode known/parsed correctly and SET_MODE are sent

代码

在之前的基础代码框架中的字符串指令回调函数,增加 接收到 offboard 字符串,然后进行模式切换的操作

    if( msg->data == "offboard" ){geometry_msgs::PoseStamped pose;pose.pose.position.x = 0;pose.pose.position.y = 0;pose.pose.position.z = 0;//在进入Offboard模式之前,必须已经启动了LocalPosPub_数据流,否则模式切换将被拒绝。//这里的100可以被设置为任意数for(int i = 100; ros::ok() && i > 0; --i){LocalPosPub_.publish(pose);}if( MavrosCurrentState_.mode != "OFFBOARD" ){//建立一个类型为SetMode的服务端offb_set_mode,并将其中的模式mode设为"OFFBOARD"mavros_msgs::SetMode offb_set_mode;offb_set_mode.request.custom_mode = "OFFBOARD";//客户端set_mode_client向服务端offb_set_mode发起请求call,然后服务端回应response将模式返回,这就打开了offboard模式if( set_mode_client_.call(offb_set_mode) && offb_set_mode.response.mode_sent){//打开Offboard模式后在终端打印信息ROS_INFO("Offboard enabled");}}}

测试

启动gazebo仿真与功能节点后,发布字符串话题

rostopic pub -1 /keyboard_cmd std_msgs/String "offboard" 

无人机在地面时
直接进行这样的切换是不行的
在这里插入图片描述
地面站提示 No offbaord signal ,切换了之后,一直没有控制信号

无人机在空中时,通过虚拟摇杆解锁无人机,飞至空中
在这里插入图片描述
再发送切换offboard指令指令
在这里插入图片描述
又自动切回了Position模式,还是因为没有控制信号

如果此时发送控制信号,例如速度控制,便可成功切换offboard模式
在这里插入图片描述
此时虚拟摇杆不能再次控制无人机了

无人机在地面时,如果发送了速度控制指令也可以切换为offboard模式
通过虚拟摇杆,来解锁,则提示下面内容,也就是不能再通过这种方式解锁了,可以通过mavros的方式。
在这里插入图片描述

通过地面站进行offboard模式切换

QGC地面站,显示当前无人机模式的地方,点击则会出现下拉菜单,来设置不同的模式
在这里插入图片描述
点击红框的地方
在这里插入图片描述
点击版外Offboard,也可以进行模式的切换,前提:发送控制信息

通过遥控器拨杆切换offboard模式

在地面站设置要遥控器的拨杆通道,也可以通过此种方式另无人机进入 offboard模式,前提:发送控制信息

这篇关于无人机 PX4 飞控 | ROS应用层开发:offboard 模式切换详细总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1119681

相关文章

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

最新版IDEA配置 Tomcat的详细过程

《最新版IDEA配置Tomcat的详细过程》本文介绍如何在IDEA中配置Tomcat服务器,并创建Web项目,首先检查Tomcat是否安装完成,然后在IDEA中创建Web项目并添加Web结构,接着,... 目录配置tomcat第一步,先给项目添加Web结构查看端口号配置tomcat    先检查自己的to

使用Nginx来共享文件的详细教程

《使用Nginx来共享文件的详细教程》有时我们想共享电脑上的某些文件,一个比较方便的做法是,开一个HTTP服务,指向文件所在的目录,这次我们用nginx来实现这个需求,本文将通过代码示例一步步教你使用... 在本教程中,我们将向您展示如何使用开源 Web 服务器 Nginx 设置文件共享服务器步骤 0 —

React实现原生APP切换效果

《React实现原生APP切换效果》最近需要使用Hybrid的方式开发一个APP,交互和原生APP相似并且需要IM通信,本文给大家介绍了使用React实现原生APP切换效果,文中通过代码示例讲解的非常... 目录背景需求概览技术栈实现步骤根据 react-router-dom 文档配置好路由添加过渡动画使用

SpringBoot集成SOL链的详细过程

《SpringBoot集成SOL链的详细过程》Solanaj是一个用于与Solana区块链交互的Java库,它为Java开发者提供了一套功能丰富的API,使得在Java环境中可以轻松构建与Solana... 目录一、什么是solanaj?二、Pom依赖三、主要类3.1 RpcClient3.2 Public

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

手把手教你idea中创建一个javaweb(webapp)项目详细图文教程

《手把手教你idea中创建一个javaweb(webapp)项目详细图文教程》:本文主要介绍如何使用IntelliJIDEA创建一个Maven项目,并配置Tomcat服务器进行运行,过程包括创建... 1.启动idea2.创建项目模板点击项目-新建项目-选择maven,显示如下页面输入项目名称,选择

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

Spring Boot 中整合 MyBatis-Plus详细步骤(最新推荐)

《SpringBoot中整合MyBatis-Plus详细步骤(最新推荐)》本文详细介绍了如何在SpringBoot项目中整合MyBatis-Plus,包括整合步骤、基本CRUD操作、分页查询、批... 目录一、整合步骤1. 创建 Spring Boot 项目2. 配置项目依赖3. 配置数据源4. 创建实体类