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

如何在HPC上使用多终端运行ROS仿真并提交对应作业

HPC运行多进程ROS仿真作业脚本编写指南

核心思路

本地多终端运行ROS本质是启动多个相互依赖的进程:roscore作为主服务优先启动,后续功能节点在roscore可用后依次启动。HPC作业脚本不需要启动可视化终端,直接按依赖顺序启动后台进程,仿真结束后统一回收进程即可。

前置准备

  • 确认HPC计算节点已安装对应版本的ROS,优先推荐将ROS环境和仿真依赖打包为Singularity/Apptainer镜像,避免节点环境依赖冲突
  • 提前在本地测试所有ROS命令的启动顺序、最小等待间隔,确认全链路功能正常
  • 若仿真有可视化需求,提前修改配置将rviz等工具的输出改为离线保存帧图/视频,不要在作业中启动交互类可视化工具

作业脚本示例(适配Slurm调度器,绝大多数HPC默认使用Slurm)

以下是可直接提交的作业脚本模板,文件命名为ros_simulation.job:

#!/bin/bash
# Slurm资源配置部分,根据你的仿真需求调整
#SBATCH --job-name=ros_simu
#SBATCH --output=ros_simu_%j.out
#SBATCH --error=ros_simu_%j.err
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=4
#SBATCH --time=02:00:00
#SBATCH --mem=8G

# 加载ROS环境,若使用容器镜像则替换为Singularity执行前缀
source /opt/ros/noetic/setup.bash
source 你的ROS工作空间绝对路径/devel/setup.bash

# 第一步:启动roscore,后台运行并记录进程ID
roscore &
ROSCORE_PID=$!
# 可靠等待roscore启动完成,替代固定时长sleep
until rostopic list > /dev/null 2>&1; do sleep 1; done

# 第二步:按依赖顺序启动其他ROS节点/launch文件,全部后台运行
roslaunch 你的功能包名 simulation.launch &
SIMU_PID=$!
sleep 3

roslaunch 你的功能包名 controller.launch &
CONTROLLER_PID=$!
sleep 3

rosrun 你的功能包名 data_recorder.py &
RECORDER_PID=$!

# 等待仿真结束:可替换为等待指定进程退出,例如wait $SIMU_PID
sleep 3600

# 仿真结束后按顺序终止所有相关进程
kill $RECORDER_PID
kill $CONTROLLER_PID
kill $SIMU_PID
kill $ROSCORE_PID

# 等待所有进程完全退出
wait

脚本编写完成后执行sbatch ros_simulation.job即可提交到HPC队列。

注意事项

  • 所有需要持续运行的ROS命令后必须加&放到后台,否则脚本会卡在当前命令无法执行后续启动逻辑
  • 如果使用Singularity/Apptainer镜像运行ROS,所有ROS命令前统一添加执行前缀即可,例如singularity exec ros_noetic.sif roscore &,整体逻辑和上述模板完全一致
  • 若你的仿真有明确的结束触发条件(例如指定节点运行完成自动退出),可以把固定时长sleep的逻辑替换为wait 对应进程ID,仿真结束后会自动执行后续的进程回收逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:36:10