【问题标题】:What is the best practice to start "roscore" followed by "rosrun ...." on Docker Container startup?在 Docker 容器启动时启动“roscore”后跟“rosrun ....”的最佳做法是什么?
【发布时间】:2021-12-10 10:45:52
【问题描述】:

我通过 Dockerfile 创建了一个 Docker 映像,在该映像上正确安装了 Ubuntu 18.04 和 ROS Melodic。请注意,我没有使用 official ROS-Docker image 来创建我的 Docker 映像。

从这个 Docker 镜像派生的 Docker 容器工作正常。 但是,每次我想使用容器时,我都需要执行以下命令:

  1. 终端窗口:

docker run -d -it --name container_name docker_image; docker exec -it container_name bash

然后,在我进入 Docker 容器之后: roscore

  1. 终端窗口:

docker exec -it container_name bash

然后,在我进入 Docker 容器之后: rosrun ROS_PackageName PythonScript.py

请注意,通过上述 Docker 命令,两个终端都在相同的 Docker 容器中运行。

我发现启动 PythonScript.py 的方法效率低下。 因此,我想请教在 Docker Container 启动时启动“roscore”后跟“rosrun ....”的最佳实践。

在一些 Dockerfile 中,我在文件末尾看到命令 ENTRYPOINT 以及 CMD。 但是,我不知道这些命令是否可以帮助我让我的 Docker 容器在容器启动时执行“roscore”,然后执行“rosrun”。

【问题讨论】:

    标签: docker ubuntu dockerfile ubuntu-18.04 ros


    【解决方案1】:

    这实际上部分是 roslaunch 的用途。它使启动多个节点和更好的参数输入变得更容易,但它会启动一个roscore 是一个尚未运行的。在您的示例中,它看起来像这样:

    <launch>
      <node pkg="ROS_PackageName" type="PythonScript.py" name="my_node_name" output="screen" >
      </node>
    </launch>
    

    通过 CLI 运行 roslaunch 时,您可以像使用 rosrun 一样使用它。例如,如果您在列出的相同示例包中创建启动文件并将文件命名为my_launch.launch,则命令将如下所示:roslaunch ROS_PackageName my_launch.launch。只需用这个替换上面的rosrun 命令。

    【讨论】:

    • 好主意!在 Docker 容器启动后,我可以使用 Dockerfile 中的哪个命令执行 roslaunch-script?
    • @Coding4Fun 我已经编辑了我的答案以提供有关如何使用roslaunch 而不是rosrun 的信息
    猜你喜欢
    • 2014-09-24
    • 2020-10-05
    • 2018-10-04
    • 2018-02-15
    • 2018-12-21
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多