【PX4】PX4第一个offborad例程

news2024/11/26 16:43:07

【PX4】PX4第一个offborad例程

文章目录

  • 【PX4】PX4第一个offborad例程
    • 1. 什么是OFFBOARD
    • 2. 第一个offboard例程
    • 3. 编写launch文件
    • Reference

1. 什么是OFFBOARD

PX4的OFFBOARD指的是外部控制模式,飞行器根据飞行控制栈外部(如机载计算机)提供的设定值控制位置、速度、加速度、姿态以及推力/力矩。设置值可以经由 MAVLink 提供。
PX4要求外部控制器提供2Hz(至少是2Hz)连续的“有效存在”信号,该信号可由任意支持的 MAVLink 设置点消息或ROS 2 OffboardControlMode 消息提供。 PX4只有在收到该种信号超过1秒后才有效,如果该种信号停止飞行控制栈将重新获得控制权(脱离Offboard模式)。

一些注意点:

  • Offboard模式通过设置位置、速度、加速、姿态、姿态角速率或力/扭矩设置点来控制飞行器的移动和姿态。
  • PX4 必须能够以2Hz的速率连续收到 MAVLink 设置点消息或 ROS 2 OffboardControlMode 消息以确保外部控制器是正常运行的。 该消息必须已经持续发送1秒钟以上PX4才能在Offboard模式下解锁或在飞行中切换至Offboard模式。 如果在外部控制器给出的指令速率低于2Hz,PX4将在超时(COM_OF_LOSS_T)后退出Offboard模式,并尝试降落或执行其他一些失败保护行为。 失效保护行为取决于RC遥控器是否可用,依据参数 COM_OBL_RC_ACT 的设定。
  • 当使用 MAVLink 时,设定值消息既传达了指示外部控制器"正常运行"的信号也传达了设定值本身。 Offboard模式下要保持位置,飞行器必须接收到一个包含当前位置设定值的消息指令。
  • 当使用 ROS 2 时,外部控制器运行正常通过监测 OffboardControlMode 消息流确保,真实设定点由发布任一包含设定值的uORB消息提供,例如 TrajectorySetpoint。 在这种情况下保持当前位置,飞行器必须收到连续的 OffboardControlMode 消息,但只需要收到 TrajectorySetpoint 消息一次。
  • 请注意,Offboard模式只支持非常有限的 MAVLink 命令和消息。 其他操作如起飞、降落、返航,最好使用适当的模式来处理。 像上传、下载任务这样的操作可以在任何模式下执行。

2. 第一个offboard例程

本教程使用 Gazebo Classic 模拟的Iris四旋翼无人机,用MAVROS Python来展示 OFFBOARD 控制的基础知识。

首先创建一个工作空间并进行初始化

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ..
catkin_make

然后在这个工作空间下创建一个功能包,命名为sitl_study依赖rospy

cd ~/catkin_ws/src
catalkin_create_pkg sitl_study rospy

再在功能包中创建我们的scripts目录用于存放python脚本

roscd sitl_study
mkdir scripts
cd scripts

进入scripts目录,创建我们的可执行脚本,命名为offb_node.py,并且添加可执行权限

touch offb_node.py
chmod +x offb_node.py

然后打开offb_node.py添加下面的代码

#! /usr/bin/env python
#-*- coding: UTF-8 -*- 

import rospy
from geometry_msgs.msg import PoseStamped
from mavros_msgs.msg import State
from mavros_msgs.srv import CommandBool, CommandBoolRequest, SetMode, SetModeRequest

current_state = State()

def state_CB(msg):
    global current_state
    current_state = msg


if __name__ == "__main__":
    # initialize ros node
    rospy.init_node('offb_node_py')

    # state subscriber
    state_sub = rospy.Subscriber('/mavros/state', State, callback=state_CB)

    # pose publisher
    local_pose_pub = rospy.Publisher('/mavros/setpoint_position/local', PoseStamped, queue_size=10)
    
    # arming client
    arming_client = rospy.ServiceProxy('/mavros/cmd/arming', CommandBool)
    arming_client.wait_for_service()

    # mode client
    setmode_client = rospy.ServiceProxy('/mavros/set_mode', SetMode)
    setmode_client.wait_for_service()

    # setpoint publishing MUST be faster than 2HZ
    rate = rospy.Rate(20)

    # wait for Flight Controller connection
    while (not rospy.is_shutdown() and not current_state.connected):
        rate.sleep()
    
    # set point
    pose = PoseStamped()
    pose.pose.position.x = 0
    pose.pose.position.y = 0
    pose.pose.position.z = 2.0

    # send a few setpoints before starting
    for i in range(20):
        if(rospy.is_shutdown()):
            break
        local_pose_pub.publish(pose)
        rate.sleep()
    
    # set OFFBOARD mode
    offb_set_mode = SetModeRequest()
    offb_set_mode.custom_mode = 'OFFBOARD'

    # arm vehicle
    arm_cmd = CommandBoolRequest()
    arm_cmd.value = True

    # request time
    last_req = rospy.Time.now()

    while(not rospy.is_shutdown()):
        if (current_state.mode != "OFFBOARD" and (rospy.Time.now() - last_req) > rospy.Duration(5.0)):
            if(setmode_client.call(offb_set_mode).mode_sent == True):
                rospy.loginfo(">>>>>> OFFBOARD enabled >>>>>>")
            last_req = rospy.Time.now()
            
        else:
            if(not current_state.armed and (rospy.Time.now() - last_req) > rospy.Duration(5.0)):
                if(arming_client.call(arm_cmd).success == True):
                    rospy.loginfo(">>>>>> Vehicle armed >>>>>>>")
                last_req = rospy.Time.now()
        
        local_pose_pub.publish(pose)
        rate.sleep()

CMakelists.txt中添加节点路径,如下所示

#############
## Install ##
#############

# all install targets should use catkin DESTINATION variables
# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html

## Mark executable scripts (Python etc.) for installation
## in contrast to setup.py, you can choose the destination
catkin_install_python(PROGRAMS
  scripts/offb_node.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

修改完毕之后,我们首先进行编译

cd ~/catkin_ws
catkin_make
source ./devel/setup.bash

然后我们就可以测试是否编写成功了,首先启动

roslaunch px4 mavros_posix_sitl.launch 

然后再启动

rosrun sitl_study offb_node.py

我们就能看到无人机先解锁然后转到OFFBORAD模式,然后起飞到两米,如下图所示

Image

3. 编写launch文件

虽然上述的启动方式能够实现让飞机启动,但是需要我们手动输入两次命令,非常不优雅,我们可以编写一个launch文件来集成这两者。

roscd sitl_study
mkdir launch
cd launch
touch offb_start.launch

然后打开该文件,输入以下内容

<?xml version="1.0"?>
<launch>
    <!-- Include the MAVROS node with SITL and Gazebo -->
    <include file="$(find px4)/launch/mavros_posix_sitl.launch">
    </include>

    <!-- Our node to control the drone -->
    <node pkg="sitl_study" type="offb_node.py" name="offb_node_py" required="true" output="screen" />
</launch>

然后再进行一次编译

cd ~/catkin_ws
catkin_make
source ./devel/setup.bash

我们就可以在任意路径下启动了

roslaunch sitl_study offb_start.launch

Reference

PX4官网的Offobrad模式介绍
PX4官网的控制例程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1029130.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C/C++/Python图像处理算法实战【3】彩色图像灰度化和二值化处理

本篇文章旨在通过详细的代码逐行注释,介绍如何分别使用 C/C++/Python 对彩色图像做灰度化(最大值法、平均值法、加权平均值法)和二值化处理(平均值法、双峰法、OTSU法)。 原理解析 图像表示 数字图像通常采用矩阵表示。以一幅数字图像F左上角像素中心为坐标原点,一幅M…

Prometheus-Rules 实战

文章目录 1 node rules2 nginx rule2.1 Nginx 4xx 错误率太多2.2 Nginx 5xx 错误率太多2.3 Nginx 延迟高 3 mysql rule3.1 MySQL 宕机3.2 实例连接数过多3.3 MySQL高线程运行3.4 MySQL 从服务器 IO 线程没有运行3.5 MySQL 从服务器 SQL 线程没有运行3.6 MySQL复制滞后3.7 慢查询…

小米手机打开开发者模式

1、打开设置 2、 3、 4、多次连续点击版本&#xff0c;直到提示打开开发者模式 5、进入手机开发者模式后&#xff0c;点击进入“设置”主页的“更多设置”。 6、接着点击进入“开发者选项”。 7、最后打开“USB调试”选项后&#xff0c;手机就打开了USB调试模式。 8、可以…

飞行动力学 - 第35节-动操纵性 之 基础点摘要

飞行动力学 - 第35节-动操纵性 之 基础点摘要 1. 动操纵性2. 传递函数3. 动稳定性与动操纵性4. 参考资料 1. 动操纵性 Free response: x 0 ≠ 0 , u 0 x_0 \ne 0, u 0 x0​0,u0Forced response: x 0 0 , u ≠ 0 x_0 0, u \ne 0 x0​0,u0 驾驶员操纵飞机的方式有开环…

【.net core】解决无法下载wgt文件问题

//StartUp.cs文件中Configure方法中添加以下代码 app.UseStaticFiles(new StaticFileOptions{FileProvider new PhysicalFileProvider(Directory.GetCurrentDirectory()),ContentTypeProvider new FileExtensionContentTypeProvider(new Dictionary<string, string>{{ …

高通recovery流程分析(编译、界面、图片)

目录 recovery 界面菜单 recovery 界面操作 recovery 启动流程 recovery 编译makefile recovery 图片大小 ramdisk、boot.img、recovery.img之间的关系 authordaisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主 recovery 界面菜单 recovery 界面显示 android recoveryuse …

酒店布草管控RFID智能化回收管理

酒店行业作为服务业的重要组成部分&#xff0c;拥有大量的布草资产&#xff0c;如客房被罩、床单、浴巾和毛巾等&#xff0c;为了更好地管理和追踪这些布草的使用情况&#xff0c;提高效率和准确性&#xff0c;酒店多采用RFID技术进行布草智能化回收管理。 RFID电子标签的应用…

【深度学习】LeNet网络架构

文章目录 什么是LeNet代码实现网络架构 什么是LeNet LeNet是一种经典的卷积神经网络&#xff0c;由Yann LeCun等人在1998年提出。它是深度学习中第一个成功应用于手写数字识别的卷积神经网络&#xff0c;并且被认为是现代卷积神经网络的基础。 LeNet模型包含了多个卷积层和池…

JOSEF约瑟 剩余电流继电器PFR-5 PFE-W-20 国产化改造ZLR-G81 ZCT-45

系列型号&#xff1a; PFR-003剩余电流继电器 PFR-03剩余电流继电器 PFR-5剩余电流继电器 PFR-W-105互感器 PFR-W-140互感器 PFR-W-20互感器 PFR-W-210互感器 PFR-W-30互感器 PFR-W-35互感器 PFR-W-70互感器 一、用途 PFR剩余电流继电器&#xff08;以下简称继电器…

【教学类】小2班学号字帖(A4横版2份)

图片展示: 背景需求: 突然接到通知&#xff0c;明天下午临时去带小2班。 小班刚入园的孩子&#xff0c;能给他们提供什么样的可操作的学具呢&#xff1f; 思来想去&#xff0c;还是让生成一份学号字帖&#xff0c;让幼儿熟悉自己的学号&#xff0c;让我也熟悉幼儿的名字和学…

phpstudy2016 RCE漏洞验证

文章目录 漏洞描述漏洞验证 漏洞描述 PHPStudyRCE&#xff08;Remote Code Execution&#xff09;&#xff0c;也称为phpstudy_backdoor漏洞&#xff0c;是指PHPStudy软件中存在的一个远程代码执行漏洞。 漏洞验证 打开phpstudy2016&#xff0c;用bp自带的浏览器访问www目录下…

可视化报表设计器的功能内容是什么?

当前&#xff0c;随着社会化发展程度越来越深&#xff0c;传统的表单制作方式已经无法满足需求了&#xff0c;此时&#xff0c;低代码技术平台的出现&#xff0c;可以在一定程度上帮助不同行业的客户实现流程化办公管理&#xff0c;从而实现提质增效的办公效率。 可视化报表设计…

Yolov8小目标检测-添加模块改进-实验记录

简介&#xff0c;本文通过结合了一些先进的算法改进了yolov8小目标检测能力&#xff0c;以下是一些记录。 数据集&#xff1a;足球比赛数据集&#xff0c;里面只有两个类别足球和人。 兄弟姐妹们&#xff0c;如果本文对你有用&#xff0c;点赞收藏一下呗&#xff0c;☺️☺️…

云可观测性:提升云环境中应用程序可靠性

随着云计算的兴起和广泛应用&#xff0c;越来越多的企业将其应用程序和服务迁移到云环境中。在这个高度动态的环境中&#xff0c;确保应用程序的可靠性和可管理性成为了一个迫切的需求。云可观测性作为一种解决方案&#xff0c;针对这一需求提供了有效的方法和工具。本文将介绍…

单臂路由的配置

目录 单臂路由 单臂路由是什么 为什么要用单臂路由 单臂路由的注意事项 单臂路由的原理 单臂路由的优缺点 单臂路由的实验 ensp Cisco H3C 单臂路由是什么 单臂路由是一种特殊的路由器&#xff0c;它的设计目的是实现在一个路由器的一个接口上通过配置子接口&#xf…

森林防火可视化智能监管与风险预警系统解决方案

一、方案背景 森林火灾是世界八大自然灾害之一&#xff0c;具有发生面广、突发性强、破坏性大、危险性高、处置扑救特别困难等特点&#xff0c;严重危及人民生命财产和森林资源安全&#xff0c;甚至引发生态灾难。有效预防和及时控制森林火灾是保护国家生态建设成果、推进生态…

【实战案例】技术转项目经理容易踩的坑,我都踩了

“带团队容易&#xff0c;带好团队难。” 这是身边一位项目经理近期在团队管理方面的深刻感悟。目前&#xff0c;他手上的一个项目被迫暂停了&#xff0c;项目团队也散了。下面给大家简要分享下这个项目案例。 【案例分享】 小李负责的是一个二次开发的项目&#xff0c;所涉及…

新型智慧公厕“1+3+N”架构,平台、系统、应用的创新

近年来&#xff0c;随着人民生活水平的提高&#xff0c;人们对公共设施的要求也越来越高。其中&#xff0c;如厕问题一直是人们关注的焦点&#xff0c;但传统的公厕设施已经不能满足人们对干净、舒适、安全的需求&#xff0c;这促使了新型智慧公厕的诞生与应用&#xff0c;以如…

Puppeter与Electron的结合,使用Electron创建可视化界面

前言 上一篇文章&#xff1a;Puppeteer基础入门、常见应用、利用谷歌插件编写Puppeteer脚本&#xff0c;简单介绍了Puppeteer的基本使用&#xff0c;以及如何编写一个脚本。 但是呢脚本的运行需要在node环境里&#xff0c;开发人员可能没什么问题。但是如果你写的这个脚本要给…

Aspose转pdf乱码问题

一、问题描述 ​ 在centos服务器使用aspose.word转换word文件为pdf的时候显示中文乱码(如图)&#xff0c;但是在win服务器上使用可以正常转换 二、问题原因 由于linux服务器缺少对应的字库导致文件转换出现乱码的 三、解决方式 1.将window中字体(c:\windows\fonts)放到linux…