自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 3d建图与定位(4)_lio sam代码阅读

模块二就是回环的使用,通过多线程使用icp配准,得到回环因子,将回环因子加入因子图;1.2使用gtsam进行预积分,使用后端位姿做参考imuHandler(const sensor_msgs::Imu::ConstPtr& imu_raw)2.前端:imu主要用来预计分,对后端里程计进行位姿推测得到先验位姿 ,对雷达进行畸变校正,特征点提取得到cloudinfo。3.3通过相邻点深度差值的突变判断是遮挡点,这一类的遮挡点进行去除,根据左右两个点深度值差异大判断是瑕点。

2024-04-08 19:36:11 554

原创 3dslam建图与定位(3)_多传感器标定算法流程

1.可以是棋盘格也可以是二位码标定板,通过rgb摄像头对板子进行拍照 ,每个格子角点检测,可以得到板子的位姿,也就可以得到标定板的平面方程。4.继续优化约束,使这个残差和最小,直到满足收敛条件,迭代次数到了,雷达包播完了,两帧约束间变化足够小,就输出最终约束结果。3.相邻两帧点云下的imu角度变换矩阵*相临两帧之间的ndt获得点云的变化关系的逆就是lidar-》imu的约束。2.根据每一帧下的imu角度设置ndt初值,进行点云的ndt匹配,得到帧间位姿变换。2.通过nlopt进行约束优化,得到最新约束。

2023-10-31 15:34:18 177 1

原创 3d激光slam建图与定位(2)_aloam代码阅读

(4)面点约束,首先进行雷达运动补偿,通过kdtee从上一帧中寻找距离当前帧角点最近的一个点p1,根据p1去找相同线上距离最近的点p2,根据p1去找不同线上距离最近的点p3,根据点到平面的距离,构建残差方程给到ceres,可以求解出点到面的约束。(3)角点约束,首先进行雷达运动补偿,通过kdtee从上一帧中寻找距离当前帧角点最近的一个点p1,根据p1去找不同线上距离最近的点p2, 根据点到直线的垂线距离,构建残差方程给到ceres,可以求解出点到线的约束。2.1.5 发布4种特征点及插入标志的整体点云。

2023-08-29 15:59:47 629

原创 3d激光slam建图与定位(1)_基于ndt算法定位

3.ndt.cpp对点云地图,雷达点云,发布的雷达点云相对于点云地图的初始位置进行回调处理,通过ndt算法,将雷达点云匹配到点云地图,并计算出它们的位置姿态关系,这个就是定位。2.points_downsampler.cpp对雷达数据的预处理,当雷达数据回调后进行点云范围的过滤,过滤掉过远的点,通过体素滤波进行下采样,提升匹配效率。1.map_loader.cpp用于点云地图的读取,从文件中读取点云后对这个点云地图进行旋转平移后发布点云地图到ros。3.变换输入点云,与目标点云配准得到坐标变换关系。

2023-07-28 15:30:59 3498 12

原创 slam建图与定位_cartographer代码阅读(7)后端约束构建

1.子图内约束包含:当前节点与当前子图原点的约束和当前节点和所有已经完成子图的约束,目的是为了构建局部地图。3.回环检测:当前的节点与所有已经完成的子图进行约束的计算pose_graph_2d.cc。4.回环检测(子图间约束):计算所有节点与刚完成子图的约束pose_graph_2d.cc。2.子图内约束,子图的原点坐标与节点间的约束pose_graph_2d.cc。2.子图间的约束:当前完成子图与所有节点的约束 ,目的是为了构建全局地图。5.全局搜索和局部搜索pose_graph_2d.cc。

2023-07-24 11:34:30 648

原创 slam建图与定位_cartographer代码阅读(5)_前端运动滤波

1.1扫描匹配对先验位姿优化后 将点云按照这个local坐标系下的位姿去校正点云,然后将点云插入submap,这个函数里执行了运动滤波。2.输入是 当前的时间和当前的位姿 输出是(是否 时间差 角度增量 位置增量 大于参数中设置的数值的一个判断的返回值)目的 过滤调不满足运动条件增量的scan插入submap 如果旋转时定位或地图有飘移可以试试这个修改这个角度增量参数。

2023-07-21 16:40:53 159

原创 slam建图与定位_cartographer代码阅读(4)_前端扫描匹配

相关性扫描匹配是基于栅格的,而ceres不是 ,栅格分辨率精度是0.05cm ,ceres精度更高。// 先将数据转到tracking坐标系下,再调用trajectory_builder_的AddSensorData进行数据的处理。* @brief 点云数据的处理, 先进行扫描匹配, 然后将扫描匹配的结果当做节点插入到后端的位姿图中。2.2输入是 :位姿推测器提供的先验位姿和预处理后的点云 输出是:位姿。2.将local坐标系下的点云旋转到得到位姿后的坐标系下。// 雷达相关的数据最终的处理函数。

2023-07-21 15:45:20 258

原创 slam建图与定位_cartographer代码阅读(3)_gps和ceres-solver

ECEF坐标系通常以米为单位来表示地球上的位置。其中,X轴指向经度为0°的地方,Y轴指向经度为90°的地方,Z轴指向北极。一.在扫描匹配中用到了暴力搜索和ceres两个算法,ceres的用法很固定,目的就是通过最小二乘法对代价函数求最小值。cartographer主要包含:传感器数据处理,位姿推测,扫描匹配 ,概率栅格地图,回环检测几个模块。2.Pi 为损失函数 残差块为:xi1…2.构建代价函数 损失函数。3.添加代价函数 损失函数。1.ecef坐标系如图。4.配置并运行求节器。

2023-06-30 18:09:01 467

原创 slam建图与定位_cartographer代码阅读(2)_数据走向和node类

处理传感器数据3.构造函数,有4个模块(声明ROS的一些topic的发布器;处理之后的点云的发布器;3.数据结构:std::unordered_map 是采用哈希数据结构实现的, std::map是通过红黑树实现的。Step: 2 声明发布对应名字的ROS服务, 并将服务的发布器放入到vector容器中,地图信息的处理。//话题名在/cartographer_ros/node_constants.h里定义。Step: 4 进行定时器与函数的绑定, 定时发布数据。Step: 3 处理之后的点云的发布器。

2023-05-23 00:00:26 137

原创 slam建图与定位_cartographer代码阅读(1)_框架理解和node_main

位姿图:向位姿图添加节点,计算节点的子图内约束和子图间约束(回环检测);基于分支定界算法的粗匹配,优化问题的构建与求解。cartographer是一个基于图优化的激光slam框架,激光为主,可以融合其它传感器;扫描匹配:ceres扫描匹配;雷达数据处理:时间同步,数据融合;2>初始化glog和gflags库 glog打日志使用,gflags读取配置文件参数使用。代码包含两个部分:cartopher_ros和cartographer。2>轨迹的开始,传感器数据的采集传递,话题处理。4>ros节点的初始化。

2023-05-18 00:29:39 710

原创 ubuntu_roscore与roslaunch开机自启动(8)

使用 rosrun turtlesim turtlesim_node测试是否自启动成功,小乌龟启动成功证明roscore自启动设置成功。1.编写自启动执行脚本autoload.sh,编写完使用bash autoload.sh先运行一下,检查有没有语法或权限的错误。方法一:bash /home/hh/autoloadsh运行脚本。方法一:bash /home/hh/autoloadsh运行脚本。方法二:自启动并弹出终端显示,使用以下命令运行脚本。方法二:自启动并弹出终端显示,使用以下命令运行脚本。

2022-09-26 22:10:18 2741 1

原创 ubuntu_VTK+QT+PCL安装(7)

ubuntu18.041.下载网站 : https://vtk.org/download/ba2.解压tar -xf VTK-7.1.1.tar.gz3.安装及编译cd VTKmkdir buildcd buildcmake -DVTK_QT_VERSION:STRING=5 \ -DQT_QMAKE_EXECUTABLE:PATH=/opt/Qt5.11.2/5.11.2/gcc_64/bin/qmake \ -DVTK_Group_Qt:BOOL=ON \

2022-03-31 17:13:57 2152

原创 ubuntu_使用ros显示imu的状态(6)

1.硬件环境:ubuntu18.046轴维特imu2.查看硬件是否连接上ls -l /dev/ttyUSB*3.设置硬件权限sudo chmod 777 /dev/ttyUSB04.运行工作空间内的imu读取命令rosrun robot_imu imu_com5.imu的信息显示,并查看frame_idrostopic echo /imu/data_raw6.打开rviz,并添加imu设置topic,将fixed frame设置为当前的frame_idrviz7.运行效

2022-03-17 11:47:58 1184 9

原创 ubuntu_深度相机使用OPENNI显示深度图(5)

1.环境硬件:奥比中光深度相机,ubuntu18.04,奥比中光官网下载的OpenNI-Linux-x64-2.3.0.66;2.安装依赖项:sudo apt-get install build-essential freeglut3 freeglut3-dev 3.解压OPENNI包: tar zxvf OpenNI-Linux-x64-2.3.0.64.执行脚本安装: cd OpenNI-Linux-x64-2.3.0.6 sudo ./install.sh 5.添加环境变量:

2022-03-17 09:39:30 770 1

原创 ubuntu_ROS及Cartographer的安装及运行(4)

ubuntu版本18.041.配置Ubuntu软件库勾选如下图;下载自改成其他站点 最佳服务器;点关闭,弹出网络相关问题先不管2.设置sources.listsudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'3.设置密匙s

2022-03-03 11:43:03 593

原创 ubuntu_C++(3)

1.ubuntu_CPU绑定进程的代码。2.insert语句用法。3.glog的编译,安装与使用。4.函数指针与指针函数

2022-02-26 20:29:23 392

原创 ubuntu_Cmark安装及打开(2)

cmake下载地址https://github.com/Kitware/CMake/releases?page=1本次使用:cmake-3.22.1.tar.gzubuntu版本: 18.04在解压的文件夹下 执行./bootstrapmakesudo make install验证是否安装成功cmake --version卸载sudo apt-get autoremove cmake打开cmakesudo cmake-gui安装打开cmake打不开并提示Command

2022-01-24 19:42:18 1624 6

原创 ubuntu_系统命令行使用(1)

lsb_release -a 系统版本查看

2022-01-19 13:50:46 805

原创 PCL点云处理_点云分割(4)

代码:#include <iostream>#include <pcl/io/pcd_io.h>#include <pcl/point_types.h>#include<pcl/console/parse.h>#include<pcl/range_image/range_image.h>#include<pcl/visualization/range_image_visualizer.h> #include<pcl

2022-01-10 20:28:32 1641

原创 PCL点云处理_点云滤波(3)

直通滤波代码:#include <iostream>#include <ctime>#include <pcl/point_types.h>#include <pcl/filters/passthrough.h>int main (int argc, char** argv){ //种下时间种子数,用来产生不同的随机数 srand(time(0)); //创建点云 pcl::PointCloud<pcl::PointXY

2022-01-04 18:12:55 831

原创 PCL点云处理_点云数据可视化(2)

代码:#include<iostream>#include<pcl/io/io.h>#include<pcl/io/pcd_io.h>#include<pcl/io/ply_io.h>#include<pcl/visualization/cloud_viewer.h>int user_data;using std::cout;void viewerOneOff(pcl::visualization::PCLVisualizer&

2021-12-28 17:10:37 886

原创 PCL点云处理_安装及环境配置(1)

PCL点云

2021-12-21 14:46:54 2603

原创 opencvsharp图像处理_轮廓检测与绘制(6)

Cv2.FindContours和 Cv2.DrawContours轮廓检测函数Cv2.FindContours参数:1,寻找轮廓的图像;2,返回轮廓数组3.层次结构索引;4,轮廓的检索模式(External只检测外轮廓,list检测所有轮廓,ccomp检测所有轮廓并建立两个等级,tree检测所有轮廓并建立等级树)5,轮廓近似模式(ApproxNone保存物体边界上所有连续的轮廓点,ApproxSimple仅保存轮廓的拐点信息,最后两种使用teh-Chinl chain 近似算法)6,:Po

2021-07-16 19:33:50 3652 2

原创 opencvsharp图像处理_仿射变换(5)

仿射变换,又称仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间;仿射变换可以通过一系列的原子变换的复合来实现,包括:平移(Translation)、缩放(Scale)、翻转(Flip)、旋转(Rotation)和剪切(Shear)。这些变换可以通用的运算方法可以用齐次转换公式表示,九点标定时.EstimateAffine2D函数得出2X3矩阵得到的a,b,c,d,e,f就是矩阵中的变量;可以写成x`=ax+by+cy`=dx+ey+f为什么有6个变量

2021-06-07 16:35:43 977

原创 Opencvsharp图像处理_图像增强(4)

均值滤波,blur函数核公式K=1/Keizer.width*ksize.height用一片图像区域的均值来代替各个像素值,主要方法为邻域平均法在进行卷积、池化操作时会有参数strides。strides即代表在四个维度(batch、 height,、width、channels)所移动的步长。strides[0] = 1 在 batch 维度上的移动为 1,也就是不跳过任何一个样本strides[1] = 1 在宽度的方向上步长为1strides[2] = 1 在高度的方向上步长为1str

2021-06-04 22:46:42 1155 2

原创 opencvsharp图像处理_腐蚀与膨胀,击中击不中变换(3)

膨胀:dilate为核B对核A做卷积时,核B覆盖区域的像素最大值提取腐蚀:erode 为核B对核A做卷积时,核B覆盖区域的像素最小值提取0黑,255白腐蚀erode : 是黑色的扩张,向0的扩张原图膨胀dilate : 是白色的扩张,向255的扩张开运算: 先腐蚀在膨胀,可以剔除小白点闭运算: 先膨胀在腐蚀,可以剔除小黑点腐蚀和膨胀opencvsharp程序 //定义原图路径 Mat panda = new Mat("template2.jp

2021-06-04 18:30:41 1026

原创 opencvsharp图像处理_相机标定(2)

一.相机标定的目的:得到世界坐标系与像素坐标系的正确对应关系;二.在坐标转换过程中,会用到四个坐标系:世界坐标系(三维),相机坐标系(三维),图像坐标系(二维),像素坐标系(二维);小孔成像原理相机成相三.相机畸变常见的畸变有径向畸变和切向畸变径向畸变,取决于镜片形状(桶形和鱼眼形;图像中心畸变度基本为0,越向外的轮廓畸变度越高)切向畸变,取决于相机安装各器件同心及平行度(图像梯形)畸变图:......

2021-05-27 10:49:20 4415 10

原创 opencv图像处理_vs2019配置时遇到的报错(1)

1.属性配置管理下Microsoft.Cpp.x64.user缺少属性文件;解决方法:安装了一个vs2017重新打开vs2019,就可以了;2.错误:(严重性代码说明项目 文件 行禁止显示状态 错误)LNK1104 无法打开文件“opencv_world341d.obj”解决方法:视图-》其它窗口-》属性管理器-》Microsoft.Cpp.x64.user双击-》链接器-》输入将附加依赖项opencv_world3414d.lib;改为绝对路径:D:\Users\Empower\Downl

2021-04-14 22:30:40 1274

原创 C#_chart 控件曲线坐标值,根据鼠标移动浮动显示(六)

效果如下:操作设置方法如下1.找到chart控件的series属性2.将集合下isxvayleindexed属性设置为true3.在鼠标移动事件下添加以下代码chart1.Series[0].ToolTip = “X:#VALX\nY:#VALY”;

2021-04-06 14:02:16 6164

原创 C#_XML文件读写输出(五)

XML文件读写输出引用头文件using System.Xml;生成效果图写入过程 //xml读写方法实例化 XmlDocument xmlDoc = new XmlDocument(); //创建Xml声明部分,即<?xml version="1.0" encoding="utf-8" ?>声明xml版本及编码格式 XmlDeclaration Declaration = xmlDoc.CreateXmlDeclaration("1.0",

2021-03-23 19:53:57 465

原创 C#_dll封装及调用方法的简单使用(四)

1.建立1》新建类库,并命名2》编写公有访问函数及定义要用到的参数public int caimia(int a , int b ){int c = a*(a + b);return c;}3》生成解决方案2.调用1》新建窗体应用并命名2》窗体布局3》引用刚刚建立的dll文件4》引用using dll封装;5》 实例化封装的类并对封装的方法使用Class1 k = new Class1();textBox3.Text=Convert.ToString( k.caim

2020-12-19 18:51:46 1233 1

原创 C#_使用sql表的增删该查,并显示到dataGridView1(三)

最终效果1.数据库的通讯1》项目菜单下添加数据源,下一步2》选择数据集下一步3》选择要建立的连接4》添加数据的引用using System.Data.SqlClient;5》连接数据库//创建数据库对象server服务器名/database库名/Trusted_Connection=SSPI不使用用户名及密码登陆 SqlConnection con = new SqlConnection("server=WIN-LK6AKBHNUM4;database=大学生管理系统;T

2020-12-19 17:57:15 1424 1

原创 C#_ TCP协议 socket,实现对图片,文件,消息的收发(二)

1.TCP通讯的过程1>接收端bind选定ip和端口将套接字与本地连接,客户端选择ip与端口2>linsten设置为监听状态3>accept与connet三次握手发包建立连接第一次接收端发送syn包建立连接第二次发送端发送接收到的syn和ack包给接收端建立连接第三次接收端发送ack包给发送端确认连接状态2.tcp协议是什么tcp协议属于传输层,是数据传输过程中的一种编码格式3.数据怎么传输的1>中文...

2020-12-08 18:48:18 2605

原创 C#_多线程的使用(一)

一.本次主要对以下3点进行说明1.线程的创建2.前台线程与后台线程3.线程的优先级二.准备工作1.using System.Threading;//引用线程类2.创建winform窗体及控件 窗体布局三.程序说明Thread drawthread = null;//定义线程1,并设置其初始为空线程Thread nihao = null;//定义线程2,并设置其初始为空线程在启动线程控件槽函数下创建drawthread = new Thread(new ThreadStart

2020-11-23 19:00:00 337 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除