当前位置: 首页 > news >正文

基于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 文件即可
      在这里插入图片描述
  • 2、加速度计校准、指南针校准和遥控器校准按照提示操作即可,这里不再赘述

  • 3、适配差速底盘参数修改

    • 由于下载的固件默认车型是阿克曼转向(电机加舵机)的,因此针对差速转向的底盘需要修改参数: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)实际应用中的查询优化方法

一.基于索引的优化 索引是数据库查询优化的关键工具之一。合理地使用索引可以显著提高查询速度,降低全表扫描的成本。以下是建立和使用索引的一些基本原则和最佳实践。 索引的建立与使用原则 数据量规模与查询频率: 值得建立索引的表通常具有较多的记录&#xff0…...

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基本概念 简介&#xff1a;所有元素都会在插入时自动被排序 本质&#xff1a;set/multiset属于关联式容器&#xff0c;底层结构是用二叉树实现的 set和multiset的区别&#xff1a;set不允许容器中有重复的元素&#xff0c;multiset允许容器中有…...

Java版企业电子招投标系统源代码,支持二次开发,采用Spring cloud技术

在数字化时代&#xff0c;采购管理也正经历着前所未有的变革。全过程数字化采购管理成为了企业追求高效、透明和规范的关键。该系统通过Spring Cloud、Spring Boot2、Mybatis等先进技术&#xff0c;打造了从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通过…...

01、Kafka ------ 下载、安装 ZooKeeper 和 Kafka

目录 Kafka是什么&#xff1f;安装 ZooKeeper下载安装启动 zookeeper 服务器端启动 zookeeper 的命令行客户端工具 安装 Kafka下载安装启动 Kafka 服务器 Kafka是什么&#xff1f; RabbitMQ的性能比ActiveMQ的性能有显著提升。 Kafka的性能比RabbitMQ的性能又有显著提升。 K…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...