自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

龙猫的博客

做点想做的事

  • 博客(120)
  • 资源 (10)
  • 收藏
  • 关注

原创 LIO-SAM的后端

这部分是 mapOptmization 最主要的内容,订阅 cloud_info 这个自定义主题的消息(这个主题的消息包含后端优化所需要的所有信息,角点,平面点等,可以参考前端的内容)。如果检测到有回环的话,回环会保存在 loopIndexQueue 队列中,因此当队列不为空的时候,就会将所有的回环都取出来,提取出对应的因子图标号,添加因子约束(在第一帧的时候,会赋予较大的方差,因为此时并不信任这个位姿,需要注意此时由于只有一帧,因此只需要加入一个。w 如果是任意的其他的方向,求解出来的方差都会比较小。

2025-08-27 11:12:49 605

原创 自制px4日志工具

在无人机的日常问题排查过程中,看日志是必不可少的一个环节,飞机的本地日志是记录最全的信息,结合自己调试飞机经常查看的字段,制作了这个软件,也算是可以给大家一个新的工具选择吧,方便 px4 开发者以及无人机爱好者查看飞行日志。

2024-09-29 11:40:26 1323 2

原创 ego(10)---仿真地图与点云生成

仿真地图,全局地图点云,局部地图点云生成主要与两个文件有关,random_forset_sensing.cpp 与 pointcloud_render_node.cpp。当然如果是 mockamap 的地图类型生成的话,就是另外的地图生成,不过我们只需要看一下 ego 常规是怎么做的即可,mockamap 也大同小异。局部点云在 pointcloud_render_node.cpp 中定时检测并发布,局部点云其实也就是模拟雷达的点云数据。在生成障碍物后,根据网格分辨率,来保存网格内的障碍物点作为点云。

2025-09-22 15:08:41 245

原创 ego(9)---ego-planner中的动力学仿真

在 ego 中,输出的控制指令包括两个部分,一个是力矩,一个是力矩的方向,也就是角度,最终是单独将方向转化为了四元数来发布出来,这部分内容在 SO3Control.cpp 中。姿态角的力矩需要乘以力臂 d ,于是,单电机与姿态力矩的关系就为 F = M1 / (2*d) 或 F = M2 / (2*d),分别对应横滚与俯仰。然后逐轴分析,单个电机的转速平方就是总推力/(4*kf),再叠加横滚俯仰轴的的力矩 / (2*d*kf),再叠加偏航力矩 / (4*km)。

2025-09-21 23:13:27 765

原创 ego(8)---L-BFGS优化算法与B样条生成最终轨迹

在经过上一步的为 Astar 路径点计算避障基准点与排斥方向后,就会在经过一道带避障约束的优化步骤,得到可以避障的轨迹控制点。这部分的内容也是一个循环迭代的过程,循环调用 L-BFGS 优化器与 B 样条,检测是否满足避障条件。不满足则继续循环优化与B样条。

2025-09-20 21:15:27 979

原创 ego(7)---为Astar路径点计算交点,避障基准点与排斥方向

在 ego-planner 中,在进行了之前的初始轨迹采样,Astar 绕障轨迹,障碍物边界的二次计算后,会有两组点,一组是二次计算后的障碍物边界轨迹点,一组是 Astar 绕障轨迹点,(可以查看之前的 ego 文章)。可以回顾一下点积的概念,结合一下 ego 的场景,两个向量点积就是一个向量在另一个向量的投影,当点积 > 0 时,说明两个向量同向,点积 < 0 时,说明两个向量反向。障碍物基准点:就是在控制点与交点连线上,离障碍物最近的点,在寻找时,使用障碍物网格地图的分辨率在连线上逐次寻找即可。

2025-09-18 16:11:35 450

原创 ego(6)---障碍物边界点的二次计算

了确保障碍段对应的控制点调整区间有足够的控制点,为后续的 B 样条避障调整优化提供充足的调整空间,需要将原始的障碍物边界点来往外扩张。在边界计算的时候,会进行第一次外扩,

2025-09-17 18:33:45 316

原创 ego(5)---Astar绕障

启发函数的作用是用来计算当前节点到终点的代价,在 ego 中,使用量节点的标号差,再结合三维,二维,平面距离来计算。因此,这里就简单回顾一下 Astar 的一些基础概念,然后再分析 ego 工程。在 ego 中使用开集与闭集的概念,区分节点的状态。,这样就可以大致以最优路径来快速收敛到终点。

2025-09-15 17:43:46 984

原创 ego(4)---检测B样条轨迹的障碍物进入点与退出点

在经过 B 样条的控制点采样后,接下来是绕障的环节,绕障使用的是 Astar ,但在使用 Astar 之前,需要进行障碍物进出点的检测与标记。通俗点讲,这部分的作用就是为 Astar 绕障碍做前置准备。grid_map_->getResolution() 表示栅格地图的分辨率,step_size 用来确认采样步长,保证采样点的密度不低于栅格精度,就可以避免越过障碍物。在 ego 中采用了一个小状态机来标记是否发生碰撞,使用内外两层检测,外层只检测初始轨迹的关键区间(中间的 2/3 段,认为首尾段无障碍)。

2025-09-13 18:46:07 293

原创 ego(3)---根据关键点求解B样条控制点

多项式在求解过程中,仅依赖起始点与中止点的位置,而在关键点采样后,再进行 B 样条控制点的计算,则 B 样条的曲线会考虑所有关键采样点的信息,会比较全面;在 B 样条的公式中,比较重要的就是控制点的确定了,因此在 ego 中,在进行初始轨迹生成,然后关键点采样后,会进行 B 样条控制点的计算。多项式生成轨迹时,未知变量的数量为 6 个,而B样条在关键点采样后再生成,未知变量就与采样点的数量有关,为 k + 2,自由度更高。ego 之后的求解 B 样条控制点的函数的作用就是求解上式中的 P。

2025-09-07 14:51:17 315

原创 ego(2)---初始轨迹生成后的关键点采样

在初始的多项式轨迹生成后,是要经过一个关键点采样,使用关键点来进行后续的 B 样条曲线拟合的。根据最终的出循环条件,找到一个距离足够远,且数量大于等于 7 个的采样点的 ts。在上一步的初始轨迹生成后,轨迹方程保存在 gl_traj 中,,用于后续的 B 样条拟合。

2025-09-03 22:49:45 250

原创 ego(1)---ego-planner的初始轨迹生成

以上的 c0 - c5 参数都是 coeff 矩阵的系数,那么之后的核心问题就转化为了以上的 coeff 矩阵各个系数的求解,通俗一点说,就是。,这里就写作 d_critical 吧,当然 ego 的代码里没有这样取名字,它直接用了问号表达式,文章只是解析原理,不用太深究完全对应代码。其中 B 矩阵就是约束向量,表示轨迹起点坐标,终点坐标,起点速度,终点速度,起点加速度,终点加速度。位置:x(t) = c₅t⁵ + c₄t⁴ + c₃t³ + c₂t² + c₁t + c₀。以上的公式也比较容易求解。

2025-08-31 16:17:13 627

原创 B样条曲线

以前在做规划仿真时,用的时贝塞尔曲线,但贝塞尔曲线有一个缺点,就是所有的点都参与计算,在规划中,大部分的情况,计算出来的路径点都是比较曲折的,用标准的贝塞尔就会与计算出来的路径点贴合度不高,这种情况下,当时是写了分段贝塞尔,每5个点为一组来分段计算贝塞尔。大体是按照上述的递推公式来编写递归函数,当然,这个递归函数有一些细节需要注意一下。由于 k = 1 时,就会退化为分段函数,因此 k 至少也要为 2。,因此许多的规划算法也都采用B样条的方式来平滑曲线。P 点就是控制点,也就是规划时的关键路径点。

2025-08-19 18:09:38 660

原创 kd树的原理

在激光雷达建图的学习中,经过会遇到这个 kd 树的概念,来在全局地图中搜索当前特征点最近邻的几个点,那么其原理是怎么样的?三维的点不好画图示意,使用二维点来示意建树过程。的形式,从而达到加速查询的目的。kd 树的核心思想是通过。

2025-08-05 17:25:25 513

原创 rk3588跑通速腾雷达RS16的ros点云读取

速腾的这个说明书写的还是很详细的。只是如果是跑在嵌入式端,例如我想使用 rk3588 来跑,就会遇到一些问题。会提示找不到包(已经换源),这时候就需要使用源码安装的方式来安装,整个步骤就非常麻烦。,也是同样的使用 apt-get install 会报错,需要源码安装。能够 ping 通192.168.1.200 就表示能收到雷达数据了。$(nproc) 根据你自己的板子性能来,我的就 2 就行。按照上述说明书中的端口配置即可,libpcap 会依赖两个包。就把对应的路径添加到。

2025-07-25 20:40:23 543

原创 pyqt动态拖拽调整视窗比例

我当时在使用 QSplitter 后,wighet 就无法填充整个窗口了,这个是由于当时是将 QSplitter 当成了一个控件放在了主界面的布局里,因此 QSplitter 会被挤压或者被留了边距,导致无法完全填充。一直想给我的日志工具实现自由调整视窗比例的功能,之前一直以为拖拽调整视窗比例是在分割线上做,后面才知道是使用 QSplitter ,关于 QSplitter 有一些需要注意的地方。打破布局后,才能添加 splitter。根据需要选择是垂直还是水平分割。

2025-07-23 09:55:56 316

原创 faster-lio与fast-lio中如何修改雷达的旋转角度

修改对应的参数文件,因为我的仿真使用的 avia,因此就修改 avia.yaml 文件中的旋转矩阵。

2025-07-20 17:46:40 537

原创 faster-lio仿真环境问题及解决

在按照 XTDrone 的文档步骤搭建 faster-lio 的仿真环境后,运行可能会出现各种报错问题,本篇仅就环境搭建的问题提供一些解决思路。

2025-07-17 17:12:48 651

原创 slam中的eskf观测矩阵推导

例如在 fastlio 中,是利用平面特征点到拟合平面的距离来构造观测方程,利用平面特征点到拟合平面的距离应该趋向于0来列方程。假设拟合后的法向量为 u = [A, B, C]',截距为 D,在之前的《slam中的eskf推导》一文中,没有写观测矩阵 H 矩阵的过程,现在补上这部分。

2025-07-15 13:55:37 295

原创 在FASTLIO工程中添加新的ros点云雷达类型

我因为方便调试,直接把其他的给屏蔽了,可以看到在 FASTLIO 中,只有 livox 的雷达会单独处理,其他的都会进入固态雷达回调,本来探维的雷达也是固态雷达,但固态雷达回调中我看没有时间同步的处理,我是外置的 imu ,需要进行时间同步,因此就单独写了一个回调,其实直接修改固态雷达的回调也可以。探维的 sdk 支持发布 ros 的点云主题数据,因此修改为接收 ros 的点云主题数据即可。因为我的是探维的雷达Scope256,就直接取这个名字。

2025-07-11 14:46:49 470

原创 编译faster-lio报错

编译faster-lio报错时,检查是否已经安装了 livox_ros_driver,我的 catkin_ws 中已经安装了:因为 faster-lio 的工程目录下把 livox 的驱动给包含了,因此会冲突,需要将此文件夹删掉,目录为:

2025-07-10 11:39:29 472

原创 ros+px4仿真中的二维激光雷达消息

在上面的数据结构中,range_min 和 range_max 表示激光雷达的测量范围,因为激光雷达在太近和太远的地方都不准确。加入 range_min 为 -pi,range_max 为 pi 则扫描就是从 -180 度开始,到 +180 度结束。LaserScan 消息是 ros 激光扫描数据的软件层表示。ros 提供了一个特殊的消息类型 LaserScan来存储激光信息。ranges 则是一个数组,里面存放的就是距离数值。这些数据也都对应了 launch 文件中的参数。后续再修改world文件即可。

2025-07-05 16:12:50 573

原创 volans的控制px4画圆思路

可以看到在这里加载了 ros 的节点包,并且配置了参数,之后就会调用 ros 相关的节点程序。launch用于加载各个模型以及脚本文件,画圆的主 launch 文件在 src/simulation/launch/Demo/px4_quadrotor/ 目录下的 circular_px4.launch。主流程中,设置了一个状态机,先等待 offborad 模式,切换到 offboard 模式后,切换其他状态,一步一步发布圆形的轨迹。包含四个部分:运行世界模型,飞机模型,画圆启动程序,键盘控制脚本。

2025-07-05 16:01:58 348 2

原创 断联ssh后,如何关闭正在运行的python脚本

接上篇,在使用脚本来采集雷达与 imu 的时候,发现了一个问题,我用 ssh 连接 3588,启动脚本,然后拔掉网线采集数据,采集数据后,再重新连接 ssh,就没办法用 Ctrl+C 来中断脚本了。我这里是运行了一个 helper.py 找到其对应的 id 为 38752。

2025-07-02 16:15:29 197

原创 编写rosbag脚本记录雷达与imu数据包

雷达使用的是探维的雷达,他们驱动中发布的是 PointCloud2 类型的包,imu就直接通过mavros来获取飞控的imu数据,脚本中订阅数据然后在回调中写入即可,代码比较简单。由于雷达比较大坨,而且是需要搭配 rk3588,以及外部的 imu 数据,我是直接拿了一个飞控来发送 imu 数据给 3588,(我的雷达内部没有imu),因此携带着测试不是很方便,需要编写一个脚本来采集雷达与imu数据,后续就可以在座位上调试。运行后,使用 rosbag info 可以看到保存的信息。

2025-07-01 17:05:29 457

原创 VScode使用usb转网口远程开发rk3588

rk那边就直接插入usb转网口以及网线,这样自动连接 vscode,也是可以连接上的,但不稳定。没过10分钟就会断联,然后过一会又能连上。我使用的是鲁班猫的板,只有一个网口,需要接雷达,因此另外弄了一个usb转网口来连接电脑开发。之后就可以稳定连接调试了。

2025-06-28 17:44:16 411

原创 rk3588获取探维雷达数据

可以在上期部署完 FASTLIO 的工作空间内,继续部署探维雷达的驱动程序。不要问为什么不用 mid360,因为我手上只有探维雷达。,这部分是查询雷达网站知道雷达的端口号。

2025-06-27 17:31:39 440

原创 rk3588部署FASTLIO环境

内存占满,之后就编译报错了,这种情况一种是可以自己弄一个交叉编译环境,但配置非常麻烦,另一种就。可以看到编译时,在原本的 4G 空间用完之后,就会使用虚拟内存。然后就可以编译成功了。

2025-06-25 19:13:04 394 2

原创 px4仿真使用fastlio的定位数据飞行

前提是已经配置好 px4 的仿真以及 fastlio 的环境,可以用 XTDrone 的教程配置,比较快一些。我是按照 XTDrone 的教程配置好了 livox_avia 的环境。可以自己试一下,切不到才是正常的。查看 mavlink 消息中,也没有 local_position 之类的本地坐标消息。此时正常修改完后,是要软重启的,但仿真没办法软重启,就关掉再重启一下 px4 仿真。1)修改EKF2配置参数,采用视觉定位数据(只是它起这个名字,用雷达也是一样的)

2025-06-19 15:20:22 1308

原创 PCA(主成分分析)为什么与特征值有关系

w 如果是任意的其他的方向,求解出来的方差都会比较小。这里目标函数就变成 max(W'CW),因为有约束条件 w'w = 1,因此求解它的时候可以借助。根据如上的推导计算,可以求解出建立拉格朗日方程时的。

2025-06-17 16:59:41 298

原创 slam中的eskf推导

前面的位置部分没什么好说的,但由于速度部分与旋转是由关联的,因此需要先看旋转部分。其中 t 表示 truth,真实值的意思。速度部分的求解与旋转是类似的,也是。

2025-06-04 09:43:20 234

原创 iEKF的二维应用实例

后续在实际项目中实践算法的优劣。iEKF 简单理解就是。

2025-05-30 17:18:16 430

原创 配置Fastlio环境到XTDrone

针对三维固态雷达的仿真,XTDrone 的官方文档中的教程,是配置的高博的 faster-lio ,是基于 fastlio 修改的一个轻量版本,但我的环境在实际使用中,经常运行不正常,点数少了,漂移会比较严重,有时还会报错,点数多了的话,就会崩掉,因此更换了 Fastlio 版本进行仿真,可以正常运行。目的就是调用从 XTDrone 复制过来的模型文件,如果已经是这样了,就不用修改。之后重新编译 catkin_ws。运行 fastlio。

2025-05-29 10:54:51 800 10

原创 XTDrone配置ALOAM三维激光SLAM环境

需要将 A-LOAM 中所有cpp文件中的主题类的 /camera_init 修改为 camera_init。这个涉及到后续运行 rviz 中的坐标系转换问题,编译完成后,检查 ~/.bashrc 文件中是否有添加 source ~/catkin_ws/devel/setup.bash。前提是已经配置到了 XTDrone 的基础环境,可以编译 px4,以及运行 ros。注意这个报错有多处,上面只是示例了一处,根据报错信息的文件,一个个修改即可。因为我的系统本来就已经有 PCL 库,因此直接就编译过了。

2025-05-20 14:11:24 583

原创 贝叶斯概率

1)需要已知初始置信度bel(x(0)),因为贝叶斯滤波算法算法是递归进行的:t 时刻的置信度bel(x(t))是由 t-1 时刻的置信度bel(x(t-1))计算得到的。用已经观测到的测量z(t)的概率(似然概率) 乘以 置信度_bel(x(t))(先验概率)得到最后的置信度(先验概率)bel(x(t))x(t)的置信度(后验概率)表示为:bel(x(t)) = P(x(t)|z(1:t),u(1:t))其表示为 _bel(x(t)) = P(x(t)|z(1:t-1),u(1:t))

2025-05-16 11:51:02 925

原创 转发多台px4仿真UDP数据到地面站

在上述代码中,UDP 在接收时是用不到此ip的,也就是 gcs_sock.bind(('', gcs_tx_port)),函数中的 ip 可以不填,只需要将端口号填对即可,但在发送时,需要指定 ip,而且在给飞控发送心跳时,需要绑定端口号为飞机的端口号。,因此,需要编写一个脚本在主机运行,接收 wsl 中仿真飞机的数据,通过主机的 ip 与端口发送给 app 的主机 ip 与端口(),并且,接收 app 的命令,转发给三台飞机(命令中会包含飞机id,因此脚本不需要做筛选,直接转发给三个即可)。

2025-05-13 18:05:56 879

原创 px4的时钟配置宏

例如v6x,PX4的时钟配置宏在 px4/fmu-v6x/nuttx-config/include 文件夹中。时钟配置宏的含义对照 cubemx 的时钟树来看会更清晰。v6x使用的是16M的外部晶振,最终需要配置 480M 的系统时钟,一般使用的是25M,但从配置难度上,16M会比25M配置更容易一些。v6x默认使用 HSE ,即外部晶振作为时钟源。PLL输入源的频率根据配置选择不同的范围。最终得到 480M 的最大时钟频率。

2025-03-24 10:46:51 508

原创 px4的垂向控制

例如手控的垂向控制,在手控高度规划 FlightTaskManualAltitudeSmoothVel 中,根据垂向的目标速度,与xy轴的速度轨迹规划一样,也是将目标速度带入速度S曲线,生成相应的轨迹(加加速度,加速度,速度,位置)等垂向信息,之后作为控制输入,代入旋翼的位置控制类 MulticopterPositionControl ,在此类的主循环中,更新位置与悬停油门(推力)的估计数据,调用位置控制类 PositionControl 进行 PVA 控制。1)正常飞行时,高度目标不设置,即为NAN。

2025-03-22 13:43:01 1137 2

原创 px4协处理器bootloader

它的结构很简单,针对不同的硬件配置使用 #if --- #elif --- #end 宏条件编译语句进行配置。也就是说,设置的 200ms,如果在进入 bootloader 后,200ms之内,没有接收到数据,则判断超出时间,则跳转到 app 偏移地址中,如果 200ms 之内,接收到了数据,则停止计时,开始进入接收数据状态。:包含 Makefile,Makefile.f1,Makefile.f3,Makefile.f4,Makefile.f7 五个文件,分别对应系统总的编译流程以及各系列芯片的编译流程。

2025-03-14 14:56:09 1339

原创 八叉树地图的原理与实现

八叉树地图适合做大地图的建模,因为地图较大的情况下,体素图会占据大量的空间,不利于存储,因此八叉树地图适合做全局地图建模,用于做全局规划。体素图因为数据结构简单,建模速度快,因此适合做局部小地图的建模,用于局部规划,做动态避障。也就是说,在一定大小的三维空间内,

2025-03-13 23:54:36 875

16*16点阵汉字滚动显示C51程序,仿真,protues16*16点阵元件库,以及中英文取模软件

16*16点阵汉字滚动显示C51程序,protues仿真,protues16*16点阵元件库,以及中英文取模软件一起打包,可用作学习用,protues没有16*16点阵,资源内包含16*16点阵元件库,以及加入protues的方法描述

2017-04-16

Matlab实现感知哈希算法

参考网上博客的感知哈希算法的理论知识,实现基本的感知哈希算法,内有几张图片用来测试,程序可参考。

2017-11-12

使用AndroidStudio开发简易进制转换计算器

使用AndroidStudio开发简易进制转换计算器,内含工程文件以及最终在手机上的效果图

2018-05-01

opencv2.4.9实现简易人脸美颜

使用opencv实现简易人脸美颜程序,压缩包内附带运行结果效果图。程序可做学习参考。

2018-05-09

简易波形发生器

压缩包内包含51程序文件,protues仿真文件,简易波形发生器,可发生正弦波,三角波,矩形波

2018-03-13

单片机DS18B20

51单片机DS18B20,程序工程+protues仿真,1602显示温度

2019-05-05

单片机计时器

单片机计时器,时分秒计时,锁存器控制数码管6个数码管显示,程序工程+protues仿真

2019-05-05

Android Studio使用opencv打开摄像头.java以及.xml

本资源只包含两个重要文件,活动文件与界面文件,包含使用opencv打开摄像头部分,而且解决使用opencv打开摄像头会旋转90度的问题,解决办法仅供参考。

2017-05-14

单片机使用PCF进行AD采值并使用MAX232双机通信,程序加仿真

使用两块单片机,A单片机使用PCF进行AD采值(IIC通信),使用MAX232与B单片机进行通信,B单片机接收数据,并用LCD1602显示出来,程序+仿真

2018-07-30

单片机超声波测距

压缩包内包含程序工程,实物图,使用1602显示超声波测距

2018-03-13

空空如也

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

TA关注的人

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