当前位置: 首页 > news >正文

在Docker容器中运行TaichiSLAM

准备工作:构建包含TaichiSLAM的Docker镜像

原因: 基础ROS镜像不包含TaichiSLAM的代码,你需要创建一个新的镜像,将TaichiSLAM项目克隆并编译进去。

  1. 创建一个Dockerfile文件
    创建一个名为Dockerfile的文件,内容如下:

    FROM osrf/ros:noetic-desktop-fullWORKDIR /root# 安装必要的依赖项
    RUN apt-get update && apt-get install -y \git \python3-catkin-tools \python3-osrf-pycommon \build-essential \libboost-all-dev \libeigen3-dev \libopencv-dev \&& rm -rf /var/lib/apt/lists/*# 克隆TaichiSLAM代码
    RUN git clone https://github.com/taichi-dev/TaichiSLAM.git# 创建并初始化ROS工作空间
    RUN mkdir -p /root/taichi_slam_ws/src
    RUN mv /root/TaichiSLAM /root/taichi_slam_ws/src/
    WORKDIR /root/taichi_slam_ws
    RUN catkin_make --cmake-args \-DCMAKE_BUILD_TYPE=Release \-DPYTHON_EXECUTABLE=/usr/bin/python3
    

    为什么这样做: Dockerfile定义了如何从基础镜像构建一个新的镜像。这里我们首先安装TaichiSLAM所需的依赖,然后克隆项目代码,并使用catkin_make来编译它。这确保了taichislam_node.py和相关的可执行文件被正确地生成并添加到ROS的路径中。

  2. 构建Docker镜像
    在包含Dockerfile的目录下执行以下命令:

    docker build -t taichislam-ros:noetic .
    

    为什么这样做: 这个命令会根据你定义的Dockerfile来构建一个名为taichislam-ros:noetic的新镜像。一旦构建完成,这个镜像就包含了所有运行TaichiSLAM所需的环境和编译好的代码。


正式运行:三个终端操作步骤

目标: 在三个独立的终端中,分别启动ROS Master、播放rosbag数据,以及运行TaichiSLAM节点,从而模拟一个完整的SLAM系统运行环境。

步骤:

终端 1:启动 ROS Master

命令:

docker run -it --name taichislam-container --rm --net=host -e DISPLAY -e QT_X11_NO_MITSHM=1 -v /tmp/.X11-unix:/tmp/.X11-unix taichislam-ros:noetic bash -c "source /root/taichi_slam_ws/devel/setup.bash && roscore"

为什么这样做:

  • docker run ...: 启动一个新容器。
  • --name taichislam-container: 给容器命名,方便后续使用docker exec命令进入。
  • --rm: 容器退出时自动移除,保持环境干净。
  • --net=host: 使用宿主机的网络,这对于ROS在多个容器或宿主机与容器之间通信至关重要。
  • -e DISPLAY -e QT_X11_NO_MITSHM=1 -v /tmp/.X11-unix:/tmp/.X11-unix: 这几行是用来启用图形界面(GUI)的,因为TaichiSLAM的show:=true参数需要显示窗口。
  • taichislam-ros:noetic: 使用我们刚刚构建的、包含TaichiSLAM的镜像。
  • bash -c "...": 在容器内执行一个命令。
  • source /root/taichi_slam_ws/devel/setup.bash: 这是最关键的一步! 它会把taichi_slam_ws工作空间添加到ROS的环境变量中,让ROS能找到taichislam包。
  • roscore: 启动ROS Master,作为所有ROS节点的中心枢纽。

终端 2:播放 rosbag

命令:

docker exec -it taichislam-container bash -c "source /root/taichi_slam_ws/devel/setup.bash && rosbag play --clock -r 1.0 /bags/taichislam-realsense435.bag"

为什么这样做:

  • docker exec -it taichislam-container: 进入第一个终端中正在运行的容器。
  • source /root/taichi_slam_ws/devel/setup.bash: 同样地,确保ROS路径正确。
  • rosbag play ...: 播放数据包。请确保/bags/taichislam-realsense435.bag路径在容器内是可访问的。如果文件在你的宿主机上,你需要在docker run命令中用-v参数将宿主机的目录映射到容器内,例如:-v /path/on/host:/bags

终端 3:启动 TaichiSLAM 节点

命令:

docker exec -it taichislam-container bash -c "source /root/taichi_slam_ws/devel/setup.bash && roslaunch taichislam taichislam-d435.launch show:=true"

为什么这样做:

  • docker exec -it taichislam-container: 进入同一个容器。
  • source ...: 确保ROS路径正确。
  • roslaunch taichislam taichislam-d435.launch show:=true: 运行taichislam包中的taichislam-d435.launch启动文件。因为你已经正确设置了ROS路径,roslaunch现在可以找到taichislam包了,而不是像之前那样报“is not a launch file name”的错误。

你之前的问题

你之前遇到的错误ERROR: cannot launch node of type [taichislam/taichislam_node.py]: taichislam,正是因为你在执行roslaunch之前,没有执行source /root/taichi_slam_ws/devel/setup.bash,导致ROS找不到taichislam这个包。正确的setup.bash文件会把你的工作空间添加到ROS_PACKAGE_PATH环境变量中。

总结

你之前的操作缺少了最关键的一环:将编译好的TaichiSLAM包添加到ROS的环境中。通过构建一个包含编译后代码的镜像,并在每次进入容器或执行命令时都source正确的setup.bash文件,你就能解决这个核心问题。

http://www.zskr.cn/news/663.html

相关文章:

  • 计算机图形学 - 渲染 - stone-stone
  • docker,docker-compose安装 - 小
  • Pickle 发布 Whisper 主动式桌面 AI; 吴恩达:不懂计算机原理,就不可能只靠「Vibe Code」变优秀丨日报
  • 爬楼梯 VS 跳绳
  • pb9新建“数据库”选项卡中文说明
  • 开源中国:构建国产开源新生态,驱动智能研发新时代
  • 第一次作业-自我介绍+软工5问
  • 灌区数字管理平台建设方案
  • 题解:P11622 [Ynoi Easy Round 2025] TEST_176
  • Docker 镜像生成与下载
  • 深入理解版本号比较:从原理到实现
  • 并不是真的路过而已 / 也不是真的不会想你 - Urd
  • CF1644题解
  • 花椒直播首次开源推流器组件 为鸿蒙开发者提供高性能推流解决方案
  • winform定时任务
  • 基于Python+Vue开发的旅游景区管理系统源码+运行
  • 剑指offer
  • nvm安装与配置
  • Exadata计算节点的内存出现故障,导致CPU耗尽
  • 磁盘控制器与磁盘驱动器的关系
  • 【GitHub每日速递】从编程小白到造轮子高手,免费资源 + 实战指南全给你
  • CF1725D Deducing Sortability
  • 集合框架2
  • [机器人] 产业研究之【人形机器人】
  • 因果图灵测试(Causal Turing Test, CTT),为判断AGI是否真正实现的唯一终极标准。
  • 1111
  • Codeforces Round 1048 (Div. 2)
  • 世界最顶级的游戏网络联机框架——NetCode for Entity
  • 理解Redis线程模型
  • Prometheus监控harbor仓库