VScode结合docker的ROS开发环境配置

目录

  • 软件安装
    • VSCODE
    • docker
  • docker image构建与运行
  • VSCODE配置
    • ROS插件配置
    • clangd配置

软件安装

VSCODE

存在三种安装方式,如下:

  • 在vscode官网下载需要的版本直接进行安装。
  • ubuntu下软件中心搜索安装(安装最简便,推荐):
    VScode结合docker的ROS开发环境配置_第1张图片
  • 使用apt安装:
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 update
sudo apt install code

docker

参考Install Docker Engine,其他平台的左侧自行选择安装教程,不赘述了。
安装完需要将当前用户加入docker组,否则使用docker指令都需要root权限,不同平台命令有出入,这里以ubuntu18.04为例:

sudo usermod -aG docker 

docker image构建与运行

1、编写dockerfile,以构建ros2 foxy版本image的dockerfile.txt为例:

# 基于某个image构建,例如ubuntu的某个版本或者某个ros官方镜像
FROM ros:foxy-ros-base-focal

# 安装自己需要的环境
RUN apt-get update && apt-get install -y --no-install-recommends \
    ros-foxy-desktop \
    && rm -rf /var/lib/apt/lists/*

此外,如果需要在docker中使用nvidia显卡,则需要:

  • x86平台:额外安装nvidia container toolchain,并在dockerfile中加上如下环境变量配置:
# 需要使用nvidia显卡时需要配置环境变量
ENV NVIDIA_VISIBLE_DEVICES \
    ${NVIDIA_VISIBLE_DEVICES:-all}
ENV NVIDIA_DRIVER_CAPABILITIES \
    ${NVIDIA_DRIVER_CAPABILITIES:+$NVIDIA_DRIVER_CAPABILITIES,}graphics

2、build镜像,在dockerfile.txt同目录下运行:

docker build -t : .
or:
docker build -f  -t : .

3、运行container:

docker run -it --rm \
  --user=$(id -u $USER):$(id -g $USER) \
  --workdir="/home/$USER" \
  --volume="/home/$USER:/home/$USER" \
  --volume="/etc/group:/etc/group:ro" \
  --volume="/etc/passwd:/etc/passwd:ro" \
  --volume="/etc/shadow:/etc/shadow:ro" \
  --volume="/etc/sudoers.d:/etc/sudoers.d:ro" \
  --net=host \
  --gpus all \
  -e DISPLAY \
  -e QT_X11_NO_MITSHM=1 \
  -e XAUTHORITY=/tmp/.docker.xauth \
  -v /tmp/.docker.xauth:/tmp/.docker.xauth \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  :

以上前7项为挂载本机用户为container中默认用户运行,否则将以root用户进入container,不推荐使用root用户进行开发操作; --net=host为将本机网络映射到container中;接着6项为使用显卡和显示相关;更多使用方法参考官方文档。
使用VSCODE一般需要一个固定的长期开发环境,因此需要container在运行完成后不会自己删除,启动时要去掉–rm,运行完成后,就已经有了一个ros2环境的container。
4、(optional)自动加载ROS环境变量
使用ROS前需要加载ROS环境变量,使用docker时可以用如下两种方法实现自动加载:
1、将source source /opt/ros/foxy/setup.bash写入当前系统用户文件夹下.bashrc的末尾,也是ROS安装完成后的官方推荐操作,但只有使用上文命令脚本运行container才会生效,因此该脚本会加载当前系统用户作为container的默认用户,也会同时执行.bashrc中的命令。
2、构建docker image时增加entrypoint.sh,在该脚本中执行source source /opt/ros/foxy/setup.bash,教程很多,这里不赘述。

VSCODE配置

打开VSCODE,以C++开发为例,在扩展插件中安装:

  • ROS
  • C++ Extension Pack

安装完成后重启或重新加载一下VSCODE,左边侧栏已经可以看到此时已经启动的container:
VScode结合docker的ROS开发环境配置_第2张图片
右键点击container->attach to container,就可以轻松完成VSCODE与container的链接,此时IDE已经位于ros2 foxy开发环境中,正常打开ROS工作空间即可进行开发,python同理。

ROS插件配置

使用ROS插件需要工作空间中存在src文件夹,并且代码都在该文件夹下(非常重要,ROS2实际上已经不要求代码放在src文件夹中了),此外,一般情况下,ROS插件会自动检测ROS版本,并在打开ROS工作空间时自动在.vscode文件夹中进行配置,但使用docker时偶尔会出现问题,这时候需要手动在ROS插件设置中指定ROS版本,右键ROS插件->Extension Settings,如下:
VScode结合docker的ROS开发环境配置_第3张图片
重新打开工作空间或者手动运行ROS插件的部分命令即可,具体参照ROS插件自带的说明。

clangd配置

vscode自带的intellisense用于代码补全时问题颇多,尤其在docker环境下,因此建议换成clangd进行开发,使用clangd需要额外再进行一些配置,步骤如下:
1、在插件中搜索clangd并安装,安装完成右下角会自动提示安装clangd server,点yes即可。
2、在ROS环境中将整个工程编译一次,需要增加"-DCMAKE_EXPORT_COMPILE_COMMANDS=1"指令,以ros2 foxy为例:

colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=ON

需要保证编译成功完成,否则部分文件的编译命令无法生成,导致clangd找不到这个文件的索引,非ROS环境类似。
3、重启VSCODE或者clangd server。

你可能感兴趣的:(ROS相关,docker,vscode,ubuntu)