- 博客(53)
- 资源 (5)
- 收藏
- 关注
原创 ROS::求解AX=XB
AX=XB 方程的代码示例。Eigen 是一个高效的 C++ 数值计算库,适用于矩阵和线性代数计算。这个方法是 Eigen 库中的一种求解线性方程组的方式。K 和 M 是线性系统中的矩阵。通过构建 K 和 M,我们将矩阵方程转换为线性方程组的标准形式。X 是我们需要求解的矩阵。对于这种方程,通常可以通过将矩阵方程转化为线性方程组来求解。AX=XB 方程可以被视为一种矩阵方程,其中 A 和 B 是已知的矩阵,将解向量 X_vec 转换回 4x4 矩阵 X。V 是一个用于存储右侧常数的向量,初始化为零。
2024-08-08 12:06:08
208
原创 ROS::向量法外扩多边形
ROS::向量法外扩多边形将多边形区域的灭个边向外移动一定距离然后组成的新多边形如上图所示针对每一个顶点分别计算外扩后的新顶点,分两种情况:c为当前点,p为前一个点,n为下一个点情况1:pn的中点在多边形外部计算如图所示:多边形区域:R,计算当前点c的外扩点,上一个点为p,下一个点为n,o为pn的中点。L = 外扩距离。向量v1,v2.v1,v2的夹角为anglen_v1 = v1.normalized(); //单位向量n_v2 = v2.normalized(); //单位向量
2022-03-24 17:48:31
1231
原创 ROS::判断点是否在多边形区域内
ROS::判断点是否在多边形区域内原理:介绍的射线法要求:多边形的边不能相交#include <Eigen/Core>const float EPS = 1e-6;const float PI = 3.1415926535;bool isInPolygon(float x,float y, geometry_msgs::Polygon& R){ if(R.points.empty()) return false; bool flag
2022-03-24 17:29:01
797
原创 ROS::在某个时间点利用TF做两个坐标变换
ROS::在某个时间点利用TF做坐标变换 geometry_msgs::PointStamped global_frame_point; geometry_msgs::PointStamped sensor_frame_point; try { /*************************** sensor_frame_point:原始数据 global_frame_point:变换后的数据 global_frame_:要变换到的坐标系 stamp:要使用的某时刻的tf关
2021-05-26 14:18:08
206
原创 ROS::多种方式的GDB调试
ROS::多种方式的GDB调试参考连接:wiki.ros.org/roslaunch/Tutorials/Roslaunch Nodes in Valgrind or GDB方式1:xterm本机直接调试:该方式需要电脑有显示器工具:GDB,xterm安装GDB和xteramsudo apt-get install xtermsudo apt-get install gdb修改节点启动launch文件例如:<node pkg="pkg" type="pkg" respa
2021-04-29 16:35:00
1362
原创 ROS::线程锁
ROS::线程锁boost::mutex mutex_;.........{ boost::mutex::scoped_lock l(mutex_); /*********** 被锁定的内容 ************/}当boost::mutex::scoped_lock l(mutex_);构建时发现mutex_被灵位一个线程使用时,则进入等待状态,直到mutex_被释放。...
2021-03-18 14:03:15
1076
原创 ROS::对costmap_2d的某一层地图做操作
ROS::对costmap_2d的某一层地图做操作//取出global_costmap_所有的地图层std::vector<boost::shared_ptr<costmap_2d::Layer> >* plugins = global_costmap_->getLayeredCostmap()->getPlugins();//遍历所有的层,搜索要操作的层for (std::vector<boost::shared_ptr<costmap_2d::L
2021-03-18 13:55:17
489
原创 ROS::差速运动模型机器人运动控制
ROS::差速运动模型机器人运动控制推荐看这个,包含pure pursuit(纯路径跟踪算法)解释。https://blog.csdn.net/iProphet/article/details/83661753?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param&depth_1-utm_source=distribute.pc_relevant.none-
2020-11-18 14:34:34
3186
原创 ROS::一种差速模型机器人脱困方法
ROS::一种差速模型机器人脱困方法介绍一种能原地旋转类型的机器人脱困的方法使用条件1、机器人为差速模型。2、具有可以探测机器人周围障碍物坐标的传感器(如激光雷达、深度相机、激光测距仪等)。3、有速度控制命令接口可以控制机器人自转和前进运动。被困检测当机器人不能规划出路径即可认为被困。被困场景示例具体操作...
2020-11-02 19:22:22
1438
原创 ROS::多话题消息同步
ROS::多话题消息同步出处:#include <ros/ros.h>#include "sensor_msgs/LaserScan.h"#include "geometry_msgs/PoseWithCovarianceStamped.h"#include <message_filters/subscriber.h>#include <message_filters/synchronizer.h>#include <message_filters/s
2020-10-11 15:12:30
1060
原创 ROS:静态TF发布
ROS:静态TF发布x y z 代表link2相对与link1的位置变换。qx qy qz qx表示link2相对与link1的位姿变换的四元数。参数100表示每隔100毫秒发布一次。方式2:x y z 代表link2相对与link1的位置变换。yaw pitch roll表示link2相对与link1的位姿变换,其中yaw为绕z轴的旋转,pitch为绕y轴的旋转,roll为绕x轴的旋转,逆时针旋转为正,顺时针旋转为负。参数100表示每隔100毫秒发布一次。...
2020-09-30 17:59:01
6798
原创 ROS:一种基于RRT的路径规划器
一种基于RRT的路径规划器最近写了一个基于RRT的全局路径规划器在此记录下来。环境ubuntu18.04ros-melodic实现方式作为move_base插件。介绍包括RRT* ,RRT-connect,启发式扩展,路径优化等内容。最终效果待继续完善内容。。。...
2020-09-16 19:02:15
6785
28
原创 ROS:一种路径优化算法-中点向外扩张法
ROS:一种路径优化算法-中点向外扩张法此处介绍一种路径优化算法-中点扩张法,即绕中点向外扩张搜索合适的点。解决问题:路径平滑。算法如下:L1,L2暂时未用到,原本想加入到条件A里。...
2020-09-15 16:33:43
828
1
原创 ROS:一种路径优化方法-拉直法
ROS:一种路径优化方法此处提供一种路径优化方法名字:拉直法,即将路径拉直,将路径上一些不在直线上的点删掉。取直线的原则为:不能与障碍物相撞。需要参考代码者请留言写上邮箱地址。算法说明:如图:1、设路径点为数组P[end],end为一个大于2的整数。2、从路径一个点P[x]开始尝试与路径上其他的点P[x+2]~P[n]~P[end]拉直,若能拉直则删除Px与Pn之间所有的路径点(不包括Px和Pn)。3、x取值范围[0,end-3],依次增大,每次加1,x每加1需要与n为[x+2,end]上
2020-09-15 16:15:41
2644
17
原创 ROS::navigation导航速度指令计算流程
ros:melodic、ubuntu18.04全局规划器:dijkstra局部规划器:运动:路径跟踪,局部规划:dijkstra控制流程图:
2020-09-11 14:30:57
1081
原创 ROS:小车线速度、角速度、转弯半径之间的关系
ROS:小车线速度、角速度、转弯半径之间的关系v:线速度,单位:m/sω:角速度,单位:rad/sr:转弯半径ΔS:弧长T:周期,单位:sf:频率,单位:h、Hzv = ωrv = ΔS/Δt = 2πr/T = ωr = 2πrfω = Δθ/Δt=2π/T=2πf线速度也有平均值和瞬时值之分。如果所取的时间间隔很小很小,这样得到的就是瞬时线速度。注意,当△t足够小时,圆弧AB几乎成了直线,AB弧的长度与AB线段的长度几乎没有差别,此时,△l也就是物体由A到B的位移。因此,这里的v
2020-09-10 21:20:20
12293
1
原创 ROS:eband_local_planner参数注释
eband_local_planner参数注释eband_local_planner源码地址:wiki.ros.org/eband_local_plannerCommon Parameters常用参数~/EBandPlannerROS/xy_goal_tolerance (double, default: 0.1)• Distance tolerance for reaching the goal pose .• 达到目标姿势的距离公差。~/EBandPlannerROS/yaw_goal_t
2020-09-03 17:48:58
1637
2
原创 ROS:搜索某个点附近的可行点
ROS:搜索某个点附近的可行点解决目标点或机器人子膨胀层里导致规划不出路径问题。函数:void planner::getNearFreePoint(const geometry_msgs::PoseStamped in, geometry_msgs::PoseStamped& out, double tolerance);tolerance:搜索半径,单位米。in:
2020-08-26 19:31:58
497
3
原创 ROS:costmap_obstacles_layer
ROS:ros-melodic costmap障碍物层参数详解costmap_2d :: ObservationBuffer用于从传感器接收点云,使用tf将其转换为所需的坐标系,并存储它们直到被请求为止。 大多数用户将创建由costmap_2d :: Costmap2DROS对象自动处理的costmap_2d :: ObservationBuffers,但是有特殊需要的用户可以选择创建自己的对象。全局过滤参数这些参数适用于所有传感器。~/max_obstacle_height (double,
2020-08-14 10:20:18
1481
原创 ROS:Dijkstra全局规划器
ROS:Dijkstra全局规划器#ifndef _DIJKSTRA_PLANNER_H_#define _DIJKSTRA_PLANNER_H_#include <ros/ros.h>#include <costmap_2d/costmap_2d.h>#include <costmap_2d/cost_values.h>#include <simple_local_planner/world_model.h>#include <simp
2020-08-05 19:42:13
1707
原创 ROS:一种简单的基于global_planner的全局路径优化方法
一种简单的基于global_planner的全局路径优化方法环境:Ubuntu 18.04.4 LTSros-melodic修改的包:navigation中global_planner功能包全局规划器使用dijkstra算法优化目标:1、使路径与膨胀层保持一个像素点的距离。2、使绕障碍物的路径更加平滑。优化之前的路径第一步:添加路径规划约束条件文件:dijkstra.cpp函数inline void DijkstraExpansion::updateCell(
2020-08-05 10:26:47
5728
20
原创 ROS:ros-melodic 坐标变换
ros-melodic pose坐标在不同坐标系下的变换说明ROS版本 ros-melodic部分坐标系变换为:map->odom->base_footprint->base_link->laser全局路径规划出来的路径点一般是在map下的,局部路径规划器在发布速度控制指令一般是在odom下的,所以需要经map下的路径点转换到odom下。用到两个tf2的函数。第一步:获取此时odom到map的坐标系变换关系。调用函数 geometry_msgs::TransformS
2020-07-30 10:22:17
1070
原创 Djkstra总结
Djkstra总结迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。1、指定一个节点,例如我们要计算 ‘A’ 到其他节点的最短路径2、引入两个集合(S、U),S集合包含已求出的最短路径的点(以及相应的最短长度),U集合包含未求出最短路径的点(以及A到该点的路径,没有直接相连初始时为∞)3、初始化两个集合,S集合为空,U集合中A->A = 0,其他节点为∞。4、从U集合
2020-07-23 17:34:03
896
原创 A*算法总结
A*算法总结原文地址:https://blog.csdn.net/weixin_44489823/article/details/893825021、把起点加入 open list 。2、重复如下过程:a、遍历 open list ,查找 F 值最小的节点,把它作为当前要处理的节点。b、把这个节点移到 close list 。c、对当前方格的 8 个相邻方格的每一个方格?◆ 如果它是不可抵达的或者它在 close list 中,忽略它。否则,做如下操作。◆ 如果它不在 ope
2020-07-23 16:32:31
456
原创 RRT、RRT_Connect、RRT*
RRT节点包括:在地图上的坐标,父节点的指针,从起始点移动到该节点的代价值。• 将地图坐标点处理为节点。• 树上节点集合A。• 开始节点S。• 目标节点G。• 随机节点R。• 树上距离R最近的节点N。• 搜索距离p。1、将节点S加入树A中。2、在地图上产生一个随机节点R。3、找到A中距离R最近的节点N。4、由N朝着R搜索p得到一个新的节点Q。5、判断Q与G的距离是否小于一定阀值,若是则执行10。6、判断Q是否为可行点,若是则将Q的父节点设置为N。7、重复2-6。10、得出路径
2020-07-21 17:58:17
4141
原创 ROS::ubuntu18.04 sudo: rosdep:找不到命令
ubuntu18.04按照wiki上安装步骤执行sudo rosdep init是出现sudo: rosdep:找不到命令原因:python-rosdep这个包没有装。解决办法:安装python-rosdepsudo apt-get install python-rosdep继续接下来的安装sudo rosdep initsudo rosdep update...
2020-07-21 17:18:57
25907
6
原创 E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
正在读取软件包列表… 完成正在分析软件包的依赖关系树正在读取状态信息… 完成有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件包尚未被创建或是它们已被从新到(Incoming)目录移出。下列信息可能会对解决问题有所帮助:下列软件包有未满足的依赖关系:vim : 依赖: vim-common (= 2:7.2.330-1ubuntu3.1) 但是 2:7.3.547-6ubuntu5 正要被安装E: 无
2020-07-21 16:41:16
2356
1
原创 ROS::launch、参数服务器
用launch文件设置参数用launch文件向参数服务器添加参数<launch> <node name="demo" pkg="demo" type="demo" respawn="false" output="screen" > <param name="param_name" type="string" value="aaaaaa"/> </node></launch>在代码中读取参数ros::i
2020-07-09 16:29:10
338
原创 存在重复元素
存在重复元素题目:给定一个整数数组,判断是否存在重复元素。如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。方法一利用std::set类型bool containsDuplicate(std::vector<int>& nums){ std::set<int> set_tem; for(auto i:nums) { if(set_tem.count(i) != 1) set_
2020-06-11 17:24:10
198
原创 只出现一次的数字
只出现一次的数字题目给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。要求:具有线性时间复杂度。不使用额外空间。出自:力扣参考答案利用异或特点(不带进位的二进制按位相加),几个数做异或运算结果与异或的顺序无关,将所有的数进行异或即可得到答案。int singleNumber(std::vector<int>& nums){ int single_num = 0; for(size_t i=0;i<nu
2020-06-11 16:13:11
99
原创 买卖股票的最佳时机 II
买卖股票的最佳时机 II题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。同一天你可以卖出后再买入。来源:力扣(LeetCode)参考答案int maxProfit(vector<int>& prices) { size_t num = prices.size(); int
2020-06-11 15:04:29
124
原创 旋转数组
旋转数组题目要求给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]示例 2:输入: [-1,-100,3,99] 和 k = 2输出: [3,99,-1,-100]解释:向右旋转 1 步: [99,-1,-
2020-05-28 18:16:17
96
原创 删除排序数组中的重复项
删除排序数组中的重复项要求:给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度
2020-05-28 11:25:32
139
原创 ROS::安装ROS,在进行sudo rosdep init报错,解决方案
安装ROS,在进行sudo rosdep init报错,解决方案错误现象解决方法修改/etc/hosts 文件sudo vim /etc/hosts在底部加上:151.101.84.133 raw.githubusercontent.com改过之后保存退出再次执行sudo rosdep init看问题是否解决,若未解决请另寻他法。...
2020-05-26 10:08:58
484
原创 linux下svn常用指令
linux下svn常用指令0、查看svn副本信息infosvn info信息大概如下:路径: .工作副本根目录: /home/lhh/new_nav/src/robot_taskURL: https://192.168.10.31:8443/svn/Robot_Dev/robot_taskRelative URL: ^/robot_task版本库根: https://192.168.10.31:8443/svn/Robot_Dev版本库 UUID: ffa74c18-fff8-b14a-b
2020-05-21 16:35:24
349
原创 ROS::服务通信
ROS服务通信AddTwoInts.srvint64 aint64 b---int64 sumserver.cpp#include "ros/ros.h"#include "learning_communication/AddTwoInts.h" //learning_communication为服务所在的包名// service回调函数,输入参数req,输出参数resbool add(learning_communication::AddTwoInts::Request &
2020-05-20 14:18:39
346
一种简单的基于ros-melodic的global_planner的全局路径优化
2020-08-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人