Files
note_sync/ros/ros2/ros2_control/环境.md
T

1.5 KiB
Raw Blame History

拉取镜像

docker pull arm64v8/ros:humble 

启动脚本

#!/bin/bash

# 允许 Docker 访问 X 服务器(用于 GUI)
xhost +local:docker

# 容器名称
CONTAINER_NAME="ylhan_ros2_humble"

# 检查容器是否存在
if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
    # 容器存在
    if docker ps --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
        # 容器正在运行,直接进入
        echo "容器 ${CONTAINER_NAME} 正在运行,进入容器..."
        docker exec -it ${CONTAINER_NAME} bash
    else
        # 容器已存在但未运行,启动并进入
        echo "容器 ${CONTAINER_NAME} 已存在但未运行,启动容器..."
        docker start -i ${CONTAINER_NAME}
    fi
else
    # 容器不存在,创建并运行新容器
    echo "容器 ${CONTAINER_NAME} 不存在,创建新容器..."
    docker run -it --rm \
      --name ${CONTAINER_NAME} \
      --network host \
      --privileged \
      -e DISPLAY=$DISPLAY \
      -v /tmp/.X11-unix:/tmp/.X11-unix:rw \
      -v /home/ylhan/ros2_ws:/root/ros2_ws \
      -v /dev:/dev \
      arm64v8/ros:humble \
      bash
fi

环境设置

宿主机

echo $DISPLAY

假设输出为nvidia:13.0,在docker内:

export DISPLAY=nvidia:13.0

复制宿主机home目录下.Xauthority文件到docker中home目录下,使用xeyes测试

ros2 docker隔离

export ROS_DOMAIN_ID=79  #设置独立的DOMAIN_ID