【ROS2】PyCharm 启动 Gazebo 仿真报错?从配置 Shell 到修复路径的全流程复盘
📝 前言
在使用 PyCharm 进行 ROS2 开发时,为了方便调试,我们通常会配置 Run/Debug Configurations 来一键启动仿真环境。但最近我在配置 ros_gz_sim_demos 包时遇到了一个典型的"连环坑":先是因为没加 Shell 解释器导致环境无法加载,修复后又因为 Launch 文件名错误导致找不到文件。
今天就来复盘一下这个问题的完整排查过程,分享如何在 PyCharm 中优雅且正确地配置 ROS2 启动脚本。
🚨 报错现场与常见误区
误区一:直接写命令,忘了"壳"
很多同学在 PyCharm 的 Script text 里直接写:
bash
source /home/user/ros2_ws/install/setup.bash && ros2 launch ...
结果: 毫无反应,或者提示 source: command not found。
原因: PyCharm 默认可能使用 /bin/sh 或者直接执行文本,它不懂什么是 source。你需要显式地调用 Bash。
误区二:Launch 文件名张冠李戴
修复了 Shell 问题后,终端终于开始跑代码了,但又报了红字:
text
file 'vehicle.launch.py' was not found in the share directory of package 'ros_gz_sim_demos' which is at '/opt/ros/jazzy/share/ros_gz_sim_demos'
原因: 你用的文件名(如 vehicle.launch.py)在当前版本的包里根本不存在。
🛠️ 全流程解决方案
第一步:必须添加 Shell 解释器(最关键!)
在 PyCharm 的 Run/Debug Configurations -> Script text 中,千万不要直接写 ROS 命令。必须用 /bin/bash -c "..." 把命令包起来。
✅ 正确写法模板:
bash
/bin/bash -c "source <你的工作空间路径>/install/setup.bash && <你的ROS2启动命令>"
💡 为什么要这样做?
- 强制环境加载:
&&保证了只有环境加载成功后,才会执行后面的启动命令。 - 隔离性: 每次点击运行,都会开启一个新的 Bash 进程,避免旧的环境变量干扰。
第二步:确认正确的 Launch 文件名
如果报错提示 file not found,说明文件名错了。不要猜,直接用命令查!
在终端输入以下命令,列出该包下所有可用的 launch 文件:
bash
ls /opt/ros/jazzy/share/ros_gz_sim_demos/launch/
注:请根据你的 ROS2 版本(humble/jazzy等)替换路径中的版本号。
你会发现,很多时候并没有 vehicle.launch.py,而是叫 diff_drive.launch.py 或者其他名字。
第三步:完善环境变量(防止闪退)
Gazebo 仿真对库路径很敏感。在 PyCharm 配置页面的 Environment variables 栏,建议填入以下标准配置(点击右侧文件夹图标添加):
text
PYTHONUNBUFFERED=1;
LD_LIBRARY_PATH=/home/liurui/ros2_ws/install/my_robot_controller/lib:/opt/ros/jazzy/lib:$LD_LIBRARY_PATH;
PYTHONPATH=/opt/ros/jazzy/lib/python3.12/site-packages:/home/liurui/ros2_ws/install/my_robot_controller/lib/python3.12/site-packages
(注意:请将路径中的 liurui 和 my_robot_controller 替换为你自己的用户名和功能包名)
🚀 最终成功配置示例
经过上述修正,你的 PyCharm 配置应该是这样的:
-
Execute: 选择
Script text -
Script text:
bash/bin/bash -c "source /home/liurui/ros2_ws/install/setup.bash && ros2 launch ros_gz_sim_demos diff_drive.launch.py"(这里假设我们要跑的是差速小车仿真)
-
Working directory:
/home/liurui/ros2_ws -
Environment variables: (已填入上述 PATH 配置)
💡 总结
在 PyCharm 里跑 ROS2,记住这句口诀:"启动必带 Bash 头,文件名错查目录,环境变量不能丢"。按照这个流程走,基本能避开 90% 的启动报错!