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

ROS Melodic下launch启动双节点时cv2.imwrite不保存图片问题

问题原因

roslaunch 启动节点时,默认将节点的工作目录设置为 ROS 全局默认路径 ~/.ros,而非你执行 roslaunch 命令时的终端当前目录。你单独运行 Python 脚本时是在自己的工作目录执行,所以图片直接存到当前目录下;用 launch 文件启动时,你代码里的相对路径 photo1.jpg 实际对应的是 ~/.ros/photo1.jpg,到该目录下就能找到已经保存的图片。

解决方案

有两种常用修复方案,按需选择即可:

方案1:修改 launch 文件(改动最小,推荐)

在拍照节点的 <node> 标签中添加 cwd 参数,手动指定节点的工作目录:

  • 如果希望图片保存在你执行 roslaunch 命令的当前终端目录,设置 cwd="$(env PWD)"
  • 如果希望图片固定保存在 turtlebot_teleop 功能包目录下,设置 cwd="$(find turtlebot_teleop)"

修改后的完整 launch 文件示例:

<launch>
 <node pkg="turtlebot_teleop" type="goforward.py" name="GoForward" output="screen" />
 <node pkg="turtlebot_teleop" type="take_photo_mod.py" name="take_photo" output="screen" cwd="$(env PWD)"/>
</launch>

方案2:修改 Python 代码使用绝对路径保存

直接在代码中指定固定的保存目录,彻底避免相对路径的歧义,示例修改如下:

# 在 take_photo_mod.py 的主循环前添加路径定义
import os
# 示例:固定保存到用户主目录下的 turtlebot_photos 文件夹
save_path = os.path.expanduser("~/turtlebot_photos/")
os.makedirs(save_path, exist_ok=True)

# 原代码中获取文件名的部分修改为:
img_title = os.path.join(save_path, rospy.get_param('~image_title', 'photo1.jpg'))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:39:02