ROS+APM无人机无法起飞

APM+ROS解锁后不起飞

: 参考链接

PX4固件官网提供的代码不支持APM固件使用,需要进行相关修改后使用

解决办法

使用如下代码发布无人机位置控制时,必须先执行无人机起飞动作时候,这条命令才会生效。

ros::Publisher local_pos_pub = nh.advertise<geometry_msgs::PoseStamped>("mavros/setpoint_position/local", 10);

所以将代码进行修改,并且增加无人机更复杂的动作,最终修改的代码如下:

#include <ros/ros.h>
#include <geometry_msgs/PoseStamped.h>
#include <geometry_msgs/Twist.h>
#include <mavros_msgs/CommandBool.h>
#include <mavros_msgs/CommandTOL.h>
#include <mavros_msgs/SetMode.h>
#include <mavros_msgs/State.h>mavros_msgs::State current_state;// 无人机状态回调函数
void state_callback(const mavros_msgs::State::ConstPtr &msg) {current_state = *msg;
}int main(int argc, char **argv) {ros::init(argc, argv, "offboard");ros::NodeHandle n;ros::Subscriber state_sub = n.subscribe("/mavros/state", 10, state_callback);ros::Rate rate(20);ROS_INFO("Initializing...");while (ros::ok() && !current_state.connected) {ros::spinOnce();rate.sleep();}ROS_INFO("Connected.");// 设置无人机模式为GUIDEDros::ServiceClient cl = n.serviceClient<mavros_msgs::SetMode>("/mavros/set_mode");mavros_msgs::SetMode srv_setMode;srv_setMode.request.base_mode = 0;srv_setMode.request.custom_mode = "GUIDED";if (cl.call(srv_setMode)) {ROS_INFO("setmode send ok %d value:", srv_setMode.response.mode_sent);} else {ROS_ERROR("Failed SetMode");return -1;}// 解锁无人机ros::ServiceClient arming_cl = n.serviceClient<mavros_msgs::CommandBool>("/mavros/cmd/arming");mavros_msgs::CommandBool srv;srv.request.value = true;if (arming_cl.call(srv)) {ROS_INFO("ARM send ok %d", srv.response.success);} else {ROS_ERROR("Failed arming or disarming");}// 发布起飞的指令,向上飞行10米ros::ServiceClient takeoff_cl = n.serviceClient<mavros_msgs::CommandTOL>("/mavros/cmd/takeoff");mavros_msgs::CommandTOL srv_takeoff;srv_takeoff.request.altitude = 10;srv_takeoff.request.latitude = 0;srv_takeoff.request.longitude = 0;srv_takeoff.request.min_pitch = 0;srv_takeoff.request.yaw = 0;if (takeoff_cl.call(srv_takeoff)) {ROS_INFO("srv_takeoff send ok %d", srv_takeoff.response.success);} else {ROS_ERROR("Failed Takeoff");}// 等待10秒.  这一行代码非常重要,如果没有则不能飞行sleep(10);geometry_msgs::PoseStamped pose;pose.header.frame_id = "map";pose.pose.position.x = 0;pose.pose.position.y = 0;pose.pose.position.z = 2;geometry_msgs::Twist vel;vel.linear.x = 0.0;vel.linear.y = 0.0;vel.linear.z = 0.0;vel.angular.x = 0.0;vel.angular.y = 0.0;vel.angular.z = 0.0;ros::Publisher local_vel_pub = n.advertise<geometry_msgs::Twist>("mavros/setpoint_velocity/cmd_vel_unstamped", 10);ros::Publisher local_pos_pub = n.advertise<geometry_msgs::PoseStamped>("mavros/setpoint_position/local", 10);ros::Time time_start = ros::Time::now();//转圈圈飞行while (ros::ok()) {pose.pose.position.x = sin(2.0 * M_PI * 2.0 * (ros::Time::now() - time_start).toSec());pose.pose.position.y = cos(2.0 * M_PI * 2.0 * (ros::Time::now() - time_start).toSec());vel.linear.x = 2.0 * M_PI * 2.0 * cos(2.0 * M_PI * 0.1 * (ros::Time::now() - time_start).toSec());vel.linear.y = -2.0 * M_PI * 2.0 * sin(2.0 * M_PI * 0.1 * (ros::Time::now() - time_start).toSec());local_pos_pub.publish(pose);local_vel_pub.publish(vel);ros::spinOnce();rate.sleep();}return 0;
}

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

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

相关文章

ylb-接口8手机号注册

总览&#xff1a; 在web模块下的service包&#xff0c;补充短信接口&#xff08;SmsService&#xff09;&#xff1a;检查用户发送的验证码是否正确 package com.bjpowernode.front.service;public interface SmsService {/*** param phone 手机号* return true&#xff1a;发…

Java 的集合

一、Collection 1、ArrayList 底层采用数组实现&#xff0c;操作大多基于对数组的操作。 在添加和删除时需要做 System.arraycopy(native层方法) 拷贝工作。 添加元素时可能会扩容&#xff0c;这要大量的拷贝工作&#xff0c;删除元素时&#xff0c;会把后面的元素向前拷贝。…

Redis+IDEA极速了解和实现单机锁和分布式锁

单机下&#xff1a; 只适用于单机环境下&#xff08;单个JVM&#xff09;&#xff0c;多个客户端访问同一个服务器 1.synchronized package com.cloud.SR.controller;import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.cor…

wps插入图片显示不全、混乱

问题如下&#xff1a; 原因&#xff1a; 格式混乱 解决办法&#xff1a; 1、统一格式&#xff0c;使用格式刷统一文档的格式 2、Ctrl A 全选&#xff0c;重新选择行距 3、重新粘贴图片&#xff08;选择嵌入型&#xff09;

【Hello mysql】 mysql的内置函数

Mysql专栏&#xff1a;Mysql 本篇博客简介&#xff1a;介绍mysql的基内置函数 mysql的内置函数 日期函数获取年月日获取时分秒获取时间戳在日期的基础上加上日期在日期的基础上减去日期计算两个日期之差创建一张表 记录生日创建一个留言表 字符串函数获取emp表的ename列的字符集…

Dubbo分布式服务框架,springboot+dubbo+zookeeper

一Dubbo的简易介绍 1.Dubbo是什么&#xff1f; Dubbo是一个分布式服务框架&#xff0c;致力于提供高性能和透明化的RPC远程服务调用方案&#xff0c;以及SOA服务治理方案。 简单的说&#xff0c;dubbo就是个服务框架&#xff0c;如果没有分布式的需求&#xff0c;其实是不需…

idea编译时遇到的bug

1、对象重复定义 问题描述&#xff1a; D:\workspace\spark\src\main\Scala\WordCount.scala:3:8 WordCount is already defined as object WordCount object WordCount { 解决参考博客&#xff1a;Error:(21, 8) FlumePushWordCount is already defined as object FlumePush…

水调歌头·明月几时有

相关标签 宋词、苏轼、月亮、中秋、饮酒、思念 标题 水调歌头明月几时有 作者简介 苏轼&#xff08;1037-1101&#xff09;&#xff0c;字子瞻&#xff0c;号东坡居士&#xff0c;眉州眉山&#xff08;今属四川&#xff09;人&#xff0c;北宋时期杰出的文学家、政治家、艺…

PDF转成PNG,之后PNG转成PDF

PDF2IMG 需要安装python的img2pdf和pdf2img的包&#xff0c;还需要安装https://github.com/oschwartz10612/poppler-windows/releases/&#xff0c;并且解压之后把路径lib/bin添加到环境变量 import multiprocessing import sys from datetime import time import time from p…

rust abc(5): 常量

文章目录 1. 目的2. 基本用法2.1 说明2.2 运行结果 3. 不推荐或不正确用法3.1 不推荐用小写字母作为常量名字3.2 常量名称中含有小写字母就会报warning3.3 定义常量时&#xff0c;不指定数据类型会编译报错 4. const 和 immutable 的区别4.1 const 可以在函数外声明&#xff0c…

基于深度学习的高精度安全帽及背心检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度安全帽及背心检测识别系统可用于日常生活中或野外来检测与定位安全帽及背心目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的安全帽及背心目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系…

Go和Java实现策略模式

Go和Java实现策略模式 模拟多种营销类型优惠券&#xff0c;折扣⾦额计算策略场景。 1、策略模式 在策略模式中一个类的行为或其算法可以在运行时更改&#xff0c;这种类型的设计模式属于行为型模式。 在策略模式定义了一系列算法或策略&#xff0c;并将每个算法封装在独立的…

iOS/macOS - 逐行写入文件 (NSFileHandle)

文章目录 - (void)saveDataByLine{NSString *filePath = @"/Users/xx/Library/Containers/com.ds.TMXExport/Data/Library/Caches/a.txt";NSLog(@"filePath : %@", filePath);if (!

代码随想录算法训练营第五十天|123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV

leetcode 123 买卖股票的最佳时机 III 题目链接 123. 买卖股票的最佳时机 III - 力扣&#xff08;LeetCode&#xff09; 做题过程 这里有两次交易机会。因此有5种状态。0没有操作&#xff0c;1第一次买入&#xff0c;2第一次卖出&#xff0c;3第二次买入&#xff0c;4第二次…

WebDAV之π-Disk派盘 + Solid Explorer

Solid Explorer 支持WebDAV方式连接π-Disk派盘。 Solid Explorer 是一款非常优秀的 Android 文件管理器&#xff0c;Material Design 设计风格&#xff0c;双栏布局&#xff0c;可拖拽操作、支持 ROOT 权限、多媒体浏览器、压缩包支持&#xff0c;Chromecast 流支持等众多功…

微信为什么使用 SQLite 保存聊天记录?

概要 SQLite 是一个被大家低估的数据库&#xff0c;但有些人认为它是一个不适合生产环境使用的玩具数据库。事实上&#xff0c;SQLite 是一个非常可靠的数据库&#xff0c;它可以处理 TB 级的数据&#xff0c;但它没有网络层。接下来&#xff0c;本文将与大家共同探讨 SQLite 在…

基于Tensorflow来重现GPT v1模型

OpenAI推出的ChatGPT模型让我们看到了通用人工智能的发展潜力&#xff0c;我也找了GPT的相关论文来进行研究。OpenAI在2017年的论文Improving Language Understanding by Generative Pre-Training提出了GPT的第一个版本&#xff0c;我也基于这个论文来用Tensorflow进行了复现。…

Keepalived 安装与配置

安装 Keepalived apt -y install keepalived 里边有一个杠y&#xff0c;就是我安装的时候里面有yes&#xff0c;就直接是yes 添加 Keepalived 配置 安装好之后, 下一步就开始去来写这个配置文件了&#xff0c;就在这里面去建一个 etc 当中&#xff0c;就是在这个 etc 当中建一个…

认识企业级定时任务Quartz

文章目录 前言一、实现一个Quartz的小案例1.创建一个maven项目2.添加Quartz依赖3.创建一个配置文件配置Quartz信息4.创建一个Job类继承Job接口5.编写主方法逻辑进行测试6.测试运行结果 二、Job和JobDetail总结 前言 目前仍有大部分企业仍在使用Quartz这种定时任务框架&#xf…

45. 跳跃游戏 II (贪心)

题目链接&#xff1a;力扣 解题思路&#xff1a;贪心&#xff0c;尽可能地找到下一跳能够跳到的最远距离&#xff0c;这样到达终点时&#xff0c;所需跳跃次数最少 以nums [2,3,1,1,4,2]为例&#xff1a; 以当前位置begin作为起跳点&#xff0c;能够跳跃的最远距离为m&#…