警告

您正在阅读的 ROS 2 文档版本已达到 EOL(生命周期结束),不再受官方支持。如果您想了解最新信息,请访问 Jazzy.

使用 VSCode 和 Docker 设置 ROS 2 [社区贡献]

安装 VS Code 和 Docker

使用 Visual Studio 代码和 Docker 容器,你就可以运行自己喜欢的 ROS 2 发行版,而无需更改操作系统或使用虚拟机。通过本教程,你可以建立一个 docker 容器,用于未来的 ROS 2 项目。

安装 Docker

要安装 docker 并设置正确的用户权限,请使用以下命令。

sudo apt install docker.io git python3-pip
pip3 install vcstool
echo export PATH=$HOME/.local/bin:$PATH >> ~/.bashrc
source ~/.bashrc
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker

现在,您可以运行以下命令检查安装是否成功:

docker run hello-world

如果无法运行 hello-world,可能需要先启动 Docker 守护进程:

sudo systemctl start docker

安装 VS 代码

要安装 VS Code,请使用以下命令:

sudo apt update
sudo apt install software-properties-common apt-transport-https wget -y
wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main";
sudo apt install code

您可以通过键入 代码 在终端中。

安装远程开发扩展

在 VS Code 的扩展中搜索(CTRL+SHIFT+X)"远程开发 "扩展并安装。

在 Docker 和 VS 代码中配置工作区

添加您的 ROS 2 工作区

添加工作区,以便在容器中构建和打开它们,例如

cd ~/
mkdir ws_[项目]
cd ws_[项目]
mkdir src

现在,在工作区根目录下创建 .devcontainer 文件夹,并在该 .devcontainer 文件夹中添加 devcontainer.json 和 Dockerfile。此外,你还需要创建一个缓存文件夹,用于缓存不同 ROS 2 发行版的构建和安装文件夹。工作区结构应如下所示:

ws_[project] ├── cache | ├── [ROS2_DISTRO] | | ├── build | | ├─ install | | └── log | └── ...| ├── src ├─ .devcontainer │ ├─ devcontainer.json │ └── Dockerfile ├─ package1 └── package2

文件->打开 文件夹...Ctrl+K Ctrl+O打开 来源 文件夹。

为你的环境编辑 devcontainer.json

为了让 Dev Container 正常运行,我们必须使用正确的用户构建它。因此,在 .devcontainer/devcontainer.json:

{
    "名称";: ROS 2 开发容器";,
    "特权";: ,
    "remoteUser";: "用户名";,
    "构建";: {
        "dockerfile";: "Dockerfile";,
        "args";: {
            "用户名";: "用户名";
        }
    },
    "workspaceFolder";: "/home/ws";,
    "workspaceMount";: "source=${localWorkspaceFolder},target=/home/ws/src,type=bind";,
    "自定义";: {
        "vscode";: {
            "扩展名";:[
                "ms-vscode.cpptools";,
                "ms-vscode.cpptools-themes";,
                "twxs.cmake";,
                "donjayamanne.python-extension-pack";,
                "eamodio.gitlens";,
                "ms-iot.vscode-ros";
            ]
        }
    },
    "containerEnv";: {
        "显示";: "unix:0";,
        "ROS_LOCALHOST_ONLY";: 1";,
        "ROS_DOMAIN_ID";: "42";
    },
    "runArgs";: [
        "--net=host";,
        "-e";, "DISPLAY=${env:DISPLAY}";
    ],
    "坐骑";: [
       "source=/tmp/.X11-unix,target=/tmp/.X11-unix,type=绑定,一致性=缓存";,
        "source=/dev/dri,target=/dev/dri,type=bind,consistent=cached";,
        "source=${localWorkspaceFolder}/.../cache/ROS_DISTRO/build,target=/home/ws/build,type=bind";,
        "source=${localWorkspaceFolder}/.../cache/ROS_DISTRO/install,target=/home/ws/install,type=bind";,
        "source=${localWorkspaceFolder}/.../cache/ROS_DISTRO/log,target=/home/ws/log,type=bind";
    ],
    "postCreateCommand";: "sudo rosdep update && sudo rosdep install --from-paths src --ignore-src -y && sudo chown -R USERNAME /home/ws/";
}

使用 Ctrl+F 打开搜索和替换菜单。搜索 用户名 并用您的 利纳克斯 用户名.如果您不知道自己的用户名,可以通过运行 回响 用户名 在终端中。同时更换 罗斯_迪斯特罗例如,"humble "或 "foxy"。

编辑 Dockerfile

打开 Dockerfile 并添加以下内容:

 ros:ROS_DISTRO ARG 用户名=用户名 ARG 用户名=1000
ARG USER_GID=$USER_UID

# 创建用户
运行 分组添加 --gid $USER_GID 用户名 \
    &&; useradd --用户名 $USER_UID --gid $USER_GID -m 用户名 \
    #
    # [可选] 添加 sudo 支持。如果不需要在连接后安装软件,请省略。
    &&; apt-get 更新 \
    &&; apt-get 安装 -y 苏都 \
    &&; 回响 用户名 所有=\(根基\) NOPASSWD:ALL >; /etc/sudoers.d/用户名 \
    &&; chmod 0440 /etc/sudoers.d/用户名
运行 apt-get 更新 &&; apt-get 升级 -y运行 apt-get 安装 -y python3-pip ENV 外壳 /bin/bash

# ********************************************************
# 你想做的任何其他事情,比如清理,都在这里进行 #
# ********************************************************

# [可选] 设置默认用户。如果要将默认用户保留为 root,请省略。
用户 用户名
CMD ["/bin/bash";]

也可在此搜索 用户名 并用您的 利纳克斯 用户名罗斯_迪斯特罗 您希望使用的 ROS 2 发行版,并已添加到缓存中。

打开并构建开发容器

使用 查看->命令 调色板...Ctrl+Shift+P 打开命令调板。搜索命令 开发 集装箱: 建设 重新开放 集装箱 并执行它。这将为你构建开发用的 docker 容器。这需要一些时间,你可以坐下来或去喝杯咖啡。

测试容器

要测试一切工作是否正常,请在容器中打开终端,使用 查看->终端Ctrl+Shift+` 终端 在 VS 代码中。在终端中执行以下操作:

sudo apt install ros-$ROS_DISTRO-rviz2 -y
source /opt/ros/$ROS_DISTRO/setup.bash
rviz2

备注

RVIZ 的显示可能有问题。如果没有弹出窗口,请检查 回响 $DISPLAY - 如果输出为 1,则可以使用 回响 出口 DISPLAY=unix:1"; >>; /etc/bash.bashrc 然后再次测试。您也可以更改 devcontainer.json 中的 DISPLAY 值并重建它。