kalibr源码专题-投影模型

kalibr源码专题-投影模型之小孔成像


前言

代码在aslam_cameras中的cameras里,主要是PinholeProjection.hpp、OmniProjection.hpp、ExtendedUnifiedProjection.hpp、DoubleSphereProjection.hpp这四个头文件和对应的OmniCameraGeometry.cpp、PinholeCameraGeometry.cpp、
PinholeRSCameraGeometry.cpp
在代码中使用了模板类,所以可呢会比较不好找


一、小孔成像模型

首先,我们先看一些简单的PinholeCameraGeometry.cpp
![在这里插入图片描述](https://img-blog.csdnimg.cn/3c5e652482364dcb93f7e7c0e277f258.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA54ix6aOe55qE5Yqf5aSr54aK54yr,size_14,color_FFFFFF,t_70,g_se,x_16
这段没什么,就是普普通通的构造函数,主要就是把对应的参数写里面,重载了构造函数,第一个第二个是没有考虑畸变参数,第三个的是考虑了畸变,里面的参数也没什么可说的:
_fu(focalLengthU),相机焦距(U方向)–这里我认为是内参左上角的那个数
_fv(focalLengthV),相机焦距(U方向)–这里我认为是内参中间的那个数
_cu(imageCenterU),相机光心(U方向,第三列第一个数)
_cv(imageCenterV),相机光心(V方向,第三列第二个数)
_ru(resolutionU),图像像素,长方向
_rv(resolutionV),图像像素,高方向
_enableDistortion(0),
_recip_fu(1.0 / _fu),
_recip_fv(1.0 / _fv),
_fu_over_fv(_fu / _fv)
_k1(k1),径向畸变参数K1
_k2(k2),径向畸变参数K2
_p1(p1),切向畸变参数p1
_p2(p2),切向畸变参数p2
这里面第一个构造函数调了个函数createTestGeometry(),
在这里插入图片描述其实就是初始化了个参数
在这里插入图片描述
中间这一大坨也没太大用,updateIntrinsicsOplus这个是应该本来是要做优化的时候留的接口,maxKeypoint()返回图像坐标最大的点,即右下角的点,通过这个我们也能看出来前面构造的那个ru、rv其实就是图像像素
在这里插入图片描述
这个cpp中有点用的函数之一,这个函数的意思是将投影到归一化平面的点加上畸变影响,变为畸变后的情况,其中返回的参数dx和dy是差值,要用mx_u和my_u分别去加上这个差值才是正确的畸变后的值
具体可以参考这个文章
但在这些文章中,对归一化平面的说法很少,其实按照小孔成像模型来说,Xworld/Xpixel=Zworld/fx (不考虑图像坐标系到像素坐标系的缩放),那么Xpixel=Xworldfx/Z
那么Xworld/Z=Xpixel/fx ,我理解的归一化坐标系就算Xworld/Z的坐标系。即输入参数应该为(Xpixel-cu)/fx,(Ypixel-cv)/fy,等做完畸变后要再搞回到像素坐标系,即Xpixel=Xdis
fx+u0,Ypixel=Ydis*fy+v0
归一化坐标系
在这里插入图片描述
这一块依然是写把正常的归一化理想坐标给加上畸变,但输出了额外的几个参数,用于生成雅各比矩阵,这块主要是供去畸变那里去非线性优化求解去畸变之后的效果。
在这里插入图片描述
这里就是去畸变的地方,其实跟opencv的迭代思想一样,换汤不换药,无非就算用非线性优化列写残差方程,然后直到迭代结束或者残差小于一个很小的值,这里后面会更新一下详细说说,目前大致了解到这里

在这里插入图片描述最后就是这两部分,主要内容就算设置和读取内参和畸变。

最后的最后,可能有些小伙伴会去找这个PinholeCameraGeometry类的定义,然后发现找不到,其实我们可以看一下它包含的头文件,

在这里插入图片描述
它就包含了这三个头文件,然后这三个里面就cameras.hpp这个有点靠相机模型这块,那我们可以看一下这个头文件
在这里插入图片描述这里我们可以看到我们的这个类,是CameraGeometry模板类的PinholeProjection, GlobalShutter, NoMask 特化,那么后面我们就可以接着去看一下CameraGeometry类和PinholeProjection类

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在Ubuntu 20.04上安装Kalibr,您可以按照以下步骤进行操作: 1. 打开终端并更新软件包列表: sudo apt update 2. 安装Kalibr所需的依赖项: sudo apt install python-catkin-tools python-rosinstall python-rosinstall-generator python-wstool python-git python-pip python-matplotlib python-scipy python-git python-yaml python-pyqt5 python-opencv python-numpy python-six python-pandas python-pyqtgraph 3. 创建一个工作空间并克隆Kalibr存储库: mkdir -p ~/kalibr_ws/src cd ~/kalibr_ws/src git clone https://github.com/ethz-asl/kalibr.git 4. 使用catkin工具构建Kalibr: cd ~/kalibr_ws catkin build -DCMAKE_BUILD_TYPE=Release -j4 5. 添加Kalibr到环境变量中: echo "source ~/kalibr_ws/devel/setup.bash" >> ~/.bashrc source ~/.bashrc 6. 测试Kalibr是否安装成功: kalibr 这些步骤应该可以帮助您在Ubuntu 20.04上安装Kalibr。如果您遇到任何问题,请随时向我提问。 ### 回答2: Kalibr是一个广泛用作自主无人驾驶运动控制系统、机器人控制和其他自主机器人项目的开源工具包。Kalibr软件包提供了一个高度可定制的视觉惯性系统校准框架,可以用于各种机器人和自主无人驾驶应用程序的开发和测试。在Ubuntu 20.04上安装Kalibr可以让开发和测试基于计算机视觉的自主机器人项目变得更加便捷和高效。以下是在Ubuntu 20.04上安装Kalibr的步骤: 1. 安装依赖项 Kalibr需要许多依赖项才能成功安装和运行。打开终端并输入以下命令进行安装: sudo apt update sudo apt install python-catkin-tools python-rosinstall ros-melodic-cv-bridge ros-melodic-tf ros-melodic-image-transport ros-melodic-pcl-ros 2. 克隆Kalibr仓库 在终端中输入以下命令克隆Kalibr仓库: git clone https://github.com/ethz-asl/kalibr.git 3. 编译Kalibr 进入kalibr文件夹并输入以下命令编译Kalibr: cd kalibr catkin build kalibr 4. 安装Kalibr 在进行完上述步骤后,输入以下命令安装Kalibr: catkin build kalibr -DCMAKE_INSTALL_PREFIX=/usr/local 5. 测试安装 输入以下命令检查Kalibr是否成功安装: kalibr_calibrate_imu_camera --help 6. 运行Kalibr 可以通过命令行或使用Kalibr的GUI界面运行Kalibr。例如,要通过命令行运行Kalibr,请在终端中输入kalibr_calibrate_imu_camera,根据所选的参数输入完整的命令行。或者,通过在命令行中输入kalibr_calibrate_imu_camera --gui启动图形用户界面。 以上是在Ubuntu 20.04上安装Kalibr的步骤。成功安装Kalibr之后,您可以在您的机器人或无人驾驶项目中使用Kalibr的强大功能进行系统校准、位姿估计和其他视觉惯性任务。 ### 回答3: Kalibr是一个开源的多摄像头标定工具,它可以通过对多个摄像头进行标定来提高机器人视觉应用的准确性。在Ubuntu 20.04中安装Kalibr需要以下步骤: 1. 安装依赖库 在Ubuntu 20.04中,我们需要安装一些依赖库,包括ceres-solver、ros-melodic-cv-camera和ros-melodic-camera-info-manager。安装命令如下: sudo apt-get update sudo apt-get install -y cmake \ build-essential \ libboost-all-dev \ libeigen3-dev \ libsuitesparse-dev \ libgoogle-glog-dev \ libatlas-base-dev \ libsuitesparse-dev \ libceres-dev \ ros-melodic-cv-camera \ ros-melodic-camera-info-manager 2. 安装Kalibr 在安装Kalibr之前,我们需要先安装pip和numpy。运行以下命令: sudo apt-get install python-pip pip install numpy --user 接下来,我们可以使用以下命令安装Kalibr: mkdir -p ~/kalibr_ws/src && cd ~/kalibr_ws/src git clone https://github.com/ethz-asl/kalibr.git cd .. catkin_make 注意:如果你使用的是ROS Kinetic,需要使用git checkout kinetic-devel命令选择相应的分支。 3. 测试Kalibr 安装完成后,可以使用demo-bag测试Kalibr。使用以下命令创建数据目录,并下载demo-bag文件: mkdir -p ~/kalibr_demo/data cd ~/kalibr_demo/data wget https://files.ifi.uzh.ch/rpg/website/kalibr_demo_data/indoor_forward_3.bag 执行以下命令运行Kalibr: rosrun kalibr_calibrate_cameras calibrate_cameras --bag ./data/indoor_forward_3.bag --topics /cam0/image_raw /cam1/image_raw --models pinhole-radtan pinhole-radtan --target ./resources/april_6x6.yaml 以上就是在Ubuntu 20.04中安装Kalibr的步骤。注意在安装过程中可能会出现依赖库不匹配或其他问题,需要根据具体情况进行解决。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值