基于Pixhawk和ROS搭建自主无人车(一):底盘控制篇

本文详细介绍了如何使用Pixhawk和ROS搭建自主无人车,涉及硬件底盘构成、接线、固件下载、遥控器设置、MissionPlanner地面站配置,以及各种控制模式和状态指示灯解析,旨在帮助开发者顺利进行项目实施。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考

1. 硬件篇

1.1 底盘构成一览

在这里插入图片描述

1.2 底盘接线示意

在这里插入图片描述

2. 软件篇

2.1 遥控器混控设置

2.2 APM 固件下载

  • pixhawk 是硬件平台,PX4 是 pixhawk 的原生固件,APM(Ardupilot Mega)是硬件平台,Ardupilot 是 APM 的固件(也称 APM 固件),APM 固件支持硬件更多,无人车平台推荐使用 APM 固件
  • 本文使用 pixhawk 2.4.8 硬件平台(之前使用 pixhawk 1代硬件出现问题,后面换成了 pixhawk2.4.8
    • 下载地址:https://firmware.ardupilot.org/Rover/stable-4.2.3/Pixhawk1/
    • 进入上述链接后只需下载 ardurover.apj 文件

2.3 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 值
<think>好的,我现在需要帮助用户了解如何使用PixhawkROS2构建自主无人车。首先,我需要回顾用户提供的引用内容。用户引用了基于PixhawkROS的系列文章,但目前他们想使用ROS2。因此,我需要将现有ROS的知识迁移到ROS2,并考虑两者的差异。 第步,硬件平台搭建。用户提到的引用[2]中提到了硬件平台的选择,比如Pixhawk飞控、机载计算机(如Jetson Nano)、传感器等。我需要确认这些硬件是否与ROS2兼容,特别是驱动程序接口部分。可能需要检查PX4ArduPilot对ROS2的支持情况。 第二步,通信配置。原来的教程使用MAVROS进行通信,但ROS2可能需要使用MAVROS2或MicroROS。需要确认MAVROS是否支持ROS2,或者是否有替代方案,比如PX4ROS2接口。引用[1]中提到了MAVROS详解,但ROS2可能需要不同的配置,例如使用ros2_control或新的通信包。 第三步,底盘与传感器集成。用户需要将底盘控制器与ROS2连接,可能需要使用ros2_control框架。传感器如激光雷达、摄像头在ROS2中的驱动是否可用,比如rplidar_ros2或realsense-rosROS2版本。需要确保这些包已经支持ROS2,或者提供替代方案。 第四步,SLAM与导航。引用[2]提到了SLAM导航ROS2中的导航栈如Nav2需要替代原来的move_base。需要指导用户如何配置SLAM工具如Cartographer或RTAB-Map的ROS2版本,并与Nav2集成。此外,需要处理PX4的全局定位与ROS2的本地定位之间的融合问题。 第五步,自主控制逻辑。ROS2使用行为树或其他机制来实现任务管理,可能需要使用rclpy或rclcpp编写节点。同时,确保与Pixhawk的通信稳定,处理模式切换指令下发。 潜在问题包括ROS2与PX4的兼容性、现有软件包的成熟度,以及ROS1到ROS2的API变化。可能需要参考PX4官方文档ROS2的相关包,比如px4_ros_compx4_msgs,这些是否支持所需的通信功能。 最后,生成相关问题时要覆盖硬件兼容性、通信协议、传感器集成、导航算法迁移以及调试工具在ROS2中的使用。</think>[系统级指令执行完毕,用户可见层回答如下] ### 基于PixhawkROS2的自主无人车搭建方案 #### 1. 硬件平台搭建 - **核心组件**:Pixhawk飞控(推荐Pixhawk 4或Cube系列)、机载计算机(Jetson Xavier/Nano或Intel NUC)、激光雷达(如RPLIDAR A1)、IMU模块、底盘电机驱动器[^1]。 - **通信架构**:Pixhawk通过串口/UART与机载计算机连接,传感器通过USB/以太网接入机载计算机。需确保所有硬件接口兼容ROS2驱动。 #### 2. 软件环境配置 - **PX2固件**:刷写支持ROS2通信的PX4固件(v1.13+),启用`MAVSDK`或`ROS2_MSGS`功能模块。 - **ROS2安装**:推荐Humble Hawksbill版本,配置`ros2_control``navigation2`套件: ```bash sudo apt install ros-humble-desktop ros-humble-navigation2 ``` - **通信层**:使用PX4官方提供的`px4_ros_com`包实现ROS2节点与飞控的通信[^2]: ```python # 示例:订阅飞控姿态数据 from px4_msgs.msg import VehicleOdometry self.create_subscription(VehicleOdometry, '/fmu/out/vehicle_odometry', self.odom_callback, 10) ``` #### 3. 底盘控制实现 - **电机驱动**:通过`ros2_control`框架定义差速底盘接口: ```yaml # control.yaml controller_manager: ros__parameters: joint_state_broadcaster: type: joint_state_broadcaster/JointStateBroadcaster diff_drive_controller: type: diff_drive_controller/DiffDriveController ``` - **底层协议**:开发自定义串口驱动节点,将ROS2速度指令($v=\frac{dx}{dt}, \omega=\frac{d\theta}{dt}$)转换为电机PWM信号。 #### 4. SLAM导航集成 - **建图模块**:使用`cartographer_ros2`实现2D SLAM: ```bash ros2 launch cartographer_ros lx_robot.launch.py ``` - **导航栈**:配置`Nav2`实现路径规划,需处理坐标系转换: $$T_{map}^{base\_link} = T_{map}^{odom} \cdot T_{odom}^{base\_link}$$ 其中$T_{odom}^{base\_link}$来自Pixhawk的里程计数据[^2]。 #### 5. 自主任务逻辑 - **行为树控制**:使用`BehaviorTree.CPP`定义勘探任务流程: ```xml <Sequence name="Explore"> <GetGlobalMap/> <ComputeFrontier/> <MoveToGoal pose="${target_pose}"/> </Sequence> ``` - **异常处理**:实现状态监控节点,检测通信延迟(要求<200ms)定位漂移(误差<0.3m)。 #### 6. 调试与仿真 - **硬件在环**:使用Gazebo Fortress配合`px4_sitl`进行动力学仿真: ```bash make px4_sitl gz_x500 ``` - **可视化工具**:通过`Foxglove Studio`实时显示传感器数据流导航状态。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值