- 博客(87)
- 资源 (4)
- 收藏
- 关注
原创 TEB算法4 - teb源码阅读笔记之TebLocalPlannerROS类
TebLocalPlannerROS类是对外交互类,move_base对该算法的调用接口,均在该类中实现。主要包括:初始化中主要实现加载参数、配置障碍、可视化、获得机器人footprint、获取costmap、获取全局、局部坐标系名称、costmap_converter_插件、订阅自定义障碍、动态配置、创建局部规划器实例(是否开启同伦规划)等;...
2022-06-04 23:02:47
3654
1
原创 TEB算法5- teb recovery机制
在调用teb中的computeVelocityCommands()函数计算速度时,会不断的调用configureBackupModes()函数检查是否进入备份模式并进行相关的设置。configureBackupModes()主要实现 - 判断规划是否异常,如果检测到规划异常超出设定阈值,则缩小时域规划范围,TEB将以更近的点作为规划目标,尝试重新规划出可行路径; - 检查机器人是否震荡,如果震荡,选择一个方向作为路径规划的优先方向;......
2022-06-04 18:08:29
1906
转载 TEB算法3- teb中的g2o问题
针对阿克曼底盘的导航,TEB_local_planner没有直接给出具体的导航策略,而是利用非线性优化问题完成了对该问题的建模。
2022-06-04 11:27:45
2856
原创 TEB算法1-teb原理详解
TEB local planner 原论文:Trajectory modification considering dynamic constraintsof autonomous robotsTEB概述TEB轨迹规划的主要流程
2022-05-03 22:53:48
18437
2
原创 ROS-Navigation之map_server笔记及程序解析
map_server node:读取地图信息,并作为ROS service 为其余节点提供地图数据map_saver node:保存地图数据到地图文件
2022-05-03 12:37:34
8116
1
原创 三维pcd地图转二维栅格地图
1.概述在使用导航时,通常会根据二维栅格地图做路径规划,需要将三维点云地图转化成栅格地图。本文采用滤波及投影的方法,主要步骤包括对输入点云进行直通滤波,获取限定高度范围的数据在进行半径滤波,去除部分孤立点转换为栅格地图2.方法说明完整程序代码:github运行方法:下载编译后,mkdir -p test_ws/src&& cd test_ws/srcgit clone -b develop https://github.com/Hinson-A/pcd2pgm_
2022-05-02 10:19:55
14920
23
原创 ros-navigation recovery_beheviors机制
当移动机器人认为自己被卡住时,指导机器人进行一系列的恢复行为。navigation包中的恢复行为主要包括三种:clean_costmap_recovery:先清理周围一定范围以外的costmaprotate_recovery:旋转360度move_slow_and_clean:缓慢移动1. reference源码分析2.reference...
2022-03-20 22:17:28
1692
1
原创 ROS angles包说明
在看move_base源码时,有几处用到了 angles::shortest_angular_distance以及angles::normalize_angle,就查了下angle这个类,发现是ros中的一个名称为angle的软件包,就读了下源码。一.函数功能说明功能说明:该软件包提供了一组简单的数学实用程序来处理角度。该实用程序涵盖了简单的事情,例如标准化角度以及度和弧度之间的转换角度包含以下方法:角度转换:angles :: from_degrees,angles :: to_degrees
2022-02-27 21:50:49
3370
原创 C++-点到点、点到线、共线等常用计算
C++常用数学计算1. 一点到另外两点组成直线的距离2.获取平面两点间的距离3计算两个向量的夹角4. 判断三点共线1. 一点到另外两点组成直线的距离已知点p /p1/p2,求p到p1 p2的距离根据点到直线的距离公式:d = (Ax0 + By0 + C) / sqrt(A * A + B * B)A = y2 - y1B = x1 - x2;C = x2 * y1 - x1 * y2;程序实现//定义Point2f结构体 struct Point2f{ float x; floa
2021-12-11 14:52:41
2770
原创 C++ 类型转换(static_cast/ dynamic_cast/ reinterpret_cast)
C语言是强制转换,没有进行类型检查,存在不安全问题C++ 中提供的数据转换方式如下:static_cast 一般的转换,内嵌类型(int char…)也可以具有继承关系的指针和引用(必须要有继承关系)dynamic_cast 主要在基类和派生类之间进行转换const_cast 主要针对const,reinterpret_cast 用于进行没有任何关联之间的转换,如一个字符指针转换为一个整型数,任何类型指针都可以,指针 引用1.static_caststatic_cast 用于基础数据
2021-04-25 22:08:04
279
原创 C++ 多线程之条件变量
使用条件变量condition_variable 进行程序的休眠与唤醒notify_onenotify_all程序示例#include <condition_variable>#include <deque>#include <fstream>#include <functional>#include <iostream>#include <mutex>#include <string>#include
2021-04-14 23:10:46
289
原创 Ubuntu18.04 分屏显示问题解决
笔记本NVIDIA 显卡560,装了Ubuntu18,想外接一个显示器,然而却是很不顺利,用了网上查阅的几种方法都无效,原因应该还是显卡驱动问题。最后使用下面的方式解决禁用自己的secure boot,也就是设置为disable,具体的进入自己bios中找一下,一般在security或者boot里面输入ubuntu-drivers devices指令,查看到显卡驱动列表然后输入指令,自动安装当前最合适的显卡驱动。sudo ubuntu-drivers autoinstall 再次查看一下显卡
2021-04-13 10:00:00
3570
2
原创 C++ 类模板之类外实现重载运算符和友元函数
在同一个CPP中,使用友元函数,同时在类外实现程序如下:#include <iostream>using namespace std;//在类外进行前置声明// 友元函数在类外面实现,并且都在同一个CPP文件中,//需要在前面对类和对应操作符重载函数进行前置声明。// 同时在类内部声明的对应函数需要在参数链表前加入 "<T>"。template <class T1, class T2> class Person;template <class
2021-04-11 10:45:13
2490
1
原创 C++ ---类模板和函数模板
目录1.类模版2.函数模板1.类模版示例:#include <iostream>namespace ClassTempalteTest {//类模板template <class T> class Person {public: Person(T id, T age) { this->mAge_ = age; this->mId_ = id; } void showPerson() { std::cout <&l
2021-04-07 23:01:58
183
原创 C++ 解决报错error: no matching function for call to ‘min(float, double)’
在使用std::min()函数时,编译遇到如下报错: error: no matching function for call to ‘min(float, double)’ c z = std::min(fabs(alpha), 0.4);经查资料发现是由于两个数据类型不同造成的,std::min函数类型如下template< class T > const T& min( const T& a, const T& b );在使用时,旭
2021-01-28 09:59:59
20217
1
原创 Visio 2019使用PJ
@echo offtitle Activate Microsoft Visio 2019&cls&echo ============================================================================&echo #Visio: Activating Microsoft software products for FREE without software&echo ========================.
2021-01-11 21:51:51
372
原创 BeyondCompare 4 使用PJ
用的该软件,作为对比工具很好用,但就是需要自行PJ;方法如下:reg delete "HKEY_CURRENT_USER\Software\Scooter Software\Beyond Compare 4" /v CacheID /f
2021-01-11 21:38:50
218
原创 C++ 设计模式之工厂模式
目录1.简单工厂模式1.1 什么是简单工厂模式1.2 模式中包含的角色及其职责1.3 简单工厂模式的优缺点1.4 程序示例2.工厂模式2.1 什么是工厂模式2.2 类图角色和职责2.3 工厂方法模式和简单工厂模式比较2.4 程序示例3.抽象工厂1.简单工厂模式1.1 什么是简单工厂模式简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。1.2 模式中包含的角色及其职责1)工厂(Creator)角色简单工厂模式的核心
2021-01-03 19:20:41
329
1
原创 C++--设计模式之单例模式
目录一级目录二级目录三级目录1.单例模式介绍2.懒汉模式3.饿汉模式4.多线程+单例模式5.静态成员函数及变量扩展说明一级目录二级目录三级目录1.单例模式介绍单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象。即:保证一个类、只有一个实例存在,同时提供能对该实例加以访问的全局访问方法结构图:为什么要使用单例模式?在应用系统开发中,我们常常有以下需求:在多个线程之间,比如初始化一次socket资源;共享
2021-01-03 15:13:38
388
原创 ROS- 解决error “tf2_buffer_’ was not declared in this scope”
问题描述:使用ros melodic版本 编译程序,遇到报错如下:error: ‘tf2_buffer_’ was not declared in this scopeinline tf2_ros::Buffer& getBuffer() { return tf2_buffer_; }^~~~~~~~~~~解决:经查询,发现是ros melodic版本对该处进行了修改,与之前版本不同,用 tf2_buffer_ptr_替代了tf2_buffer_ ,所以需要修改程序。参考:Compile
2020-12-29 11:19:14
2698
原创 ROS常用调试工具及命令
ROS常用命令备忘1.rosrun 运行程序2.roslaunch 运行脚本 如 roslaunch rbx1 fake_pi_robot.launch3.查看ROS_PACKAGE_PATH环境变量 echo $ROS_PACKAGE_PATH4.获得运行中节点清单 rosnode list5.显示节点的主题 rostopic list6.显示节点的服务 rosservice list7.获取特定主题所发出了的消息类型 rosmsg show8.显示节点图rqt_graph (rqt_gr
2020-12-20 21:54:52
1539
原创 C++使用杂记
记录C++ 编程过程中遇到的一些问题及笔记1.智能指针智能指针的使用好处:(1)自动释放内存(2)方便使用STL容器shared_ptr与unique_ptr智能指针与常规指针的重要区别是它负责自动释放所指向的对象,两种智能指针的区别在于管理底层指针的方式:shared_ptr允许多个指针指向同一个对象;unique_ptr则“独占”所指向的对象。标准库还定义了一个名为week_ptr的伴随类,它是一种弱引用,指向shared_ptr所管理的对象。这三种类型都定义在memory头文件中。
2020-12-20 20:19:33
185
原创 路径规划算法学习参考资料
收藏以供学习中随时查阅:目录全局路径规划:局部路径规划:全局路径规划:a* 算法学习参考https://www.redblobgames.com/pathfinding/a-star/introduction.htmlhttps://blog.csdn.net/denghecsdn/article/details/78778769Dijkstra算法参考https://blog.csdn.net/qq_35644234/article/details/60870719及算法导论书中相关章节
2020-12-20 19:21:37
757
原创 win10C盘扩容
用着用着C盘的空间越来越小,就想从别的盘腾出点空间给C盘采用diskgenius工具来进行无损扩容分区。具体步骤:https://www.diskgenius.cn/help/extend-partition.php
2020-12-18 17:04:25
447
1
原创 Python-调用OpenCV绘图
目录1.图片简单处理操作2.对视频的处理3.在python_opencv中使用matplotlib进行绘图opencv中,Python接口的基本的绘图函数:cv2.line() 函数: 绘制直线 * cv2.ellipse()--绘制椭圆 * cv2.rectangle() --绘制矩形 * cv2.circle() --绘制圆 * cv2.fillploy() --绘制多边形 * cv2.putText() --绘制文本1.图片简单处理操作==================
2020-12-17 16:26:06
481
原创 C++ 调用Linux的系统指令
目录1、system(执行shell 命令)2、popen(建立管道I/O)3、使用vfork()新建子进程,然后调用exec函数族1、system(执行shell 命令)相关函数 fork,execve,waitpid,popen表头文件 #include<stdlib.h>定义函数 int system(const char * string);函数说明 system()会调用fork()产生子进程,由子进程来调用/bin/sh-cstring来执行参数string字符串所代表的
2020-12-17 15:26:45
10030
原创 C++--主要排序算法(冒泡,选择,插入等)
文章目录1.冒泡排序2.选择排序3.插入排序完整测试代码:1.冒泡排序原理:1.比较相邻的元素,若前一个比后一个大,就交换这两个元素位置;2.对每一个相邻元素做同样的操作,从开始第一对元素到结尾的最后一对元素。最终最后的元素就是最大的;时间复杂度:O(n^2),空间复杂度: O(1)int* BubbleSort(int arr[], int n){ //循环控制趟数,找N-1趟 for (int i = n-1; i > 0; i--) { fo
2020-09-06 17:13:37
232
原创 VIM-命令集
以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令。启动vim在命令行窗口中输入以下命令即可vim 直接启动vimvim filename 打开vim并创建名为filename的文件文件命令打开单个文件vim file同时打开多个文件vim file1 file2 file3 …在vim窗口中打开一个新文件:open file在新窗口中打开文件:split file切换到下一个文件:bn切换到上一个文件:bp查看当前打开的文件列表,当前正在
2020-07-23 08:43:22
298
原创 动态规划--斐波那契数列
斐波那契数列按照递归法和非递归法求解:// Algorithm Test.cpp : 动态规划测试//#include <iostream>using namespace std;//Fibonacci sequence 斐波那契数列namespace FibonacciTest { / //递归方法 int Rec_FibSequence(...
2020-02-25 16:36:37
390
原创 C++--STL之常用算法
常用遍历算法find、find_if、adijacent_find、binary_search、count、count_if、tranform、1.findfind(first, end, value);返回区间[first,end)中第一个值等于value的元素位置;若未找到,返回end。函数返回的是迭代器或指针,即位置信息。void test02(){ vector<...
2020-02-23 13:12:15
236
原创 C++--STL绑定适配器使用(not1/not2、bind1st/bind2nd、pre_fun、mem_fun /mem_fun_ref)
一.bind1st/bind2nd使用1.bind1st/bind2nd介绍 绑定适配器 将一个二元函数对象转变成一元函数对象 bind1st bind2nd区别? bind1st,将元素绑定为函数对象的第一个参数 bind2nd,将元素绑定为函数对象的第二个参数2.程序测试测试用例:将容器中每个元素都加上一个特定值,如200namespace FunctionalTest ...
2020-02-22 17:08:25
1092
1
原创 C++-- 函数对象(仿函数)
1.函数对象如果一个类将()运算符重载为成员函数,这个类就称为函数对象类,这个类的对象就是函数对象。函数对象是一个对象,但是使用的形式看起来像函数调用,实际上也执行了函数调用,因而得名。函数对象可以像普通函数一样调用函数对象可以像普通函数那样接收参数函数对象超出了函数的概念,函数对象可以保存函数调用的状态2.程序测试#define _CRT_SECURE_NO_WARNINGS#...
2020-02-20 19:28:00
400
转载 C++ --容器之浅拷贝与深拷贝
一 浅拷贝浅拷贝不开辟新空间,只增加一个指针,指向原有的内存。程序测试#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <vector>using namespace std;class Person {public: //构造函数; Person(const char* name,...
2020-02-19 12:38:14
1355
Learning ROS for Robotics Programming - Second Edition
2017-08-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人