ZED2i相机在ROS2上运行vins排坑与用docker运行Kalibr标定ZED2i相机

2023-05-16

按照ZED官网提供的方式ZED2i的SDK和ros2 wrapper之后, 还有很多工作要做才能让ZED成功运行稳定的VINS

1. ZED2i用Kalibr标定IMU和相机

由于我的电脑怎么装Kalibr都装不上, 说是啥boost这个库版本不一样, 但是我程序都是写在当前boost库中的, 改了怕出bug, 于是我只有用Docker去安装Kalibr.

1. Ubuntu 20.04通过Docker准备Kalibr环境

  1. 在docker hub下载stereolabs/kalibr镜像
    stereolabs/kalibr镜像链接: Kalibr
docker pull stereolabs/kalibr

一般运行docker需要管理员权限, sudo或者root都可.

  1. 创建并开启Kalibr容器, 并且挂载目录.
    挂载的目录中的文件可以共享在主机和容器中, 如新建的目录/home/data, 就挂载在kalibr系统中的/data目录下,/home/data和 /data目录可以共享文件内容.
docker run -itd -v /home/data:/data --name kalibr stereolabs/kalibr bash
docker attach kalibr
  1. Kalibr的Docker排坑.
    docker里由于无法可视化任何东西, 所以需要关闭kalibr的图像生成部分, 注释/kalibr_workspace/src/Kalibr/aslam_offline_calibration/kalibr/python/kalibr_calibrate_cameras 中的第201行到205行.
    但是docker没有vim等编辑器, 需要下载vim.
    又发现国内网太高, docker源在外面, 执行sudo apt-get下载不了任何东西. 又没有vim编辑器, 可以用一下方式
#1.进入容器
docker exec -it <容器名称/id> bash
#2.执行命令apt-get update 发现缓慢
#3.进入apt-get 配置目录
cd /ect/apt
#4.执行备份命令 --避免修改失败无法使用
cp sources.list sources.list.bak

#5.同时执行echo下的4行命令,修改成国内镜像源
echo "">sources.list
echo "deb http://ftp2.cn.debian.org/debian/ buster main">>sources.list
echo "deb http://ftp2.cn.debian.org/debian/debian-security buster/updates main">>sources.list
echo "deb http://ftp2.cn.debian.org/debian/debian buster-updates main">>sources.list

#6.查看文件 是否修改成功
cat sources.list
###############################
root@62be94cc90e7:/etc/apt# cat sources.list

deb http://ftp2.cn.debian.org/debian/ buster main
deb http://ftp2.cn.debian.org/debian/debian-security buster/updates main
deb http://ftp2.cn.debian.org/debian/debian buster-updates main
root@62be94cc90e7:/etc/apt#
###############################
#7.更新apt-get
apt-get update
#修改完成
#如果发现安装vim 缓慢或者失败,说明本教程不适合你
apt-get install vim
#将备份完成的文件改回来,即可。
rm sources.list
mv sources.list.bak sources.list

以上参考自Docker国内加速
然后就下载完vim.
注释/kalibr_workspace/src/Kalibr/aslam_offline_calibration/kalibr/python/kalibr_calibrate_cameras 中的第201行到205行.

vi /kalibr_workspace/src/Kalibr/aslam_offline_calibration/kalibr/python/kalibr_calibrate_cameras 

注释这里

2. ZED2i相机用Kalibr联合标定

Kalibr只支持ros1的数据格式, 于是又安装了zed的ros环境.

  1. 生成标定板:
    在kalibr docker中生成标定板
kalibr_create_target_pdf --type apriltag --nx 6 --ny 6 --tsize 0.04 --tspace 0.3

在这里插入图片描述
具体的参数介绍见Kalibr官网

--type apriltag                标定板类型
 
--nx [NUM_COLS]                列个数
 
--ny [NUM_ROWS]                行个数
 
--tsize [TAG_WIDTH_M]          二维码方格长度,单位m
 
--tspace [TAG_SPACING_PERCENT] 小方格与二维码方格长度比例

遇到问题"ImportError: No module named pyx"
sudo apt-get install python-pyx
生成的target.pdf在docker中, 一般是访问不到的. 我们可以用主机的docker cp 把docker中的文件cp到交互文件夹下, 如/data, 然后我们就可从主机把/data文件夹下的东西拿出来.
在这里插入图片描述

我们还需要准备几个文件, 放到docker内

  1. april.yaml
  2. ZED的rosbag
    april.yaml文件内容由生成target.pdf的命令变换, 如下
    在这里插入图片描述
    kalibr的rosbag录制的设备移动方法见官网的YouTube视频, B站上也有.
rosbag record -O Kalibr_data.bag /zed2i/zed_node/imu/data_raw /zed2i/zed_node/left/image_rect_color /zed2i/zed_node/right/image_rect_color

可以更改zed的ros配置内容, 去变换ZED发布的分辨率或者发布频率, 我的是VGA15hz+IMU200HZ
然后把录好的bag也放到docker的/data中
然后在Docker中运行

kalibr_calibrate_cameras --bag /data/Kalibr_data.bag --topics /zed2i/zed_node/left/image_rect_color /zed2i/zed_node/right/image_rect_color --models pinhole-radtan pinhole-radtan --target /data/april.yaml

然后会生成相机标定文件camchain-dataKalibr_data.yaml与results-cam-dataKalibr_data.txt. 这两个文件会在后面相机与IMU联合标定的时候用到.
我们还要准备一下imu_params.yaml这个文件. 因为没时间标定单独的IMU, 所以我直接用的官网的数据
在这里插入图片描述
然后联合标定

kalibr_calibrate_imu_camera --bag /data/Kalibr_data.bag --cam /data/camchain-dataKalibr_data.yaml --imu /data/imu_params.yaml --target /data/april.yaml

然后就会生成camchain-imucam-dataKalibr_data.yaml , imu-dataKalibr_data.yaml, results-imucam-dataKalibr_data.txt
具体camera到IMU外参可以看results-imucam-dataKalibr_data.txt生成的文件里. 再把这里面的东西写入VINS的配置文件中.

这里要注意的是, ROS2中ZED发布的message信息的分辨率是896*512, 并不是HD720P的, 所以我们要在VINS的相机配置文件改一下内参和分辨率.
在这里插入图片描述
把初始化的外参估计方式改为0, 就是完全相信配置的外参. 由于外参标定的比较准确, 所以就算没运行loop_fusion的情况下, 100m定位误差也只有厘米级.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ZED2i相机在ROS2上运行vins排坑与用docker运行Kalibr标定ZED2i相机 的相关文章

随机推荐

  • 什么是解耦

    耦合度 是软件工程领域的概念 xff0c 指模块之间的依赖程度 模块可以小到一个功能 xff0c 也可以大到一个系统 解耦 解除或降低模块之间的耦合关系 模块之间有依赖关系就必然存在耦合 xff0c 0耦合是基本无可能的理想状态 解耦的好处
  • 类域和访问类的成员

    1 类的数据成员 xff08 类中声明的变量 xff09 和成员函数 xff08 类定义中声明的函数 xff09 属于该类的类域 非成员函数在全局命名域内定义 2 在类域内 xff0c 类的成员可以被该类的所有成员函数直接访问 xff0c
  • FreeRTOS学习记录(一):数据、变量、函数特点

    2022 04 22 依据 xff1a 野火 FreeRTOS内核实现与应用开发实战指南 目录 数据类型 变量名 函数名 宏 数据类型 FreeRTOS对C里的数据类型做了重定义 xff0c 在portmacro h 文件中 portmac
  • FreeRTOS学习记录(三)(扩展)嵌套结构体展开

    分析代码的辅助文章 xff0c 不重要 目录 链表节点数据结构 链表根节点数据结构 内部嵌套 链表精简节点 链表节点初始化 链表根节点初始化 将节点插入到链表尾部 将节点按照升序排列插入到链表 将节点从列表删除 任务控制块 链表节点数据结构
  • FreeRTOS学习记录(四):任务、任务切换(难点)

    2022 04 23 依据 xff1a 野火 FreeRTOS内核实现与应用开发实战指南 目录 一 任务 二 创建任务 1 定义任务栈 2 定义任务函数 3 定义任务控制块 4 实现任务创建函数 xTaskCreateStatic 函数 p
  • FreeRTOS学习记录(六):空闲任务与阻塞延时的实现

    2022 04 24 依据 xff1a 野火 FreeRTOS内核实现与应用开发实战指南 目录 一 实现空闲任务 1 实现空闲任务 定义空闲任务的任务控制块 创建空闲任务 二 阻塞延时 1 vTaskDelay 函数 2 修改 vTaskS
  • 万拓双控存储VS3000

    万拓双控存储 VS3000是万拓推出的新一代基于intel高性能服务器平台推出的双控24盘位存储产品 xff0c 凭借面向云架构的存储操作系统 强大的新一代硬件平台和丰富的智能管理软件该产品 xff0c 该产品采用WEB GUI管理界面 x
  • ubuntu中用anaconda下载库很慢的解决方法2020.3.5

    1 安装anaconda xff0c 去清华源下载 安装添加链接描述 2 由于第三方库在国外 xff0c 在没有梯子的情况下无法用conda install numpy来安装numpy xff0c 所以第二步就是切换清华源添加链接描述 3
  • ubuntu中Docker中开发ROS——使用gui访问docker中的ros

    ubuntu中Docker中开发ROS 使用gui访问docker中的ros 前言1 拉取带有vnc图形界面的ros镜像2 运行该镜像3 浏览器进入通过端口访问docker中的ros的界面4 也可以像常规一样用终端进入docker ros容
  • Ubuntu中安装vmware

    linux中安装虚拟机vmware ubuntu18中安装vmware15pro ubuntu18中安装vmware15pro vmware这个下载页面我找了好久 vmware真正的下载页面
  • px4混控器流程理解 motor test qgc调试

    sys autostart 索引是5000 启动是加载5000 generic ground vehicle文件 xff0c 此脚本指定混控脚本文件55行是rover generic 华丽分界线 四悬翼 sys autostart 索引是4
  • 自动驾驶决策规划算法第一章笔记 忠厚老实的老王

    第一章 自动驾驶决策规划算法数学基础 第一节 xff1a 决策规划算法的地位和作用 该笔记来自b站up主 xff08 偶像 xff09 xff1a 憨厚老实的老王视频链接主页 第二节 xff1a 为什么规划中经常见到五次多项式
  • 老王自动驾驶规划算法数学基础笔记-第四节cartesian到frenet坐标系的转化

    该笔记来自b站up主 xff08 偶像 xff09 xff1a 憨厚老实的老王B站视频链接
  • windows下如果批量修改文件的后缀名

    背景 电脑上有几十个mp4格式的视频学习资料 xff0c 这些资料都学完了 xff0c 打算把它安全的封存起来 xff0c 最有效的封存方法是把名字修改了 xff0c 而且后缀名mp4删掉或者改成一个不常见的后缀名 刚开始我是一个一个的重命
  • 在C++中使用map来取代很多个if else和switch

    在C 43 43 中使用map来取代很多个if else和switch 利用map中的key和value键值对来取代if else效率会好不少 span class token macro property span class token
  • C++类:类中的静态属性和函数、常量函数与常对象、类在内存中的存储

    静态属性 静态成员包括静态成员属性 静态成员函数 一个属性一旦设置为静态 xff0c 那么整个程序中就独其一份 如上所示 xff0c 之前p m A的值是100 使用p2 m A更改了该值为200后 xff0c 即使再用p m A去调用 x
  • ADRC学习心得(持续更新)

    两年前第一次接触到PID觉得很高深 xff0c 很神奇 xff1b 后来逐渐觉得单纯的PID小儿科了 xff0c 又了解到专家PID xff0c 模糊PID xff0c 神经网络PID这些改进算法 xff0c 再后来又知道了ADRC xff
  • 四/六旋翼迷你无人机设计制造(一)硬件设计制作

    四旋翼 xff0c 小飞机 飞到东 xff0c 飞到西 上日天 xff0c 下怼地 我的飞机真神奇 鲁迅 很早就有弄个小飞机自己玩的想法了 xff0c 因为疫情拖到现在 不过感谢时间 xff0c 过滤掉了很多不成熟的想法 xff0c 也有足
  • SLAM14讲第七讲习题10:Ceres实现ICP优化

    很好的学习ceres的习题 难度很低 容易入手 ceres结构体构造 struct ICPCeres 64 brief Construct a new ICPCeres object 64 param uvw 当前帧3d点 64 param
  • ZED2i相机在ROS2上运行vins排坑与用docker运行Kalibr标定ZED2i相机

    按照ZED官网提供的方式ZED2i的SDK和ros2 wrapper之后 还有很多工作要做才能让ZED成功运行稳定的VINS 1 ZED2i用Kalibr标定IMU和相机 由于我的电脑怎么装Kalibr都装不上 说是啥boost这个库版本不