自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(64)
  • 问答 (1)
  • 收藏
  • 关注

原创 C++ 模板与泛型编程(定义模板)学习笔记

C++ 模板与泛型编程基础

2022-06-05 15:48:28 682 3

转载 [转载] 关于Livox雷达时间同步问题(TIME SYNC)

本文链接:https://blog.csdn.net/weixin_43473122/article/details/110123619关于Livox雷达时间同步问题(TIME SYNC)参考大疆Github官网的Livox时间同步官方教程,无法进行时间同步的情况下(时间同步主要用于和外接imu进行loam建图),可以尝试参考以下操作进行时间同步:1、查看网卡ifconfig2、查看网卡是否支持ptpethtool -T xxx(网卡名)3、安装ptpdsudo apt install

2022-05-19 14:37:09 1750 1

原创 [原创] NDT (ndt_omp) 算法及源码解析(二)

[原创] NDT (ndt_omp) 算法及源码解析(二)最近笔者的实习面试遇到全线溃败,深深感到自身的基础理论水平薄弱。知耻而后勇,面试中反映出的问题应该及时补救。因此,笔者最近阅读了经典的NDT算法文章,以巩固自身的理论基础:Magnusson M. The three-dimensional normal-distributions transform: an efficient representation for registration, surface analysis, and loop

2022-05-04 21:28:05 1284 2

原创 [原创] NDT (ndt_omp) 算法及源码解析(一)

[原创] NDT (ndt_omp) 算法及源码解析(一)最近笔者的实习面试遇到全线溃败,深深感到自身的基础理论水平薄弱。知耻而后勇,面试中反映出的问题应该及时补救。因此,笔者最近阅读了经典的NDT算法文章,以巩固自身的理论基础:Magnusson M. The three-dimensional normal-distributions transform: an efficient representation for registration, surface analysis, and loop

2022-05-04 21:27:49 1822 1

原创 使用VsCode进行ROS程序调试

使用VsCode进行ROS程序调试安装相关插件创建调试配置文件启动调试安装相关插件首先在VsCode中安装相关插件最重要是安装ROS插件,请注意是微软发布的版本创建调试配置文件点开ROS插件的页面到工具栏中的点击“运行与调试”页面,如下图,点击创建一个launch.json文件,选择ROSROS: Launch 是针对launch文件进行调试ROS: Attach 是针对单个ROS节点进行调试下面我们将选择第一种方式选择我们需要调试的功能包选择功能包中的launch启动

2022-04-17 10:57:23 5733 3

原创 FAST-LIO2 (ikd-tree) 和 faster-lio (ivox) 代码详解

FAST-LIO2 (ikd-tree) 和 faster-lio (ivox) 代码详解

2022-04-14 21:26:37 4693 7

原创 VSCode+MSYS2+Cmake搭配打造舒适的刷题IDE环境

VSCode+MSYS2+Cmake搭配打造舒适的刷题IDE环境安装VScode安装MSYS2添加环境变量配置msys2环境配置VSCode安装VScode下载安装包,直接安装,简单。安装MSYS2官网下载安装包中国大陆地区去清华镜像下载安装包和配置软件源:MSYS2 镜像使用帮助添加环境变量在控制面板搜索环境变量根据自己的安装路径修改E:\msys64E:\msys64\mingw64\bin配置msys2环境打开msys2终端pacman -Syupacman -S

2022-03-17 13:04:49 2963

原创 小鹏汽车2019春招自动驾驶中心研发笔试题(部分题解)

小鹏汽车2019春招自动驾驶中心研发笔试题(部分题解)链接:https://www.nowcoder.com/questionTerminal/ebd81731da404c0f9505c8a933c3ae64?orderByHotValue=1&mutiTagIds=1645&page=1&onlyReference=false来源:牛客网Xpilot全场景自动泊车系统是小鹏汽车G3推出的重点之一,本系统融合超声波系统和全景视觉系统,可以实现有线框和无线框的平行、垂直车位的自动

2022-03-08 21:01:32 2074

原创 《视觉SLAM十四讲》读书笔记(四)

非线性优化6.1 状态估计问题批量状态估计与最大后验估计6.1 状态估计问题批量状态估计与最大后验估计考虑从1到NNN的所有时刻,并假设有M个路标点。定义所有时刻的机器人位姿和路标点坐标为:...

2021-12-05 19:37:50 1070

原创 CMake入门实战 (番外篇)——ROS/CMakeLists.txt书写规则

ROS/CMakeLists.txt书写规则2. 所有结构和指令3. CMake版本4. 功能包(项目)名称5. 查找依赖的CMake包5.1 find_package()做了什么工作5.2 为什么Catkin Packages被声明Components5.3 Boost6. catkin_package()7. 指定构建对象7.1 目标命名7.2 自定义输出目录7.3 包含路径和库路径2. 所有结构和指令我们的CMakeLists.txt必须遵照如下格式,否则我们的功能包不能正常被构建。Requi

2021-11-29 20:06:46 865

原创 CMake入门实战 (二)——Step 2: Adding a Library

Step 2: Adding a Library现在我们要在项目中添加一个库,这个库将会包含我们自己的计算平方根的实现。可执行文件将可以使用这个库,而不是使用编译器提供的平方根标准方法。本教程中将这个库放到名为 MathFunctions 的子文件夹中,这个子文件夹需要包含一个 CMakeLists.txt文件,文件中有如下一行:add_library(MathFunctions mysqrt.cxx)mysqrt.cxx 文件中有一个叫做 mysqrt 的函数,它提供与编译器的 sqrt 函数相同

2021-11-29 14:45:04 478

原创 CMake入门实战 (一)——Step 1: A Basic Starting Point

Step 1: A Basic Starting PointBuild and Run添加一个版本号和配置头文件最基础的项目是直接由源码执行编译。对于简单的项目,一个三行代码的CMakeLists.txt文件是所有项目所需要的。创建一个CMakeLists.txt文件:cmake_minimum_required(VERSION 3.10)# set the project nameproject(Tutorial)# add the executableadd_executable(Tut

2021-11-29 14:14:45 715

原创 Linux 绑定USB设备端口

1 根据设备ID绑定方法特点:按照ID绑定的话不需要固定USB接口,它是根据设备自身的ID进行绑定,但是如果有多个设备的串口使用同一款串口芯片的话,会出现紊乱查看需要绑定的设备的idVendor 和idpProduct,例如我要绑定一个rplidar的激光雷达$ lsusb新建一个规则文件:$ sudo gedit /etc/udev/rules.d/com_rplidar.rules自定义打开文件写入自定义规则。这里最好新建一个文件,不要覆盖以前的文件了。如果是相同设备还需要额外的辨别参

2021-11-12 22:37:36 5897 1

原创 《视觉SLAM十四讲》读书笔记(三)

这里写目录标题5.1 相机模型5.1.1 针孔相机模型5.1.2 畸变模型5.1 相机模型5.1.1 针孔相机模型设O−x−y−zO-x-y-zO−x−y−z为相机坐标系,习惯上我们让zzz轴指向相机前方,xxx向右,yyy向下(此图我们应该站在左侧看右侧)。OOO为摄像机的光心,也是针孔模型中的针孔。现实世界的空间点PPP,经过小孔OOO 投影之后,落在物理成像平面O′−x′−y′O'-x'-y'O′−x′−y′上,成像点为P′P'P′。设PPP 的坐标为[X′,Y′,Z′]T[X', Y', Z

2021-11-10 15:34:48 2304

原创 ROS分布式控制的主从机配置及测试

ROS分布式控制的主从机配置及测试问题概述配置免密登录在dog配置ssh将dog的公钥拷贝到kyle主从机配置问题概述我们的机器人经常结构比较特殊,不方便也不适合载一个显示器到处走,但是我们使用ROS开发时往往需要用RVIZ做一些可视化的调试操作,此时我们可以利用ROS的分布式特性。简单来说就是,例如我们机器人是一台树莓派的ROS小车,上面没有显示器,他启动导航后,我们可以在自己的笔记本上启动RVIZ来观察它的数据以及施加控制指令。设机器人端的主机名为:dog,IP地址为:192.168.2.155

2021-11-06 11:35:34 688

原创 ubuntu使用SSH服务远程登录另一台设备

ubuntu使用SSH服务远程登录另一台设备安装openssh-client和openssh-server查看当前的ubuntu是否安装了ssh-server服务。默认只安装ssh-client服务。安装ssh-server服务(受控制方)客户端登录SSH安装openssh-client和openssh-server查看当前的ubuntu是否安装了ssh-server服务。默认只安装ssh-client服务。dpkg -l | grep ssh查看有没有openssh-client的相关字眼。安

2021-11-05 16:56:11 2663

原创 类的成员函数作为ROS的回调函数

ROS 开发人员提供了一个简洁的替代 subscribe 方法,它接受成员函数和相应的对象,如下所示:sub = n.subscribe("/camera/depth_registered/points", 1000, &Example::callBack, this);&Example::callBack 是指向成员函数的函数指针,这是你要为其调用回调的对象实例。问题待解决:error: no matching function for call to ‘ros::NodeHan

2021-11-04 11:55:04 1993

原创 Linux系统中创建虚拟串口进行开发调试

Linux系统中创建虚拟串口进行开发调试使用python脚本创建一个虚拟串口对命令行测试串口代码中打开虚拟串口并测试使用python脚本创建一个虚拟串口对#coding = utf-8 import ptyimport osimport select def mkpty(): master1, slave = pty.openpty() slaveName1 = os.ttyname(slave) master2, slave = pty.openpty()

2021-11-03 16:01:15 4625 2

原创 OpenGL(QT平台)学习与实战(十五)

这里写目录标题创建一个光照场景框架搭建绘制背景颜色添加着色器创建一个光照场景框架搭建新建项目设置窗口名称设置窗口icon选择图片即可设置样式添加相应的action拖动到工具栏处添加openglwidget设置openglwidget填充整个窗口接着要重载QopenGLWidget中的一些函数,因此我们新建一个子类去继承它:修改相关代码将OpenGJWidget提升为自定义类至此,通用的框架已经搭建完毕。绘制背景颜色void ZJJOpen

2021-10-31 16:53:23 555

原创 《视觉SLAM十四讲》读书笔记(二)

李群与李代数引入李群与李代数的原因:旋转矩阵自身是带有约束的(正交且行列式为1).它们作为优化变量时,会引入额外的约束,使优化变得困难。通过李群——李代数间的转换关系,我们希望把位姿估计变成无约束的优化问题,简化求解方式。4.1 李群与李代数基础三维旋转矩阵构成了特殊正交群SO(3)变换矩阵构成了特殊欧式群SE(3)SO(3)={R∈R3×3∣RRT=I,det⁡(R)=1}SE(3)={T=[Rt0T1]∈R4×4∣R∈SO(3),t∈R3}\begin{array}{l}\mathrm{S

2021-10-30 17:07:06 431

原创 《视觉SLAM十四讲》读书笔记(一)

本着重温知识和巩固基础的目的,我最近重新精读一次《十四讲》。考虑到脑子不好使,每次看完就忘记,因此开一个专栏专门用于记录重要知识点。由于本身具备一定的SLAM系统开发经验和理论知识,因此一些太过基础的知识会适当省略过。3 三维空间刚体运动知识点:三维空间的刚体运动描述方式:旋转矩阵、变换矩阵、四元数和欧拉角Eigen库的矩阵、几何模块的使用3.1 旋转矩阵3.1.1 点、向量和坐标系基[e1,e2,e3][\boldsymbol{e}_{1}, \boldsymbol{e}_{2}, \b

2021-10-26 22:57:14 378

原创 OpenGL(QT平台)学习与实战(十四)

调整摄像机位置观测空间摄像机/观察空间当我们讨论摄像机/观察空间(Camera/View Space)的时候,是在讨论以摄像机的视角作为场景原点时场景中所有的顶点坐标:观察矩阵把所有的世界坐标变换为相对于摄像机位置与方向的观察坐标。要定义一个摄像机,我们需要它在世界空间中的位置、观察的方向、一个指向它右测的向量以及一个指向它上方的向量。摄像机位置摄像机位置简单来说就是世界空间中一个指向摄像机位置的向量:QVector3D cameraPos = QVector3D(0.0f, 0.0f, 3.0

2021-10-21 15:09:27 914 3

原创 OpenGL(QT平台)学习与实战(十三)

坐标系统将坐标变换为标准化设备坐标,接着再转化为屏幕坐标的过程通常是分步进行的,也就是类似于流水线那样子。在流水线中,物体的顶点在最终转化为屏幕坐标之前还会被变换到多个坐标系统(Coordinate System)。将物体的坐标变换到几个过渡坐标系(Intermediate Coordinate System)的优点在于,在这些特定的坐标系统中,一些操作或运算更加方便和容易,这一点很快就会变得很明显。对我们来说比较重要的总共有5个不同的坐标系统:局部空间(Local Space)世界空间(World

2021-10-20 15:17:09 390

原创 OpenGL(QT平台)学习与实战(十二)

向量、矩阵及线性变换的代码实现OpenGL没有自带任何的矩阵和向量知识,所以我们必须定义自己的数学类和函数。所幸的是,QT为我们封装了相关的线性代数的库,我们可以方便地进行线性代数计算。下面我们直接演示一个例子。首先修改顶点着色器的代码,对顶点进行旋转:#version 330 corelayout (location = 0) in vec3 aPos;layout (location = 1) in vec3 aColor;layout (location = 2) in vec2 aTex

2021-10-18 17:17:58 271

原创 OpenGL(QT平台)学习与实战(十一)

纹理过滤纹理坐标不依赖于分辨率(Resolution),它可以是任意浮点值,所以OpenGL需要知道怎样将纹理像素映射到纹理坐标。当你有一个很大的物体但是纹理的分辨率很低的时候这就变得很重要了。OpenGL也有对于纹理过滤(Texture Filtering)的选项。纹理过滤有很多个选项,但是现在我们只讨论最重要的两种:GL_NEAREST和GL_LINEAR。Texture Pixel也叫Texel,你可以想象你打开一张.jpg格式图片,不断放大你会发现它是由无数像素点组成的,这个点就是纹理像素;注

2021-10-18 16:09:07 921

原创 OpenGL(QT平台)学习与实战(十)

纹理环绕方式纹理坐标的范围通常是从(0, 0)到(1, 1),那如果我们把纹理坐标设置在范围之外会发生什么?float vertices[] = {// ---- 位置 ---- ---- 颜色 ---- - 纹理坐标 - 0.9f, 0.9f, 0.0f, 1.0f, 0.0f, 0.0f, 2.0f, 2.0f, // 右上 0.9f, -0.9f, 0.0f, 0.0f, 1.0f, 0.0f, 2.0f, -1.0f,

2021-10-18 11:38:49 261

原创 OpenGL(QT平台)学习与实战(九)

纹理单元我们可以给纹理采样器分配一个位置值,这样的话我们能够在一个片段着色器中设置多个纹理。一个纹理的位置值通常称为一个纹理单元(Texture Unit)。一个纹理的默认纹理单元是0,它是默认的激活纹理单元,所以教程前面部分我们没有分配一个位置值。纹理单元的主要目的是让我们在着色器中可以使用多于一个的纹理。通过把纹理单元赋值给采样器,我们可以一次绑定多个纹理,只要我们首先激活对应的纹理单元。OpenGL至少保证有16个纹理单元供你使用,也就是说你可以激活从GL_TEXTURE0到GL_TEXTRUE

2021-10-18 09:34:23 269

原创 OpenGL(QT平台)学习与实战(八)

加载纹理当我们需要给图形赋予复杂的颜色的时候,不大可能使用前面的方法,为每一个顶点指定第一个颜色。通常我们会采用纹理贴图。每个顶点关联一个纹理坐标。之后在图形的其他片段上进行片段插值。我们的工作:告诉OpenGL该怎样对纹理采样。纹理坐标在x和y轴上,范围为0到1之间(注意我们使用的是2D纹理图像)。使用纹理坐标获取纹理颜色叫做采样(Sampling)。纹理坐标起始于(0, 0),也就是纹理图片的左下角,终始于(1, 1),即纹理图片的右上角。我们为三角形指定了3个纹理坐标点。我们希望三角形的

2021-10-17 23:01:03 330

原创 OpenGL(QT平台)学习与实战(七)

着色器编程

2021-10-17 16:09:12 538

原创 OpenGL(QT平台)学习与实战(六)

QT交互通过QT的控件动作进行交互,可以实现用户控制绘制、清空和切换模式。如果需要从painGL()以外的位置触发重新绘制(典型示例是使用计时器设置场景动画),则应调用widget的update()函数来安排更新。调用paintGL()、resizeGL()或initializeGL()时,widget的OpenGL呈现上下文将变为当前。如果需要从其他位置(例如,在widget的构造函数或自己的绘制函数中)调用标准OpenGL API函数,则必须首先调用makeCurrent()。定义绘图状态

2021-10-16 16:11:53 669

原创 OpenGL(QT平台)学习与实战(五)

使用多个三角形拼成矩形索引缓冲对象在渲染顶点这一话题上我们还有最后一个需要讨论的东西——索引缓冲对象(Element Buffer Object,EBO,也叫Index Buffer Object,IBO)。要解释索引缓冲对象的工作方式最好还是举个例子:假设我们不再绘制一个三角形而是绘制一个矩形。我们可以绘制两个三角形来组成一个矩形(OpenGL主要处理三角形)。这会生成下面的顶点的集合:float vertices[] = { // 第一个三角形 0.5f, 0.5f, 0.0f,

2021-10-16 10:13:05 320

原创 OpenGL(QT平台)学习与实战(四)

编译链接着色器顶点着色器顶点着色器(Vertex Shader)是几个可编程着色器中的一个。如果我们打算做渲染的话,现代OpenGL需要我们至少设置一个顶点和一个片段着色器。我们会简要介绍一下着色器以及配置两个非常简单的着色器来绘制我们第一个三角形。我们需要做的第一件事是用着色器语言GLSL(OpenGL Shading Language)编写顶点着色器,然后编译这个着色器,这样我们就可以在程序中使用它了。下面你会看到一个非常基础的GLSL顶点着色器的源代码:#version 330 corela

2021-10-15 15:54:30 353

原创 OpenGL(QT平台)学习与实战(三)

绘制一个三角形图形渲染管线(Pipeline)在OpenGL中,任何事物都在3D空间中,而屏幕和窗口却是2D像素数组,这导致OpenGL的大部分工作都是关于把3D坐标转变为适应你屏幕的2D像素。3D坐标转为2D坐标的处理过程是由OpenGL的图形渲染管线(Graphics Pipeline,大多译为管线,实际上指的是一堆原始图形数据途经一个输送管道,期间经过各种变化处理最终出现在屏幕的过程)管理的。图形渲染管线可以被划分为两个主要部分:第一部分把你的3D坐标转换为2D坐标,第二部分是把2D坐标转变为实

2021-10-15 12:08:20 695

原创 OpenGL(QT平台)学习与实战(二)

创建窗口任务要求:使用QT创建一个窗口。普通的QT窗口:用于OpenGL绘图的窗口QOpenGLWidget代替GLFWQOpenGLWidget提供了三个便捷的虚函数,可以重载,用来重新实现典型的OpenGL任务:panintGL:渲染OpenGL场景。widget需要更新时调用。resizeGL:设置OpenGL视口、投影等。widget调整大小(或首次显示)时调用initializeGL:设置OpenGL资源和状态。第一次调用resizeGL()/paintGL()之前

2021-10-14 16:09:04 701

原创 OpenGL(QT平台)学习与实战(一)

参考资料:LearnOpenGL CN《现代OpenGL:1入门篇,2021 Qt实现版》OpenGL我们先了解一下OpenGL到底是什么。一般它被认为是一个API(Application Programming Interface, 应用程序编程接口),包含了一系列可以操作图形、图像的函数。然而,OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范(Specification)。OpenGL规范严格规定了每个函数该如何执行,以及它们的输出值。至于内部具体每个函数是

2021-10-14 13:46:27 1192

原创 Linux系统下Qt不能输入中文的解决方法

问题在Linux环境(例如Ubuntu)下,Qt Creator中不能在诸如输入框、文本框中输入中文(不会激活中文输入法)。注意与输入法类型有关(基于iBus或Fcitx)。原因Qt程序的中文输入支持需要用Qt插件,Qt自带的插件中,支持iBus输入法,所以如果你恰好在用iBus输入法则可以正常输入。如果要支持Fcitx输入法,需要插件支持。解决方法安装fcitx-frontend-qt5,命令行里输入sudo apt-get install fcitx-frontend-qt5进入系统设置的

2021-10-13 20:45:15 9266 4

原创 在VS Code中使用Git和管理Github

使用VS Code管理Git项目推送到远程仓库使用vscode 打开项目:打开下面视图,添加一行文字## 测试提交点击+ ;相当于git add .如果点击单个文件的+,即仅添加该修改点击打勾;等于git commit -m "备注信息";右边的箭头输入需要备注的信息。然后按Enter 确定。回车之后,然后我们可以看到。所有的修改的文件,均已经提交到缓存区。1变成了 0;提交到远程仓库;git push origin master到git仓库里面;查看。已经成功提交。使用vscod

2021-09-05 16:42:06 1375 1

原创 Git学习笔记——问题记录

Git学习笔记——问题记录问题一从远程仓库拉去时出现如下报错:kyle@kyle:/media/kyle/Software/Git$ git clone https://github.com/GDUT-Kyle/vscode_git.gitCloning into 'vscode_git'...fatal: unable to access 'https://github.com/GDUT-Kyle/vscode_git.git/': gnutls_handshake() failed: The

2021-09-03 17:08:58 737

原创 Ubuntu18安装微信(deepin-wine版本)完整过程以及采坑记录

Ubuntu18安装微信(deepwine版本)完整过程以及采坑记录(亲测运行)git clone https://gitee.com/wszqkzqk/deepin-wine-for-ubuntu.gitcd deepin-wine-for-ubuntu# 或者 Githubgit clone https://github.com/wszqkzqk/deepin-wine-ubuntu.gitcd deepin-wine-ubuntuchmod +x install.shsudo ./i

2021-06-18 12:11:20 6944 9

原创 VINS(feature_traker模块)细节笔记

VINS-Mono学习笔记(feature_traker模块)说明:VINS的学习过程主要参考VINS-Mono论文学习与代码解读——目录与参考。由于本人基础较差,有很多细节内容不理解,因此针对本人需求编写如下笔记。模块的接口订阅的Topic:订阅话题IMAGE_TOPIC(/cam0/image_raw),执行回调函数img_callbackros::Subscriber sub_img = n.subscribe(IMAGE_TOPIC, 100, img_callback);发布的T

2021-05-29 11:04:41 278 5

空空如也

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

TA关注的人

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