- 博客(173)
- 资源 (5)
- 收藏
- 关注
原创 chatgpt 接口使用(一)
参考链接:https://platform.openai.com/examples。2、根据出错的引用文件,找到。
2023-07-30 17:30:26
5270
原创 target_include_directories与target_link_directories
target_include_directories 以及 target_link_libraries 的使用细节
2023-07-20 11:18:52
665
原创 基于图的数据关联论文《CLIPPER: A Graph-Theoretic Framework for Robust Data Association》学习
数据关联;最大子图
2023-06-28 00:08:37
639
原创 点到折线的最近距离计算
如果没有找到,且待求点确实是在折线内部,那么就要去判断投影点,与哪个线段的端点距离最小,就这个作为返回,如果要精细,就可以在这个线段与相邻线段,进行密集采样得到一系列点,找出最近的点的距离;在应用中,是为了求取两条基本平行的折线的间隔距离,此时,可以结合线段的平行情况来去计算,而不是盲目的计算点到折线的距离。但是实际上,一条折线总是由有限的点构成的,计算与构成折线的点的最近距离,并不意味着就是点到折线的最近距离。如果折线是由无线细分的点构成的,能找到一个点,与待求点的距离最近,这个最近距离是所需要的。
2023-06-22 13:30:13
470
原创 kimera semantic中关于semantic label的融合方法
kimera semantic的SemanticTsdfServer继承了voxblox的TsdfServer,有自己的单独的semanticlayer,使用了自己的semantic的integrator。流程与voxblox的一致,记录一下:void FastSemanticTsdfIntegrator::integrateSemanticFunction该函数前面做的事情就是如同voxblox一样,更新继承的voxel层,然后更新semanticlayer。 updateTsdfVo
2021-11-24 14:45:28
1984
1
原创 voxblox论文阅读记录
voxblox论文阅读记录总体流程图数据更新描述voxel内的数值集成方式从TSDF构建ESDF关于《Improved updating of euclidean distance maps and voronoi diagrams》从TSDF构建MESH总体流程图数据更新描述s是传感器的中心位置;p是打到的物体的位置;x是某个voxel的中心:sp连线经过的某个voxel第1个公式,sign计算了符号,p-x计算的是绝对值,表示voxel中心到障碍物的距离;剩下的几个公式好理解。对于权
2021-11-22 16:06:02
1475
原创 关于优化公式的小白理解
1、为什么要将e(x)写成e(x+dx)的形式?2、J(x)是什么对什么的导数?理解1、形式上来说,e(x)和e(x+dx)并没有任何区别,以为dx本身就是小量,只要x+dx还在作用域?内,函数的意思就是一样的。更土一点的解析,假设定义域是在[-100,100],那么只要x+dx在这个范围内,函数表示的意思就一样。既然意思一样,为何要写成这个形式?因为我们接下来要做的是进行迭代优化,迭代优化需要指定一个起点,即这里的e(x+dx)的x在某次迭代中,是固定的,那么e(x+dx)就变成了dx的函数.
2021-08-26 10:20:55
557
原创 gtsam使用
1、关于里面的pose的between的说明gtSAMgraph.add(gtsam::BetweenFactorgtsam::Pose3(prev_node_idx, curr_node_idx, poseFrom.between(poseTo), odomNoise));这个poseFrom.between(poseTo)得到的是poseTo相对于poseFrom的姿态变化,即以poseFrom为基准坐标,poseTo在poseFrom基准坐标下的坐标。即如果poseFrom的在world下的姿态
2021-07-30 21:18:36
1524
原创 关于lidar用imu进行运动补偿的细节
利用imu在短时间100ms内的运动,补偿雷达的运动畸变,只进行旋转方向的补偿。1、找配对数据以lidar为基准,找到包含lidar一帧的点的起始、结束时刻的imu数据。2、对这些imu数据,进行积分处理以第一个imu为基准坐标,依次积分所有的imu的数据,每个imu都得到一个对应pose。3、计算结束时刻的lidar的相对于第一个imu的姿态lidar不一定和imu的时间对齐,因此,要进行插值。找到包含这个结束时刻的最近的左边、右边的imu,得到其姿态和时间。然后利用插值的方法,插值出这个
2021-06-26 16:21:26
4288
2
原创 刚性连接的物体知道一个的相对旋转求另一个的相对旋转
雷达 和imu的刚性关系 :Til T_{il} Tilimu从t1时刻到t2时刻的转换关系为:T1imu=T12imu∗T2imu T_1^{imu} = T_{12}^{imu} * T_2^{imu} T1imu=T12imu∗T2imu求雷达的相对转换关系:T12l−−−−−(1) T_{12}^l ----- (1)T12l−−−−−(1)过程:T1l=T12l∗T2l T_1^l = T_{12}^l * T_2^l T1l=T12l∗T2l同时:T1l
2021-06-26 12:11:19
181
原创 结合论文理解gps与imu融合定位代码的细节
学习该文章:https://zhuanlan.zhihu.com/p/152662055状态定义struct State { double timestamp; Eigen::Vector3d lla; // WGS84 position. Eigen::Vector3d G_p_I; // The original point of the IMU frame in the Global frame. Eigen::Vector3d G_
2021-06-19 21:10:24
4575
1
原创 欧拉角与RPY与旋转矩阵的测试
指定欧拉角,是指按照指定的顺序,按照右乘的方式构建旋转矩阵。验证一:指定旋转矩阵,得到欧拉角,按照轴角的方式重新构建矩阵:///---------------------------// Eigen::Matrix3d rot_cl; rot_cl<<-0.00382504437037171 , 0.190218909453634 ,0.981734248929839,\ -0.999948197804418, 0.00853270673893375,
2021-06-19 11:24:31
2585
原创 imu积分补偿lidar的一些理解
目的是利用lidar形成一帧点云时间段内的imu数据,补偿由于运动造成的lidar的畸变,能够把一帧所有的点云的坐标统一到结束时刻的坐标系下。一、算法过程假设已经得到了这一段时间的imu数据,以第一个imu的坐标为基准坐标,不断的递推计算其他时刻的imu相对于这个基准坐标的变化姿态,直到最后一个imu的数据算出最后一个姿态相对于第一个imu的坐标系的变化。这里涉及到左乘还是右乘的问题:由于imu得到的数值都是基于自身当下的坐标系的值,也就是说,是围绕这动轴在转的,需要用右乘的方式,及下一时刻的坐标姿态
2021-06-17 00:24:46
2291
2
原创 aloam中增加回环模块——流程分析
aloam没有回环模块,参考lego-loam增加回环模块。一、lego loam mapping模块分析1、首先要明确几个重要转换矩阵的含义: float transformLast[6]; float transformSum[6]; float transformIncre[6]; float transformTobeMapped[6]; float transformBefMapped[6]; float transformAftMapped
2021-06-12 18:31:09
949
2
原创 aloam 几个坐标系的关系的梳理
1、坐标系关系类型总共有:lidar到里程计的坐标系的关系;里程计到map的坐标系的关系;lidar到map的坐标系关系;2、laserOdomerty会发布一个消息:ros::Publisher pubLaserOdometry = nh.advertise<nav_msgs::Odometry>("/laser_odom_to_init", 100);内容是:// publish odometry nav_msgs::Odometry laserOd
2021-06-12 12:55:49
1655
1
原创 pcd转成ros的nav_msgs::OccupancyGrid的消息发布出去
参考网上代码,基本步骤:1、加载pcd文件2、进行过滤3、转成msg4、发布5、打开rviz,查看map消息#include <ros/ros.h>#include <nav_msgs/OccupancyGrid.h>#include <nav_msgs/GetMap.h>#include <sensor_msgs/PointCloud2.h>#include <pcl/io/pcd_io.h>#include <p
2021-06-08 11:55:58
1090
原创 rosnode gdb 调试
参考链接:http://wiki.ros.org/roslaunch/Tutorials/Roslaunch%20Nodes%20in%20Valgrind%20or%20GDB<node launch-prefix="gdb -ex run --args" pkg="livox_mapping" type="scanRegistration_m1" name="scanRegistration_m1" output="screen"></node>~/livox_ws/w
2021-06-04 14:15:10
385
原创 关于激光雷达不同扫描方式得到的数据的整理总结(未完待续)
首先接触的是loam那一套,要排列成一个图像一样的阵列。对于蝴蝶式的扫描的,例如livox mid40的如何处理?https://www.livoxtech.com/mid-40-and-mid-1001、velodyne16的扫描方式的处理2、livox mid40扫描方式的处理livox mid-40 mid-100的坐标系定义:https://www.livoxtech.com/3296f540ecf5458a8829e01cf429798e/downloads/20190712/Livo
2021-06-03 23:36:59
4437
原创 fastlio lidar补偿模块的理解
基本原理在上面的sync_packages代码中,已经拿到了符合要求的imu数据和lidar数据,现在,就基于这些数据对lidar点进行补偿,目的是补偿到结束时刻的lidar坐标系下。坐标系介绍总共有3个坐标系:全局坐标系(world)、imu坐标系(body)、lidar坐标系全局坐标系一般以开机点为原点;imu坐标系时刻在变化,是一个纯粹以imu来推理的坐标系;lidar坐标系:如果lidar与imu是刚性连接的,那么lidar坐标系与imu坐标系的转换关系就是固定的,知道了imu坐标系
2021-06-03 14:35:02
3699
3
原创 ros launch文件中的tf节点的参数
参考:http://wiki.ros.org/tf#static_transform_publisherhttps://blog.youkuaiyun.com/qit1314/article/details/83280992https://www.guyuehome.com/19226一、launch中Tf的解析对于这个x y z yaw pitch roll是怎么解析的?基本可以理解为:将子坐标系移动到parent坐标系的(x,y,z)位置下,然后子坐标系绕自己的动轴旋转,按照ZYX的顺序。绕动轴旋
2021-06-01 20:28:11
3399
原创 点云录制及octomap查看
1、用aloam产生地图需要录制的消息是/laser_cloud_map,在建图中进行录制:~/lidar_data$ rosrun pcl_ros bag_to_pcd out_2021-05-29-15-41-59.bag /laser_cloud_map pcdCreating directory pcdSaving recorded sensor_msgs::PointCloud2 messages on topic /laser_cloud_map to pcdGot 727936 d
2021-05-29 16:08:28
796
原创 基于Aloam对特征匹配及雷达里程计的学习
ALoam使用了ceres库进行优化,得到优化后的里程计信息。学习总结:1、明确知道要优化什么:我们的目的是要知道当前雷达的姿态与上一帧的点云姿态相比的变化,即q_last_curr,t_last_curr.注意:读作curr到last的q,也就是curr在last坐标系下的旋转和位置(t可以直接看做是位置)。如果这两个量估计的很准确的话,那么将curr的点云中的每个点进行:q_last_curr*p_curr+t_last_curr会对应上last坐标系下的点。在这里,是落在last坐标系下的
2021-05-29 10:29:25
885
3
原创 vio第二章-中值积分修改
1、安装sophus因之前安装的是eigen3.2.29,重新源码安装了eigen3.3.4编译sophus还是报错,参考:https://www.it610.com/article/1290749043999318016.htm 这篇文章。其他可以参考:https://www.it610.com/article/1281501671595196416.htm。...
2021-05-11 23:28:23
270
原创 手写vio——第一章习题
第一章习题一、1、视觉与IMU融合后的优势?2、有哪些常见的视觉+IMU融合方案?有没有工业界应用的例子?3、在学术界,VIO研究有哪些进展?有没有将学习方法应用到VIO的例子?二、#include <iostream>#include<Eigen/Core>#include<Eigen/Geometry>#include <vector>#include <cmath>#include <assert.h>u
2021-05-05 12:53:49
1148
原创 滤波相关学习
文章目录滤波基本概念状态状态转移概率测量概率置信度贝叶斯滤波高斯滤波卡尔曼滤波扩展卡尔曼滤波UKF滤波信息滤波非参数滤波直方图滤波粒子滤波滤波为什么叫做滤波?滤波一词来源于通信理论,它是从含有干扰的接收信号中提取有用信号的一种技术。“接收信号”相当于被观测的随机过程,“有用信号”相当于被估计的随机过程。来自百度百科。这个说法确实很形象,将有用的信息从一堆混在的信号中提取出来。我们的现实世界确实充满着不确定性,没人能精准、完全的描述某种状态。对于想让机器智能的完成人类的任务的设计者来说,要重视
2020-10-11 17:16:28
338
原创 错误的vector erase引起的问题
vector执行erase的时候,begin的数值是负数,导致erase以后,vector的size是一个超级大的数据。
2020-09-11 20:48:42
547
原创 cmake 编译与bazel编译的一个差别
cmake 编译与bazel编译的一个差别某个函数是有返回值的,写代码的时候,未返回。Cmake编译的代码运行无错,bazel编译的代码,在运行到那个返回处时,会报 Illegal instruction的错误。
2020-09-03 21:02:38
3210
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人