- 博客(14)
- 收藏
- 关注
原创 BA优化中,存在5个相机10个点,假设10个点都能被观测到,求状态矩阵维度、误差矩阵维度、雅各比维度
SLAM中相机姿态用李代数(SE3)表示, SE3是6维的,路边点的位置是三维的(X,Y,Z),因此状态矩阵的维度是60。雅克比矩阵为误差矩阵对状态矩阵求导,维度为误差矩阵维度x状态矩阵维度,即100x60。一个相机中10个点的误差维度为20,5个相机为100。一个路标点的误差的维度为2,误差即为实际像素坐标(状态矩阵:1x(5x6+10x3)=1x60。误差矩阵:2x5x10 = 100。雅克比矩阵维度:100x60。)与观测的路标点的像素{
2024-04-23 10:09:10 158
原创 Linux dpkg -x 安装deb包到制定目录
dpkg -i xx.deb是安装到系统制定目录,Linux文件系统是将相同类型对文件放在同一个文件夹下。所以这样安装十分分散。如果需要将deb包安装在制定目录 ,使用下面命令行dpkg -x。
2024-01-28 18:00:38 944 1
原创 Linux C++ main函数终端参数输入空格导致的错误
在lauch,json文件里,因为加了“ ”,所以当成一个字符串处理。自己debug一点问题没有,没有任何报错,代码也想不出哪里有问题。解决方法是要么将wall contour2.pg改成wall_contour2.jpg或者在终端输入的时候加入双引号。上面代码是opencv对图像进行裁切的函数,代码非常简单。这段程序需要在命令终端传人参数。
2024-01-25 22:57:08 401 1
原创 二维数组索引越界
自己定义了一个二维数组,初始化值为0,大小是图片mask的大小,里面的值代表点云的索引,即point_index。程序里面索引到mask.rows和mask.cols时就越界了,导致值溢出。通过Debug调试软件定位,发现是point_index超出点云最大的索引了。上述代码运行的时候报一下错误。但是取值的时候忘了,其。
2024-01-19 22:02:24 372 1
原创 error: static assertion failed: YOU_MIXED_MATRICES_OF_DIFFERENT_SIZES
根据报错信息发现是矩阵相乘维度不统一的错误,一个矩阵是Derived = Eigen::Matrix<double, 4, 4>,另外一个矩阵是Eigen::Matrix<double, 3, 1>。Eigen可以表示空间转换的还有两种形式,一个是Eigen::Affine3d, 另一个是Eigen::Isometry3d。它们之间的区别在于它们所表示的变换类型和所包含的自由度。Eigen::Isometry3D 和Eigen::Affine3D是可以和3维向量直接相乘的。T是齐次转换矩阵,维度是。
2023-12-28 18:17:28 727 1
原创 error: declaration of ‘pcl::CorrespondencesPtr correspondences’ shadows a parameter
开始以为是pcl::CorrespondencesPtr的变量声明有问题,后面发现不是这个问题。当一个局部变量的名称与外部作用域的参数名称相同时。这种情况可能会导致混淆和错误的使用,因此编译器会给出警告或错误。解决 “shadows a parameter” 错误的方法是避免在局部作用域内使用与外部作用域同名的变量。可以通过修改变量名或者将变量的作用域限定在不同的范围内来解决这个问题。原因是自定义的变量名与函数的输入参数同名了,所以会出现shadows a parameter的问题。
2023-12-28 17:29:32 442 1
原创 pcl::PointCloud<pcl::PointXYZ>和pcl::PointCloud<pcl::PointXYZ>::Ptr传参的时候的转换
cloud_max_cluster是Ptr的格式,所以传入*cloud_max_cluster,对指针进行取值,结果还是出现报错。在函数声明的地方忘记改了,函数声明的地方,参数是智能指针。将函数声明的地方和函数定义的地方改成一样的即可。
2023-12-20 11:52:03 600
原创 opencv像素值索引越界导致异常的问题
例如,在 C++ 中,uchar value = img.at(y,x) 中,y 代表纵坐标,x 代表横坐标,ptr(y)[x]。但是在运行过程中发现有些点的像素值大于39,例如153,255等。我是用指针的方法查询像素值的。后来打印出来像素值异常的像素点的横纵坐标,发现v的坐标比cols大,但是程序并没有越界报错。当索引像素值时,只有当y为负数时,才会越界报错, y比行数大的时候,不会报错只会出现错误像素值。这里不得不提一下opencv像素索引的规则了,无论是用指针的方式,还是at的方式,都是y,x。
2023-07-10 22:32:23 177 1
原创 自定义语义点云可视化渲然,多版本VTK库冲突导致段错误(核心已转储),已解决。
总结一下,这个是一个由于多版本第三方库导致的问题,当我们运行的程序多的时候,电脑上有时候不可避免要装多个版本的第三方库,所以在编译的时候,一定要指定好第三方库的版本,如下面所示。Linux文件管理方式和Windows是不一样的,windows是把同一个库装到一个包中,Linux是按照文件类型进行分类的,比如把不同的库的头文件都放到 /usr/include中,把库文件放到 /usr/lib中,比较杂。找了好久才发现,他们不是同一个版本的库,头文件是7.1,源文件是9.2.2,我怀疑是库版本错误导致的。
2023-07-05 20:14:57 196 1
原创 ubuntu20.04 pcl1.08 cmake vtk报错The `PATH` argument is required.
近日在Ubuntu20.04上编译PCL 1.08,在cmake时遇到一个问题CMake Error at /usr/local/vtk922/lib/cmake/vtk-9.2/vtkDetectLibraryType.cmake:23 (message): The `PATH` argument is required.Call Stack (most recent call first): /usr/local/vtk922/lib/cmake/vtk-9.2/FindFreetype.c
2023-07-04 17:26:57 455 1
原创 Makefile入门,超级详细,cmakelists.txt生成的makefile文件一行一行注释
link.txt文件如下,这是一个链接命令,它使用 /usr/bin/c++ 编译器将 CMakeFiles/yolov8_onnx.dir/src/main.o 文件链接到可执行文件 yolov8_onnx。以前自己都是写CMakeList.txt文件,没有关注过Makefile文件,但是有时候CmakeList.txt却存在一些问题,比如当装有两个版本的库的时候,指示制定库的版本或者设置链接库的路径,但是仍然存在库链接错误的问题。同时all参数,说明是执行makefile2中的target all。
2023-07-03 21:25:54 1612 1
原创 PCL自定义点云可视化undefined reference to `pcl::visualization::PointCloudGeometryHandlerXYZ<PointXYZIL>问题
这类错误一般都是链接库时出现问题,但是我在CMakeLists.txt中已经链接了${PCL_LIBRARIES},后来查资料,发现undefined reference to 除了因为是没有找到库外,也有可能是函数定义的头文件没有引入。之前自己尝试写过很多代码调试的笔记,但是都是在飞书上写的。但是飞书上记录有个问题,就是自己没有动力去整理笔记,每次都相当于草稿一样简单记录一下。一个是给大家分享解决方法,另一个也是想当成一个笔记记录自己debug思路,同时也为自己积累经验。结果编译时出现如下问题。
2023-07-02 22:19:10 336
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人