资讯动态

ROS2小车实战:从仿真到实车部署全流程指南

发布时间:2026/10/20 1:05:03 来源:尧图企业网站定制
刚开始接触ROS2小车的时候我跟身边很多人的想法一样先照着教程把仿真跑通让小车在Gazebo里动起来就算入门了。结果真到了要把代码搬到实体车上的那天才发现仿真里跑得漂漂亮亮的路径规划上了实车连最基本的线都走不直。后来我花了不少时间把整个流程重新捋了一遍从仿真环境到实车部署一点点调才真正把ROS2和Autoware这条链路用明白。这篇文章就是把我走过的这条路整理成一套可以直接照着学的实战指南。不管你是刚接触ROS2没几个月的新手还是已经能写节点但是卡在“仿真可以实车不行”这个坎上的开发者这篇文章都会把仿真到实车部署全流程中那些真正卡人的细节讲清楚包括怎么搭环境、怎么选传感器、怎么处理坐标系的坑、怎么把Autoware这种重型框架在小车上跑起来。1. 为什么选择ROS2Autoware这条技术路线很多人最初接触自动驾驶开发时都会纠结一个很现实的问题到底从哪个框架入手市面上的选择其实不少有围绕某个特定硬件的商业SDK有各种大学实验室开源的半成品也有像Autoware这种相对完整的开源自动驾驶框架。我当时的判断是多方面权衡之后的结果现在回头看这个选择是值得的。1.1 完整的模块化架构是最大优势Autoware吸引我的第一个点是它把整个自动驾驶系统拆得非常清晰。感知、定位、规划、控制这些在别的框架里经常被揉成一团的东西在Autoware里是彻底解耦的模块。每个模块都有独立的节点模块之间通过话题通信。我打个比方方便你理解如果自动驾驶系统是一支球队那感知模块就是负责“看”和“听”的情报员定位模块是拿着地图判断“我现在在哪”的领航员规划模块是决定“接下来怎么走”的战术指挥官控制模块则是让球员腿部肌肉执行跑动动作的体能教练。每个角色各司其职某一环出了问题你只需要替换那一个环节不用把整支球队推倒重来。这种架构对学习阶段特别友好。我刚接触的时候先从最简单的控制模块入手用一个模拟的速度指令话题就能让车动起来。之后逐渐往上游加感知、加规划每一步都只面对一个新概念不会被一个巨大的黑盒劈头盖脸砸晕。1.2 ROS2原生支持的通信机制Autoware的现代版本完全跑在ROS2上这对我们做小车的人来说其实是省了一大笔学习成本。ROS2最基础的概念就是节点、话题、服务、动作这四件套Autoware内部也全是用这套机制来通信的。比如规划模块发布的是/planning/trajectory话题控制模块去订阅这个话题拿轨迹数据再通过/control/command/control_cmd发布车辆控制指令。这些都是标准的ROS2话题意味着你可以随时打开终端用ros2 topic echo去看这个小车此刻正在接收什么指令真的非常方便。另外ROS2提供了比ROS1更可靠的多机通信机制DDS天生支持在不同设备之间协同工作。这对实车部署尤其重要因为你的工控机、激光雷达、电机驱动板往往不是同一台设备它们需要通过网络通信协同工作。ROS2的发现机制和QoS策略让我能在工控机上跑算法、在驱动板上跑底层控制两者之间只用一根网线就连接起来了。1.3 社区生态带来的长期价值讲实话Autoware目前在国内的开发者数量不算特别庞大但它的社区质量很高。许多自动驾驶从业者、研究机构和高校实验室都在围绕Autoware做研究你遇到的问题大概率有人已经遇到过并在社区里留下了讨论。而且Autoware跟其他框架最大的不同是它不是玩具级Demo而是可以往真实产品方向演进的东西。你今天为Autoware写的许多代码、调过的参数、积累的调试经验不会因为换个项目就全部作废。这个长期价值是我最终选择这条路线的最重要原因。2. 从零搭建ROS2和Autoware学习环境标题里写了“全套实战”那环境搭建就是绕不开的第一道门槛。很多新手在这里会被一堆依赖、编译错误折磨到怀疑人生。其实环境搭建没那么可怕只要抓住几个关键点就可以顺利过关。2.1 系统版本和ROS2发行版的匹配首先是最基础的版本匹配问题。ROS2的发行版和Ubuntu系统版本是强绑定的不是随便装的装错版本会让你后面寸步难行。我目前最推荐的组合是Ubuntu 22.04 ROS2 Humble。这个组合有两个原因一是Humble是长期支持版本维护周期长你不用频繁担心系统升级问题二是Autoware新版本对Humble的支持很成熟大部分功能可以开箱即用。装完系统之后安装ROS2本身很简单官方文档有完整的安装命令。你只需要确保系统源配置正确注意不要跳过rosdep这个工具它后面会帮你自动处理大量依赖是Autoware编译流程里的关键一环。2.2 Autoware的源码编译流程Autoware本身是一套庞大的工程除了核心代码还有大量的依赖库。编译它之前我建议你先做好心理准备第一次完整编译可能要花一到两个小时主要取决于你的电脑配置和网速。编译Autoware官方推荐的方法是使用他们提供的Docker镜像这样可以省去配置环境的大量麻烦。但如果你是第一次接触我反而建议你试试手动编译一遍。因为手动编译会让你被迫去理解整个工程的依赖关系后面遇到问题你能更快定位是哪个环节出了问题。手动编译的关键步骤大概是这样的# 创建工作空间 mkdir -p ~/autoware_ws/src cd ~/autoware_ws # 克隆Autoware源码以特定版本为例 git clone https://github.com/autowarefoundation/autoware.git src/autoware # 安装依赖 cd ~/autoware_ws rosdep install -y --from-paths src --ignore-src --rosdistro humble # 编译这里建议设置线程数避免内存不够 colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPERelease编译过程中最容易遇到的问题是某个依赖包版本对不上导致编译报错。我的建议是每次编译失败后不要急着改代码先认真看报错信息确认是缺依赖还是版本冲突。必要时直接去Autoware的GitHub仓库Issue区搜索报错关键信息大部分问题都能找到答案。2.3 一个容易被忽略的环节数据集准备环境搭好、编译通过之后你面对的Autoware是一个没有“眼睛”和“地图”的空壳。Autoware跑起来需要数据输入最常见的是激光雷达点云数据如果有摄像头还需要图像数据。好消息是Autoware官方提供了一套相对完整的示例数据专门用来演示整个系统如何运转。我第一次跑通Autoware就是靠这套数据当时在RViz里看到点云地图被加载出来、车辆自身位置被定位出来、规划模块画出一条可行驶轨迹的时候那种成就感是没法用语言描述的。你要做的就是在终端里分别启动Autoware的核心节点再播放数据集文件然后在RViz中观察整个自动驾驶流程是怎么走起来的。这一步不用急着理解每个模块的内部原理先建立“整套系统长什么样”的全局印象对后面学习非常重要。3. 仿真环境中的核心模块拆解与跑通实战环境搭好之后你可能会迫不及待地想跑仿真。但我的建议是在跑仿真之前先花点时间把Autoware的核心模块按流程撸一遍。你不需要深入每一个算法细节但必须理解数据是怎么从传感器的原始数据一步步变成车轮上的控制指令的。3.1 感知模块点云处理与目标检测在Autoware流程里感知模块承担的任务是把激光雷达扫描到的原始点云数据转化为“周围有哪些物体、它们在哪、以什么速度在动”的信息。仿真里跑感知其实挺有意思的。你会看到大量的点云在地图上被渲染出来那些代表路面、墙壁的静态点云会被过滤掉剩下的动态点云通过聚类算法被识别成一个个目标框。我记得第一次看到屏幕上出现绿色的3D边界框框住一个模拟行人目标的时候才真正意识到“机器是怎么看懂世界的”这个问题是有解的。不过这里有个重要的认知需要建立仿真的感知是“理想化”的。仿真环境里传感器不存在安装误差、时间同步误差、噪声干扰这类问题所以感知效果往往很好。等你到实车上调试时就会发现同样一套感知算法在实车上会频繁出现目标漏检、误检这就需要你对传感器标定、参数调整有更深的了解这个我们后面会细说。3.2 定位模块从点云地图到自己在哪里定位模块解决的是一个很朴素的问题小车知道自己在哪里吗在仿真环境里你可能会觉得这个问题有点多余因为仿真环境里小车的位置是已知的。但真实世界里没有上帝视角车辆必须依靠自身传感器来推测位置。Autoware最常用的定位方案是基于激光雷达点云配准的NDT算法。它的工作原理是用一个预先构建好的高精度点云地图作为参考然后不断把当前扫描到的点云跟地图做匹配通过计算两者之间的偏移量来确定车辆当前位置。这个部分我在仿真里花的时间最多。因为你要理解点云数据、地图坐标、车体坐标之间的关系而这三个坐标系的转换恰恰是整个系统最容易出问题的地方。仿真环境提供了一个很好的练习场你可以故意把地图加载错误、把初始位姿估计放偏然后观察定位模块怎么通过一次次匹配一点点把位置修正回来。这个过程练多了到了实车阶段你会少走很多弯路。3.3 规划模块全局路径与局部轨迹规划模块分为全局路径规划和局部路径规划两个层次。全局路径规划的任务是在已知地图上找出一条从起点到终点的可行路线它解决的是“往哪走”的问题。局部路径规划则是根据全局路径结合当前感知到的实时障碍物每一帧都计算出一条具体可执行轨迹解决“下一瞬间怎么走”的问题。在仿真里调试规划模块是最有意思的一部分因为你能很直观地看到小车在模拟环境中怎么绕开障碍物、怎么平滑转弯、怎么在行人目标前面停下来等几秒再继续前进。Autoware的规划模块还考虑了一个很重要的细节就是轨迹要符合车辆本身的运动学约束。也就是说它不是画任何数学上可行的路线而是画“这辆车真的能开出来的路线”。想验证这一点你可以在仿真里故意给小车设置一个特别狭窄的转弯场景然后你会看到局部规划模块有时会计算不出可行轨迹车辆会停下来。这个现象很正常也提醒我们自动驾驶系统最核心的目标其实不是“开得快”而是“安全地处理所有不确定性”。3.4 控制模块把轨迹变成车轮动作控制模块是整个链路的最后一环。它接收规划模块输出的轨迹点数据然后计算需要给车辆发送多少方向盘角度和速度指令。在Autoware里控制模块通常用的是基于模型预测控制或PID的算法把“期望轨迹”和“车辆当前状态”之间的误差不断缩小最终让小车的实际行驶路线贴合规划轨迹。我在仿真里测试控制模块的时候发现一个规律控制参数调得好不好最明显的体现就是小车在转弯时的稳定性和直线行驶时的纠偏速度。参数太激进车会左右震荡参数太保守车过弯会偏出车道。这里没有一步到位的参数必须靠反复试验去逼近最优值。仿真环境的好处是你可以很快测试上百组参数而在实车上你根本不敢这么放开测。Autoware控制模块输出的指令话题是/control/command/control_cmd你订阅这个话题就能看到类似于“前进0.5米每秒转向角0.2弧度”这样的指令数据。我建议新手在跑仿真时打开一个终端不断输出这个话题的内容把控制指令和车辆实际运动对照着看这会让你快速建立对“控制”这件事的直观认识。4. 仿真到实车部署的五大关键差异与对应解法很多教程讲到仿真跑通就收尾了但这恰恰是最容易让人产生误解的地方。我必须把这条经验放在文章显眼的位置仿真通过不等于实车能跑。从仿真到实车部署中间横着的不只是代码移植而是五种维度的差异每一种差异都可能成为你项目推进的拦路虎。4.1 传感器噪声与数据质量的差异第一种差异最直观也是所有差异的根源真实传感器数据是脏的。仿真的激光雷达点云数据是理想的每个点的坐标都是精确的真实雷达数据里你会看到随处可见的噪点、距离跳变、反射异常。你费尽心力调试的感知算法在仿真里百发百中一上实车就各种漏检误检。解决这个问题的关键不是调算法参数而是从源头提升数据质量。第一个要做的是传感器标定。激光雷达有内参和它的安装姿态摄像头有内参和外参两者还有相对位姿关系。标定的过程就是把这些参数精确测出来让算法拿到的是“无畸变”的数据。我建议在实车调试开始前先把标定流程完整走一遍并记录下来后面再出问题可以快速排查是不是标定参数漂移了。4.2 时间同步带来的连锁问题仿真里所有传感器的时间戳都是精确对齐的因为数据是同一个仿真时钟生成的。但实车上激光雷达有自己的扫描周期摄像头有自己的帧率不同的传感器由不同的驱动发布数据它们的时钟根本对不齐。时间不同步会导致什么严重后果最直接的就是感知结果和真实位置对不上。比如激光雷达在T1时刻扫到了前方有障碍物摄像头在T2时刻才看到同一个障碍物两个消息的时间戳不一致融合模块就会认为它们描述的是不同位置的目标由此产生定位误差或者规划轨迹偏差。在ROS2里解决时间同步的方法是使用消息过滤器根据时间戳近似度将多路传感器数据对齐。仿真里你不需要关注这个实车部署时必须把它当成一个优先级很高的问题处理。我的实践心得是在前期做驱动层设计时就把统一的时钟服务部署好比后期打补丁要省心得多。4.3 坐标系的坑从仿真到现实的隐藏炸弹坐标系问题是实车部署中调试时间消耗最多、也最容易让人头疼的问题。仿真里地图坐标系、车辆坐标系、传感器坐标系的定义是官方替你摆好的你根本不需要关心。但实车上激光雷达是你自己装在车上的安装角度偏了一度车辆坐标系的原点也是你自己定义的控制指令的正方向是你要自己确定的。我踩过一个非常典型的坑在仿真里控制指令的转向角正值是向右转我的实车上电机驱动器的定义正好是反的。结果小车在实地测试时明明是往左转的指令车轮却往右打惊险得差点撞到旁边的箱子。从那以后我学到一件事拿到任何实车硬件第一件事不是写算法而是先手动发送各个方向的控制指令把每个执行器的正负方向定义清楚地记录下来做成一张对照表贴在工控机上。坐标系问题还牵扯到标定后的外参变换。你必须把这个转换关系理解得足够透彻理解“激光雷达检测到的障碍物在传感器坐标系下的坐标是怎么一步步变成地图坐标系中的位置”这条链路否则一旦实车表现异常你会完全找不到排查方向。4.4 算力与性能的现实差距仿真跑算法用的往往是自己的高性能电脑算力充裕甚至连显卡都能参与加速。但实车上装的通常是工控机或者开发板功耗受限、散热受限算力远远不如你的开发电脑。这个差异最直接的影响是算法帧率。仿真里感知模块每秒能处理10帧点云实车上可能只能跑2帧。帧率不够意味着车辆对周围环境的感知存在更大的延迟行驶速度稍快一点就可能出现刹不住车的情况。应对方法是做算法剪枝和工程优化。我在自己的小车上就把Autoware的感知模块做了裁剪只保留障碍物检测和最近障碍物距离计算砍掉了绝大部分不必要的可视化处理帧率直接翻了一倍。千万不要觉得裁剪框架是“阉割版”不好对小尺寸的开发板来说能在有限算力下稳定运行比追求算法功能的完整更重要。4.5 车辆底层控制接口的打通最后一个差异也是让很多仿真专家栽跟头的地方仿真里控制模块的输出自动作用于车辆模型但实车上你需要自己做一层底层控制接口把控制指令转换成电机的PWM信号或者串口命令。这一步的坑在于不同电机的控制方式千差万别有的接受速度指令有的接受力矩指令有的还需要严格的握手协议。我在最初做底层驱动时花了不少时间调试电机响应遇到控制指令发送后电机没反应的情况以为是代码问题结果最后查到是串口波特率配错了。我的建议是在实车部署之前先把底层控制做成一个独立于Autoware的单独软件模块使用标准ROS2话题接口对外通信。这样可以分开调试等底层模块单独跑稳了再让它作为Autoware控制指令的终端执行者。分而治之的策略会显著降低联调难度。5. 实车部署落地路线图分阶段推进的具体步骤谈完了差异和难点下面直接给一套可以照着做的落地路线。My personal practice是把它分成五个阶段每一阶段都有明确的目标和验收标准这样即使项目周期很长你也能清楚知道当前处于什么位置、下一步该干什么。5.1 硬件平台选型最低可行配置参考在做实车部署之前第一步是把硬件平台确定下来。这里给出我当时使用的配置方案可以作为你的参考起点。部件推荐方案关键说明车体1/10比例模型车或舵轮小车底盘优先选带转向舵机的四轮底盘便于验证控制算法主控电脑工控机或高性能树莓派扩展板需要至少能够跑Linux和ROS2建议内存不低于4GB激光雷达入门级单线激光雷达用于感知和定位扫描范围越大越有利惯性测量单元低成本IMU模块用于位置估算辅助选带校准功能的型号电机驱动直流电机驱动器确认电机方向可控带速度反馈更好供电系统两块独立电池主控和电机分开供电避免电机干扰导致主控宕机这里面最容易被忽略的是供电系统。电机启动的瞬间会有很大的电流冲击如果主控和电机共用电源电压跌落会直接导致工控机重启或者ROS2节点崩溃。用两块电池独立供电可以在物理层面隔离干扰省掉很多软硬件联调的麻烦。5.2 阶段一底层控制打通与手动遥控验证第一阶段的验收标准很简单小车能通过遥控器稳定前进、后退、左右转弯并且主控电脑能通过串口或者网络实时获取到底盘的运动状态。这个阶段不要做任何复杂算法只需要写一个简单的ROS2节点读取遥控器输入转换成控制指令发布到话题上再让底层驱动节点去订阅并执行。整个链路通了之后你会发现后续所有模块都建立在它之上所以这一步一定要扎实摔过的每一跤都会在后面帮你避开更大的坑。我个人在这个阶段的习惯是每完成一个动作就打印日志记录当前遥控器输入值、目标速度值和实际速度值。这份日志会成为后面调试算法时最可靠的参照。5.3 阶段二基础感知与点云数据采集第二阶段的目标是让小车具备“看到”东西的能力。用激光雷达采集周围环境的点云数据并通过RViz可视化出来。你需要确认的点是点云数据能否正确反映周围物体的距离和轮廓数据是否存在异常大的噪声点云帧率是否足够稳定。如果发现点云有明显的数据缺失区域或者距离值经常跳变几乎可以断定是硬件安装或者供电问题不是算法问题。我在实车上就遇到过一次激光雷达距离值周期性跳变的情况排查了很久最后发现是雷达电源线跟电机电源线绑在一起电机一加速就产生电压波动干扰了雷达重新走线之后问题就消失了。5.4 阶段三实时定位与最小地图构建第三阶段开始进入算法环节目标是在实车上获得稳定的位置估计。在没有预建地图的情况下最简单的方案是使用SLAM工具同步构建地图并定位。对Autoware这类依赖预建地图的框架而言我通常建议先用建图工具把测试场地的点云地图建出来保存成文件然后在离线状态下验证定位模块能在地图中正确定位。只有离线定位稳定了才能考虑在线运行时定位模块能否跟上实车的动态变化。建图的时候有一点必须提醒你建图时推车的速度和轨迹对地图质量影响非常大。推得太快会把地图拉花尤其在转角处原地打转也会产生大量漂移。最好的做法是以缓慢平稳的速度沿场地边界完整走一遍中途不要有大动作。地图质量不佳后面定位模块再努力也白搭。5.5 阶段四规划与控制的实车闭环第四阶段要打通的核心链路是感知数据到规划模块规划模块到控制模块控制模块到底盘执行并确保整条链路在实车上以稳定帧率闭环运行。这一阶段我一般会先让小车沿着一条简单的直线路径行驶不要一上来就挑战复杂路线。当小车能稳定走完直线后再增加转弯、绕障等场景。调试时紧盯控制输出话题观察控制指令是否平滑变化如果发现指令出现剧烈震荡就要怀疑是控制参数不合适而不是车辆出了机械故障。值得留意的是这个阶段往往是“看起来通了、但实际上还不稳”的阶段。因为直线行驶对感知和定位的要求很低真正暴露问题的是转弯和动态场景所以不要因为直线走得好就急着宣布成功。5.6 阶段五完整场景测试与安全机制布置最后一个阶段的目标是在一个相对结构化的测试场地上完成从起点自主行驶到终点的完整演示。测试场地可以是一片相对开阔的区域用锥桶或者纸箱围出车道边界设置几个简单的障碍物。在正式跑完整流程之前务必把安全机制提前布置好。第一重是遥控器急停看到异常立刻切回手动模式第二重是在代码层面设置速度上限防止控制指令突变成危险数值第三重是准备一个防火墙节点实时监控小车的速度和位置一旦超出预设边界就触发紧急刹车逻辑。这三重机制缺一不可。我在实际测试中真的遇到过这样的场景控制参数在某个区域突然失效小车径直朝障碍物冲过去当时要不是遥控器急停按得够快就真出事故了。安全机制不是一个走流程的东西它是在关键时候救你硬件和周围人安全的底线。6. 实车调试中常见故障与排查思路即使你严格按照上面五个阶段推进实车调试仍然会出现各种奇奇怪怪的问题。我把最常遇到的几类问题和对应的排查思路整理了出来建议你收藏备用。6.1 车辆跑偏与控制方向相反这是在固定好底层之后最容易遇到的问题之一。第一反应不应该去调Autoware里的控制参数而应该先检查执行器和控制指令的映射关系。用最小测试的方式发布一个固定转向指令观察实际车轮转向方向发布一个固定速度指令观察车辆实际前进方向跟预期不一致就调整底层映射或者标定参数。这里要注意方向错误不一定是代码问题还可能是硬件接线问题。我调试时甚至遇到过同一个转向指令在不同速度下方向表现不一致的情况最后排查到是电机驱动器在低转速下的死区导致响应不一致。这种问题定位起来很费时间但一旦想清楚“信号-执行-反馈”这条链路排查方向就很清晰了。6.2 定位漂移导致路径规划异常实车在行驶一段距离后位置估计会慢慢偏离真实位置这是由IMU积分的累计误差和点云匹配的局部收敛共同导致的。轻度漂移时规划模块还能勉强维持漂移大了规划出来的路径会明显不贴合场地车辆会走出奇怪的轨迹。排查思路是先区分“绝对定位误差”和“相对定位误差”。如果漂移发生在直道上多半是IMU标定不够或者里程计参数不准如果漂移发生在转弯后优先怀疑定位模块的初始位姿估计是否正确。有一个简单的调试技巧是在场地里放几个有明显特征的标记物比如锥桶车辆经过时要能看到定位模块输出的位姿和实际位置大致吻合。6.3 感知帧率不稳导致响应延迟实车上感知帧率不稳是一个非常烦人的问题症状是车辆对障碍物的反应总是慢半拍有时候甚至出现了障碍物都已经擦着车身过去了控制模块才输出刹车指令。这个问题的根源通常有两种情况。第一种是算法算力超负荷CPU满载导致节点处理不过来这种情况可以通过牺牲部分可视化输出来提升帧率或者裁剪感知模块的功能。第二种是话题消息队列堆积由于下游节点处理速度跟不上上游发布速度消息在队列里排队等待导致控制模块拿到的数据是“过期”的。这种情况下要合理调整QoS设置中的数据队列深度参数避免无限制堆积。6.4 频繁出现的偶发崩溃偶发崩溃是最难定位的问题因为它没有稳定复现路径。这类问题多半跟资源竞争有关比如两个模块同时访问串口、缓存区溢出、线程池并发竞争也可能是某条话题消息格式在特定场景下出现了异常值。我的建议是做防御性编程在关键节点中加入数据合法性校验对不合法数据做丢弃或者置安全值处理而不是让其传导到下游导致系统崩溃。同时要养成写日志的好习惯崩溃前最后几行日志往往能直接暴露问题所在。7. 一些实在话关于学习路径和常见误区写到这里我想再分享一些看着没那么“技术”但对学习效率影响很大的经验。这些体会大多来自我踩坑后的反思希望能帮你在学习路径上少走一些弯路。第一个误区是贪多求全。Autoware的功能模块极其丰富你不可能在短时间内吃透所有内容。我在最初学习时也犯过这样的错误想着把每一个模块的源码都读一遍结果花了大量时间在很冷门的功能上真正核心的链路反而没有精力吃透。后来我调整策略先把“感知-定位-规划-控制”这条主链路的每个环节跑通再往外扩展学习。第二个误区是仿真跑通了就觉得万事大吉。很多接触仿真的人会对系统能力产生过度自信直到实车测试时被现实教育了一顿才明白仿真和实车的差别远不是“代码迁移”能概括的。我建议如果条件允许尽早把小车底盘、激光雷达这些硬件入手从第一个星期就开始做最简单的底层控制实验让硬件的问题尽早暴露。第三个误区是不重视安全机制的设计和验证。很多开发者会把绝大部分精力放在功能实现上安全机制则是临门一脚才想到的事。实际上安全机制应该贯穿整个开发周期从底层控制打通的第一天起就把急停、边界检测这些能力同步开发并持续测试确保每一次算法改动都不会突破安全底线。如果带着自己的小车走过完整流程你会体验到从仿真到实车这条路的难以估量的价值哪怕过程中有很多崩溃的时刻但当小车在场地里顺利绕过第一个锥桶时一切辛苦都值了。希望这篇文章能帮你在ROS2小车开发这条路上少踩几个没必要的坑更从容地走到真正跑起来的那一天。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑