RRT
参考网址: IR艾若机器人的个人空间_哔哩哔哩_bilibili
AtsushiSakai/PythonRobotics: Python sample codes for robotics algorithms. (github.com)
(115条消息) 快速随机搜索树(RRT)的MATLAB代码实现_露摇芝麻粒的博客-CSDN博客_快速搜索随机树
算法流程
12340 初始化起点,终点坐标1 采样点,采样点与步长连线2 根据一定步长判断是否中间有障碍物,若没有生成新节点3 一直循环,直到新节点跟终点距离在一定范围内,我们判断为找到终点
代码实现有一个小技巧,可以在获得随机点ian加入以终点为随机点的可能性
123456789101112131415161718192021222324252627282930313233343536def planning(self, animation=True): """ rrt path planning animation: flag for animation on or off ...
前轮反馈控制(stanley)
参考网址 路径规划与轨迹跟踪系列算法学习_第11讲_Stanley法_哔哩哔哩_bilibili
AtsushiSakai/PythonRobotics: Python sample codes for robotics algorithms. (github.com)
[(116条消息) Stanley轨迹跟踪算法Python/Matlab算法实现_gophae的博客-CSDN博客_stanley算法](https://blog.csdn.net/gophae/article/details/102765091?ops_request_misc=&request_id=&biz_id=102&utm_term=stanley算法 c实现&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-3-102765091.142^v2^article_score_rank,143^v4^control&spm=1018.2226.3001.418 ...
DWA
参考网址: (114条消息) DWA动态窗口法的原理及应用_gophae的博客-CSDN博客_动态窗口法
ROS 2D导航原理系列教程合集(WHEELTEC)_哔哩哔哩_bilibili
ShisatoYano/dynamic_window_approach (github.com)
(114条消息) SLAM学习:DWA算法原理和Python编程实现_YuriFan的博客-CSDN博客_dwa算法实现
流程
代码流程1234567891011for 1:1000 % 迭代1000次 dwa_control(); motion(); if 接近目标点: breakdwa_control(): calc_dynamic_window(); -> calc_final_input();calc_final_input(): calc_trajectory()->to_goal_cost->speed_cost->obst_cost->u_traj(v,w)
参考代码123456789101112131415161718192021// 初始化 ...
Dijkstra与Astar
参考网址: AtsushiSakai/PythonRobotics: Python sample codes for robotics algorithms. (github.com)
基于dijkstra算法,实现路径规划
机器人路径规划、轨迹优化系列课程_哔哩哔哩_bilibili
AStarSearch
算法基本思想
代码流程
使用优先级队列实现123456789101112131415161718192021222324252627282930// 原型:fill (ForwardIterator first, ForwardIterator last, const T& val);fill(dist, dist + nV + 1, INF);// 原型:priority_queue<Type, Container, Functional>// P表示最短距离与定点编号,greater:升序队列,less:降序队列priority_queue<P, vector<P>, greater<P> > q;dis ...
ROS时间戳函数和输出显示
参考网址: (112条消息) ROS时间戳函数和输出显示_Kevin_Xie86的博客-CSDN博客_ros 时间戳
代码12double t = msg->header.stamp.toSec()//把时间戳转化成浮点型格式pringf("time:%f\n",t);//输出显示
make_pair(),mean(),assign()使用
参考网址: (112条消息) make_pair函数_半尺杆头的博客-CSDN博客_make_pair
(112条消息) C++STL中vector容器 assign()函数的用法_xlm289348的专栏-CSDN博客_vector的assign函数
代码演示make_pair()12345return std::make_pair(int, float);std::pair<int, float> result {loop_id, yaw_diff_rad};std::pair<float, int> sc_dist_result = distanceBetweenScancontexts( curr_desc, context_candidate ); float candidate_dist = sc_dist_result.first;int candidate_align = sc_dist_result.second;
mean()12345mean()求均值mean(A)若A为[矩阵](https://so.csdn. ...
ros_mobile
参考网址: (112条消息) 一款超好用的ROS APP推荐——ROS-Mobile(亲测好用!!!)_尾巴l的博客-CSDN博客_rosapp
ROS-Mobile/ROS-Mobile-Android: Visualization and controlling application for Android (github.com)
github上有教程
注意填写master!其他使用都比较简单,随意
对于slam整体流程的思考
参考网址: (112条消息) SLAM基本流程和算法框架_lzj50002801的博客-CSDN博客_slam基本框架
流程图
123456789传感器信息读取:在视觉 SLAM 中主要为相机图像信息的读取和预处理。如果在机器人中,还可能有码盘、惯性传感器等信息的读取和同步。视觉里程计 (Visual Odometry, VO):视觉里程计任务是估算相邻图像间相机的运动,以及局部地图的样子。VO 又称为前端(Front End)。后端优化(Optimization):后端接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,对它们进行优化,得到全局一致的轨迹和地图。由于接在 VO 之后,又称为后端(Back End)。回环检测(Loop Closing):回环检测判断机器人是否曾经到达过先前的位置。如果检测到回环,它会把信息提供给后端进行处理。建图(Mapping):它根据估计的轨迹,建立与任务要求对应的地图。
在图中很清晰的表现出了slam流程:
根据传感器信息获得初步的前端里程计,这时候同时进行回环检测,然后将两个数据都传给后端进行后端的非线性优化,最后通过非线性优化得到的 ...
scan_context
参考网址: (112条消息) Scan Context 学习记录_春至冬去-CSDN博客_scancontext
Lidar定位:Scan Context - 知乎 (zhihu.com)
irapkaist/scancontext: Global LiDAR descriptor for place recognition and long-term localization
原创投稿 | ScanContext 论文详解 - 用途:Lidar SLAM 回环检测、空间描述符 - 哔哩哔哩 (bilibili.com)
(112条消息) 激光闭环检测Scancontext_weixin_35536487的博客-CSDN博客_scancontext
Slam-Project-Of-MyOwn/src at master · softdream/Slam-Project-Of-MyOwn (github.com)
流程
给定一帧点云,划分成20个环,每个环分成60等份,一共1200个格子
每个格子存里面点的最大高度值(z值),这样一帧点云就用一个二维图像表示了 ...
坐标变换
参考网址:坐标变换
由一道周作业题想到的坐标系变换_哔哩哔哩_bilibili
不同坐标系变换1234567Pose2D TransformFrom(const Pose2D& pose_new) const{ float dx = pose_new.x - x; float dy = pose_new.y - y; return Pose2d(dx*std::cos(theta)+dy*std::sin(theta), -dx*std::sin(theta)+dy*std::cos(theta), pose_new.theta - theta);}
12345Pose2D TransformAdd(const Pose2D& pose_delta) const{ float dx = pose_delta.x*std::cos(theta)-pose_delta.y*std::sin(theta); float dy = pose_delta.x* ...