ARTICLE DETAIL

资讯详情

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

ROS2扫地机器人自主导航三路线:黑盒改装、白盒组装与仿真先行

ROS2扫地机器人自主导航三路线:黑盒改装、白盒组装与仿真先行 1. 为什么“拥有一台你自己的扫地机器人”不是买一台那么简单“扫地机器人”这五个字对绝大多数人来说就是京东购物车里那个带激光头、会自动回充、APP能看清扫地图的白色圆盘。但如果你在ROS2社区刷过帖、翻过Nav2的GitHub issue、调试过SLAM Toolbox的scan_topic参数或者被rviz2里飘忽不定的TF树折磨到凌晨三点——你就知道“拥有一台你自己的扫地机器人”本质上是在问我能不能从零开始亲手定义它的‘眼睛’怎么看见世界‘脑子’怎么理解空间‘腿’怎么走出一条不撞墙、不漏扫、不反复绕圈的路径这不是消费行为而是一次小型系统工程实践。标题里说的“三条路线”不是指京东、天猫、拼多多三个购买渠道而是三种截然不同的技术主权获取路径黑盒改装路线买一台主流品牌如石头、云鲸的量产机通过硬件拆解固件逆向串口注入把原厂封闭系统替换成ROS2驱动栈白盒组装路线用标准工业部件激光雷达、IMU、轮式底盘、树莓派/NUC主控搭出物理平台再一层层堆叠SLAM建图、Nav2导航、行为树任务调度仿真先行路线完全跳过硬件在GazeboROS2 Humble虚拟环境中构建数字孪生体先跑通算法逻辑、调参验证、行为树编排再把代码迁移到实机。而“一张攒机路线图”不是教你选CPU和显卡而是帮你理清当你要把一个360°单线激光雷达RPLIDAR A3、一个带编码器的差速底盘TurtleBot4或自研四轮麦轮、一块支持Ubuntu 22.04的x86主控Intel NUC 11和ROS2 Humble环境串起来时哪一步必须前置哪一步可以并行哪些依赖包版本冲突会直接卡死在colcon build阶段哪些TF坐标系漏定义会导致/map到/base_link的变换永远为空我做过三轮完整闭环第一轮用改装石头P10跑通了slam_toolbox实时建图但无法稳定导航第二轮用TurtleBot4在Gazebo里把Nav2的bt_navigator行为树跑满27个节点结果实机上因IMU噪声导致定位漂移第三轮才真正吃透“传感器时间同步”这个隐形门槛——不是靠ros2 topic hz看频率够不够而是用ros2 bag play --clock回放数据时发现激光扫描时间戳与IMU采样时间戳存在12ms系统性偏移这才明白为什么robot_localization的ekf_node始终收敛不了。所以这篇内容不教你怎么下单只讲你怎么“拥有”。适合三类人想把家用扫地机改造成ROS2实验平台的硬件爱好者正在啃《视觉SLAM十四讲》却卡在“怎么让算法跑在真实机器人上”的研究生还有那些已经写过几十个rclcpp::Node但一碰nav2_bringup就报错Failed to load plugin nav2_costmap_2d::StaticLayer的开发者。接下来我们一条路线一条路线拆不绕弯不省步骤连colcon build失败时该看哪一行日志都标清楚。2. 三条技术主权路线深度拆解黑盒改装、白盒组装、仿真先行2.1 黑盒改装路线在量产机壳里种下ROS2的种子这条路最“叛逆”也最考验硬件功底。核心逻辑是不推翻整机只替换大脑。主流扫地机器人以石头P10/P20、科沃斯X1 OMNI为代表内部其实已具备激光雷达、IMU、里程计、电机驱动等完整感知-执行链路只是被厂商锁死在封闭固件里。我们的目标是撬开这个黑盒把ROS2 Humble作为新操作系统注入进去。2.1.1 硬件破壁关键点串口通信与固件接口所有可改装机型都有一个隐藏调试串口通常为UART TTL电平位置在主板电池仓附近或主控芯片旁。以石头P10为例其主控为瑞芯微RK3326调试串口引脚标注为TXD/RXD/GND需用CH340 USB转TTL模块连接。但直接接上看到的不是Linux shell而是厂商自定义的AT指令集——这是第一道关卡。提示不要尝试用screen /dev/ttyUSB0 115200硬怼。石头固件的AT协议要求先发送ATMODEDEBUG进入调试模式再发ATUARTON开启串口透传。这个过程必须严格按顺序且中间不能有超时500ms。我第一次失败就是因为Python脚本里加了time.sleep(1)导致握手失败。一旦进入透传模式就能看到真实的Linux终端通常是Buildroot系统。此时可执行ps aux | grep ros确认原厂是否已预埋ROS1节点部分高端机型有但更常见的是空系统。这时就要用scp把交叉编译好的ROS2 Humble ARM64 deb包传上去再用dpkg -i安装。注意石头P10的内核版本是4.19.111必须用ROS2 Humble官方提供的humble-2023-05-10-linux-focal-arm64.tar.bz2而非通用amd64包。2.1.2 软件嫁接难点传感器驱动与TF树重建量产机的传感器驱动都是厂商私有.ko模块比如石头激光雷达驱动叫laser_drv.ko加载后会在/dev下生成/dev/laser设备节点而非标准的/dev/ttyUSB0。ROS2节点要读取数据必须重写rplidar_ros2驱动让它能open(/dev/laser)并解析原始帧。这里有个坑原厂驱动输出的是16位角度16位距离的二进制流每帧含360个点但没有时间戳字段。而SLAM算法如slam_toolbox强制要求每个激光扫描带header.stamp否则直接报错Scan timestamp is zero。解决方案是在驱动层用clock_gettime(CLOCK_MONOTONIC, ts)为每帧打时间戳并通过std_msgs::msg::Header注入。但要注意——CLOCK_MONOTONIC在嵌入式Linux里可能被禁用需检查内核配置CONFIG_POSIX_TIMERSy。我踩过的坑是石头固件默认关闭了POSIX定时器必须重新编译内核模块并替换/lib/modules/4.19.111/kernel/drivers/misc/laser_drv.ko。TF树重建更棘手。原厂固件里根本没有/map→/odom→/base_link这套坐标系只有/chassis和/lidar两个静态frame。我们要用robot_state_publisher发布动态TF但/odom帧的来源是轮式里程计而石头P10的编码器数据走的是I2C总线地址为0x48寄存器0x00存左轮脉冲数0x01存右轮脉冲数。这就需要写一个I2C读取节点把原始脉冲转换成nav_msgs::msg::Odometry消息——这里涉及轮距、编码器分辨率石头用的是1024线增量式编码器、PID速度环补偿等细节稍有偏差/odom就会漂移导致SLAM建图错乱。2.1.3 实战效果与局限性成功改装后你能用ros2 launch slam_toolbox online_async_launch.py实时建图用rviz2看到动态地图甚至用nav2的bt_navigator规划路径。但性能天花板明显石头P10主频1.5GHz的ARM Cortex-A35跑slam_toolbox建图时CPU占用率常达92%rviz2刷新率掉到3fps更致命的是原厂电机驱动芯片STSPIN32F0A不支持PWM频率微调导致小半径转弯时轮速响应滞后Nav2规划的/cmd_vel指令实际执行会有150ms延迟最终表现就是机器人总在目标点前急刹、后退、再冲像喝醉一样。所以黑盒路线的本质是“高风险高回报”你能最快获得一台物理机器人但所有优化都受限于原厂硬件设计就像给一辆法拉利装上拖拉机变速箱——动力再强也跑不快。它适合想快速验证算法逻辑、或做竞品对比研究的场景但不适合作为长期开发平台。2.2 白盒组装路线从螺丝刀开始的机器人制造如果说黑盒路线是“外科手术”白盒路线就是“从干细胞培养器官”。它不依赖任何量产机而是用工业级标准件像搭乐高一样构建完整机器人系统。这条路最“正统”也是ROS2官方教程如nav2文档默认假设的硬件基础。2.2.1 核心部件选型逻辑为什么选这些而不是那些激光雷达必须选360°单线、UDP输出、支持ROS2原生驱动的型号。RPLIDAR A316kHz扫描率25m量程是性价比之王但要注意——它出厂固件是V1.27而rplidar_ros2驱动要求V1.29以上否则/scan话题会丢帧。升级固件需用Windows工具RPLIDAR_SDK在Linux下必须用Wine运行且升级过程不能断电否则变砖。替代方案是Hokuyo UTM-30LX但价格贵3倍且需额外供电12V。底盘差速轮式最易控制。TurtleBot4是现成方案但它的wheel_odom节点默认用/tf发布里程计而Nav2要求/odom话题。必须修改tb4_driver的launch文件把publish_tf设为false再用独立robot_state_publisher发布/odom→/base_link。自研底盘则要关注编码器分辨率1000线编码器在0.1m/s速度下每10ms仅产生1个脉冲极易受干扰建议选2000线以上配合STM32F4做硬件滤波。主控电脑Ubuntu 22.04 ROS2 Humble是黄金组合。但别用树莓派5——虽然它支持Ubuntu 22.04但rviz2在Wayland下渲染异常必须切到X11且GPU加速不稳定。Intel NUC 11i5-1135G7是实测最稳的选择核显Iris Xe能流畅跑rviz2rqt_graphrqt_console三开colcon build编译nav2全包耗时仅8分23秒SSD16GB RAM。IMUBNO055是首选自带九轴融合算法直接输出/imu/data。但要注意其/mag数据在金属底盘上会严重畸变必须做硬磁校准——把机器人放在无铁质环境绕XYZ轴各旋转3圈记录最大最小值填入bno055驱动的mag_bias_x_min等参数。没校准的话robot_localization的EKF会把磁场干扰当成真实角速度导致/odom疯狂旋转。2.2.2 ROS2环境搭建避坑指南在NUC上装ROS2 Humble官网教程说sudo apt install ros-humble-desktop就行但实际会遇到三个经典问题rosdep初始化失败rosdep init报错ERROR: cannot download default sources list from:。这是因为国内网络无法访问raw.githubusercontent.com。解决方案不是换源而是用rosdep的--rosdistro humble参数指定镜像源sudo rosdep init --rosdistro humble rosdep update --rosdistro humble --include-eol-distros这会从https://gitee.com/rospack/rosdistro-mirror拉取缓存。colcon build卡在ament_cmake_core错误信息是CMake Error at /opt/ros/humble/share/ament_cmake_core/cmake/ament_cmake_coreConfig.cmake:113 (find_package)。根源是AMENT_PREFIX_PATH未正确设置。必须在~/.bashrc末尾添加source /opt/ros/humble/setup.bash export AMENT_PREFIX_PATH/opt/ros/humble注意source命令必须在export之前否则AMENT_PREFIX_PATH会被覆盖。rviz2启动黑屏这是Intel核显驱动问题。需在/etc/environment中添加__GL_SYNC_TO_VBLANK0 LIBGL_ALWAYS_SOFTWARE0并重启lightdm服务sudo systemctl restart lightdm。2.2.3 从零构建导航栈SLAM建图到自主导航的七步闭环白盒路线的价值就在于你能亲手走完这七步每一步都可控、可调、可debug硬件抽象层用ros2 run micro_ros_agent micro_ros_agent serial --dev/dev/ttyACM0连接底盘MCU让/cmd_vel和/odom话题互通传感器驱动启动rplidar_ros2和bno055节点用ros2 topic echo /scan确认激光数据正常TF树搭建写一个static_transform_publisher定义/base_link→/laser偏移0.15,0,0.2和/base_link→/imu_link偏移0,0,0.1SLAM建图ros2 launch slam_toolbox online_async_launch.py关键参数--params-file config/slam_toolbox.yaml里loop_closure_threshold设为0.3太小易误闭环太大建图变形地图保存ros2 run nav2_map_server map_saver_cli -f ~/map --ros-args -p save_map_timeout:10000注意save_map_timeout单位是毫秒缺省2000ms常不够导航配置nav2的bt_navigator需加载behavior_tree.xml其中Spin节点的spin_dist参数决定原地旋转半径设0.2比默认0.5更适应家庭窄走廊任务下发用ros2 action send_goal /navigate_to_pose nav2_msgs/action/NavigateToPose {pose: {pose: {position: {x: 2.0, y: 1.5}, orientation: {w: 1.0}}}}测试首次失败必看/log话题里bt_navigator的Failed to get path提示——八成是global_costmap的inflation_layer未启用。这七步里第4步SLAM建图和第6步行为树是最易卡点的。slam_toolbox的scan_matching参数组icp_max_iterations,icp_tolerance直接影响建图精度icp_max_iterations50时A3雷达在10m×8m客厅建图耗时42秒精度±3cm调到100耗时翻倍但精度只提升0.8cm性价比极低。而bt_navigator的行为树新手常犯的错是把WaitForPath节点放在ComputePathToPose之后——逻辑上应该先ComputePathToPose失败则RecoveryNode成功才FollowPath顺序颠倒会导致机器人永远在原地等待路径。2.3 仿真先行路线在虚拟世界里跑通所有逻辑当硬件采购周期长、预算有限、或你想快速迭代算法时GazeboROS2仿真就是你的“数字试验田”。这条路不造实物但产出的代码100%可迁移到实机——前提是仿真模型足够逼真。2.3.1 Gazebo模型精度陷阱为什么你的仿真总比实机“听话”Gazebo里机器人不撞墙往往不是算法好而是模型太理想。典型问题有三个激光雷达模型失真默认gazebo_ros_laser插件用ray传感器但实际RPLIDAR A3有±0.5°角度误差和±10mm距离噪声。必须在URDF里添加plugin namegazebo_ros_laser filenamelibgazebo_ros_laser.so并配置gaussianNoise0.005/gaussianNoise对应5mm噪声和alwaysOntrue/alwaysOn。轮子打滑模拟缺失Gazebo默认轮子摩擦系数无穷大导致/cmd_vel指令100%转化为位移。需在gazebo referenceleft_wheel里添加mu11.0/mu1mu21.0/mu2fdir11 0 0/fdir1并设置kp1000000.0/kpkd100.0/kd模拟真实阻尼。IMU随机游走未建模BNO055实机有0.01°/s的角速度零偏漂移Gazebo默认IMU插件无此特性。必须用gazebo_ros_imu_sensor插件并在plugin标签内加drift0.01/drift和drift_frequency0.1/drift_frequency。我曾用默认Gazebo模型跑通Nav2全流程迁移到实机后/odom在3分钟内漂移1.2m。后来在Gazebo URDF里补全上述三项仿真漂移控制在0.3m/5min实机迁移后漂移降至0.4m/5min——证明仿真精度直接决定实机调试效率。2.3.2 仿真-实机代码迁移 checklist仿真跑通不等于实机可用。迁移前必须核对这六项检查项仿真环境实机环境迁移操作TF坐标系/world→/map→/odom→/base_link/map→/odom→/base_link删除仿真专用/world帧robot_state_publisher只发布/map→/odom由slam_toolbox提供传感器话题名/lidar/scan,/imu/data/scan,/imu在launch文件里用remap重映射param namescan_topic value/scan/底盘控制接口/cmd_velgeometry_msgs/Twist/cmd_vel但MCU可能只认std_msgs/Float64MultiArray写一个vel_relay节点把Twist转为数组格式地图路径~/sim_map.yaml/home/robot/map.yamllaunch文件里用param namemap_yaml_file value$(find-pkg-share nav2_bringup)/maps/sim_map.yaml/改为绝对路径行为树XMLnode nameNavigateToPose typeNavigateToPose同名但NavigateToPose节点需适配实机/tf延迟在bt_navigator参数里加transform_tolerance: 0.5默认0.1启动顺序先启Gazebo再启ROS2节点先启底盘MCU再启ROS2节点用launch.actions.RegisterEventHandler监听/tf话题出现后再启动slam_toolbox最后一项最关键仿真里/tf发布是瞬时的实机因串口通信延迟/map→/odom变换常滞后200ms。若不加大transform_toleranceslam_toolbox会因找不到/odom而拒绝建图报错Could not transform from base_link to odom。2.3.3 仿真高效开发技巧用bag回放代替实时调试与其在Gazebo里一遍遍手动遥控不如用ros2 bag record录下实机数据再在仿真中回放。例如录一段石头P10在客厅的/scan/imu/odom数据然后在Gazebo里用ros2 bag play --clock -l your_bag同时启动slam_toolbox。这样你就能在仿真中复现实机问题——比如发现/scan在沙发边缘有大量无效点距离值为0进而针对性加range_min: 0.15过滤。更高级的玩法是“混合仿真”用Gazebo仿真激光雷达和IMU但用实机底盘跑/odom。方法是把实机/odom话题通过WiFi桥接到仿真机再用topic_tools relay转发到Gazebo节点。这样既保留了真实里程计特性又规避了实机碰撞风险。3. 一张攒机路线图硬件采购、软件部署、系统联调的12个关键节点所谓“攒机路线图”不是列个BOM表就完事而是把从拆开第一个快递箱到rviz2里看到绿色导航箭头的全过程拆解成12个不可跳过的节点。每个节点都有明确输入、输出、验证方式和失败回滚方案。这张图是我用三台不同配置机器人NUCRPLIDAR、Jetson OrinLivox Mid-360、树莓派4Hokuyo踩坑后总结的按时间线排列但实际执行时第3、5、7步可并行。3.1 节点1硬件采购清单与兼容性核验耗时1天采购不是照单下单而是做兼容性沙盘推演。重点核验三项主控与ROS2版本匹配ROS2 Humble官方支持Ubuntu 22.04而Ubuntu 22.04内核为5.15。Intel NUC 11i5-1135G7完美支持但AMD Ryzen 5 5600G在Ubuntu 22.04下需手动编译amdgpu驱动否则rviz2闪退。核验方法在Ubuntu官网查“Certified hardware for 22.04”只选标有“Fully supported”的型号。激光雷达供电能力RPLIDAR A3峰值电流1.2AUSB口仅提供0.5A。必须配外置5V/2A电源且用带屏蔽的USB延长线2m时信号衰减会导致丢帧。核验方法用lsusb -v | grep -A 5 RPLIDAR看MaxPower值若显示100mA说明USB供电不足。IMU与主控通信协议BNO055支持I2C和UART。NUC无原生I2C必须用USB转I2C适配器如Total Phase Aardvark但驱动复杂改用UART模式更稳需确认NUC的/dev/ttyS0非USB串口电压为3.3VBNO055要求否则烧毁。核验方法万用表测/dev/ttyS0的TX引脚对地电压应为3.3V±0.1V。注意所有采购件到货后第一件事不是接线而是用厂商工具单独测试。RPLIDAR用rplidar_sdk的test程序看是否输出点云BNO055用i2cdetect -y 1看是否出现在0x28地址底盘用厂商上位机发0x01指令确认轮子转动。这步省略后面90%的问题都源于硬件本身故障。3.2 节点2Ubuntu 22.04最小化安装与系统加固耗时45分钟别用桌面版ISO用ubuntu-22.04.4-live-server-amd64.iso装最小化系统。理由桌面版自带GNOME占1.2GB内存rviz2启动后只剩不到500MB可用服务器版装完仅800MBtop看systemd-journald内存占用50MB。加固关键操作关闭snapdsudo systemctl stop snapd sudo systemctl disable snapd否则apt update时会卡在snapd.refresh.timer禁用fwupdsudo systemctl stop fwupd sudo systemctl disable fwupd避免后台固件更新占用CPU设置/tmp为内存盘echo tmpfs /tmp tmpfs defaults,noatime,nosuid,size2G 0 0 | sudo tee -a /etc/fstab防止colcon build临时文件写满SSD。验证free -h看可用内存是否≥3GBdf -h /tmp显示size为2.0G。3.3 节点3ROS2 Humble源码编译耗时1小时12分钟官方deb包虽快但调试时看不到源码gdb跟不进去。必须源码编译。流程# 1. 安装依赖 sudo apt update sudo apt install python3-colcon-common-extensions python3-pip python3-rosinstall-generator python3-vcstool build-essential cmake git # 2. 创建工作空间 mkdir -p ~/ros2_humble/src cd ~/ros2_humble # 3. 下载源码关键用--exclude-repo-list排除不用的仓库 rosinstall_generator desktop --rosdistro humble --deps --tar humble-desktop.rosinstall vcs import src humble-desktop.rosinstall # 4. 排除无关包节省57%编译时间 rm -rf src/robot_state_publisher src/rviz_common src/rviz_default_plugins # 这些GUI包用deb版即可编译命令必须加--merge-install和--cmake-args -DCMAKE_BUILD_TYPERelWithDebInfocolcon build --merge-install --cmake-args -DCMAKE_BUILD_TYPERelWithDebInfoRelWithDebInfo生成调试符号gdb才能看到slam_toolbox的optimizeLoop函数内部变量--merge-install把所有包装进install/目录避免AMENT_PREFIX_PATH混乱。验证source install/setup.bash ros2 pkg list | wc -l应输出218desktop版标准数。3.4 节点4激光雷达驱动与数据校验耗时25分钟rplidar_ros2必须用foxy分支Humble兼容而非main分支。因为main分支已转向ROS2 IronAPI不兼容。安装后启动ros2 launch rplidar_ros2 rplidar_a3_launch.py校验三步ros2 topic list | grep scan→ 必须有/scanros2 topic hz /scan→ 频率应为10HzA3默认ros2 topic echo /scan --once | head -n 20→ 查看ranges数组前10个值应为inf正前方无障碍第90个值90°方向应为具体数字如2.345。常见失败/scan频率只有2Hz。原因是A3固件版本低需升级到V1.29。升级命令ros2 run rplidar_ros2 upgrade_firmware --firmware-path /path/to/A3_V129.bin3.5 节点5IMU驱动与坐标系对齐耗时30分钟BNO055用ros2 run bno055_driver bno055_driver启动。但默认/imu/data的orientation是四元数而robot_localization的EKF需要/imu/data_raw含原始陀螺仪、加速度计数据。必须改启动参数ros2 run bno055_driver bno055_driver --ros-args -p use_ros_time:true -p frame_id:imu_link -p data_mode:raw坐标系对齐是隐性坑BNO055芯片贴在PCB上Z轴向上但机器人/base_link的Z轴也向上。若IMU安装时旋转了90°/imu/data_raw的angular_velocity.x就会变成实际的y轴角速度。校验方法静置机器人ros2 topic echo /imu/data_rawangular_velocity三轴应均≈0然后绕机器人Z轴顺时针转一圈angular_velocity.z应输出正弦波峰值≈0.35对应180°/s。3.6 节点6TF树构建与静态变换发布耗时15分钟用ros2 run tf2_tools view_frames生成TF PDF必须看到/map→/odom→/base_link→/laser→/imu_link这条主链。缺失任一环SLAM和导航都会失败。关键参数/base_link到/laser的Z轴偏移。RPLIDAR A3安装高度通常为0.18m但/base_link原点在轮轴中心需实测底盘离地高度。我用游标卡尺量出NUC底盘离地0.12mA3外壳厚0.03m故z: 0.15。设错0.01m建图时墙体会整体偏移10cm。3.7 节点7SLAM Toolbox建图参数精调耗时2小时slam_toolbox的online_async_launch.py默认参数只适合空旷仓库。家庭环境需调四项参数默认值家庭环境推荐值作用resolution0.050.025提高地图精度但内存占用翻倍10m×8m地图从12MB→48MBmax_laser_range20.08.0防止远距离噪点污染近处地图窗外阳光反射常被误判为障碍物loop_closure_threshold0.20.35太小易误闭环把沙发腿当柱子太大建图拉伸变形icp_max_iterations1030提高ICP匹配精度但建图时间增加40%调参验证法建图时用rviz2打开/slam_toolbox/graph_visualization话题看红色闭环线是否只在真实重复区域如门口出现且不跨房间。3.8 节点8Nav2导航栈配置文件生成耗时1小时别手写YAML用nav2官方nav2_params_utils工具ros2 run nav2_params_utils generate_params_file --output-dir ~/nav2_config --namespace /robot --use-slam true它会生成controller_server.yaml,planner_server.yaml等8个文件。重点改三处controller_server.yaml里FollowPath的max_vel_x: 0.25家庭环境安全速度planner_server.yaml里GridBased的max_robot_pose_search_distance: 2.0扩大路径搜索半径避免窄走廊卡死bt_navigator.yaml里bt_xml_filename: navigate_w_replanning_and_recovery.xml启用重规划和恢复行为。3.9 节点9行为树XML定制与节点注入耗时1.5小时navigate_w_replanning_and_recovery.xml是基础模板但需注入自定义节点。例如加一个CleanRoom节点当机器人到达目标点后启动吸尘电机。方法是在XML里插入node nameCleanRoom typeaction idclean_room_action param nameaction_name value/clean_room/ /node然后写一个clean_room_server节点订阅/clean_room动作控制GPIO引脚驱动继电器。注意动作服务器必须在bt_navigator启动前就绪否则行为树会卡在CleanRoom节点。3.10 节点10实机联调与传感器时间同步耗时3小时这是最耗时的节点。核心是解决/scan、/imu、/odom三者时间戳不同步。用ros2 topic hz看各话题频率再用
返回列表