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

【Docker大揭秘】

Docker

  • 调试一天的血与泪的教训:
    • 设备条件:
    • 对应的build preparation
    • 相应的报错以及修改 作为记录
  • 构建FASTLIO2
  • 启动docker
  • 获取镜像
  • 列出镜像
  • 运行container
  • docker中实现宿主机与container中的文件互传

调试一天的血与泪的教训:

在DOCKER中跑通FASTLIO2:
FASTLIO2_ROS2

设备条件:

  1. ubuntu20.04 + docker(22.04 desktop版本)——>docker拉取镜像选择的网站docker拉取ubuntu22.04(ROS2 HUMBLE)
  2. docker (configuration 22.04) ——> ros2 humble版本 (foxy是天坑!)
    请添加图片描述

对应的build preparation

编译 LIVOX-SDK2
直接按照来没问题:需要在你拉取的container 中部署一个ws专门用来存放LIVOX的SDK软件工具包

git clone https://github.com/Livox-SDK/Livox-SDK2.git
cd ./Livox-SDK2/
mkdir build
cd build
cmake .. && make -j
sudo make install

展示如下图(这里的Livox-SDK2文件夹(因为在后续的livox_ros_driver2中会调用他的动态链库.so)):
请添加图片描述
编译 livox_ros_driver2
follow官网的教程 (可以说是很香,但是这里要关注./build.sh humble需要在ws_livox/src/livox_ros_driver2文件夹中才有 并且humble专用)

mkdir -r ws_livox/src
git clone https://github.com/Livox-SDK/livox_ros_driver2.git ws_livox/src/livox_ros_driver2
cd ws_livox/src/livox_ros_driver2
source /opt/ros/humble/setup.sh
./build.sh humble

编译gtsam
这个简单不说了
编译pcl
这里我的pcl选择的是1.14,但是github主运行的是1.10导致引入#include<pcl/io/io.h>中出现错误 同时 pcl在docker 中的安装目录和在宿主机中的安装目录存在差异 需要在cmakelist.txt中set相关的include_dir 以及相关的LIBRARIES_DIR保证你的点云库能够正确find(这个我针对我的框架做一个记录)

相应的报错以及修改 作为记录

Question
请添加图片描述
Answer
因为我是在docker中安装的livox_ros_driver2与宿主机直接默认安装在/usr/local/lib以及/usr/local/include中不一样 所以我对cmakelist(fastlio)进行了调整:
请添加图片描述
关注这里的set是我对应的缺少的两个cmake文件的父级目录。
需要修改对应的cmakelist.txt信息
Question
点云库使用的版本不对应 导致很多函数出现错误:
请添加图片描述Answer
cd 进入到安装pcl-1.14的include头文件位置 发现确实没有io.h:
所以将io.h改称pcd_io.h然后那个函数错了 根据参数调整 完事 一条龙
请添加图片描述

构建FASTLIO2

首先我选择新建一个ws专门用来fastlio2:

通过git clone 
然后 colcon build --symlink-install (build and install一站式服务到家)
运行ros节点 
这里我经常忘记source ./install/setup.bash
然后ros2 launch fastlio2 lio_launch.py(完美 报错了 这个报错我解决了一下午)

请添加图片描述请添加图片描述
Question

请添加图片描述
请添加图片描述这个报错 大致是:理解起来大致是:找不到共享库.so
请添加图片描述Answer
我 find / -name "相应的so"搜寻了对应的.请添加图片描述大概在这个位置:
请添加图片描述我找了很多ROS开源社区遇到问题的友友们怎么解决的 但是 貌似跟我的问题出现了差异
Answer
我最终解决方式
请添加图片描述

export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/ws_livox/install/livox_ros_driver2/lib

启动docker

$ sudo systemctl enable docker 
$ sudo systemctl start docker

将需要使用 docker 的用户加入 docker 用户组
建立docker组

$ sudo groupadd docker

将当前用户加入 docker 组:

$ sudo usermod -aG docker $USER

获取镜像

从 Docker 镜像仓库获取镜像

$ docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]

列出镜像

$ docker image ls

运行container

以这个镜像为基础启动并运行一个容器

docker ps -a(列出所有容器)
docker run -it container-name /bin/bash

请添加图片描述

bash:放在镜像名后的是 命令,这里我们希望有个交互式 Shell,因此用的是 bash。

因为执行ROS2程序往往需要同时开启多个终端窗口,所以 往往可以通过下面进行(但是进入到fastlio2文件夹后应该都需要source ./install/setup.bash)docker容器启动多个终端,docker启动多个终端

docker exec -it cd3b79a85d7e /bin/bash

请添加图片描述

docker中实现宿主机与container中的文件互传

请添加图片描述

docker ps -a 
docker run -it container-name /bin/bash

//复制文件
docker ps -a //查看所有container-name的ID
docker cp /宿主机文件内容绝对路径 容器名称:/目标复制路径
docker exe -it container-name /bin/bash//查看文件是否复制成功

http://www.kler.cn/a/369090.html

相关文章:

  • 基于django的志愿者社团管理系统
  • 使用Angular构建动态Web应用
  • 【福建医科大学附属第一医院-注册安全分析报告】
  • java :String 类
  • PHP-FPM 性能配置优化
  • 高清 MV 无字幕视频素材
  • 【力扣】[Java版] 刷题笔记-70. 爬楼梯
  • JavaScript 前端开发
  • Python 网络爬虫:基础与实践
  • Java并发学习总结:原子操作类
  • python:如何判断一个数是否为素数
  • Go语言初识
  • 基于Python和OpenCV的疲劳检测系统设计与实现
  • 解决vue使用pdfdist-mergeofd插件时报错polyfills
  • VMware各版本下载的镜像站(含windows和linux)
  • ptp4l协议_配置文件
  • 【JIT/极态云】技术文档--函数设计
  • java :String 类
  • ReactOS系统中平衡二叉树,在一个空间中寻找与给定地址范围重合或部分重合的(已分配)区间
  • Python 实现日期计算与日历格式化输出(万年历)
  • Qt 窗口可见性 之 close函数和hide函数
  • [Go实战]:HTTP请求转发
  • 电商平台店铺运营:巧用 API 接口的策略之道
  • jemalloc替换标准库 malloc等函数的三种方式
  • 宿舍管理新篇章:基于Spring Boot的系统开发
  • 验证俩套加密算法是否互通