- 博客(43)
- 收藏
- 关注
原创 movebase改进
3.需要辅助定位功能来获取准确的定位数据(二维码,反光板,uwb ,gps等) 上一个视频我把反光板定则解决了,这个视频把运动控制解决了。movebase 增加pid位置精度调整 ,在一移动机器人到达位置后会再次调整位置,提高定位精度。开源地址https://gitee.com/yongwangzhiqiankai/move_base-kaiyuan.git 请给个start。也就是: 1.要知道自己准确的位置 2.能够运行到准确位置。3.运动控制会直接影响车的到达精度。
2026-07-01 20:27:13
169
原创 激光SLAM之Gmapping从入门到实践
Gmapping是SLAM中比较经典的建图算法,他首先关注的就是如何获取机器人在地图上的准确 定位,因此我们就从这个问题出发来简述一下gmapping的核心技术。首先,机器人开始建图时会选择第一个有效帧来得到初始地图,然后机器人移动到下一个位置时 会得到第二个有效帧,机器人在移动过程中会有一个称之为里程计的设备(odom)会对机器人 得到第二帧时的机器人位姿作出预测,然后我们就可以认为我们得到第二帧数据时的机器人位姿 是已知的,按理来说直接拿着该帧数据与第一帧数据直接拼接就可以了;
2026-05-18 15:01:13
46
原创 USB端口固定
上述实现也存在一定的局限性,当Ubuntu接入两台或多台相同型号的USB设备时,由于设备ID是一样的,该种实现方式只会对其中的一台设备生效,这种情况下,就需要通过第二种策略来实现端口的绑定了。但是无论是外接何种USB设备,也不管采用上述两种方案的哪一种进行端口绑定,其原理都是类似的,只是实现细节不同而已。USB设备所连接主机的USB接口也是有其“标识”的,可以通过这个标识实现端口绑定。USB设备必须连接在主机的指定端口上,否则,会导致端口绑定失败,或产生逻辑错误。
2026-05-12 20:52:47
342
原创 Collator类与数据队列OrderedMultiQueue简介
对 sensor::Dispatchable 以及其父类 sensor::Data 进行了分析,但是并没有讲述 sensor_collator_->AddSensorData 函数是如何使用这些数据的,也就是说没说明 CollatedTrajectoryBuilder::sensor_collator_的来源与作用。在 src/cartographer/cartographer/mapping/internal/collated_trajectory_builder.h 文件中,可以看到看到。
2026-05-08 09:15:35
240
原创 传感器数据类型自动推断与数据利用率计算
在前面的博客中,还有很多细节的东西没有讲解,如下CollatedTrajectoryBuilder::AddSensorData() 函数中的sensor::MakeDispatchable() 函数CollatedTrajectoryBuilder::AddData(std::unique_ptr<sensor::Data> data) 函数的参数sensor::Data类。
2026-04-21 15:42:54
382
原创 robot_localization实现imu和odom融合
使用ekf_nodelet_template.launch,修改ekf_template.yaml参数,在params文件夹。记录使用robot_localization进行融合。
2026-04-17 17:42:22
86
原创 amcl_pose vs tf的位姿输出频率
定位信息的实时性与准确性两者不可缺一,为何自己的机器人运行时会出现卡顿、响应迟缓的问题?经过检查后才发现,/amcl_pose,本文将深入探讨AMCL与ROS变换框架的核心机制,并对通过amcl_pose话题与通过map->base_link的tf变换这两种方式获取位姿的本质区别、适用范围及性能表现进行对比分析。在进行深入比较之前,有必要首先明确这两个概念在ROS定位框架中的功能及其生成机制。它们之间并非简单的“快速版本”与“慢速版本”的对应关系,而是为不同目标而设计的两个独立输出路径。
2026-04-15 22:18:17
424
原创 gitee提交代码
可以在gitee新建一个仓库然后拉下来到本地的新建文件夹里,用gitee终端打开。git config --global user.name '冰水不凉'进入工作空间 cd project(项目文件)git commit -m "首次提交"初始化 git init。# 添加 src 文件夹。
2026-04-14 15:37:28
25
原创 vs配置opencv
先声明:opencv4.10.0\opencv\build\x64\vc16\lib路径中的opencv_world4100d.lib文件依赖项用于配置Debug模式,opencv_world4100.lib文件依赖项用于配置Release模式。测试opencv是否配置成功,测试代码见下。
2026-03-25 15:12:11
91
原创 传感器数据分发CollatedTrajectoryBuilder
首先对前面的知识做一个回顾,从 node_main.cc 文件中开始;//根据配置文件,命令行参数与话题重映射,订阅默认话题开始一条轨迹在node.cc里面// 使用默认topic名字开始一条轨迹,也就是开始slam// 检查TrajectoryOptions是否存在2d或者3d轨迹的配置信息// 添加一条轨迹在node.cc// 调用map_builder_bridge的AddTrajectory, 添加一个轨迹// 新增一个位姿估计器// 订阅话题与注册回调函数。
2026-03-24 21:24:57
379
原创 cartographer源码阅读四-MapBuilder
现在再回到头文件src/cartographer/cartographer/mapping/mapbuilder.h文件,来查看 class MapBuilder,该类包含前端(TrajectoryBuilders,scan to submap)与后端(用于查找回环的PoseGraph)的完整的SLAM。
2026-03-20 16:25:05
404
原创 ROS中使用自定义头文件和源文件的方法--c++版本
首先将头文件RobotCar.h文件存放到功能包文件夹(car_coop_nav)下的include文件夹下的功能包名文件夹内:存放头文件(vehicle_ws/src/car_coop_nav/include/driver/RobotCar.h)最后将需要调用库Coop_Navigation( vehicle_ws/src/car_coop_nav/src/Coop_Navigation.cpp)的。存放源文件(vehicle_ws/src/car_coop_nav/src/RobotCar.cpp)
2026-01-26 17:08:22
71
原创 ROS python import 导入问题
最近在ros里面导入自定义的python文件的时候发现问题,再此记录下。ros的python文件在使用from import导入自定义的时候报错找不到这个自定义的py文件出现这个问题往往是因为环境中没有配置脚本路径。举个栗子:package中添加setup.py文件,下面是我的代码结构当package中的a.py脚本导入b的时候。
2026-01-19 21:39:53
402
原创 cartographer源码阅读二 Node
输入:NodeOptions的变量,mapbuilder类型的指针,tf,是否启用性能监控collect_metrics,默认关闭。可以看到子图的话题名早就被定义了,选中参数F12可以看到下面都是提前定义的话题和服务。
2026-01-15 20:49:09
55
原创 cartographer源码阅读一
gflags是google开源的命令行标记处理库命令行标记,顾名思义就是当运行一个可执行文件时,由用户为其指定的标记gflags主要支持的参数类型包括bool,int32,int64,uint64,double,string等**定义参数通过DEFINE_type宏实现**,该宏的三个参数含义分别为命令行参数名,参数默认值,以及参数的帮助信息当参数被定义后,通过**FLAGS name**就可访问到对应的参数。
2026-01-15 19:15:37
303
原创 手眼标定篇
论文链接:https://arxiv.org/abs/2103.12287 代码链接:https://github.com/acfr/cam_lidar_calibration 基于ROS框架,完成激光雷达相机的外参标定!
2026-01-07 20:46:57
195
原创 【无标题】
本次将会采用以下文献中提到的三角函数法,利用多个激光高强度点来拟合反光柱圆心,并在圆心位置生成标记。将原来用来收集激光数据的结构体增加一栏,用于记录角度,并在代码中相应位置做相应变化。根据公式原理编写用三角函数法拟定圆心的函数将原来查找高强点函数修改为查找高强度点组作为反光柱并确定圆心的函数,主要在于替换原来用最强点确定圆心的函数,并将拟合的圆心集合输出。在处理激光信息函数中获取圆心数据集合,留作下一步开发。
2025-11-04 17:13:28
215
原创 配置Livox-Mid360激光雷达
前面讲解了Livox-aiva,这里也是差不多流程:下载SDK以及ROS包首先连接网线到电脑进行配置,设置有线网卡ip为192.168.1.50测试ping雷达,一般为192.168.1.1xx(为SN码后两位),我这里是112。
2025-10-14 10:26:43
768
原创 ubuntu20.04调试livox aiva驱动获取激光雷达数据
实验环境ubuntu20.04平台包括本地x86平台1.下载相关资料下载包括:Livox Avia 用户手册中文.pdf、Livox_Viewer_For_Linux_Ubuntu16.04_x64_0.10.0(用于显示激光雷达数据)以下链接进行下载2.配置有线网络IP地址(1)界面设置:将实验电脑的 IP 地址设置为:192.168.1.50,子网掩码设置为:255.255.255.0。通上电源连接网线后(2)命令设置ifconfig 查看有线网卡的名称。
2025-10-13 17:55:26
465
转载 利用科大讯飞语音合成模块SDK实现ROS语音交互
将科大讯飞的sdk中/samples/tts_online_sample/文件夹下的tts_online_sample.c文件复制到工作空间下/src/exhibition_nav/src/中,并改名字为tts_subscribe.cpp。unzip Linux_xtts_exp1227_iat1227_tts_online1227_1d36319c.zip -d /home/用户名/Linux_xtts_exp1227_iat1227_tts_online1227_1d36319c。
2025-09-25 18:46:22
569
原创 容器总结篇
是否需要随机访问?→ 选vectordeque(序列式)。是否需要频繁插入删除?→ 中间操作选list,两端操作选deque。是否需要栈 / 队列特性?→ 直接用stackqueue适配器。是否需要去重或键值映射?→ 有序选setmap,追求速度无序选。理解它们的底层实现(数组 / 链表 / 红黑树 / 哈希表),就能快速记住各自的优缺点和适用场景了。
2025-09-20 10:15:42
375
原创 C++ 容器类 <set>和<unordered_set>
set>是 C++ 标准库中一个非常有用的容器,特别适合需要快速查找、插入和删除操作的场景。
2025-09-17 10:32:48
652
原创 C++ 容器类 <queue>
C++ 标准库中的<queue>头文件提供了队列(Queue)数据结构的实现。队列是一种(FIFO, First In First Out)的数据结构,它允许在(称为队首)。
2025-09-17 08:26:33
165
原创 C++标准库<stack>
标准库提供了多种容器和算法来帮助开发者更高效地编写程序。<stack>是 C++ 标准模板库(STL)的一部分,它实现了一个(LIFO,Last In First Out)的。这种数据结构非常适合于需要"最后添加的元素最先被移除"的场景。<stack>容器适配器提供了一个栈的接口,它基于其他容器(如deque或vector)来实现。栈的元素是线性排列的,但只允许在一端(栈顶)进行添加和移除操作。
2025-09-16 21:01:32
312
原创 C++ 标准库 <deque>
deque>是标准模板库(STL)的一部分,它提供了双端队列(double-ended queue)的实现。双端队列是一种允许在两端进行插入和删除操作的线性数据结构。<deque>的全称是 "double-ended queue",它在C++中以模板类的形式存在,允许存储任意类型的数据。<deque>是一个动态数组,它提供了快速的随机访问能力,同时允许在两端进行高效的插入和删除操作。这使得<deque>成为处理需要频繁插入和删除元素的场景的理想选择。
2025-09-16 20:45:30
284
原创 C++ 容器 <forward_list>
C++ 标准库中的是一种容器,它提供了一种的数据结构。与双向链表(std::list)不同,。它适用于需要频繁进行前向遍历和插入、删除操作的场景。以下是对std::listoperator[]atat()std::list。
2025-09-16 20:31:15
209
原创 C++ 容器类 <list>
list>是 C++ 标准模板库(STL)中的一个,它允许在容器的。与数组或向量(<vector>)不同,<list>,并且可以。常用于存储元素集合,std::list是 C++ 标准库对 “双向链表” 这一抽象数据结构的标准化实现,而 “链表” 是更通用的概念(包含单向链表、双向链表、循环链表等多种形式)。
2025-09-16 11:46:39
893
原创 C++ 容器类 <vector>
vector>是 STL 中的一个容器类,用于存储动态大小的数组。<vector>是一个序列容器,它允许用户在容器的末尾快速地添加或删除元素。与数组相比,<vector>提供了更多的功能,如自动调整大小、随机访问等。
2025-09-16 09:57:20
791
原创 c++学习之map容器和unordered_mape
std::map是 C++ 标准库(STL)中的,用于存储,其核心特性是和(每个键在std::map中仅能出现一次)。
2025-09-11 23:02:36
285
原创 git入门使用
第一次系统初始化配置git config --global user.name "robot" #替换成自己的用户名git config --global init.defaultBranch master #master为主分支名字#初始化git init。
2025-09-10 15:15:57
212
原创 Action通信:单点导航
机器人导航到某个目标点,此过程需要一个节点A发布目标信息,然后一个节点B接收到请求并控制移动,最终响应目标达成状态信息。ROS中提供了actionlib功能包集,用于实现 action 通信。action 是一种类似于服务通信的实现,其实现模型也包含请求和响应,但是不同的是,在请求和响应的过程中,更合理的方案应该是:导航过程中,可以连续反馈当前机器人状态信息,当导航终止时,再返回最终的执行结果。或者c++版本的set_goal_node.cpp。在script下新建set_goal.py。
2025-09-09 14:56:24
856
原创 cartographer运行自己的激光雷达、里程计以及IMU进行建图
• TRAJECTORY_BUILDER_2D.use_imu_data 是否使用imu, 如果用imu, tracking_frame 一定要设置成imu的link。• provide_odom_frame 是否提供里程计, 如果bag中有里程计的坐标系, 这个就是 false, 如果没有, 就根据需要决定是否提供里程计的坐标系。• TRAJECTORY_BUILDER_2D.min_z 点云的最小z的范围, 单线点云不能设置大 于0的值(不设置), 多线点云的这个值要大于0。
2025-09-08 11:42:16
708
原创 VMware设置共享文件夹
(1)虚拟机关机情况下,创建一个共享文件夹2)ubuntu中挂载共享文件夹1、如果之前已经挂载 hgfs,先取消挂载2、重新使用以下命令挂载先用id查询uid和gid,我这里都是1000之后应该才/mnt/hgfs/下看到共享文件夹了。
2025-09-08 11:07:44
658
原创 VMware识别不到U盘
3、将usb.restrictions.defaultAllow = "FALSE"改为usb.restrictions.defaultAllow = "TRUE"后保存退出。VM下安装虚拟机,插入u盘虚拟机不显示,并且“虚拟机->可移动设备->u盘->连接(断开与主机的连接)”是灰色的,解决办法。4、重启虚拟机即可看到“虚拟机->可移动设备->u盘->连接(断开与主机的连接)””选项将不再为灰色。5、点击“连接(断开与主机连接)”,即可在Ubuntu桌面下看到U盘成功挂载。
2025-09-08 10:58:58
1049
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅