You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ROS自动驾驶项目如何单文件运行所有脚本 选.sh还是.launch

方案选择结论

自动驾驶ROS项目做单文件统一启动,优先选择ROS原生的.launch文件作为核心启动方案,.sh脚本仅适合作为前置补充,不建议单独用.sh串所有启动命令。

.launch文件的核心优势
  • 完全适配ROS运行逻辑:无需在启动脚本里反复写source工作空间、设置ROS环境变量的操作,自动处理节点间的命名空间隔离、话题重映射、参数服务关联,调整节点间的话题订阅关系时不需要修改各个功能脚本的源码,直接在launch文件里配置即可。
  • 自带进程托管能力:可以直接给节点配置respawn="true"属性,目标检测、车道检测这类核心感知节点如果异常崩溃,会被自动重启,适配自动驾驶场景的高可用要求;停止时按Ctrl+C就能一键关闭所有启动的节点,不需要手动挨个kill进程。
  • 配置管理效率更高:支持直接加载yaml格式的参数文件,也可以单独给节点传参,目标检测的模型路径、置信度阈值,车道检测的ROI区域参数都可以统一在launch关联的配置文件里管理,不需要在每个启动命令后拼接长串参数。
  • 支持灵活的启动逻辑:可以通过参数arg配置条件启动,比如调试时传入参数就只启动感知类节点,实车部署时再启动全量节点,也可以把节点按功能分组,统一给组内节点设置命名空间、环境变量。
.sh脚本的适用场景

不建议单独用.sh脚本逐个rosrun启动所有节点,它更适合做launch启动前的前置操作:

  • 硬件预检查:启动前检查摄像头、激光雷达、CAN卡等外设是否正常连接,提前给串口、USB设备加读写权限。
  • 非ROS程序启动:如果项目里包含不属于ROS节点体系的程序,比如独立的可视化前端、本地日志自动同步脚本、模型预热服务,可以在sh里先启动这类程序,最后再调用roslaunch启动所有ROS节点。
示例代码

统一启动的launch文件示例

在你的感知功能包下新建launch/autodrive_all.launch文件,内容如下:

<launch>
  <!-- 统一加载所有感知参数配置 -->
  <rosparam file="$(find 你的感知功能包包名)/config/perception_params.yaml" command="load" />

  <!-- 启动目标检测节点,异常退出自动重启 -->
  <node 
    pkg="你的感知功能包包名" 
    type="object_detect.py" 
    name="object_detection" 
    output="screen" 
    respawn="true"
  />

  <!-- 启动车道线检测节点 -->
  <node 
    pkg="你的感知功能包包名" 
    type="lane_detect.py" 
    name="lane_detection" 
    output="screen" 
    respawn="true"
  />

  <!-- 其余功能节点按照相同格式添加即可 -->
</launch>

写完后直接执行roslaunch 你的感知功能包包名 autodrive_all.launch就能一键启动所有配置的节点。

配合前置检查的sh脚本示例

如果需要加硬件预检查逻辑,可以新建start_all.sh:

#!/bin/bash
# 给CAN卡加权限
sudo chmod 777 /dev/ttyUSB0
# 检查摄像头是否接入
if [ ! -e "/dev/video0" ]; then
  echo "错误:车载摄像头未连接,启动终止"
  exit 1
fi
# 启动ROS全节点
roslaunch 你的感知功能包包名 autodrive_all.launch

给脚本加执行权限:chmod +x start_all.sh,之后直接运行这个脚本就能完成前置检查+全节点启动。

内容的提问来源于stack exchange,提问作者gurselturkeri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 05:30:53