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”位置。
参考:
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号