移动机器人SLAM
文章平均质量分 67
绿竹巷人
不想做算法工程师的算法工程师
展开
-
cartographer源码解析(九)代码运行顺序梳理
描述这段时间的任务一直是阅读cartographer,这篇主要分析cartographer的代码运行顺序,再好好理清一下cartographer的运行逻辑顺序我在代码中cout一些信息,帮助我们梳理一下代码的运行时的进进出出这里会梳理出全部的关键程序语句node_main.cc开始运行launch文件后,就进入Run()函数功能:开始运行建图节点node_options.cc在node_main.cc的Run()中,执行了LoadOption()函数std::tie(node_o原创 2021-02-23 16:40:53 · 1185 阅读 · 0 评论 -
cartographer源码解析(八)雷达数据
描述主要分析cartographer处理雷达数据的代码在代码中cout来理解1. HandleLaserScanMessagecartographer_ros/node.cc中的HandleLaserScanMessage()函数中,我添加了如下几个coutstd::cout<<"sensor_id: "<<sensor_id<<" time: "<<time<<" frame_id: "<<frame_id<<s原创 2021-02-19 17:19:48 · 1277 阅读 · 1 评论 -
cartographer源码解析(七)轨迹优化
描述主要分析node_main.cc中的Run()函数中的RunFinalOptimization()node.RunFinalOptimization();RunFinalOptimization()的基本逻辑第一层:node.ccRunFinalOptimization()函数定义在node.ccvoid Node::RunFinalOptimization() { { for (const auto& entry : map_builder_bridge_.GetTr原创 2021-02-01 14:12:09 · 762 阅读 · 0 评论 -
cartographer源码解析(六)订阅话题
描述Run()函数中的函数AddTrajectory()源码继续解析int Node::AddTrajectory(const TrajectoryOptions& options) { const std::set<cartographer::mapping::TrajectoryBuilderInterface::SensorId> expected_sensor_ids = ComputeExpectedSensorIds(options); const i原创 2021-01-22 18:32:41 · 820 阅读 · 1 评论 -
cartographer源码解析(五)新建轨迹
描述Run()函数中的建图功能的代码解析解析node_main.cc中的Run()函数中有这样一段核心代码NodeOptions node_options;TrajectoryOptions trajectory_options;std::tie(node_options, trajectory_options) = LoadOptions(FLAGS_configuration_directory, FLAGS_configuration_basename);auto map_bu原创 2021-01-21 14:51:29 · 806 阅读 · 0 评论 -
cartographer源码解析(四)加载参数
描述Run()函数中的记载配置参数的代码解析node_main.cc中的Run()函数中有这样一段核心代码NodeOptions node_options;TrajectoryOptions trajectory_options;std::tie(node_options, trajectory_options) = LoadOptions(FLAGS_configuration_directory, FLAGS_configuration_basename);auto map_bu原创 2021-01-19 16:21:52 · 576 阅读 · 0 评论 -
cartographer源码解析(三)node_main.cc中的FinishAllTrajectories()
描述Run()函数的最后有两个关键句(我认为的),一个是FinishAllTrajectories,另外一个是RunFinalOptimization这篇会分析第一个,也就是函数FinishAllTrajectories第一部分会分析FinishAllTrajectories中每行程序的声明位置,第二部分会分析FinishAllTrajectories实现的功能一、FinishAllTrajectories()的基本逻辑FinishAllTrajectories()源码如下void Node::原创 2021-01-14 21:02:09 · 752 阅读 · 0 评论 -
cartographer源码解析(二)node_main.cc文件详解
描述cartographer学习笔记(二)这一篇主要分析node_main.cc的代码主函数main()主函数int main(int argc, char** argv) { google::InitGoogleLogging(argv[0]); google::ParseCommandLineFlags(&argc, &argv, true); CHECK(!FLAGS_configuration_directory.empty()) <&l原创 2021-01-11 18:47:57 · 1315 阅读 · 0 评论 -
cartographer源码解析(一)demo的launch文件详解
描述关于cartographer的学习笔记DEMO运行launch文件详解以下是官网给出的demo执行命令roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${HOME}/Downloads/cartographer_paper_deutsches_museum.bag1. demo_backpack_2d.launch文件内容如下<launch> <param name="/use_si原创 2021-01-11 15:27:10 · 2358 阅读 · 0 评论 -
cartographer安装与demo
描述Ubuntu系统下安装cartographer需要说明的是:每个人电脑配置是不同的,而cartographer的依赖库又比较多,所以难免出来各种各样的问题由于我的电脑安装库比较多也比较杂,本文章只是描述我的安装过程,不一定通用安装命令1. 安装依赖#后面的注释,和"VERSION="的那句不用执行以下的命令都是摘抄官网,不信任的话可以去cartographer官网找命令来执行https://google-cartographer.readthedocs.io/en/latest/,都是一原创 2021-01-08 18:22:12 · 1047 阅读 · 0 评论 -
Gmapping建图后的定位问题
描述问题:启动定位命令roslaunch ir100_navigation ir100_navigation.launch map_file:=/home/shansu/Maps/map_201221.yaml后,定位失败,该命令出现黄色错误提示[ WARN] [1608643242.312506820]: Illegal bounds change, was [tl: (-9.987500, -37.187500), br: (7136238463529799405291429847247475681原创 2020-12-25 11:47:52 · 2077 阅读 · 0 评论 -
黄金搜索算法
描述黄金搜索算法,黄金分割数是5−12\frac{\sqrt{5}-1}{2}25−1挺简单的一个小算法,算法原理简要说一下:假设我们要在范围[a, b]内寻找距离c最近的一个点。由于黄金分割率的特性11+5−12 =5−12\frac{1}{1+\frac{\sqrt{5}-1}{2}}\; =\frac{\sqrt{5}-1}{2}1+25−11=25−1我们把 b−ab-ab−a 的差算是1份,0.618份可以算出两个值,c= b-0.618(b-a),d=a+0.618(原创 2020-08-24 22:29:27 · 1754 阅读 · 0 评论 -
一文搞定Eigen基本操作
描述python使用Eigen库加载import numpy as npimport scipy.linalg as la1. 矩阵定义零矩阵m_matrix = np.zeros((5, 2))对角矩阵m_matrix = np.eye(5)2. 基本操作矩阵乘法,两种写法A = B @ CA = B.dot(C)3. 特殊矩阵转置矩阵A = m_matrix.T逆矩阵A = la.inv(m_matrix)4. 特征值和特征向量#原创 2020-08-17 20:58:27 · 6630 阅读 · 0 评论 -
Coursera自动驾驶课程学习——软硬件架构
硬件传感器包括:相机和深度相机、激光雷达(红外激光),雷达(无线电),声呐(超声波测距),GPS/IMU,里程计覆盖范围主动减速率大致是5m/s2s^2s2:人用力踩下刹车的速度一般减速率2m/s2s^2s2:减速距离的计算是 d = v22ad\; =\; \frac{v^{2}}{2a}d=2av2 , aaa 就是减速率讨论两个情况:高速公路及城市道路高速公路的需求紧急刹车:前后方150米到200米,左右车道感知匀速行驶:160度~180度视野范围变道:左右层要能看更远原创 2020-08-17 20:25:56 · 470 阅读 · 0 评论 -
C++Eigen库矩阵常见操作
描述使用C++语言的Eigen库进行一些常见操作代码头文件声明#include <Eigen/Dense>1. 矩阵声明n*n方阵(已知n)Eigen::Matrix2d m_matrix;m_matrix<< 2,3,2.2,1;std::cout << "m_matrix = \n"<< m_matrix<std::endl;注意矩阵里的值有2.2这个浮点型,因此定义Eigen::Matrix2i会出现问题(Matrix2原创 2020-08-17 11:57:36 · 17983 阅读 · 15 评论 -
Coursera自动驾驶课程学习——自动驾驶等级分类
描述这一系列我会开始介绍一下Coursera自动驾驶课程的关键内容本文内容自动驾驶的分类法驾驶任务的感知需求如何做出驾驶决策1. 自动驾驶等级的分类1.1 驾驶任务三个子任务感知环境: 跟踪汽车的状态,识别路标、行人等,跟踪运动物体,预测它们未来的行动运动规划操控车 辆,加减速,控制轨迹等Operational Design Domain(ODD, 操作设计域或奇数)构成了给定系统设计运行的操作条件,包括环境,一天中的时间,道路和其他特征明确定义设计自动驾驶汽车的操作条件原创 2020-08-11 21:30:32 · 518 阅读 · 0 评论 -
贝塞尔曲线生成路径
描述使用贝塞尔曲线生成路径已知:若干个二维路径点(x, y),生成一段由一系列(x, y)点组成的点集公式网上有很多贝塞尔曲线的概念和知识,这里不做赘述贝塞尔曲线上的路径点计算公式:P(t) =∑i=0nk(i, n, t)⋅Pi, t∈[0,1]P\left( t \right)\; =\sum_{i=0}^{n}{k\left( i,\; n,\; t \right)\cdot P_{i}},\; \; \; \; t\in \left[ 0,1 \right]P(t)=原创 2020-08-10 18:53:34 · 1633 阅读 · 0 评论 -
离散点的曲率计算
描述我有一个点集,里面都是[x,y]这样的二维点,这个点集能形成一个曲线。在并不想去求这个曲线的表达式时,怎么得到某一点的曲率呢相关知识曲率的定义是:针对曲线上某个点的切线方向角对弧长的转动率,而曲率的倒数就是曲率半径K = ∣Δθl∣ = ∣1r∣ K\; =\; \left| \frac{\Delta \theta }{l} \right|\; =\; \left| \frac{1}{r} \right|\; K=∣∣∣∣lΔθ∣∣∣∣=∣∣∣∣r1∣∣∣∣式子中KK原创 2020-08-08 19:16:26 · 8667 阅读 · 5 评论 -
二维数据坐标变换
描述存在两个坐标系,同一个点在两个坐标系下的表示关系坐标变换1. 基坐标系转到自定义坐标系基坐标系下有一个点,点为(x,y),自定义坐标系相对于基坐标系先绕原点O旋转角度为θθθ,再平移(xT,yTx^{T}, y^{T}xT,yT)则这个点在自定义坐标系下的位置(x’,y’)是[x′y′]= [cosθ sinθ−sinθ cosθ] [xy] + [xTyT]\left[ \begin{array}{c} x' \\ y' \end{array} \right]=\; \原创 2020-07-28 16:50:28 · 1267 阅读 · 0 评论 -
二维点云ICP原理推导
二维点云ICP原理推导描述ICP是迭代就近点算法,大部分的实现代码都是基于PCL点云库的,也就是三维点云的匹配实际上,二维点云数据也算是常见的数据类型,比如移动机器人经常使用的单线雷达。本文就是二维点云ICP的原理推导算法原理二维点云数据说明先说明单线激光雷达数据类型data=[riθi]data=\left[ \begin{array}{c} r_{i} \\ \theta _{i} \end{array} \right]data=[riθi]r和θ代表每一束激光的距离和扫描角度原创 2020-05-28 00:01:25 · 6745 阅读 · 32 评论 -
移动机器人项目概述
移动机器人项目概述之前有一篇关于机械臂项目https://blog.csdn.net/weixin_42156097/article/details/103483267这一篇,就让我来总结一下搭建一个完整的移动机器人所需的知识及步骤吧,小小拙见,有问题请及时指正1. 移动机器人构成这里我还是不太想写成大部分参考书上的那样,什么执行系统啊驱动系统啊。现在打字的我其实只是个工程师,不是在写书或...原创 2020-02-29 22:57:54 · 1943 阅读 · 0 评论 -
移动机器人路径规划算法及思考——A*算法
A*算法原理A算法是一种经典的路径搜索算法,A算法的原理初学者可以去网上搜索算法原理详解,讲得很好链接:http://www.gamedev.net/reference/articles/article2003.asp算法牛人或者进阶者,可能只是忘了算法的一些关键点,这里进行回顾A*算法简单来说就是一个寻找一条最小损失路径的算法核心公式为:F = G + HF:总损失G:从起点到当...原创 2020-02-29 21:50:42 · 3965 阅读 · 0 评论 -
Catmull-Rom Spline插值算法C++实现
1. 算法简介Catmull-Rom Spline算法是一种插值算法,能够在目标点之间插值生成一条平滑的曲线算法数学原理不在此介绍算法特点什么情况下,可以使用Catmull-Rom Spline算法呢——平滑机器人或无人车的路径算法要求:有一系列路径点路径点大于4个想要在路径点之间插值生产若干个路径点生成的轨迹是平滑的2. C++实现不说废话上代码,我把核心算法写成了Ca...原创 2020-01-14 21:56:14 · 3031 阅读 · 6 评论 -
cartographer算法(二)—— cartographer论文精读 for Real-Time Loop Closure in 2D LIDAR SLAM
Real-Time Loop Closure in 2D LIDAR SLAM文章阅读及分析原文:W. Hess, D. Kohler, H. Rapp, and D. Andor, Real-Time Loop Closure in 2D LIDAR SLAM, in Robotics and Automation (ICRA), 2016 IEEE International Confere...原创 2019-12-30 22:28:34 · 8422 阅读 · 12 评论 -
cartographer算法(一)——概述及框架
cartographer概述cartographerr是google推出的一套基于图优化的SLAM算法架构简介cartographer 的架构,主要由 Local SLAM 和 Global SLAM 两部分组成Local SLAM利用里程计(Odometry)和IMU数据进行航迹推算,给出小车位姿估计值将位姿估计值作为初值,对雷达数据进行匹配,并更新位姿估计器的值雷达一帧帧数据...原创 2019-12-30 16:09:20 · 18175 阅读 · 0 评论