< >
Home » ROS2与Docker入门教程 » ROS2与docker入门教程-搭建基于vscode和docker的ros2开发环境

ROS2与docker入门教程-搭建基于vscode和docker的ros2开发环境

说明

  • 本文介绍如何搭建基于vscode和docker的ros2开发环境

初始环境搭建:

  • 安装部署工具rcm
curl -k https://www.ncnynl.com/rcm.sh | bash - 
  • 安装vscode
rcm ros2 install_ros2_now
  • 安装vscode
 rcm common install_vscode
  • 安装docker
rcm common install_docker
  • 安装docker compose
rcm common install_docker_compose

完整的参考程序

目录和文件结构

  • 1.对于以下文件,我假设您具有以下文件夹结构。
--[ base_folder
    |--[ .devcontainer
        |-- devcontainer.json
        |-- Dockerfile
    |--[ .vscode
    |--[ src
        |-- <ros packages>
  • 这种结构对于 ROS2/vscode 开发来说非常典型。

  • 上层目录就是你在VSCode中打开的文件夹。

  • 它包含特殊文件夹 .devcontainer 和 .vscode

  • VSCode 使用它们来加载您的工作区和首选项。

  • ROS2 代码位于 src 目录内,在文件夹中组织为包。

  • 2.创建一个 docker 文件,base_folder/.devcontainer/Dockerfile

FROM althack/ros2:foxy-dev
  • 3.设置开发容器
  • 您需要 VSCode 的 .devcontainer.json 文件来了解如何将 docker 容器挂载为工作区。
  • 目录路径:base_folder/.devcontainer/devcontainer.json
  • 示例如下:
// See https://aka.ms/vscode-remote/devcontainer.json for format details.
{
    "context": "../",
    "dockerFile": "Dockerfile",
    // This will launch the container as a non-root user
    "remoteUser" : "ros",
    "runArgs": [
        // This will allow you to use a ptrace-based debugger like C++, Go, and Rust.
        "--cap-add=SYS_PTRACE",
        "--security-opt", "seccomp=unconfined",
    ],
    // These are the extensions I like to use with ROS2
    "extensions": [
        "ms-azuretools.vscode-docker",
        "ms-python.python",
        "ms-vscode.cpptools",
        "twxs.cmake",
        "ms-vscode.cmake-tools",
        "ms-iot.vscode-ros",
        "smilerobotics.urdf",
        "yzhang.markdown-all-in-one"
    ]
}
  • context:上下文设置是构建 docker 文件的位置。 您可以指定相对于该文件的路径。

  • dockerFile:这是 docker 文件的名称。 它还被指定为相对于该文件的路径。 为了简单起见,您只需将 Dockerfile 放在同一文件夹中即可。

  • remoteUser:用户名应与 docker 容器内的非 root 用户匹配。 VSCode 将更新该用户的用户 ID/组 ID 以匹配您的用户 ID/组 ID,以便在容器中创建的文件将具有您的用户 ID/组

  • runArgs:这些是您要传递到 docker run 命令的参数。 您可以放置任何可与 docker run 一起使用的有效参数

  • extensions:扩展是您希望在容器中使用的 VSCode 插件。 通过将它们托管在容器中,您可以确保为每个人安装和配置特定的容器。

  • 4.设置 CPP 属性

  • 由于我们添加了 cpptools 插件,因此您需要配置包含路径,以便 VSCode 可以正确执行 IntelliSense。

  • 该文件位于工作区的 .vscode 目录中c_cpp_properties.json

{
  "configurations": [
    {
      "name": "Linux",
      "includePath": ["${workspaceFolder}/**", "/opt/ros/foxy/include"],
      "defines": [],
      "compilerPath": "/usr/bin/gcc",
      "cStandard": "c11",
      "cppStandard": "c++17",
      "intelliSenseMode": "clang-x64"
    }
  ],
  "version": 4
}
  • 5.设置任务
  • 接下来,设置您的任务,以便您可以构建和测试代码。.vscode/tasks.json
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "build",
      "type": "shell",
      "command": "colcon build --cmake-args '-DCMAKE_BUILD_TYPE=Debug'"
    },
    {
      "label": "test",
      "type": "shell",
      "command": "colcon test && colcon test-result"
    }
  ]
}
  • 6.设置调试器
  • 一旦您可以构建代码,您可能想要运行和调试它。 您可以通过向 .vscode/launch.json 文件添加不同的配置来完成此操作
  • c++ 和 python 使用不同的调试器
  • 6.1 Python调试器
  • 由于 Python 是一种脚本语言,因此设置调试要容易一些。
  • 将以下配置添加到 .vscode/launch.json
{
  "name": "Python: Current File",
  "type": "python",
  "request": "launch",
  "program": "${file}",
  "console": "integratedTerminal"
}
  • 6.2 C++调试器
  • C++ 需要为 gdb 正确设置 docker 容器。 开发映像和 devcontainer.json 文件已为您设置好这些内容。
  • 将以下配置添加到 .vscode/launch.json
{
  "name": "(gdb) Launch",
  "type": "cppdbg",
  "request": "launch",
  "program": "${workspaceFolder}/install/${input:package}/lib/${input:package}/${input:program}",
  "args": [],
  "stopAtEntry": true,
  "cwd": "${workspaceFolder}",
  "environment": [],
  "externalConsole": false,
  "MIMode": "gdb",
  "setupCommands": [
    {
      "description": "Enable pretty-printing for gdb",
      "text": "-enable-pretty-printing",
      "ignoreFailures": true
    }
  ],
  "inputs": [
    {
      "id": "package",
      "type": "promptString",
      "description": "Package name"
    },
    {
      "id": "program",
      "type": "promptString",
      "description": "Program name"
    }
  ]
}
  • 您需要输入正在调试的程序的完整路径的“program”位置。

参考:

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ros2与docker入门教程