ROS无人机自主飞行(数传与串口)与PX4配置问题

2023-05-16

ROS无人机自主飞行与PX4配置问题

文中引用均为参考,部分内容转载!特感谢提供了参考!

PX4的配置

  • 首先需要对PX4烧写固件,版本问题上其实没有很多区别,目前我所用的最新版本——1.12.3版本的px4_fmu_v3_default,下载这个后在固件处烧写
  • 完成基本飞控配置参考阿木实验室第五条基本配置
    • 固件刷写
    • 机架选择
    • 传感器校准
    • 遥控器校准
    • 飞形模式调整
    • 电池校准
    • 电调校准(参考后面,这里的px4校准会有问题)

常见问题:

首先可以参考:常见参数配置、pixhawk 2.4.8所有问题

!电调校准

把这个问题直接放到了最前方,因为这个问题困惑了快一周,因为想要测试无人机在offboard模式下用ros控制自主飞行,但是数次尝试后发现竟然莫名其妙的把电调动了,根本原因应该是错误操作使油门上下阈值变化了!

问题现象:

主要是解锁后,会出现一个甚至多个电机不转,但是给大油门后会转,然后用QGC的motor测试,发现给相同的油门响应,“坏的电机”会不反应,只有给很大才会转。

尝试与发现:

其实就是需要电调校准,校准方法非常讲究。。。

因为我们实验室用的是阿木实验室Z410飞机,原先似乎是APM固件,而我们一般都会用PX4固件。这里就牵扯到他电机校准上的不同了。我发现用QGC里面这个方法不太管用,没有效果。

于是我查了很多方法,比如用MissionPlanner中刷APM固件再电调校准,理论上是可以,就连售后也这么说的。。。

但是奈何不太会用MP,于是找了很多不需要地面站的校准方法,主要就是插拔上电,给遥控器油门的上下阈值。

具体校准方法:

  • 第一步:要先烧写APM固件(没错就是这么迷惑,先烧成APM校准完电调再烧回PX4就好)

    • 在QGC里选择自定义固件版本,烧写APM固件ArduCopter-v3.px4,这个是我找到的比较合适的版本。
  • 第二步:可以直接在QGC里操作,只用选择机型和校准遥控器,可以先不校准传感器,遥控器校准了才能校准电调。

  • 第三步:校准电调。我主要参考了这个

    • 断掉所有与飞控的连接,包括桨叶、usb线
    • 遥控器打开把油门给到最大,然后给飞控上电(电池上电),当PIXHAWK红绿蓝灯周期闪烁(大led灯)后,给飞控断电
    • 油门继续保持最大状态,重新给飞控上电,当听到滴滴的声音结束后,长按安全开关直至变成红色常亮(原来是闪烁),此时进入电调校准状态
    • 电调校准状态下听到“滴”的一声(或两声,甚至出现一阵音乐声都有可能),此时就捕获了最大油门。然后迅速把遥控器油门下压到最小,再听到类似“滴”的一声后,捕获了最小油门。
    • 此时校准完成,改变油门可以控制电机转速。终于可以看到四个电机又能同时转了!
  • 第四步:解锁尝试,油门推至右下角,解锁成功就会四旋翼怠速旋转。bingo!

  • 补充:别忘了现在是APM固件,记得在QGC里重新烧写PX4固件。完成除了电调校准的其他步骤即可。(也就是别点上面那张图里的)

1. compass xx inconsistent

提示罗盘某个角度未被包含,而且经常不同。 解决方法:COM_ARM_MAG_ANG设为-1

可能会提示不让设置,然后弹出点击强制保存。

2. high Accelerometer bios

提示加速度计偏移过大。解决方法:把com_arm_ekf_ab这个参数调大一些

3. Accels inconsistent - check cal

把这个参数COM_ARM_IMU_ACC改大一些,以加速度计为例,如果陀螺仪出现类似报错也是修改相应的参数。

4. USB连接检查

这个参数是检查起飞时是否有USB连接,默认情况下有USB连接时是无法解锁的,如果需要插USB解锁,需要设置为197848
在这里插入图片描述

5. 安全开关检查

默认情况下安全开关是慢闪状态,设置该参数为22027时,上电后安全开关自动切换为双闪。
在这里插入图片描述

注意,如果改了后可能会出现:只有插上usb线同时上电才能解锁飞机的情况,而没有插usb单独用遥控器解锁的话,可能无法解锁。当时我遇到这个问题困惑了半天,最后发现是这个问题,所以最后又改回了0。

ROS控制PX4

因为我最终目标是NX板载控制,所以其实只用有线连接就可以,但是真机飞行很危险而且代价较高,所以建议用无线数传先做测试。

1. 有线控制

usb线连接无人机pixhawk,先查看下端口连接的信息:

ls /dev/tty*        # 下面两句只运行一句即可(根据有 ttyUSB0 还是 ttyACM0)

终端运行:(我的是ACM0)

roslaunch mavros px4.launch fcu_url:=/dev/ttyUSB0:57600  #有ttyUSB0
roslaunch mavros px4.launch fcu_url:=/dev/ttyACM0:57600  #有ttyACM0

此时就是用串口连接了无人机,我们可以运行我们的代码:

依旧是官方的offb_node文件实例

/**
 * @file offb_node.cpp
 * @brief Offboard control example node, written with MAVROS version 0.19.x, PX4 Pro Flight
 * Stack and tested in Gazebo SITL
 */

#include <ros/ros.h>
#include <geometry_msgs/PoseStamped.h>
#include <mavros_msgs/CommandBool.h>
#include <mavros_msgs/SetMode.h>
#include <mavros_msgs/State.h>

mavros_msgs::State current_state;
void state_cb(const mavros_msgs::State::ConstPtr& msg){
    current_state = *msg;
}

int main(int argc, char **argv)
{
    ros::init(argc, argv, "offb_node");
    ros::NodeHandle nh;

    ros::Subscriber state_sub = nh.subscribe<mavros_msgs::State>
            ("mavros/state", 10, state_cb);
    ros::Publisher local_pos_pub = nh.advertise<geometry_msgs::PoseStamped>
            ("mavros/setpoint_position/local", 10);
    ros::ServiceClient arming_client = nh.serviceClient<mavros_msgs::CommandBool>
            ("mavros/cmd/arming");
    ros::ServiceClient set_mode_client = nh.serviceClient<mavros_msgs::SetMode>
            ("mavros/set_mode");

    //the setpoint publishing rate MUST be faster than 2Hz
    ros::Rate rate(20.0);

    // wait for FCU connection
    while(ros::ok() && !current_state.connected){
        ros::spinOnce();
        rate.sleep();
    }

    geometry_msgs::PoseStamped pose;
    pose.pose.position.x = 0;
    pose.pose.position.y = 0;
    pose.pose.position.z = 2;

    //send a few setpoints before starting
    for(int i = 100; ros::ok() && i > 0; --i){
        local_pos_pub.publish(pose);
        ros::spinOnce();
        rate.sleep();
    }

    mavros_msgs::SetMode offb_set_mode;
    offb_set_mode.request.custom_mode = "OFFBOARD";

    mavros_msgs::CommandBool arm_cmd;
    arm_cmd.request.value = true;

    ros::Time last_request = ros::Time::now();

    while(ros::ok()){
        if( current_state.mode != "OFFBOARD" &&
            (ros::Time::now() - last_request > ros::Duration(5.0))){
            if( set_mode_client.call(offb_set_mode) &&
                offb_set_mode.response.mode_sent){
                ROS_INFO("Offboard enabled");
            }
            last_request = ros::Time::now();
        } else {
            if( !current_state.armed &&
                (ros::Time::now() - last_request > ros::Duration(5.0))){
                if( arming_client.call(arm_cmd) &&
                    arm_cmd.response.success){
                    ROS_INFO("Vehicle armed");
                }
                last_request = ros::Time::now();
            }
        }

        local_pos_pub.publish(pose);

        ros::spinOnce();
        rate.sleep();
    }

    return 0;
}

终端运行:(ros包流程)

cd ~/catkin_ws/src
catkin_create_pkg offb geometry_msgs mavros roscpp
#程序包名称 pi_offboard_px4,依赖的包 geometry_msgs, mavros 和 roscpp

cd offb/src
touch offb_node.cpp
vim offb_node.cpp    #添加上面的代码

注意别忘了在CMakeLists文件里配置。

cd ~/catkin_ws/src/offb/
vim CMakeLists.txt

更改添加:

add_executable(offb src/offb_node.cpp)
target_link_libraries(offb
	${catkin_LIBRARIES}
)

编译:

catkin_make 				#编译
catkin_make install
source devel/setup.bash     #配置catkin 工作空间

在上面运行了roslaunch之后就可以运行:

rosrun offb offb_node

注意

offboard模式一定要gps信息,所以只能在室外测试。我们在roslaunch端中看不到提示NO GPS FIX 信息就代表搜到了星,或者查看mavros话题:

rostopic list
rostopic echo /mavros/altitude								# 高度信息
rostopic echo /mavros/local_position/local       # 这个是绝对的gps信息

上电后,没有上桨的话可能电机会一直转,甚至加速,我们上下移动飞机,会发现电机转速变化。所以测试一下就断电吧。

我们查看local里的信息发现信息位置并不是0,0,0。而且会跳变,这就牵扯到了我们在代码里写的0,0,2。但是起点不是0,0,0,这是非常危险的!!!因为根本不知道会朝哪里飞。所以后续会不使用绝对位置飞行,而采用线速度飞行,以时间控制距离结束自主降落。

2. 无线数传

现在很多数传都直接使用wifi,我们只需要在pc端连接飞机数传wifi信息:

例如:

wifi名: cuavwlink_xxxxx
wifi密码:xxxxxx
UDP: 14550

连接了WiFi后,先查看WiFi设置里看到IPV4端口,其实就是找到位置如192.168.4.2之类的(结尾应该是2因为飞机是1)

运行:(注意格式):前面的是udp后面是端口,最后的24580好像随便输一个就行,感觉类似自定义命名。

roslaunch mavros px4.launch fcu_url:=udp://:14550@192.168.4.2:24580

看到类似这样的黄色提示是正常的(除了GPS,因为我现在在室内敲得这段)。

然后就可以继续rosrun了。注意安全!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS无人机自主飞行(数传与串口)与PX4配置问题 的相关文章

  • IDEA日常填坑:Cannot resolve plugin org.apache.maven.plugins:maven-war-plugin

    问题描述 xff1a 我太难了o o xff0c 这个问题竟然困扰了我一个下午加上一个晚上 xff0c 为了解决它 xff0c 估计浏览器都要被我弄崩了吧 xff0c 此前我将所能找到的方法全都试了个遍 xff0c 甚至是将 IDEA 卸载
  • 判断点在多边形内(射线法)

    射线法 用来判断点在多边形的内外 适用于任意多边形 时间复杂度 xff1a O n 从该点引出一条水平射线 xff0c 观察射线与多变形的交点个数 当射线与多边形的交点个数是奇数时 xff0c P在多边形内 偶数时 xff0c P在多边形外
  • 线性判别分析(Linear Discriminant Analysis, LDA)(含类内散度矩阵 类间散度矩阵 全局散度矩阵推导

    LDA算法概述 xff1a 线性判别式分析 Linear Discriminant Analysis LDA xff0c 也叫做Fisher线性判别 Fisher Linear Discriminant FLD xff0c 是模式识别的经典
  • Fuzzy C-Means Clustering(模糊C均值)

    别看了 有错的 我懒得改了 强推https www bilibili com video BV18J411a7yY t 61 591 看完你还不会那我也没办法了 算法原理 模糊c 均值聚类算法 fuzzy c means algorithm
  • Last-Modified / If-Modified-Since / ETag / If-None-Match 的区别

    看一圈全都是 Last Modified和HTTP IF MODIFIED SINCE只判断资源的最后修改时间 xff0c 而ETags和If None Match可以是资源任何的属性 我 好像说了什么又好像什么也没说 修改 资源的任何属性
  • 计算机网络安全(通信机密性、完整性、数字签名、公钥认证、SSL)

    1 提供通信机密性 1 1 RSA RSA有两个互相关联的部分 xff1a 公钥和私钥的选择加密和解密算法 为了生成RSA的公钥和私钥 xff0c Bob执行如下步骤 xff1a 选择两个大素数 p p p 和 q
  • 网卡出现“Windows 仍在设置此设备的类配置。 (代码 56)“

    原因 xff1a vmware惹的祸 1 下载cclean修复注册表 xff08 尝试无效 cclean下载网址 2 键盘按win 43 r xff0c 弹出运行窗口 xff0c 输入 redegit xff0c 进入注册表 xff0c 删
  • datax实现mysql数据同步到oracle

    一 mysql数据同步到oracle 注意 xff1a mysql不区分大小写 xff0c 但是oracle严格区分大小写 xff0c 并且oracle的库名 表名和字段名要用大写 xff0c 如果用的小写需要添加双引号说明 job set
  • 在gazebo仿真环境下对相机和激光雷达的标定

    相机和激光雷达的标定主要是为了得到两者之间的参数 xff0c 包括相机的内参和雷达到相机的外参 这样便可以完成点云到图像的投影 xff0c 从而完成信息融合 实际上gazebo中这些参数都是真值 xff0c 是不需要标定的 xff1a 相机
  • 深度学习模型过拟合问题解决办法

    深度学习模型过拟合问题解决办法 模型过拟合 xff08 如果训练集上精度比测试集上精度高很多 xff0c 说明发生了过拟合 xff09 如上图所示拟合曲线 1 图一的拟合较为简单 xff0c 不能很好的反应出变化关系 xff0c 欠拟合 2
  • strchr()函数

    如果需要对字符串中的单个字符进行查找 xff0c 那么应该使用 strchr 或 strrchr 函数 其中 xff0c strchr 函数原型的一般格式如下 xff1a char strchr const char s int c 它表示
  • MapReduce之Map阶段

    MapReduce阶段分为map xff0c shuffle xff0c reduce map进行数据的映射 xff0c 就是数据结构的转换 xff0c shuffle是一种内存缓冲 xff0c 同时对map后的数据分区 排序 reduce
  • 嵌入式开发常用的三种通信协议串口通信、SPI和IIC

    常用的三种通信协议串口通信 SPI和IIC 文章目录 常用的三种通信协议串口通信 SPI和IIC一 通信分类1 1 同步通信和异步通信1 2 单工通信 半双工通信和全双工通信1 3 串行通信与并行通信 二 串口通信2 1 UART2 2 R
  • HTML 解决css缓存

    span class token operator lt span link rel span class token operator 61 span span class token string 34 stylesheet 34 sp
  • Ubuntu18.04安装Nvidia显卡驱动教程

    0 前期准备 禁用BIOS的secure boot xff0c 即disable它 xff0c 如果不关闭 xff0c 使用第三方源安装显卡驱动会安装后不能使用 1 禁用nouveau 1 创建文件 xff0c 如果没有下载vim编辑器 x
  • VINS之estimator节点小结

    VINS的核心节点 xff0c 包括VIO的初始化过程 紧耦合的非线性化过程 边缘化处理过程 主要流程步骤 1 主函数线程 订阅了四个topic xff0c 分别调用回调函数 xff1b 创建了13个话题发布器 xff1b 开辟了一个VIO
  • 基于布谷鸟搜索算法的函数寻优算法

    文章目录 一 理论基础1 算法原理2 算法流程图 二 Matlab代码三 参考文献 一 理论基础 1 算法原理 布谷鸟采用一种特殊的寄生宿主巢穴的方式孕育繁殖 它将孵育的蛋置入寄生宿主的巢穴 xff0c 让寄生宿主孵化布谷鸟蛋 由于布谷鸟幼
  • 基于逐维反向学习的动态适应布谷鸟算法

    文章目录 一 理论基础1 布谷鸟搜索算法2 DA DOCS算法 xff08 1 xff09 逐维反向学习策略 xff08 2 xff09 动态适应 xff08 3 xff09 DA DOCS算法流程 二 实验与结果分析三 参考文献 一 理论
  • SMPL学习笔记

    文章目录 前言一 SMPL概述1 形状参数 beta 2 姿态参数
  • 多协议BGP-----MPBGP

    MPBGP是在BGP 4 基础上的扩展 xff0c 分为三种 xff1a ipv4 ipv4 ipv6 ipv6 ipv6 ipv4 ipv4 ipv6 本文主要介绍 xff1a ipv6 ipv4 xff08 在 建立ipv6 的BGP邻

随机推荐

  • __asm void MSR_MSP(uint32_t addr) 提示:error:expected '(' after 'asm'

    SYSTEM sys sys c 33 7 error expected 39 39 before 39 void 39 ASM void MSR MSP u32 addr 在STM32中的sys c文件编译报出这个错误时 xff1a AS
  • LTL线性时序逻辑

    https blog csdn net yuniruchujian article details 106213848https www docin com p 506137477 html
  • 强化学习资料

    强化学习资料 莫烦学习资料 莫烦学习资料 https mofanpy com bilibili视频资料 xff1a https www bilibili com video BV13W411Y75P from 61 search amp s
  • apollo学习

    知乎王方浩 https zhuanlan zhihu com p 52521739 csdn https blog csdn net u013914471 type 61 blog bilibili 忠厚老实的老王 https space
  • 求解离散黎卡提矩阵代数方程

    离散代数黎卡提方程求解 1 黎卡提方程 在LQR最优控制中 xff0c 有连续时间最优控制 xff0c 即LQR xff0c 也有离散时间最优控制DLQR xff0c 则在求解中一定会遇到解连续时间黎卡提方程和离散时间黎卡提方程的问题 xf
  • 基于运动学模型的无人机模型预测控制(MPC)-2

    基于无人机自身模型的模型预测控制 无约束情况 1 模型建立 无人机运动学模型 xff1a x
  • 一阶低通滤波器-连续转离散

    一阶低通滤波器 1 一阶连续低通滤波器 y s r
  • 汽车动力学模型

    1 动力学模型 在纵向时 xff0c 可能还会受到纵向空气阻力 xff0c 前轮滚动阻力 xff0c 后轮滚动阻力 xff0c 坡道重力分量等
  • PX4飞控源码及解析

    源码地址 xff1a https github com 987419640 Firmware 解析 xff1a https dev px4 io zh concept architecture html
  • Hadoop:简介和安装

    Hadoop简介 Hadoop项目由多个子项目组成 与其他项目不同 xff0c 这个项目更像一个生态系统 其中 xff0c 核心项目包括HDFS MapReduce框架 YARN和ZooKeeper HDFS是一个符合Hadoop要求的分布
  • centos6.x如何安装docker

    1 curl Lks https yum spaceduck org kernel ml aufs kernel ml aufs repo gt etc yum repos d kernel ml aufs repo 2 yum remov
  • c#开发Windows桌面程序,支持触摸屏

    这是一段由new bing聊天机器人提供的代码 xff0c 我没有测试是否能正常运行 xff0c 请谨慎使用 我是这样提问的 xff1a 我想用c 开发一款Windows桌面程序 xff0c 这个程序支持触摸屏 xff0c 这个程序打开后要
  • 七. (《Java核心技术》读书笔记+重点整理系列)异常处理、断言和日志

    目录 异常分类抛出异常捕获异常断言记录日志调试技巧PS 异常分类
  • IAR for ARM 无法烧写

    一直用的IDE都是Keil xff0c 最近需要用到的一款芯片只有IAR这一种环境可以从Demo里直接用 xff0c 所以用到了IAR xff0c 但发现自己装好了IAR xff08 版本8 32 1 xff09 并破解后 xff0c 编绎
  • ADC采集的数据通过串口进行发送 (2)

    1 xff09 在RIDE板子上调通的基础上 xff0c 硬件替代成CJ 575板 在后面步骤中并开始将代码中的硬件配置部分给对应成CJ 575板子的ARM9芯片的配置 2 xff09 将ADC CHANNEL和ADC CHANNEL MO
  • 相机成像模型、内参矩阵、外参矩阵

    相机针孔成像模型 基本的小孔成像过程 xff1a X坐标系是针孔所在坐标系 xff0c Y坐标系为成像平面坐标系 xff0c P为空间一点 xff0c 小孔成像使得P点在图像平面上呈现了一个倒立的像 xff0c 俯视图如下 xff1a 由三
  • YUM安装nginx

    想在 Alibaba Cloud Linux 3 2104 64位 CentOS 系统上安装 Nginx xff0c 你得先去添加一个资源库 xff0c 像这样 xff1a vim etc yum repos d nginx repo 使用
  • PX4固件在Gazebo下进行SITL仿真自己的包时遇到MODE: Unsupported FCU问题

    在运行别人的的px4代码时 xff0c 比如一个包Base control中 xff0c 终端提示了MODE Unsupported FCU xff0c 该错误主要是因为端口不正确 xff0c mavros没能正确的连接到px4固件 xff
  • 学习OpenCV在SFM系统的使用

    文章目录 OpenCV构建SFM模型SFM的概念从一对图像估计相机运动使用丰富特征描述符的点匹配利用光流进行点匹配寻找相机矩阵场景重建从多个场景重建重构的细化使用PCL可视化3D点云使用实例代码 本文是翻译自经典书籍Mastering OP
  • ROS无人机自主飞行(数传与串口)与PX4配置问题

    ROS无人机自主飞行与PX4配置问题 文中引用均为参考 xff0c 部分内容转载 xff01 特感谢提供了参考 xff01 PX4的配置 首先需要对PX4烧写固件 xff0c 版本问题上其实没有很多区别 xff0c 目前我所用的最新版本 1