在Docker容器中的ROS 2环境中使用RealSense D435
首先
在 Docker 环境中构建 Ubuntu 22.04 和 ROS2 环境,并解释在 Docker 容器内使用 RealSense 的步骤。
另外,考虑到 RealSense 将用于嵌入式机器人,我们还需针对以下条件进行配置。
-
- RealSenseが接続された状態でPCが起動する。
- 途中でUSB接続が切れて再接続されても動作する。
已经有以下的存储库公开,可在Docker的ROS2环境中使用RealSense,如果想要轻松运行,只需使用以下存储库中的Dockerfile。
确认环境是否协调
主机电脑
Docker容器
使用过的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!
请提供下面的内容的中文本地化改写(只需要一种选项):