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

在docker中运行SLAM十四讲程序

《十四讲》的示例程序依赖比较多,而且系统有点旧。可以在容器中运行。
拉取镜像

docker pull ddhogan/slambook:v0.1

这个docker对应的github:HomeLH/slambook2-docker

拉下来之后,假如是Windows系统,需要使用XLaunch用于提供X11图形化显示服务器。在创建容器时,运行

docker run -it --net=host \
-e DISPLAY=$DISPLAY \
-v $HOME/.Xauthority:/root/.Xauthority \
-v /tmp/.X11-unix:/tmp/.X11-unix \
--name slamtest ddhogan/slambook:v0.1

解释如下:

  • wsl宿主机上运行 xhost + 命令来允许对X Server的访问。
  • 使用 --net=host 参数可以让Docker容器直接连接到主机上的X11服务,无需通过SSH。
  • 用 -v 参数将wsl宿主机的 /tmp/.X11-unix 目录挂载到容器内的相同路径。(按作者所说,仅仅挂载.Xauthority,我这是显示不出的,最后只能删掉container)
  • -e 参数设置容器的 DISPLAY 环境变量,使其与wsl所使用的 DISPLAY 环境变量一致。

按照作者所说这样就行了。但我测试窗口显示时,直接X11转发就会遇到问题。测试xterm报错:

docker exec -it -u msy -e DISPLAY=127.0.0.1:0 slamtest bash
msy@docker-desktop:/opt/slambook$ xterm
xterm: Xt error: Can't open display: 127.0.0.1:0

我查看了wsl中的DISPLAY

echo $DISPLAY

输出是127.0.0.1:0,也就是localhost。为什么docker中使用就不对了。

问题是这样解决的:
考虑到实际是通过X11转发将容器内的图形输出到Windows主机上的X服务器。在Windows PowerShell中查看Win11的IPv4地址:192.168.xxx.xxx
重新启动docker

docker exec -it -e DISPLAY=192.168.xxx.xxx:0 slamtest bash
  • -e 参数设置容器的 DISPLAY 环境变量,使其与win11的XLaunch所提供的DISPLAY服务的ip地址一致。

后来我发现不用XLaunch也行。

另一种方法,直接在MobaXterm中启动,它附带了可视化功能:
如果安装了MobaXterm就可以直接在它的命令行,把DISPLAY给出的ip地址作为docker的执行参数,从而直接显示可视化窗口。
红框和黄色方块打码的是我的IP地址

最后测试ch3的轨迹可视化,可行:
在这里插入图片描述

相关文章:

  • 2903. 找出满足差值条件的下标 I
  • 博客说明 5/12~5/24【个人】
  • 超级初始网络
  • python使用xlrd读取excel的时候把字符串读成了数字
  • 【计算机网络】HTTPS 协议原理
  • 【pyspark速成专家】7_SparkSQL编程1
  • 高职物联网专业嵌入式系统开发教学解决方案
  • 【Unity实战】Mirror/UNET中SyncVar和SyncList需要注意的点
  • 【电路笔记】-二阶滤波器
  • Linux-命令上
  • 【面试干货】事务的并发问题(脏读、不可重复读、幻读)与解决策略
  • Pytorch深度学习实践笔记5
  • C++ | Leetcode C++题解之第111题二叉树的最小深度
  • Java+Swing+Mysql实现飞机订票系统
  • C语言之函数和函数库以及自己制作静态动态链接库并使用
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • golang 发送GET和POST示例
  • java8 Stream Pipelines 浅析
  • magento 货币换算
  • oschina
  • Spring声明式事务管理之一:五大属性分析
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 前端技术周刊 2019-02-11 Serverless
  • 我的面试准备过程--容器(更新中)
  • 物联网链路协议
  • 白色的风信子
  • linux 淘宝开源监控工具tsar
  • Nginx实现动静分离
  • 第二十章:异步和文件I/O.(二十三)
  • ​如何防止网络攻击?
  • # Panda3d 碰撞检测系统介绍
  • #微信小程序(布局、渲染层基础知识)
  • (33)STM32——485实验笔记
  • (4.10~4.16)
  • (二)PySpark3:SparkSQL编程
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • (转载)PyTorch代码规范最佳实践和样式指南
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .net 调用海康SDK以及常见的坑解释
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .net中调用windows performance记录性能信息
  • /var/log/cvslog 太大
  • @AliasFor注解
  • @Autowired自动装配
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [Android Studio 权威教程]断点调试和高级调试
  • [Android 数据通信] android cmwap接入点
  • [Asp.net mvc]国际化