自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 stm32备份

存储器的分类:存储器首先根据断电后存储的数据是否会丢失,可以分为易失存储器和非易失存储器,易失存储器主要应用于内存,非易失存储器主要用于外存。易失存储器以RAM随机存储器为代表,随机的含义是存储器中的数据读取或写入所花费的时间与位置无关。

2023-10-15 22:58:20 710

原创 C语言学习笔记

指向数组的指针在进行加减运算时,地址移动的大小是该指针所指向数组大小的整数倍,指向数组的指针在第一次解引用时返回的是其所指向的数组的首地址,第二次解引用返回的是数组中元素的值,所以。实参为指针变量,形参是指向指针的指针,指向实参指针变量的地址,malloc返回申请的动态内存地址,形参通过解引用符得到实参的指针变量,使得实参指向动态内存地址,函数调用结束后,销毁指向指针的指针形参。free会释放指针指向的动态内存,但是该指针所指向的地址依然不变,这样的指针被称为野指针,应该将该指针的值设置为。

2023-09-28 13:50:19 250

原创 shell脚本学习笔记

最常用的就是半导体厂商或者开发板厂商的 uboot,所以uboot移植是指通过半导体厂商提供的uboot适配自己的开发板。一个文件的权限包括读取、写入、执行,权限范围包含所有者、所属组、其他人,可以通过数字或者字母描述一个文件的权限:读取权限对应r或4,写入权限对应w或2,执行权限对应x或1。例如7代表读取写入执行权限,6代表读取写入权限,5代表读取执行权限,4代表读取权限,3代表写入执行权限,2代表写入权限,1代表执行权限,0代表无权限。uboot 官方的 uboot 源码是给半导体厂商准备的,半导。

2023-09-28 09:34:24 248

原创 Linux驱动开发笔记

疑问中每个操作函数的形参中inode的作用设备树中compatible属性中厂商和型号如何填写llseekreadwritepool等等,这些操作函数都要需要完成实现。为实现“高内聚,低耦合”的软件设计理念,Linux驱动采用了内核加载的方式,将驱动编译成模块(Linux 下模块扩展名为.ko),在Linux 内核启动以后使用“insmod”命令加载驱动模块,用“rmmod”命令卸载具体驱动模块,相应地需要注册模块加载函数和模块卸载函数。

2023-09-26 08:21:52 458

原创 VINS预积分推导

数学基础可以通过运算(⋅)∧{\left( \cdot \right)^ \wedge }(⋅)∧将三维向量ω∈R3\omega \in {\mathbb{R}^{3}}ω∈R3转换为对角线为零的反对称矩阵 ω∧∈R3×3\ {\omega ^ \wedge } \in {\mathbb{R}^{3 \times 3}} ω∧∈R3×3:ω∧=[ω1ω2ω3]∧=[0−ω3ω2ω30−ω1−ω2ω10](1.1){\omega ^ \wedge } = {\left[ \be

2023-05-18 17:01:08 584

原创 VINS预积分推导2

可以通过运算(⋅)∧{\left( \cdot \right)^ \wedge }(⋅)∧将三维向量ω∈R3\omega \in {\mathbb{R}^{3}}ω∈R3转换为对角线为零的反对称矩阵 ω∧∈R3×3\ {\omega ^ \wedge } \in {\mathbb{R}^{3 \times 3}} ω∧∈R3×3:ω∧=[ω1ω2ω3]∧=[0−ω3ω2ω30−ω1−ω2ω10](1.1){\omega ^ \wedge } = {\left[ \begin{array}{l}{\

2023-05-18 17:00:25 537

原创 六轴IMU估计自身在世界坐标系的位姿

一般的IMU包含三轴的加速度记和三轴的陀螺仪,成为六轴IMU,可以提供IMU坐标系下三轴加速度的测量以及IMU坐标系下三轴角速度的测量,而有的IMU包含三轴的磁力计,可以提高IMU在世界坐标系下的姿态。世界坐标系是指惯性系,即重力方向与Z轴重合。但是六轴IMU由于可以测量出重力方向,可以通过自身线加速度和角速度测量数据,估计自身在世界坐标系下的姿态。...

2022-08-17 10:43:30 2016 1

原创 【无标题】

完全

2022-06-15 09:48:59 167

原创 EPnP: Accurate Non-Iterative O(n) Solution to the PnP Problem

EPnP是一种非迭代的求解PnP问题的方法,根据3D地标点和2D特征点之间的匹配求解相机的位姿,本方法的时间复杂度增加是线性的。本方法的核心是根据虚拟的控制点的权重和来表示n个3D点,因此PnP问题转换为估计控制点在相机坐标系下的坐标,需要计算12x12矩阵的特征向量,求解固定数量的四元方程来求解权重。并且闭式解可以通过高斯牛顿法来优化。所谓PnP问题就是相机的内参以及n对3D地标点和2D特征点之间的匹配关系,以及3D地标点在世界坐标系下的坐标, 求解相机位姿的问题。现有的非迭代方法只能选取小部分的点进行

2022-06-08 18:01:51 1334

原创 Scan Context

回环检测方法分类LEGO-LOAM使用半径搜索的方式进行回环检测,根据当前关键帧的距离和时间戳信息选择候选帧,找到距离当前关键帧一定半径范围内并且时间相隔较远的关键帧作为候选帧进行ICP匹配。这种方法在累计误差不大的情况下可以完成回环,但是在大场景情况下由于不断积累的误差,可能导致无法通过距离搜索回环帧,导致无法完成回环检测。Scan-context是一种3D点云全局描述子,表示点云的几何信息,因此可以对不同关键帧的SC描述子进行匹配,找到历史关键帧中和当前关键帧相似的点云,从而找到回环帧。它通过各个

2022-05-23 16:47:12 2576 2

原创 Scan Context: Egocentric Spatial Descriptor for Place Recognition within 3D Point Cloud Map

前言Scan-context是基于结构信息的全局定位方法,它不依赖于直方图全集描述子或机器学习方法,直接记录点云的3D结构信息。此外,本文还提出了计算两个Scan-context相似得分的方法以及回环检测的两步搜索方法,使得回环检测不依赖于位置。SLAM中位置识别为回环检测提供候选帧。视觉位置识别容易受到光线变化的影响。激光位置识别存在两大难题,当同一位置下不同航向角的描述子要求旋转不变性,另外,描述子必须处理点云中的噪声。直方图可以解决这两个问题,但是直方图只提供了场景中的随机索引,难以直接表达场景

2022-05-23 15:16:58 663 1

原创 Targetless Calibration of LiDAR-IMU System Based on Continuous-time Batch Estimation

引言本文提出了一种标定激光雷达和IMU六自由度外参的方法,采用基于B样条的连续时间轨迹描述IMU数据,它相比基于离散时间的方法更适用于高动态以及异步的测量数据,另外本方法采用了点到点元的匹配方法,使得优化问题得到的良好的约束。激光雷达往往和IMU一起配合使用。由于一帧点云中的每一个点都是在不同时刻下采集的,随着点云扫描时激光雷达的运动,点云中不同时刻采集得到的点的位置会随着激光雷达的运动而受到影响,因而产生运动畸变。为了消除点云中的运动畸变,往往使用IMU提供的对与本体运动的高频率测量数据,对运动畸变进

2022-05-18 09:18:59 485

原创 点云配准ICP&NDT

NDT简介很多匹配算法需要在两帧数据之间进行特征匹配,例如ICP中会进行点到点、点到线、点到面的特征匹配,特征匹配的效果最终决定了点云配准的效果,而NDT不需要进行特征匹配。NDT是将第一帧点云转换至栅格地图,每个栅格计算其中点的正态分布,因此将第一帧点云转换为一个个栅格表示的分段连续可导的概率密度函数,使用正态分布概率密度函数描述点云的局部性质。然后将第二帧点云投影至栅格地图中,计算出第二帧点云在栅格地图中的概率,通过牛顿法找到最佳匹配位姿,使得第二帧点云投影至栅格地图后概率最大化,最终完成点云配准。

2022-05-17 01:17:45 3182

原创 IMU内参标定

IMU内参标定参考文献:A Robust and Easy to Implement Method for IMU Calibration withoutExternal Equipments标定方法首先静止IMU一段时间,作为IMU的初始化,之后改变IMU的位姿并静止一段时间,重复这个步骤一定此时,完成标定数据的采样,最后由标定算法计算出IMU标定参数。IMU误差模型由于安装精度,IMU中无法保证三个线加速度传感器或者角速度传感器之间成两两垂直的几何关系,因此产生错位误差,IMU需要将原始测

2022-05-14 15:10:47 1532

原创 实时相关扫描匹配Real-Time Correlative Scan Matching

引言本文提出了一种基于概率是扫描匹配算法,可以提供更高质量以及更鲁棒的匹配效果。扫描匹配算法的挑战是一边减小运算复杂度另一边提高计算结果的质量和健壮性,现有的前端扫描匹配算法为了降低运算复杂度,计算误差往往容易受到初始值的影响,原因是扫描匹配问题通过非线性最小二乘方法计算时,代价函数往往是非凸的,存在许多局部最小值,如果初始值存在一定的误差,那么在非线性优化的过程中计算结果往往陷入局部最小值,无法计算出全局最小值,从而降低了扫描匹配效果。相关扫描匹配算法基于概率框架,在一定的可行区域内搜索所有可能位姿

2022-05-10 23:10:28 420

原创 PCL 自定义点云类型出现未定义的引用

参考PCL官方文档进行自定义点云类型时,在编译调用滤波算法的cpp文件中出现了未定义的引用错误。原因是调用滤波算法的文件中未添加PCL_NO_PRECOMPILE宏定义。

2021-12-10 17:51:33 955 1

原创 ROS学习之时间

参考:Clock,Time,ROS提供了一组有关时间的API,方便在程序中获取时间信息。时间信息的来源有两种,系统时间和仿真时间,分别被称为Wall Time和ROS Time,可以通过参数use_sim_time来进行选择,当use_sim_time为true时选择使用仿真时间,反之使用系统时间。系统时间直接通过访问本地时钟来获得,而仿真时间则需要订阅/clock话题的消息获得,每当接收到该话题的消息,时间才会更新,在没有接收到该话题的第一个消息时,当前时间为0,/clock是通过仿真时间服务器发布的

2021-11-01 17:02:06 427

原创 ROS学习之主从机配置

参考:NetworkSetup,EnvironmentVariables,MultipleMachines在多机器运行ROS时,只有一个机器可以运行ros master,该主机称为主机,其他机器成为从机。主机地址通过环境变量ROS_MASTER_URI指定,配置网络设置时应当修改所有机器的ROS_MASTER_URI为主机的地址。不同主机上的节点发布的话题是通过主机名:端口号来标识的,主机名是在本机器上运行hostname获得的,因此为了不同主机上的节点可以顺利订阅话题,各个机器的主机名必须可以被所有机

2021-11-01 15:48:18 372

原创 ROS时钟理解

ROS提供了各种有关时间的API,方便在节点中使用时间信息,通常时间信息来自于运行节点的主机时间,即Wall Time,但是当播放bag文件或者仿真时,各个会使用仿真时间而不是主机时间,以方便控制时间的前进和后退,例如在播放bag文件时,/playbag节点会发布clock话题提供仿真时间,而其他所有使用时间信息的节点会订阅该话题获得仿真时间,从而使整个系统使用仿真时间。注意:只有使用ros提供的时间API才会自动在系统时间和仿真时间之间切换。参考连接:Clock,API...

2021-09-09 10:28:58 311

原创 Apollo详解之感知模块——毫米波感知

在函数ContiArsDetector::Detect函数中可以看到,目前毫米波感知的内容为:位置、速度、朝向、运动状态、类型、置信度

2021-08-09 19:20:00 741

原创 Apollo详解之感知模块——摄像头识别

前言摄像头感知可以完成障碍物识别、车道线识别、红绿灯识别三种功能。首先读取摄像头感知配置文件,该配置文件目录modules/perception/production/conf/perception/camera/fusion_camera_detection_component.pb.txt,目前摄像头感知模块只支持双摄像头感知,按照官方推荐分别是6mm和12mm焦距的摄像头。初始化需要摄像头的内参和外参标定文件,相关标定文件在文件夹modules/perception/data/params下,内

2021-08-09 19:19:54 1145

原创 Apollo详解之路由模块——初步学习

前言路由模块的功能是,根据用户在高精地图中选取的一系列路径点,在拓扑地图中规划产生一条路径。各个路径点之间根据A*算法进行规划路径。

2021-08-04 19:04:51 423

原创 Apollo详解之感知模块——点云识别

前言Apollo感知模块激光雷达感知文档基本介绍激光雷达感知dag文件为modules/perception/production/dag/dag_streaming_perception_lidar.dag,其中分别存在DetectionComponent、RecognitionComponent、FusionComponent、V2XFusionComponent四个组件。DetectionComponent该组件的功能是处理激光点云消息,获得对应的障碍物信息LidarFrameMessage

2021-07-29 18:59:14 1675

原创 Apollo详解之定位模块——学习总结

前言经过几天对定位模块粗浅的学习,对该模块有了大致的了解,不过由于时间的原因,没有深入研究代码细节,更没有花时间研读相关论文,但是在此也有一些问题,用作记录,方便日后复盘。官方数据集无法跑通我是在Apollo官方网站下载的数据集,可是在跑MSF定位模块和NDT模块时,由于各种原因,无法跑通!msf_visualizer打开后黑屏RTK定位模块的功能只是将Gps和Imu数据组合NDT和MSF定位地图问题生成MSF定位地图时,需要Gps定位消息和激光点云消息才能生成用于MSF融合定位地图,但是该定

2021-07-23 23:12:07 1025 2

原创 Apollo详解之代码调试——在VSCODE中调试

前言在学习了解Apollo各个代码模块时,不可避免地要对各个模块进行调试,由于Apollo运行在容器当中,代码结构较为复杂,使用GDB调试工具时间成本高,因此使用VSCODE的调试插件对Apollo各个模块进行调试,可提高调试效率,更加直观的了解代码运行流程。该官方文档中提到了如何进行代码调试,但本人实际验证发现调试效率不高,因此萌发了使用VSCODE进行调试的想法。准备工作首先需要在VSCODE中下载插件Remote - Containers,该插件在VSCODE中可以使用户进入docker容器中

2021-07-23 22:53:53 5255 6

原创 Apollo详解之定位模块——MSF定位

前言代码分析MSFLocalizationComponent::Init该组件的初始化函数,msf定位组件也是通过命令行参数进行初始化,各参数均在modules/localization/conf/localization.conf文件中进行定义,外参文件:modules/localization/msf/params/gnss_params/ant_imu_leverarm.yaml作用未知leverarm: primary: offset: x: -0.5016

2021-07-23 21:11:59 2576 2

原创 Apollo详解之定位模块——生产多传感器融合定位模块所需的地图

前言参考如何生产多传感器融合定位模块所需的地图scripts/msf_simple_map_creator.sh脚本运行方法Usage: msf_simple_map_creator.sh [records folder] [extrinsic_file] [zone_id] [map folder] [lidar_type]cyber_record_parser该文件主要作用是读取record文件,将激光点云保存为pcd文件,其他话题信息保存在txt文件中。该程序会对record文件中的cl

2021-07-23 14:56:09 1044

原创 Apollo详解之定位模块——NDT定位

前言代码分析NDTLocalizationComponentNDTLocalizationComponent::Init该函数完成了NDT组件的初始化工作。该组件通过命令行参数gflag对相关参数进行初始化,各命令行参数的默认值可参考modules/common/adapters/adapter_gflags.cc和modules/localization/common/localization_gflags.cc,该组件读取命令行参数配置文件modules/localization/conf/lo

2021-07-22 20:34:06 1918

原创 Apollo详解之定位模块——RTK定位

前言Apollo的定位模块提供了三种定位方法,分别是RTK、NDT、MSF。所谓RTK定位,可参考百度百科RTK(Real Time Kinematic)实时动态测量技术,是以载波相位观测为根据的实时差分GPS(RTDGPS)技术,由基准站接收机、数据链、 流动站接收机三部分组成在基准站上安置1台接收机为参考站, 对卫星进行连续观测,并将其观测数据和测站信息,通过无线电传输设备,实时地发送给流动站,流动站GPS接收机在接收GPS卫星信号的同时,通过无线接收设备,接收基准站传输的数据,然后根据相对定位的

2021-07-20 23:01:19 4338

原创 Apollo详解之transform模块

前言坐标变换在机器人系统中十分重要,有关坐标变换,可参考ROS官方文档tf2。静态坐标变换静态坐标变换是指两坐标系之间的变换关系是固定的一种坐标变换,常用于表示汽车上两位置固定坐标系之间的变换关系,例如各个传感器之间的坐标变换。坐标变换使用的是一种树型的数据结构,即对于一个子坐标系来说,其只能存在唯一一个父坐标系的坐标变换关系。StaticTransformComponentApollo通过StaticTransformComponent来发布静态坐标变换,其作用是读取modules/trans

2021-07-20 11:40:38 1061

原创 Apollo详解之标定模块———标定读取

前言每个车型会在modules/calibration/data文件夹下有一个单独的文件夹,保存该车型的参数以及配置文件。在Dreamview中切换车型时,该文件夹下的所有文件会覆盖对应的文件,从而实现不同的车型拥有不同的配置。文件间的对应关系可参考modules/dreamview/conf/vehicle_data.pb.txt目录结构*_conf该文件夹保存各个驱动组件的配置文件*_params该文件夹保存各个硬件的YAML配置文件vehicle_param.pb.txt该车型的配置参

2021-07-19 22:35:44 606

原创 Apollo详解之标定模块———传感器设备标定

激光雷达标定方法激光雷达的标定是指激光雷达到组合导航之间外参的标定。激光雷达标定可参考:基于激光雷达的封闭园区自动驾驶搭建–感知设备标定Apollo LiDAR - IMU Calibration Service补充初始化外参文件当数据采集完成,需要进行预处理时,激光雷达的初始化外参配置可以在modules/dreamview/conf/lidar_to_gnss_preprocess_table.pb.txt文件中根据车辆实际进行修改,其具体定义在modules/dreamview/prot

2021-07-19 22:04:08 2096

原创 Apollo详解之标定模块———车辆动力学云标定

前言车辆云标定是通过采集车辆底盘油门踏板量、刹车踏板量、车辆速度、加速度作为车辆纵向动力模型的输入,通过机器学习的方式,生成相应车辆的踏板标定表,生成的标定表数据量大,精度高,提高车辆的控制精度。标定方法具体可参考Apollo官方文档:循迹搭建–车辆动力学云标定Vehicle Calibration Online Service本文对官方文档进行一些补充。表定表文件表定标文件的详细定义可参考modules/dreamview/proto/data_collection_table.proto

2021-07-18 21:48:21 1855

原创 Apollo详解之常用工具

plot_control将控制模块输出的油门刹车转向参数以图标的形式打印出来。使用方法运行bash modules/tools/plot_control/run.sh开始订阅控制消息,CTRL+c结束订阅,然后会显示这一段时间内油门刹车转向随时间的变化关系。realtime_test设定加速度阈值,车辆加速度超过该阈值时打印信息。使用方法./bazel-bin/modules/tools/plot_control/realtime_test --acc 1命令行选项--acc代表加

2021-07-18 17:04:36 623

原创 Apollo详解之地图模块———制作高精地图

前言Apollo自带了一些工具能够制作简单的高精地图在Lgsvl仿真器中制作高精地图Lgsvl仿真环境下相对地图的制作在没有实车的情况下,我们可以通过Lgsvl仿真器使用相对地图模块。本文使用的Apollo版本:6.0打开Lgsvl仿真器,选择Cube Town地图,进入仿真环境2.打开Dreamview,并确认Apollo与仿真器连接bash scripts/bootstrap_lgsvl.sh bash scripts/bridge.sh4.录制数据包开始录制cyber

2021-07-17 22:47:43 4622 8

原创 Apollo详解之定位模块———定位基础知识

定位技术分类目前定位技术主要有:基于电子信号定位。如GNSS航迹推算。如INS环境特征匹配基于电子信号定位GNSS简要介绍全球导航卫星系统GNSS是能在地球表面或近地空间的任何地点为用户提供全天候的3维坐标和速度以及时间信息的空基无线电导航定位系统。GNSS利用一组卫星的伪距、星历、卫星发射时间等观测量,同时还必须知道用户钟差,同时必须对收到4颗卫星才能准确定位。分类GPS。GPS是在美国海军导航卫星系统的基础上发展起来的无线电导航定位系统GLONASS。GLONASS是由原苏联国

2021-07-16 16:45:35 1235

原创 Apollo详解之驱动模块———组合导航驱动

前言组合导航驱动的作用是读取组合导航发送的数据,进行解析后得到相应的消息类型,并将其发布至相关话题。目前Apollo只支持星网宇达Newton-M2驱动。使用方法根据实际修改配置文件modules/drivers/gnss/conf/gnss_conf.pb.txt启动驱动cyber_launch start modules/drivers/gnss/launch/gnss.launch代码简要分析组合导航也是通过Cyber_RT框架的Component调用的,其包含一个成员RawStre

2021-07-15 16:04:47 2547 2

原创 Apollo详解之定位模块———导航设备硬件基础

本文以华测CHC® CGI-610组合导航为例主机安装方法在实际安装时,主机的GNSS1、GNSS2、4G接口分别通过数据线连接两个GNSS天线、4G天线,最后一个COM接口连接数据线,用于连接工控机以及外接电源。数据线接口定义19PIN 数据线主要包括 3 个 RS232,1 个 RS422,1 个 CAN,一个电源口,其中C_RS232:可通过网页配置选择输出组合导航融合数据(包括 GPCHC、GPGGA、GPRMC),最高输出频率 100HZ,默认波特率 230400,其与工控机连接。

2021-07-14 15:09:45 3437 2

原创 Apollo详解之驱动模块———激光雷达驱动

前言激光雷达驱动的作用就是通过UDP协议,接收激光雷达原始数据,并将其解析为点云数据,进行融合和运动补偿后将其发布至相应的话题。目前Apollo支持以下品牌的激光雷达:velodyne支持以下型号:HDL64E_S3SHDL64E_S3DHDL64E_S2HDL32EVLP16VLP32CVLS128hesai支持以下型号:HESAI40PHESAI64robosense支持以下型号:RS16RS32RSBPRS128各驱动的使用方法vel

2021-07-13 21:48:26 2593 1

原创 Apollo详解之高精地图模块——相对地图模块代码简要分析

前言本文主要关注相对地图模块的代码分析,有关相对地图的介绍和相关程序的使用方法可参考另一篇文章。Apollo详解之高精地图模块——相对地图模块navigatornavigator的作用是按一定规则解析路径文件里的内容,并将解析后得到的NavigationInfo发布至/apollo/navigation话题。可在modules/map/relative_map/proto/navigation.proto文件中查看发布消息NavigationInfo的定义message NavigationPat

2021-07-12 16:03:19 2015 2

空空如也

空空如也

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

TA关注的人

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