基于Pixhawk和ROS搭建自主无人车(一):底盘控制篇
参考
- ArduPilot Development
- 超维空间科技
- 乐迪MiniPix车船使用说明书
1. 硬件篇
1.1 底盘构成一览

1.2 底盘接线示意

2. 软件篇
2.1 APM 固件下载
- pixhawk 是硬件平台,PX4 是 pixhawk 的原生固件,APM(Ardupilot Mega)是硬件平台,Ardupilot 是 APM 的固件(也称 APM 固件),APM 固件支持硬件更多,无人车平台推荐使用 APM 固件
- 本文使用 pixhawk 1 代硬件平台,因此下载的是 fmuv2 的固件(pixhawk 2 代则对应下载 fmuv3 固件)
- 下载地址:https://firmware.ardupilot.org/Rover/stable-4.2.3/fmuv2/
- 进入上述链接后只需下载 ardurover.apj 文件
2.2 Mission Planner 地面站设置
-
1、加载已下载好的固件
- 首先用 USB 线将 pixhawk 连接到电脑,然后点断开连接,进入 “安装固件 Legacy” 中选择加载自定义固件,最后加载 2.1 小节下载好的 ardurover.apj 文件即可

- 首先用 USB 线将 pixhawk 连接到电脑,然后点断开连接,进入 “安装固件 Legacy” 中选择加载自定义固件,最后加载 2.1 小节下载好的 ardurover.apj 文件即可
-
2、加速度计校准、指南针校准和遥控器校准按照提示操作即可,这里不再赘述
-
3、适配差速底盘参数修改
- 由于下载的固件默认车型是阿克曼转向(电机加舵机)的,因此针对差速转向的底盘需要修改参数:Position 1 设置成 ThrottleLeft(左轮),Position 3 设置成 ThrottleRight(右轮)

- 由于下载的固件默认车型是阿克曼转向(电机加舵机)的,因此针对差速转向的底盘需要修改参数:Position 1 设置成 ThrottleLeft(左轮),Position 3 设置成 ThrottleRight(右轮)
-
4、设置遥控器切换 pixhawk 控制模式
- “当前 PWM” 后的 5 代表遥控器当前所处通道(可通过全局参数表中 MODE_CH 参数修改),0 表示当前对应的 PWM 值
- 建议设置遥控器三段控制模式分别为:Hold 停车模式、Manual 手动模式和 Auto 自动模式


- 5、设置遥控器解锁和加锁
在解锁之前,通常应该等待 pixhawk 状态指示灯变成闪烁蓝色(如果只打算使用手动模式)或闪烁绿色(适用于所有其他模式)
- 解锁方式一:从遥控器操纵杆上解锁
- 确保小车处于停车 Hold 模式,先将油门杆推至中点(0),然后将横滚转向摇杆完全打向右边(或左边),然后保持 2 秒,当 pixhawk 状态指示灯为蓝灯或者绿灯长亮,则代表解锁成功
- 加锁方式一:从遥控器操纵杆上加锁
- 首先确保小车处于停车 Hold 模式,先将油门杆推至中点(0),然后将横滚转向摇杆完全打向左边(或右边),保持 2 秒,当 pixhawk 状态指示灯为蓝灯或者绿灯闪烁,则代表加锁成功
- 解/加锁方式二:Mission Planner 地面站界面解/加锁
- 解锁方式一:从遥控器操纵杆上解锁
3. 补充内容
3.1 控制模式介绍
-
停车模式 Hold Mode
- 在停车模式下打摇杆时,车不会响应,并保持停止状态,车轮指向前方
- 停车模式常用于解锁跟加锁,因为在停车模式下,摇杆解锁跟加锁时,电机和舵机不会响应
- 这个模式还可以起到失控保护作用,及时停车以防止车被损坏
-
手动模式 Manual Mode
- 在手动模式下,遥控器的转向和油门杆直接控制车辆的油门和转向输出,没有 PID 参与控制
- 此模式不需要位置估计(即不需要 GPS)
- 建议始终将一个遥控器模式开关位置分配给该模式
- 在手动模式下,油门的变换率由 MOT_SLEW_RATE 这个参数来限制。该参数默认为 100,即油门可以在 1s 内从 0% 到 100% 变换;设置成 0 的,油门的变换率不受限制
-
自动模式 Auto Mode
- 在自动模式下,车会按照预先设置好的航点或者任务进行自动行驶,不需要人为手动干预。这些任务航点主要包括:自动行驶的航点、到达航点后触发的动作等
- 自动模式需要良好的 GPS 定位才能切换进去,所以在解锁和起飞之前必须让 GPS 定位,可以通过查看 pixhawk 状态指示灯和 GPS 的 LED 灯来确认
-
引导模式 Guided Mode
- 在引导模式下,用户可以通过 Mission Planner 地面站手动控制小车行驶
- 首先,通过数传模块连接飞控;然后,在 “飞行数据” 主界面的地图中,移动鼠标到指定的位置,右击鼠标,选择 ”飞行至此 ”;此时,小车会切换为引导模式,并朝向指定的点行驶;一旦到达目的地则停车
-
返航模式 RTL Mode
- RTL 代表返回到解锁的位置
- 切换到 RTL 模式后,车辆将转弯并尝试直接返回到上次解锁的位置(除非从地面站修改了家的位置,否则会返航到最新解锁的位置)
- 一旦车到达返航的位置时,它会保持在当前的位置
- RTL_SPEED 参数用于设置车的返航速度(m/s),该参数默认为 0,此时车的返航速度由 WP_SPEED 决定
-
智能返航 SmartRTL Mode
- 和正常的返航模式一样,车会返回到家的位置,但它能原路返航,而不是直接朝着家的方向返航,所以智能返航在返航过程中,会自动避开遇到的障碍物,并不是直接朝着家的方向返航
- 如果是车返航到达家的位置时,会停车并切断所有动力输出
- 车在解锁时,一定要有良好的 GPS 定位,否则返航时不能切换进智能返航模式
3.2 pixhawk 状态指示灯解析

3.3 安全开关灯解析

3.4 解锁故障解析
- check firmware or FRAME_CLASS:请选择机架类型
- 3D Accel calibration needed:加速度计需要校准
- safe switch:安全开关未关闭,长按至灯长亮
- RC not calibrated:遥控器没有校准
- Baro not healthy:气压计不健康
- Alt disparity:气压计与惯性导航系统的高度不一致超过 2 米以上,这一消息通常是短暂的,当飞行控制器首次插入或如果它接收到一个硬的颠簸发生,如果没有消失,加速度计或许需要校准,或者气压计有故障
- Compass not healthy:罗盘不健康
- Compass not calibrated:罗盘没有校准
- Compass offsets too high:罗盘偏移值太大,也许是附近有金属或者其他干扰
- Check mag field:所感测的磁场在该区域中的磁场是 35%高于或低于预期值,需要重新校准罗盘
- Compasses inconsistent:内部和外部的罗盘指向不同的方向(从大于 45 度),通常是 GPS 外置罗盘放置位置不一致
- GPS Glitch:GPS 故障,当选择的飞行模式需要 GPS 定位,或者开启地理围栏,此时 GPS 没有定位会有此提示
- Need 3D Fix:全球定位系统没有三维固定,当选择的飞行模式需要 GPS 定位,或者开启地理围栏,此时 GPS 没有定位会有此提示
- Bad Velocity:飞行器的速度(根据惯性导航系统)是 50cm 以上的,可能导致这包括飞行器实际移动或被抛起,坏的加速度计校准,GPS 更新在低于预期的 5HZ
- High GPS HDOP:GPS 精度低于高于 2.0,可以在首页查看 GPS 精度实时变化数据
- INS not calibrated:加速度计没有校准
- Accels not healthy:加速度计不健康,可能硬件问题,可能发生在刷新固件没有重启
- Accels inconsistent:加速度计不一致超过 1m/s/s
- Gyros not healthy:陀螺不正常,可能硬件问题,可能发生在刷新固件没有重启
- Gyro cal failed:陀螺仪校准未能捕捉偏移,这个由于启动校准时候移动了飞控,在红蓝闪烁就是校准时刻
- Gyros inconsistent:陀螺不一致超过 20deg/sec
- Check Board Voltage:检查板上电压,应该在 4.3V 到 5.8V 之间,如果通过 USB 供电,请尝试更换端口或者线缆
- Ch7&Ch8 Opt cannot be same:7/8 通道不能设置一致
- Check FS_THR_VALUE:3 通道最低值太接近失控保护值
- Check ANGLE_MAX:控制飞控的最大倾斜角度设定在 10 度以下的 angle_max 参数(即 1000)或 80 度以上(即 8000)
- ACRO_BAL_ROLL/PITCH:acro_bal_roll:参数高于自稳 Roll P 和/或 acro_bal_pitch 参数高于自稳 Pitch P 值
相关文章:
基于Pixhawk和ROS搭建自主无人车(一):底盘控制篇
参考 ArduPilot Development超维空间科技乐迪MiniPix车船使用说明书 1. 硬件篇 1.1 底盘构成一览 1.2 底盘接线示意 2. 软件篇 2.1 APM 固件下载 pixhawk 是硬件平台,PX4 是 pixhawk 的原生固件,APM(Ardupilot Mega)是硬件平台…...
部署 Spring Boot 应用中文文档
本文为官方文档直译版本。原文链接 部署 Spring Boot 应用中文文档 引言部署到云Cloud Foundry与服务绑定 KubernetesKubernetes 容器生命周期 HerokuOpenShift亚马逊网络服务(AWS)AWS Elastic Beanstalk使用 Tomcat 平台使用 Java SE 平台 总结 CloudCa…...
【数据库原理】(23)实际应用中的查询优化方法
一.基于索引的优化 索引是数据库查询优化的关键工具之一。合理地使用索引可以显著提高查询速度,降低全表扫描的成本。以下是建立和使用索引的一些基本原则和最佳实践。 索引的建立与使用原则 数据量规模与查询频率: 值得建立索引的表通常具有较多的记录࿰…...
MySQL中datetime和timestamp的区别
datetime和timestamp的区别 相同点: 存储格式相同 datetime和timestamp两者的时间格式都是YYYY-MM-DD HH:MM:SS 不同点: 存储范围不同. datetime的范围是1000-01-01到9999-12-31. 而timestamp是从1970-01-01到2038-01-19, 即后者的时间范围很小. 与时区关系. datetime是存储…...
2024年如何使用WordPress构建克隆Udemy市场
您想创建像 Udemy 这样的学习管理 (LMS) 网站吗?最好的学习管理系统工具LifterLMS将帮助您制作像Udemy市场这样的 LMS 网站。 目录 Udemy市场是什么? 创建 Udemy 克隆所需的几项强制性技术: 步骤 1) 注册您的域名 步骤 2) 获取虚拟主…...
(leetcode)Z字形变换 -- 模拟算法
个人主页:Lei宝啊 愿所有美好如期而遇 题目链接 . - 力扣(LeetCode) 输入描述 string convert(string s, int numRows),输入一个字符串s,以及一个行数numRows,将字符串按照这个行数进行Z字形排列&…...
STM32--基于STM32F103的MAX30102心率血氧测量
本文介绍基于STM32F103ZET6MAX30102心率血氧测量0.96寸OLED(7针)显示(完整程序代码见文末链接) 一、简介 MAX30102是一个集成的脉搏血氧仪和心率监测仪生物传感器的模块。它集成了一个红光LED和一个红外光LED、光电检测器、光器…...
Qt/C++音视频开发63-设置视频旋转角度/支持0-90-180-270度旋转/自定义旋转角度
一、前言 设置旋转角度,相对来说是一个比较小众的需求,如果视频本身带了旋转角度,则解码播放的时候本身就会旋转到对应的角度显示,比如手机上拍摄的视频一般是旋转了90度的,如果该视频文件放到电脑上打开,一些早期的播放器可能播放的时候是躺着的,因为早期播放器设计的…...
Python电能质量扰动信号分类(五)基于CNN-Transformer的一维信号分类模型
目录 往期精彩内容: 引言 1 数据集制作与加载 1.1 导入数据 1.2 制作数据集 2 CNN-Transformer分类模型和超参数选取 2.1定义CNN-Transformer分类模型 2.2 设置参数,训练模型 3 模型评估 3.1 准确率、精确率、召回率、F1 Score 3.2 十分类混淆…...
基于Vue组合式API的实用工具集
简介 今天,给大家分享一个很实用的工具库 VueUse,它是基于 Vue Composition Api,也就是组合式API。支持在Vue2和Vue3项目中进行使用,据说是目前世界上Star最高的同类型库之一。 图片 官方地址:https://vueuse.org/ 中文地址:https://www.vueusejs.com/ github:https…...
065:vue中将一维对象数组转换为二维对象数组
第065个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使…...
mysql 字符串分割
目录 前言substring_indexsubstring_index 特性字符串分割 前言 略 substring_index 正向截取字符串 mysql> select substring_index(www.baidu.com,.,1); ---------------------------------------- | substring_index(www.baidu.com,.,1) | -------------------------…...
解决Windows11 “我们无法设置移动热点”
目录 问题复现解决办法①启动网络适配器②打开移动热点③共享网络连接④连接移动热点总结 问题复现 因为交换机上网口限制,开发环境暂时没有WIFI设备,只有一根网线和一台笔记本电脑。于是开启笔记本电脑的WiFi共享服务。结果提示 “我们无法设置移动热点…...
python tcp socket中实现SSL/TLS认证
SSL/TLS介绍 官话说SSL是安全套接层(secure sockets layer),TLS是SSL的继任者,叫传输层安全(transport layer security)。 说白点,就是在明文的上层和TCP层之间加上一层加密,这样就保证上层信息传输的安全。如HTTP协议是明文传输…...
SQL-修改表操作
🎉欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹 ✨博客主页:小小恶斯法克的博客 🎈该系列文章专栏:重拾MySQL 🍹文章作者技术和水平很有限,如果文中出现错误&am…...
【Node.js学习 day3——http模块】
创建HTTP服务端 //1.导入http模块 const http require(http);//2.创建服务对象 const server http.createServer((request, response) > {response.end(Hello HTTP Server);//设置响应体 });//3.监听端口,启动服务 server.listen(9000,()>{console.log(服务…...
初探UAF漏洞(3)
构造exp #include <iostream> #include <Windows.h>typedef void(*FunctionPointer) ();typedef struct _FAKE_USE_AFTER_FREE {FunctionPointer countinter;char bufffer[0x54]; }FAKE_USE_AFTER_FREE, * PUSE_AFTER_FREE;void ShellCode() {_asm{noppushadmov e…...
C++学习笔记(二十一)
一、set/multiset容器 1. set基本概念 简介:所有元素都会在插入时自动被排序 本质:set/multiset属于关联式容器,底层结构是用二叉树实现的 set和multiset的区别:set不允许容器中有重复的元素,multiset允许容器中有…...
Java版企业电子招投标系统源代码,支持二次开发,采用Spring cloud技术
在数字化时代,采购管理也正经历着前所未有的变革。全过程数字化采购管理成为了企业追求高效、透明和规范的关键。该系统通过Spring Cloud、Spring Boot2、Mybatis等先进技术,打造了从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通过…...
01、Kafka ------ 下载、安装 ZooKeeper 和 Kafka
目录 Kafka是什么?安装 ZooKeeper下载安装启动 zookeeper 服务器端启动 zookeeper 的命令行客户端工具 安装 Kafka下载安装启动 Kafka 服务器 Kafka是什么? RabbitMQ的性能比ActiveMQ的性能有显著提升。 Kafka的性能比RabbitMQ的性能又有显著提升。 K…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
