- 博客(488)
- 资源 (7)
- 收藏
- 关注
原创 Cartographer重入门到精通(三):前后端参数解读(部分)
可能要阅读Cartograher数据处理的代码才会知道,Cartograher处理数据的方式是:只有当同时接收到所有的传感器数据之后,才会发布其中最早的一个传感器数据,所以如果激光数据频率比较低,会影响到其他数据的快速发布,所以分成10份是为了加速其他穿插在其中的传感器数据的使用。更快的获取数据,就可以更好的将一帧有畸变的激光数据转换为一帧连续的没有畸变且即时的数据。为了降低点云的计算量,我们通常会对点云进行降采样,然而一种简单随机的采样会使得远处稀疏的点云丢失,而近处的点云仍然冗余。
2024-07-21 20:57:29
424
原创 Cartographer重入门到精通(二):运行作者demo及自己的数据集
这里纯定位的“纯”是相对于建图来说,纯定位的时候地图是已知的,使用之前建立好的地图进行纯粹的定位功能,所以这个demo并不像建图一样占用大量的cpu。这也是carto的亮点,他可以在精度比较差的激光雷达上稳定运行,证明了carto算法的通用性和高效性,并不挑硬件和精度。这个demo是个大杀器,我们知道很多场景是不断变化的,那么我们之前建立的激光地图可能就会失效,那我们频繁的更新激光地图是不是太麻烦,所以我们人为的设置一些路标,就可以大大提高我们定位时的稳定性,实际测试效果也很好。使用生成的地图进行定位。
2024-07-13 17:15:55
750
4
原创 rs232和can的区别
综上所述,RS232和CAN在通信方式、应用场景、传输距离、通信速度以及网络结构等方面存在显著差异,使得它们各自适用于不同的应用需求。CAN总线则广泛应用于汽车的控制系统、工业自动化控制等领域,因为它能够支持多主通信,即多个节点可以同时发送和接收信息。RS232主要用于计算机与外部设备的通信,如鼠标、打印机等,以及电子设备之间的数据传输。RS232和CAN的主要区别在于通信方式、应用场景、传输距离、通信速度以及网络结构。CAN总线网络结构中没有主从之分,每个设备都是平等的,支持多主和多从的通信方式。
2024-06-21 10:41:05
295
原创 Vue3-cloud-music前端探索
回调函数是handleThemeSwitchUpdateChange。ts中的自定义类对象mainStore。主题颜色切换使用了n-switch。
2024-06-06 09:37:38
215
原创 单个反光柱作为landmark,因输入角度异常导致ceres后端崩溃
使用ComputeUnscaledErrorWithoutRotation替换原先的ComputeUnscaledError。现在后端优化不会再抛出-nan的错误了。
2024-06-04 08:41:04
188
原创 Qt工程提升类后, CMake找不到头文件
https://blog.csdn.net/qq_45526401/article/details/134724277?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogOpenSearchComplete%7ERate-1-134724277-blog-137461528.235%5Ev43%5Epc_blog_bottom_relevance_base2&depth_1
2024-05-16 11:36:04
388
原创 .git文件过大清除
有时自己上传了大文件又删除就会造成.git文件过大。补充一下jar包在linux和windows下通用。bfg-repo-cleaner这个工具挺好的。
2024-05-10 11:46:24
78
原创 Error Code 12 Msg: Unable to find uri[model://ground_plane]
ubuntu16.04 安装turtlebot3仿真,运行之后发现报这个错误,然后没有小车。
2024-04-23 15:57:25
261
原创 You must call ros::init() before creating the first NodeHandle
在代码里我们先实例化了qnode类,所以在qnode的头文件中,我们先实例化了ros::NodeHandle nh,后调用了ros::init(),导致程序报错。你必须在创建NodeHandle之前先调用ros::init()函数。qnode.h中注释没有使用的NodeHandle变量。
2024-04-01 12:08:04
347
原创 linux 获取cpu和硬盘id
std::string get_harddisk_info()来获取硬盘id。直接代码,有的电脑cpuid可能没有,代码头文件没有理清但是满足编译需求。std::string getcpuid() 来获取cpu id信息。
2024-03-21 17:30:36
389
原创 ConnectedComponents类
std::map是一个关联容器,它要求元素的键是唯一的。如果尝试插入一个已经存在的键,emplace函数将不会进行插入操作,而是返回指向已经存在的元素的迭代器。就是把一个本来应该是网状的结构变成了单链,就好像你和朋友是小李,小李的朋友是小王,那我和小王也是朋友,用单链串起来就可以。所以这里的forest_其实是在维护一个单链关系,就像作者说的压缩路径,什么意思呢?我们可以通过检查返回的迭代器是否等于std::map::end来确定插入是否成功。这个类有个变量很有意思。
2024-03-17 20:22:52
38
原创 tf2使用注意事项
虽然感觉tf2_ros::TransformListener没有被使用,但是这个变量在程序运行时要一直存在的,如果被定义为临时变量就打错特错了。
2024-03-08 17:41:16
136
原创 qt如何配置ros环境
在Qt5.7的版本可以使用bash -i -c来启动qt,让Qt自己识别系统环境,不知道为什么Qt在之后的版本,这样使用都失效了。因为它会默认把CMAKE_PREFIX_PATH修改掉。网上还有安装ros插件版本的qt creator,感觉失去了一些灵活性。自己测试发现,只要在CMakeList.txt中加入ros的库信息即可。但是运行的时候还要配置ROS的一个变量ROS_MASTER_URI。具体位置在qt的Build Environment。这样编译是没有问题的。
2024-03-08 13:57:34
401
原创 CMakelist uninstall
大家可能都用过sudo make install,但是如何uninstall却不知道。要求build文件夹存在且install_manifest.txt文件夹还在。如果没有需要先编译安装后再卸载。
2024-03-01 10:39:42
254
原创 cartographer ceres后端优化
这里引用一篇文章作用一:用户可以选择使用Problem::AddParameterBlock显式添加参数块;在显式添加的时候ceres会内部进行额外的正确性检查。当Problem::AddParameterBlock()不存在时,Problem::AddResidualBlock()会隐式添加参数块,因此不需要显式调用Problem::AddParameterBlock()函数。ps:类似构造函数,显式构造函数。
2024-02-28 16:24:43
539
原创 gitee使用
注意:也不知道什么原因,第一次要git pull origin HEAD。参考网址:https://gitee.com/layene/gitee。
2024-01-03 10:15:20
408
原创 VIO和预积分(蒙圈的请过来,带你不蒙圈)
大佬的世界,你不会懂,就像一行行公式,人家觉得很简单,你却要读很多遍,不过还好,我们从普通人的世界来解读VIO和预积分。
2023-09-26 17:48:58
341
原创 Rviz插件分析(status_panel)
看不懂的先在上面学习一波,主要分为5个部分:PACKAGE SETUP (自身包的配置)、QT(QT环境的配置)、FILES(文件引入)、LIBRARY(生成库文件设置)、INSTALL(打包发布的配置)我们可能还注意到了插件的icons图标,放一个png在路径/icons/classes/*.png即可。这里StatusPanel继承了rviz::Panel类,覆写了2个函数。再来看看status_panel.h。先来看看CMakeList.txt。使用了2个Qt控件,用于接收和显示。
2023-09-22 16:27:33
249
原创 机器人上位机探索
3、使用qml实现的机器人上位机,适配ROS2。4、使用qml实现的slam探索仿真器。7、vizanti,网页端的机器人显示。1、扫地机器人Qt上位机。2、机械臂仿真上位机。
2023-09-12 09:18:21
399
原创 视觉SLAM14讲笔记-第5讲-相机与图像
畸变产生的原因:一是透镜自身的形状对光线传播的影响,二是在机械组装过程中,透镜和成像平面不可能完全平行,这也会使得光线穿过透镜投影到成像面时的位置发生变化。在世界坐标系下,所以这两个坐标系之间有一个外参数,也个外参数(R,t)代表机器人在世界坐标系下的运动轨迹。考虑到视觉SLAM中一般都使用普通的摄像头,针孔模型及径向畸变和切向畸变模型已经足够。我们可以使用棋盘格进行标定,这一点张正友博士做了很多的工作。在相机坐标系下的点进行归一化,使得Z=1,即得到相机。位于相机坐标系,一般我的空间点。
2023-09-06 15:47:33
81
原创 视觉SLAM14讲笔记-第4讲-李群与李代数
在优化问题中去解一个旋转矩阵,可能会有一些阻碍,因为它对加法导数不是很友好(旋转矩阵加上一个微小偏移量可能就不是一个旋转矩阵),因为旋转矩阵本身还有一些约束条件,那样再求导的过程中可能会破坏要优化的矩阵是旋转矩阵的本质条件,所以这里引入了一个乘法导数,即本章提到的左扰动或右扰动。BCH公式可以告诉我们当李代数发生了小量变化,旋转矩阵对应的变化,有利于计算出李代数导数,然而这个公式并不是万能的,用BCH线性近似来对李代数求导仍然有比较复杂的。变换矩阵对应的李代数是6维向量,平移在前,旋转在后。
2023-08-29 15:42:51
219
Principles of Robot Motion Theory, Algorithms, and Implementations
2018-03-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人