ROS2在容器内外通讯
·
docker 的写法
docker build -t ros2 -f dockerfile.ros .
FROM docker.m.daocloud.io/library/ubuntu:22.04
# 安装软件时不要进入交互界面
ENV DEBIAN_FRONTEND=noninteractive \
# 设置时区是UTC
TZ=Etc/UTC \
# 定义conda的安装目录变量
CONDA_DIR=/opt/conda \
# 将conda的可执行目录加到系统 PATH 最前面
PATH=/opt/conda/bin:$PATH
# 基础依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
# --- 基础工具 ---
git wget vim zsh curl sudo tmux tree cloc cmake g++ gcc\
# --- 网络诊断 ---
iputils-ping net-tools iproute2 tcpdump nmap iperf3 \
# --- 硬件/总线调试 ---
can-utils usbutils minicom i2c-tools mesa-utils kmod \
# --- 系统/性能监控 ---
htop iotop strace gdb lsof \
# 删除 apt 的索引缓存。
&& rm -rf /var/lib/apt/lists/*
ENV ZSH=/opt/oh-my-zsh
RUN sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended && \
git clone https://github.com/zsh-users/zsh-autosuggestions $ZSH/custom/plugins/zsh-autosuggestions && \
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git $ZSH/custom/plugins/zsh-syntax-highlighting && \
git clone https://github.com/spaceship-prompt/spaceship-prompt.git $ZSH/custom/themes/spaceship-prompt --depth=1 && \
ln -s $ZSH/custom/themes/spaceship-prompt/spaceship.zsh-theme $ZSH/custom/themes/spaceship.zsh-theme && \
cp $ZSH/templates/zshrc.zsh-template /root/.zshrc && \
sed -i "s|^export ZSH=.*|export ZSH=$ZSH|g" /root/.zshrc && \
sed -i 's/^ZSH_THEME=.*/ZSH_THEME="spaceship"/g' /root/.zshrc && \
sed -i 's/^plugins=(.*/plugins=(git zsh-autosuggestions zsh-syntax-highlighting)/g' /root/.zshrc && \
echo 'alias lg=lazygit' >> /root/.zshrc && \
cp /root/.zshrc /etc/skel/.zshrc && \
chmod -R 755 $ZSH
# ros2
LABEL description="perception_platform with ROS2 Humble environment"
ENV DEBIAN_FRONTEND=noninteractive
ENV ROS_DISTRO=humble
# ======================== 添加 ROS2 apt 源 ========================
# 使用宿主机已有密钥文件,避免访问被封锁的 raw.githubusercontent.com
COPY ros-archive-keyring.gpg /usr/share/keyrings/ros-archive-keyring.gpg
RUN apt-get update && apt-get install -y --no-install-recommends \
lsb-release \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] \
https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu $(lsb_release -cs) main" \
> /etc/apt/sources.list.d/ros2.list \
&& rm -rf /var/lib/apt/lists/*
# ======================== 安装 ROS2 核心包 ========================
RUN apt-get update && apt-get install -y --no-install-recommends \
ros-${ROS_DISTRO}-ros-base \
ros-${ROS_DISTRO}-ament-cmake \
ros-${ROS_DISTRO}-rclcpp \
ros-${ROS_DISTRO}-std-msgs \
ros-${ROS_DISTRO}-sensor-msgs \
ros-${ROS_DISTRO}-geometry-msgs \
ros-${ROS_DISTRO}-cv-bridge \
ros-${ROS_DISTRO}-pcl-conversions \
ros-${ROS_DISTRO}-realsense2-camera-msgs \
python3-colcon-common-extensions \
python3-ament-package \
&& rm -rf /var/lib/apt/lists/*
# ======================== ROS2 环境配置 ========================
# 每次启动 bash 自动 source ROS2 环境
RUN echo "source /opt/ros/${ROS_DISTRO}/setup.bash" >> /root/.zshrc
ENV AMENT_PREFIX_PATH="/opt/ros/${ROS_DISTRO}"
ENV CMAKE_PREFIX_PATH="/opt/ros/${ROS_DISTRO}:/root/.local/lib/cmake:${CMAKE_PREFIX_PATH:-}"
ENV COLCON_PREFIX_PATH="/opt/ros/${ROS_DISTRO}"
ENV PATH="/opt/ros/${ROS_DISTRO}/bin:${PATH}"
ENV PYTHONPATH="/opt/ros/${ROS_DISTRO}/lib/python3.10/dist-packages:/opt/ros/${ROS_DISTRO}/local/lib/python3.10/dist-packages:${PYTHONPATH:-}"
ENV ROS_VERSION=2
ENV ROS_PYTHON_VERSION=3
CMD ["/bin/zsh"]
docker-compose.yaml示例
services:
ros2_container:
image: ros2
container_name: ros2_communication
network_mode: host
ipc: host
privileged: true
environment:
- ROS_DOMAIN_ID=0 # 指定ROS2通信域编号
- RMW_IMPLEMENTATION=rmw_fastrtps_cpp # 指定ROS使用rmw_fastrtps_cpp这种DDS通信
- FASTDDS_BUILTIN_TRANSPORTS=UDPv4 # 让FastDDS强制使用UDPv4网络传输,避免容器共享内存问题
volumes:
- /home/std/workspace/jn_workspace_lgc:/workspace/jn_workspace_lgc
- /tmp/.X11-unix:/tmp/.X11-unix:rw
working_dir: /workspace/jn_workspace_lgc
stdin_open: true
tty: true
command: /bin/zsh
- docker compose up -d
- docker exec -it ros2_communication /bin/zsh
在容器内启动指令
source /opt/ros/humble/setup.bash
export ROS_DOMAIN_ID=0
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
export FASTDDS_BUILTIN_TRANSPORTS=UDPv4
ros2 run demo_nodes_cpp talker
在主机上启动
source /opt/ros/humble/setup.zsh
export ROS_DOMAIN_ID=0
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
export FASTDDS_BUILTIN_TRANSPORTS=UDPv4
ros2 topic echo /chatter
更多推荐

所有评论(0)