Ros2 在 Docker 中找不到可执行文件 运行

Ros2 not finding executables running in Docker

我正在尝试在我的 docker 容器中 运行 一个带有 ros2 的 python 脚本,并且直到 运行ning 脚本都可以工作,我什至可以运行 Gazebo 通过启动文件,它可以工作。

ROS 给我的错误如下:

root@86d8bf3a6eb9:/# ros2 run field_robot robot_spawner.py
Traceback (most recent call last):
  File "/opt/ros/foxy/bin/ros2", line 11, in <module>
    load_entry_point('ros2cli==0.9.11', 'console_scripts', 'ros2')()
  File "/opt/ros/foxy/lib/python3.8/site-packages/ros2cli/cli.py", line 67, in main
    rc = extension.main(parser=parser, args=args)
  File "/opt/ros/foxy/lib/python3.8/site-packages/ros2run/command/run.py", line 70, in main
    return run_executable(path=path, argv=args.argv, prefix=prefix)
  File "/opt/ros/foxy/lib/python3.8/site-packages/ros2run/api/__init__.py", line 61, in run_executable
    process = subprocess.Popen(cmd)
  File "/usr/lib/python3.8/subprocess.py", line 858, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/lib/python3.8/subprocess.py", line 1704, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: '/field_robot/dev_ws/install/field_robot/lib/field_robot/robot_spawner.py'

是的,我检查过,文件确实存在:

root@86d8bf3a6eb9:/# ls -l /field_robot/dev_ws/install/field_robot/lib/field_robot/robot_spawner.py
-rwxr-xr-x 1 root root 1964 Apr 12 14:37 /field_robot/dev_ws/install/field_robot/lib/field_robot/robot_spawner.py

另外,我 运行 在 Windows 上安装主机系统,所以可能是 windows 的东西搞砸了,所以如果你有什么想法是那里的问题,也可能是它

根据评论,您似乎 运行 由于文件类型而陷入此问题。如果它们首先在 Windows 中被编辑,则它们很可能是 DOS 文件而不是 UNIX 文件。我知道这会导致 ROS1 出现问题,所以我认为 ROS2 也是如此。要解决此问题,您有几个选择。

通常最简单的方法是使用 dos2unix。这不是默认安装的,但你可以通过 apt install dos2unix 获取它,假设你的图像是 Ubuntu。这些文件可以通过容器内的 运行 dos2unix <filename> 进行转换。