在Docker容器中的ROS 2环境中使用RealSense D435

首先

在 Docker 环境中构建 Ubuntu 22.04 和 ROS2 环境,并解释在 Docker 容器内使用 RealSense 的步骤。
另外,考虑到 RealSense 将用于嵌入式机器人,我们还需针对以下条件进行配置。

    • RealSenseが接続された状態でPCが起動する。

 

    途中でUSB接続が切れて再接続されても動作する。

已经有以下的存储库公开,可在Docker的ROS2环境中使用RealSense,如果想要轻松运行,只需使用以下存储库中的Dockerfile。

 

确认环境是否协调

主机电脑

項目値CPUIntel® Core™ i7-12700HGPUGeForce RTX 3050 Ti MobileUbuntu22.04Kernel22.04docker24.0.6docker composev2.21.06.2.0-36-generic

Docker容器

項目値Ubuntu22.04ROS2Humble or Iron

使用过的RealSense:
RealSense D435

 

设定udev规则

在Docker容器运行时重新连接RealSense会导致/dev/下的连接目标发生变化,导致无法正常工作。因此,需要在主机PC上事先设置udev规则。

克隆librealsense源代码,并应用udev规则。
在执行时,请将RealSense设备断开连接。

git clone https://github.com/IntelRealSense/librealsense && cd librealsense
sudo ./scripts/setup_udev_rules.sh

当成功时,会出现此类消息。

Setting-up permissions for RealSense devices

Remove all RealSense cameras attached. Hit any key when ready

udev-rules successfully installed

如果要删除udev规则

sudo ./scripts/setup_udev_rules.sh --uninstall

确认连接目标

在udev配置完成后,重新启动计算机并多次插拔USB,以确保/dev/下的连接目标没有改变。

~$ v4l2-ctl --list-devices
Intel(R) RealSense(TM) Depth Ca (usb-0000:00:14.0-2):
	/dev/video4
	/dev/video5
	/dev/video6
	/dev/video7
	/dev/video8
	/dev/video9
	/dev/media2
	/dev/media3

 HD Webcam: HD Webcam (usb-0000:00:14.0-6):
	/dev/video0
	/dev/video1
	/dev/video2
	/dev/video3
	/dev/media0
	/dev/media1

在我的环境中,笔记本电脑内置的网络摄像头已经被挂载到/dev/video0 ~ 3, /dev/media0,1上了。
当连接RealSense时,/video会从下一个编号开始增加6个,/media会从下一个编号开始增加2个。

创建Dockerfile和docker-compose.yml文件

创建Dockerfile和创建映像。

基础Docker镜像指的是在以下的Docker Hub链接中公开的图像中,使用最小的ROS安装的base镜像。

 

产生的Dockerfile允许在参数中选择ROS 2 Humble和Iron版本。

# 引数でHumble とIronを選べるようにする
ARG ROS_DISTRO=humble
FROM althack/ros2:${ROS_DISTRO}-base

# 言語設定を聞かれないようにする
ARG DEBIAN_FRONTEND=noninteractive

# 必要なパッケージをインストール
RUN apt-get update \
 && apt-get install -y \
    build-essential \
    cmake \
    git-all \
 && rm -rf /var/lib/apt/lists/*

# librealsenseとrealsense-rosをインストール
RUN apt-get update \
 && apt-get install -y \
    ros-${ROS_DISTRO}-librealsense2* \
    ros-${ROS_DISTRO}-realsense2-camera \
 && rm -rf /var/lib/apt/lists/*

# デバッグ用のツールをインストール
RUN apt-get update \
 && apt-get install -y \
    ros-${ROS_DISTRO}-rviz2 \
    ros-${ROS_DISTRO}-rqt-image-view \
 && rm -rf /var/lib/apt/lists/*

RUN echo 'source /opt/ros/${ROS_DISTRO}/setup.bash' >> ~/.bashrc

CMD ["bash"]

构建Docker镜像

在Humble的情况下

docker build --build-arg ROS_DISTRO=humble -t realsense-ros2-humble .

针对铁的情况下

docker build --build-arg ROS_DISTRO=iron -t realsense-ros2-iron .

确认是否已经形成了想像。

$ docker images
REPOSITORY                          TAG                IMAGE ID       CREATED          SIZE
realsense-ros2-iron                 latest             3beb6f942fee   27 seconds ago   2.26GB
realsense-ros2-humble               latest             eea22a6ed96f   4 minutes ago    2.23GB

创建docker-compose.yml文件

用于从创建的Docker镜像启动容器的Docker Compose yml文件。
启动后将执行realsense2_camera的launch文件。
对于Iron,请将”humble”更改为”iron”。

version: '3.8'

services:
  realsense_ros_docker:
    image: realsense-ros2-humble:latest
    environment:
      - DISPLAY=${DISPLAY}
      - QT_X11_NO_MITSHM=1
    volumes:
      - /tmp/.X11-unix:/tmp/.X11-unix
    command: /bin/bash -c "source /opt/ros/humble/setup.bash && ros2 launch realsense2_camera rs_launch.py"
    #privileged: true
    devices:
      - /dev/video0:/dev/video0
      - /dev/video1:/dev/video1
      - /dev/video2:/dev/video2
      - /dev/video3:/dev/video3
      - /dev/video4:/dev/video4
      - /dev/video5:/dev/video5
      - /dev/video6:/dev/video6
      - /dev/video7:/dev/video7
      - /dev/video8:/dev/video8
      - /dev/video9:/dev/video9
      - /dev/media2:/dev/media0
      - /dev/media3:/dev/media1
      - /dev/media2:/dev/media2
      - /dev/media3:/dev/media3
    device_cgroup_rules:
      - 'c 81:* rmw'
      - 'c 189:* rmw'

在连接RealSense的情况下进行执行。

docker compose up
[+] Running 2/2
 ✔ Network realsense_docker_test_default                   Created                                                                                                                                     0.1s 
 ✔ Container realsense_docker_test-realsense_ros_docker-1  Created                                                                                                                                     0.0s 
Attaching to realsense_docker_test-realsense_ros_docker-1
realsense_docker_test-realsense_ros_docker-1  | [INFO] [launch]: All log files can be found below /root/.ros/log/2023-11-01-10-16-30-585387-115173531dc5-1
realsense_docker_test-realsense_ros_docker-1  | [INFO] [launch]: Default logging verbosity is set to INFO
realsense_docker_test-realsense_ros_docker-1  | [INFO] [realsense2_camera_node-1]: process started with pid [14]
realsense_docker_test-realsense_ros_docker-1  | [realsense2_camera_node-1] [INFO] [1698833790.873154053] [camera.camera]: RealSense ROS v4.54.1
realsense_docker_test-realsense_ros_docker-1  | [realsense2_camera_node-1] [INFO] [1698833790.873229609] [camera.camera]: Built with LibRealSense v2.54.1
realsense_docker_test-realsense_ros_docker-1  | [realsense2_camera_node-1] [INFO] [1698833790.873235242] [camera.camera]: Running with LibRealSense v2.54.1
realsense_docker_test-realsense_ros_docker-1  | [realsense2_camera_node-1] [INFO] [1698833790.882924014] [camera.camera]: Device with serial number 241222074061 was found.
realsense_docker_test-realsense_ros_docker-1  | [realsense2_camera_node-1] 
realsense_docker_test-realsense_ros_docker-1  | [realsense2_camera_node-1] [INFO] [1698833790.882945705] [camera.camera]: Device with physical ID /sys/devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0/video4linux/video0 was found.
realsense_docker_test-realsense_ros_docker-1  | [realsense2_camera_node-1] [INFO] [1698833790.882950586] [camera.camera]: Device with name Intel RealSense D435 was found.
realsense_docker_test-realsense_ros_docker-1  | [realsense2_camera_node-1] [INFO] [1698833790.883079531] [camera.camera]: Device with port number 4-2 was found.
realsense_docker_test-realsense_ros_docker-1  | [realsense2_camera_node-1] [INFO] [1698833790.883084556] [camera.camera]: Device USB type: 3.2
realsense_docker_test-realsense_ros_docker-1  | [realsense2_camera_node-1] [INFO] [1698833790.883477568] [camera.camera]: getParameters...
realsense_docker_test-realsense_ros_docker-1  | [realsense2_camera_node-1] [INFO] [1698833790.883575261] [camera.camera]: JSON file is not provided
realsense_docker_test-realsense_ros_docker-1  | [realsense2_camera_node-1] [INFO] [1698833790.883580332] [camera.camera]: Device Name: Intel RealSense D435
realsense_docker_test-realsense_ros_docker-1  | [realsense2_camera_node-1] [INFO] [1698833790.883584101] [camera.camera]: Device Serial No: 241222074061
realsense_docker_test-realsense_ros_docker-1  | [realsense2_camera_node-1] [INFO] [1698833790.883587438] [camera.camera]: Device physical port: /sys/devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0/video4linux/video0
realsense_docker_test-realsense_ros_docker-1  | [realsense2_camera_node-1] [INFO] [1698833790.883591278] [camera.camera]: Device FW version: 5.15.1
realsense_docker_test-realsense_ros_docker-1  | [realsense2_camera_node-1] [INFO] [1698833790.883594850] [camera.camera]: Device Product ID: 0x0B07
realsense_docker_test-realsense_ros_docker-1  | [realsense2_camera_node-1] [INFO] [1698833790.883598217] [camera.camera]: Sync Mode: Off
realsense_docker_test-realsense_ros_docker-1  | [realsense2_camera_node-1] [INFO] [1698833790.893652603] [camera.camera]: Set ROS param depth_module.profile to default: 848x480x30
realsense_docker_test-realsense_ros_docker-1  | [realsense2_camera_node-1] [INFO] [1698833790.899207398] [camera.camera]: Set ROS param rgb_camera.profile to default: 640x480x30
realsense_docker_test-realsense_ros_docker-1  | [realsense2_camera_node-1] [INFO] [1698833790.903732976] [camera.camera]: Stopping Sensor: Depth Module
realsense_docker_test-realsense_ros_docker-1  | [realsense2_camera_node-1] [INFO] [1698833790.905105019] [camera.camera]: Starting Sensor: Depth Module
realsense_docker_test-realsense_ros_docker-1  | [realsense2_camera_node-1] [INFO] [1698833790.913908076] [camera.camera]: Open profile: stream_type: Depth(0), Format: Z16, Width: 848, Height: 480, FPS: 30
realsense_docker_test-realsense_ros_docker-1  | [realsense2_camera_node-1] [INFO] [1698833790.914036523] [camera.camera]: Stopping Sensor: RGB Camera
realsense_docker_test-realsense_ros_docker-1  | [realsense2_camera_node-1] [INFO] [1698833790.924960705] [camera.camera]: Starting Sensor: RGB Camera
realsense_docker_test-realsense_ros_docker-1  | [realsense2_camera_node-1] [INFO] [1698833790.927715218] [camera.camera]: Open profile: stream_type: Color(0), Format: RGB8, Width: 640, Height: 480, FPS: 30
realsense_docker_test-realsense_ros_docker-1  | [realsense2_camera_node-1] [INFO] [1698833790.928721350] [camera.camera]: RealSense Node Is Up!

请提供下面的内容的中文本地化改写(只需要一种选项):

 

广告
将在 10 秒后关闭
bannerAds