ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

低成本ROS2机器人实战:从树莓派选型到SLAM导航搭建

低成本ROS2机器人实战:从树莓派选型到SLAM导航搭建 提到“具身智能”很多人脑子里浮现的是双腿人形机器人、万元级开发套件、大厂的实验室。但在真正做机器人开发的圈子里还有一支数量庞大、风格务实的队伍用树莓派当大脑、用两轮底盘当身体、用 ROS2 当神经系统的个人开发者、学生和创客。我给这支队伍起了一个名字——机器人的草根阶层。草根不是贬义。恰恰相反草根阶层代表的是具身智能领域最活跃的一部分预算不高但敢于折腾算力不强但能把每一份资源都用到位。本文不会去分析哪家人形机器人融资多少而是聚焦草根开发者真正关心的问题低成本机器人怎么选硬件、ROS2 怎么入门、一台能自己建图导航的小车如何从零搭起来。内容覆盖硬件选型、软件生态、完整实战和排错经验既适合刚接触机器人的新手也适合正在做课程设计或开源项目的开发者。1. 机器人的草根阶层先理解这个定位1.1 什么是机器人的草根阶层在机器人领域“草根阶层”并不是一个官方分类而是一种技术路线的概括。它通常指满足以下条件的机器人总成本控制在几百到几千元级别而不是几十万元级别核心计算平台是树莓派、Jetson Nano、ESP32 这类低成本开发板借助开源框架和社区方案由个人或小团队完成设计、装配和调试主要目标是学习、实验、教学和轻量级应用而不是工业量产。与草根阶层对应的是“正规军”工业机械臂、仓储 AGV、商用配送机器人、人形机器人。这些产品在设计上追求可靠性、安全性和量产一致性成本高、开发周期长、部署环境相对固定。草根开发者不会去和它们正面竞争但可以在算法验证、快速原型、交互实验领域走出一条自己的路。1.2 为什么草根路线越来越可行过去想做一台能自主移动的机器人门槛确实很高传感器贵、计算平台贵、软件框架封闭。最近几年的变化非常明显树莓派等开发板性能足够跑 Linux 和 ROS2入门级 2D 激光雷达价格大幅下降几百元就能买到ROS2 生态逐渐成熟建图、导航、定位都有现成开源工具社区教程和开源项目数量庞大遇到问题能找到大量讨论。这些条件叠加在一起让“低成本具身智能机器人实现”成为一门可以自学的工程实践而不是只有实验室才能完成的课题。1.3 草根机器人能做什么一台低成本 ROS2 小车能做的事情已经不少SLAM 建图在室内环境实时构建二维栅格地图自主导航给定目标点后自动规划路径并避障视觉追踪通过摄像头识别目标物体并跟着移动语音交互接入语音识别和语音合成做简单的口令控制多机协作多台小车之间通过 ROS2 通信完成简单任务。这些能力虽然达不到人形机器人的复杂度但足以覆盖 ROS2 学习、嵌入式开发练习、毕设选题、机器人课程实验等绝大多数场景。2. 硬件选型草根机器人的低配与高配硬件选型是草根机器人面临的第一道选择题。预算有限每一分钱都得花在刀刃上。下面按照“大脑 感知 运动”三个维度展开。2.1 大脑树莓派 4G 还是 8G热词里有“具身智能小车树莓派需要4g还是8g”这说明很多人在选型时纠结内存。结论可以分成几层来看如果小车只跑 ROS2 基础节点、激光雷达驱动、SLAM 和 Nav2 导航4G 内存够用。这类任务的典型内存占用在 2GB 到 3GB 左右4G 版本不会因为内存不足导致系统卡死。如果除了导航还希望本地运行轻量视觉模型例如物体检测、视觉巡线、目标跟随8G 版本更从容。视觉模型在推理时对内存和 CPU 的要求明显更高4G 版本容易出现 Swap 频繁、节点被系统 OOM Kill 的情况。还要看清一个事实树莓派最大的瓶颈不是内存而是 CPU。8G 版本和 4G 版本在 CPU 算力上没有区别内存大了只是减少内存压力并不会让模型推理变快。如果核心目标是跑深度学习模型可以考虑 Jetson Nano 这类带 GPU/NPU 的平台或者给树莓派加一块硬件加速模块。2.2 感知激光雷达、摄像头与 IMU草根小车最常见的传感器组合是 2D 激光雷达 单目摄像头 选配 IMU。2D 激光雷达负责测距、建图和避障是 SLAM 导航小车的主力传感器。入门级产品常见原理是三角测距有效测距范围通常在 8 到 12 米扫描频率 5 到 10Hz。雷达通过串口或 USB 输出数据厂家一般提供 ROS2 驱动包。 传感器安装时要注意雷达应尽量水平安装不能被底盘遮挡扫描平面要避开轮子支架和电源线。摄像头的价值在于补充视觉信息。ESP32-CAM 是一块非常便宜的摄像头开发板适合做独立视觉节点但它的 WiFi 稳定性一般长时间传输画面存在断流风险。更稳妥的做法是把摄像头直接接到树莓派 CSI 接口或者用 USB 摄像头把数据在本机处理减少无线链路带来的不确定性。IMU 不是必需品。对于差速小车编码器 陀螺仪的融合能提高定位精度但入门阶段可以先不加 IMU把里程计和激光雷达配合好后续再逐步引入。2.3 运动差速底盘与电机驱动草根机器人的底盘方案几乎被两轮差速底盘垄断。左右两个驱动轮 一个万向轮结构简单、控制模型清晰、转弯半径可以为零对新手非常友好。驱动电机建议选择带编码器的直流减速电机。编码器是里程计的数据来源只有知道每个轮子转了多少圈才能估算机器人移动距离和角度。没有编码器的电机只能做开环控制无法支撑 SLAM 和导航。电机驱动板负责把树莓派的控制信号转换成电机的驱动电压。常见方案有 L298N、TB6612、DRV8833 等选择时主要看电机工作电压和峰值电流。树莓派的 GPIO 无法直接驱动电机必须经过驱动板否则会烧毁主板。2.4 一套可行的低成本配置清单模块推荐方案说明主控板树莓派 4B 4GB 或 8GB根据是否跑视觉模型选择激光雷达入门级 2D 激光雷达选择有 ROS2 驱动的型号底盘两轮差速底盘套件可购买成品底盘或自己打印电机带编码器直流减速电机选测速孔数 20 或更高的型号电机驱动TB6612 或同类模块注意与电机电压匹配摄像头USB 摄像头或 ESP32-CAM可选先搭建导航再扩展供电5V/3A 电源 电机独立电源电源线尽量短且粗系统Ubuntu Server ROS2具体版本根据架构选择这个清单的核心思路是“先跑通再升级”。第一台车不需要一次配齐所有传感器先让雷达转起来、让小车能动起来再逐步加视觉、加机械臂、加更复杂的算法。3. 软件生态ROS2 为什么适合草根开发者3.1 ROS2 和 ROS1 的区别ROS 是机器人操作系统Robot Operating System的简称它本质上是一套分布式通信框架让不同的传感器、算法模块、执行器节点之间可以互相发送消息。ROS1 是早期版本ROS2 是面向现代机器人应用重新设计的版本。对草根开发者来说选择 ROS2 的理由很直接ROS1 已经停止新功能迭代社区资源逐步迁移到 ROS2ROS2 基于 DDS 通信天然支持多机分布式部署生命周期管理更好节点崩溃后可以自动重启支持实时性更高的应用适合后续接机械臂和运动控制。网上很多旧教程还在讲 ROS1新手一定要注意版本。按照 ROS2 的新接口和启动方式学习能避免很多“教程过期”的问题。3.2 ROS2 学习路线从零到能跑导航具身智能学习路线在热词里出现频率很高说明很多人都在找一条明确路径。以 ROS2 小车为载体可以按下面的顺序推进第一步掌握基础命令行操作Linux 基本命令、文件权限、Vim 或 Nano 编辑器的使用。这一步不需要太深但必须熟练因为后面所有操作都在终端里完成。第二步理解 ROS2 通信机制话题Topic、服务Service、动作Action、参数Parameter。先用ros2 topic list、ros2 node list观察系统里的节点再写一个简单的发布订阅程序。第三步学会使用 launch 启动文件多节点项目的启动不是手动开十几个终端而是通过 launch 文件统一管理。第四步掌握 TF 坐标变换底盘、雷达、摄像头之间需要建立坐标关系TF 树错误是新手最常见的故障来源。第五步跑通 SLAM 与导航先用仿真环境跑通 Cartographer 或 slam_toolbox再把整个流程迁移到真机。3.3 仿真先行还是真机先行对于完全没有经验的新手建议先在电脑上通过 Gazebo 仿真跑通一整套流程再着手买硬件装真机。仿真的优势是成本为零、出错容易定位、可以随时重置。但仿真永远代替不了真机真机上会遇到雷达安装不平、电机响应不一致、供电不稳、串口丢包等“充满烟火气”的问题。推荐的路径是仿真理解概念 → 真机搭建系统 → 两台机器对照排错 → 回到仿真做算法实验。这样既不浪费硬件成本也不会在没有任何基础的情况下直接面对一堆硬件问题。4. 实战搭建一台低成本 ROS2 导航小车4.1 项目结构与硬件连接下面要搭建的项目是一个最小可运行的 ROS2 差速小车包含驱动节点、里程计节点、启动文件和导航相关配置。项目名称叫robot_base。robot_base/ ├── launch/ │ └── robot_base.launch.py ├── resource/ │ └── robot_base ├── robot_base/ │ ├── __init__.py │ ├── diff_drive_node.py │ └── odometry_node.py ├── package.xml ├── setup.py └── setup.cfg硬件接线遵循一个基本原则信号线和电源线分离。电机驱动板需要独立电源供电树莓派只负责输出 PWM 和方向信号不要用树莓派的 5V 引脚去带动电机。雷达通过 USB 连接到树莓派摄像头根据接口类型选择 USB 或 CSI。4.2 树莓派环境准备首先给树莓派安装 64 位 Ubuntu Server然后安装 ROS2。不同 ROS2 版本对应的 Ubuntu 版本不同比如 Humble 对应 Ubuntu 22.04Jazzy 对应 Ubuntu 24.04安装前先确认系统版本与 ROS2 版本的匹配关系。# 更新系统软件源 sudo apt update sudo apt upgrade -y # 设置编码 echo export LC_ALLen_US.UTF-8 ~/.bashrc echo export LANGen_US.UTF-8 ~/.bashrc source ~/.bashrc # 安装 ROS2以 common 版本为例具体版本名替换成你安装的发行版 sudo apt install ros-humble-ros-base -y # 安装常用的导航和仿真组件按需选择 sudo apt install ros-humble-nav2 ros-humble-slam-toolbox ros-humble-cartographer -y安装完成后把 ROS2 环境导入到 shell 配置中echo source /opt/ros/humble/setup.bash ~/.bashrc source ~/.bashrc这里需要注意如果使用 zsh需要把setup.bash改成setup.zsh后续所有环境变量导入都要保持一致。4.3 编写差速驱动节点驱动节点的作用是接收/cmd_vel话题上的速度指令把线速度和角速度换算成左右轮速度再通过电机驱动板控制电机。下面是完整的差速驱动节点代码#!/usr/bin/env python3 # 文件路径robot_base/robot_base/diff_drive_node.py import math import rclpy from rclpy.node import Node from rclpy.qos import QoSProfile from geometry_msgs.msg import Twist class SimpleMotorDriver: 抽象的电机驱动接口。 实际项目中请根据电机驱动板型号把 set_speed 改写成 - 串口发送指令 - GPIO PWM 输出 - 调用厂家的 Python 库 def __init__(self): self.left_speed 0.0 self.right_speed 0.0 def set_speed(self, left, right): self.left_speed left self.right_speed right # TODO: 在这里调用电机驱动板 # 例如串口发送如下指令 # self.serial.write(fL{left:.2f}R{right:.2f}\n.encode()) class DiffDriveNode(Node): def __init__(self): super().__init__(diff_drive_node) qos QoSProfile(depth10) self.subscription self.create_subscription( Twist, cmd_vel, self.cmd_vel_callback, qos) self.wheel_base 0.23 # 左右轮距单位米 self.wheel_radius 0.0325 # 驱动轮半径单位米 self.driver SimpleMotorDriver() def cmd_vel_callback(self, msg): v msg.linear.x w msg.angular.z # 差速模型把机器人速度拆成左右轮速度 left_linear v - w * self.wheel_base / 2.0 right_linear v w * self.wheel_base / 2.0 # 线速度转角速度 left_rpm left_linear / self.wheel_radius right_rpm right_linear / self.wheel_radius self.driver.set_speed(left_rpm, right_rpm) self.get_logger().info( fcmd_vel - left: {left_rpm:.3f} rad/s, right: {right_rpm:.3f} rad/s ) def main(argsNone): rclpy.init(argsargs) node DiffDriveNode() try: rclpy.spin(node) except KeyboardInterrupt: pass finally: node.destroy_node() rclpy.shutdown() if __name__ __main__: main()这段代码中的差速模型是核心。公式中左右轮线速度分别等于机器人线速度加减角速度乘以半轮距这一步是差速底盘运动学的标准推导。wheel_base和wheel_radius必须根据真实硬件测量建图出现畸形的核心原因之一就是这两个参数不准确。4.4 编写里程计节点里程计节点负责根据电机编码器数据估算机器人的位姿发布到/odom话题。下面给出一个简化版的示例代码方便理解数据流#!/usr/bin/env python3 # 文件路径robot_base/robot_base/odometry_node.py import math import rclpy from rclpy.node import Node from nav_msgs.msg import Odometry from geometry_msgs.msg import Quaternion def yaw_to_quaternion(yaw): return Quaternion( x0.0, y0.0, zmath.sin(yaw / 2.0), wmath.cos(yaw / 2.0) ) class OdometryNode(Node): def __init__(self): super().__init__(odometry_node) self.odom_pub self.create_publisher(Odometry, odom, 10) self.x 0.0 self.y 0.0 self.yaw 0.0 self.timer self.create_timer(0.05, self.publish_odom) def publish_odom(self): # 示例中不接真实编码器使用固定速度演示。 # 真机接入时请从编码器读取左右轮实际转速。 v 0.1 # m/s w 0.05 # rad/s dt 0.05 self.yaw w * dt self.x v * math.cos(self.yaw) * dt self.y v * math.sin(self.yaw) * dt odom Odometry() odom.header.stamp self.get_clock().now().to_msg() odom.header.frame_id odom odom.child_frame_id base_footprint odom.pose.pose.position.x self.x odom.pose.pose.position.y self.y odom.pose.pose.position.z 0.0 odom.pose.pose.orientation yaw_to_quaternion(self.yaw) odom.twist.twist.linear.x v odom.twist.twist.angular.z w self.odom_pub.publish(odom) def main(argsNone): rclpy.init(argsargs) node OdometryNode() try: rclpy.spin(node) except KeyboardInterrupt: pass finally: node.destroy_node() rclpy.shutdown() if __name__ __main__: main()真机运行时需要把v和w从编码器读取的轮速换算出来先读取左右轮角速度再根据轮距和轮径计算机器人线速度和角速度。这段示例代码的核心目的是说明里程计发布的数据结构以及frame_id的使用。4.5 编写启动文件启动文件可以让多个节点通过一条命令同时运行还能统一管理参数。下面是一个简单的 launch 文件# 文件路径robot_base/launch/robot_base.launch.py from launch import LaunchDescription from launch_ros.actions import Node def generate_launch_description(): return LaunchDescription([ Node( packagerobot_base, executablediff_drive_node, namediff_drive_node, outputscreen ), Node( packagerobot_base, executableodometry_node, nameodometry_node, outputscreen ) ])4.6 注册可执行节点要让上面的 Python 文件能够通过ros2 run命令启动需要在setup.py中配置入口点。setup.py必须放在包的根目录# 文件路径robot_base/setup.py from setuptools import setup package_name robot_base setup( namepackage_name, version0.1.0, packages[package_name], data_files[ (share/ament_index/resource_index/packages, [resource/ package_name]), (share/ package_name, [package.xml]), ], install_requires[setuptools], zip_safeTrue, maintaineryour_name, maintainer_emailyour_emailexample.com, descriptionA low-cost differential drive robot base for ROS2, licenseApache-2.0, entry_points{ console_scripts: [ diff_drive_node robot_base.diff_drive_node:main, odometry_node robot_base.odometry_node:main, ], }, )同时还需要配置setup.cfg[develop] script_dir$base/lib/robot_base [install] install_scripts$base/lib/robot_basepackage.xml内容如下?xml version1.0? ?xml-model hrefhttp://download.ros.org/schema/package_format3.xsd schematypenshttp://www.w3.org/2001/XMLSchema? package format3 namerobot_base/name version0.1.0/version descriptionA low-cost differential drive robot base for ROS2/description maintainer emailyour_emailexample.comyour_name/maintainer licenseApache-2.0/license buildtool_dependament_python/buildtool_depend dependrclpy/depend dependgeometry_msgs/depend dependnav_msgs/depend export build_typeament_python/build_type /export /package工作空间编译和运行的命令如下# 假设你的 ROS2 工作空间在 ~/ros2_ws cd ~/ros2_ws/src git clone 你的robot_base仓库地址 cd ~/ros2_ws colcon build --packages-select robot_base # 启用工作空间 source install/setup.bash # 启动小车 ros2 launch robot_base robot_base.launch.py4.7 接入雷达并验证主题数据驱动节点跑起来后接下来连接激光雷达。这里的命令因雷达型号而异以你手里雷达的厂家驱动包为准。通常流程是# 查看雷达串口设备是否识别 ls /dev/ttyUSB* # 给设备添加读取权限 sudo chmod 666 /dev/ttyUSB0 # 启动雷达驱动节点 ros2 launch 雷达驱动包名 驱动launch文件名.launch.py启动后在另一个终端查看当前所有话题ros2 topic list正常情况下应该能看到/scan、/odom、/cmd_vel等话题。用下面的命令检查雷达数据是否正常ros2 topic echo /scan --once如果/scan有数据输出说明雷达已经正常工作。接着可以进入建图和导航阶段。4.8 使用 SLAM 建图建图的目标是让机器人在地图中移动实时生成环境地图。这里以slam_toolbox为例# 启动 SLAM ros2 launch slam_toolbox online_async_launch.py # 打开一个新的终端手动控制小车移动 # 控制前先检查小车驱动节点是否在运行 ros2 run teleop_twist_keyboard teleop_twist_keyboard控制小车在环境中缓慢走一圈尽量覆盖房间的四个角落和墙壁边缘。建图过程中注意观察 Rviz 中的点云和轨迹线是否重合如果地图出现重影或漂移八成是里程计不准、速度过快或者雷达数据时间戳异常。完成建图后保存地图ros2 run nav2_map_server map_saver_cli -f ~/maps/home_map保存后会在~/maps目录下生成home_map.pgm和home_map.yaml两个文件。前者是栅格图后者是地图的元数据。4.9 启动 Nav2 导航导航阶段需要保证 TF 树完整、地图准确、代价地图参数合理。启动命令常见形式如下ros2 launch nav2_bringup bringup_launch.py map:~/maps/home_map.yaml启动完成后在 Rviz 中打开 Nav2 面板点击2D Goal Pose在地图上指定一个目标点。小车应当规划出一条路径并沿着路径走过去。如果导航失败优先检查四个环节/cmd_vel是否有输出驱动节点是否真正执行了速度控制里程计数据是否平滑地图与真实环境是否对齐。5. 常见问题与排查思路5.1 问题排查速查表问题现象常见原因解决思路树莓派 SSH 连不上未开启 SSH 服务或 IP 地址变化检查网络、开启 SSH、使用串口登录确认 IP雷达节点启动后无/scan数据串口权限不足或驱动包与型号不匹配执行sudo chmod 666 /dev/ttyUSB0确认驱动包版本TF 树报错 extrapolation时间戳不同步或父坐标系设置错误使用ros2 run tf2_tools view_frames检查 TF 树建图出现重影里程计不准、轮径或轮距参数错误重新测量轮径和轮距修正驱动节点参数导航时路径规划失败代价地图参数不合适或地图未对齐检查地图文件原点配置适当膨胀地图树莓派 CPU 占用过高节点太多或图像处理任务过重减少节点数量关闭不必要的可视化电机不转但节点运行正常驱动板电源不足或 PWM 配置错检查电机独立电源和 GPIO 接线5.2 树莓派 4G 运行卡顿怎么办如果小车在运行 Nav2 和 SLAM 时出现明显卡顿可以先怀疑节点数量过多。nav2会启动大量子节点占用不少内存和 CPU。排查方法是执行top命令查看进程占用把不需要的节点关掉例如在 Rviz 中没有使用的 Nav2 View 模块。如果 4G 内存确实不够用可以考虑两个方向把建图和导航放在 PC 上处理树莓派只负责驱动电机和采集雷达数据升级到 8G 版本或者换一台算力更强的开发板。5.3 为什么里程计漂移这么严重里程计漂移的根源是编码器只能测量轮子转过的角度无法感知轮子打滑、地面摩擦变化、电池电压波动。差速小车在一段时间后位姿误差累积导致地图歪斜。缓解方法包括测量准确的车轮直径不要用卡尺量完就不管要结合实际打滑情况微调车速尽量平稳避免急加速急刹车后期引入 IMU通过传感器融合修正角速度积分误差在导航定位阶段使用 AMCL 或 Nav2 自带定位模块纠正累计误差。6. 最佳实践与工程建议6.1 先跑仿真再上真机没有仿真经验就直接组装真机是做机器人最容易踩坑的路径。Gazebo 的好处是能在半小时内把上面整套流程跑一遍你可以在仿真里熟悉 ROS2 的通信机制、launch 文件、SLAM 参数、Nav2 配置。等这些概念都清楚了再面对真机上的硬件问题思路会清晰很多。6.2 把代码做成包而不是堆脚本初学者容易把所有逻辑写在一个大 Python 文件里用ros2 run直接启动。工程化一点的写法是按包组织驱动节点、里程计节点、传感器驱动、接口定义分开用 launch 文件统一编排。这样做的好处是单个节点出错时定位快后续替换传感器或底盘时也不需要重写全部代码。6.3 重视 TF 树的正确性导航系统对 TF 树的要求非常严格。base_link、odom、map、laser之间的关系必须明确命名不能随意改。出现定位或导航异常时先用下面的命令导出当前 TF 树ros2 run tf2_tools view_frames然后查看生成的frames.pdf对照官方文档检查每个坐标系的父子关系。6.4 电源管理不能省低压机器人最容易出现的问题是电源供电不足。电机启动瞬间电流很大如果电机和树莓派共用电源电压骤降会导致树莓派重启。建议使用两路独立电源一路给树莓派和雷达要求 5V 稳定输出一路给电机驱动电压根据电机参数选择。接线凌乱时可以在雷达数据出现异常或建图重影时优先检查电源线是否接触良好。很多“诡异问题”的根因只是某根杜邦线松了。6.5 日志、参数与可复现性ROS2 的参数系统非常有用。像wheel_base、wheel_radius、雷达话题名、坐标系名这些经常变化的量不要硬编码在源码里而应该通过 yaml 参数配置文件传入。这样换一台车、换一套传感器时只需要改配置不需要动代码。节点启动时注意保留日志outputscreen适合开发调试长时间运行时建议将日志写入文件方便回溯。6.6 实验安全任何涉及电机、电池、运动部件的实验都存在安全风险。做实验前先确认底盘不会碰撞到人或贵重物品最好在桌面上加装急停开关。电机调试时先用小电压小功率验证逻辑再逐步提高功率。电池充电时必须有人在场不要过充过放。7. 下一步学习路线从这台低成本 ROS2 小车出发可以继续走的方向很多机械臂在底盘上增加机械臂实现“移动 抓取”的复合操作视觉导航把 Navigation 从纯激光导航升级为视觉导航或者在导航中引入视觉避障控制算法研究 MPC、纯追踪、LQR 等底层运动控制算法多机系统多台小车组队通信完成集群搬运或协同探索具身智能数据将小车采集到的图像、里程计、雷达数据整理成数据集训练端到端控制模型。具体学习顺序上建议先补三角学和线性代数的直觉再看机器人运动学然后刷一遍 ROS2 官方教程最后回到真机迭代。草根路线的优势在于试错成本低坏了就修参数错了就改这种快速反馈是学习机器人最好的方式。7.1 给新手的五个建议第一不要追求一步到位。第一台车能把键盘遥控跑通就算成功能建图就是进阶能导航已经超过多数入门玩家。第二多读报错信息。ROS2 的日志比 ROS1 更规范报错信息里通常直接给出问题节点和原因不要复制粘贴到搜索引擎之前先读完最后几行。第三版本一致很重要。硬件型号、Ubuntu 版本、ROS2 版本、驱动包版本任何一个不匹配都可能导致诡异问题。每台设备都记录版本信息很多人排查了一整天最后发现是依赖版本不兼容。第四控制车速和加速策略。草根小车的算力有限导航中的速度反馈对 CPU 占用影响很大适当降低最大线速度和角加速度能明显减少建图漂移。第五把问题拆成节点来看。机器人系统出问题时先判断是传感器节点、驱动节点、算法节点还是通信问题定点排查而不是把整个系统拆掉重来。折腾机器人本来就是不断把小问题逐个解决的过程。草根阶层手里没有昂贵的设备但有完整的开源生态和极高的试错自由。把一台几百块的树莓派小车调通过程中学到的东西往往比直接使用一台高端开发套件要多得多。
返回列表