LP问题中为什么把等式约束转化成两个不等式约束 MathJax.Hub.Config({ tex2jax: { skipTags: ['script', 'noscript', 'style', 'textarea', 'pre'], inlineMath: [['$','$']] } }); 2023-11-30 OR > LP #原创
二次规划求解器osqp安装 二次规划求解器osqp安装1.首先安装依赖osqp和Eigen32.安装osqp1234567git clone git@github.com:osqp/osqp.gitcd osqpmkdir buildcd buildcmake .. -DBUILD_SHARED_LIBS=ONmake -j6sudo make install 3.安装osqp-eigen123456git clone gi 2023-11-21 slam > path_planning #原创
基于VScode调试ROS2功能包 基于VScode调试ROS2功能包1.安装ROS的vscode插件1ROS 2.创建功能包并用vscode插件方式编译123456789101112$ cd ~$ mkdir -p ros2_ws/src$ cd ros2_ws/src$ ros2 pkg create cpp__pubsub --build-type ament_cmake --dependencies rclcpp std_m 2023-11-13 ROS2 #原创
解决ros-melodic打包package为deb安装包问题 解决ros-melodic打包package为deb安装包问题安装依赖1sudo apt install python-bloom python-rosdep fakeroot debhelper dh-python rosdep init失败打开host及相关文件进行修改12sudo gedit /etc/hosts在ipv4的部分加入12345678185.199.108.133 raw 2023-11-13 slam > ROS #原创
接近最优的考虑转弯代价的覆盖路径规划 MathJax.Hub.Config({ tex2jax: { skipTags: ['script', 'noscript', 'style', 'textarea', 'pre'], inlineMath: [['$','$']] } }); 2023-11-07 slam > path_planning #原创
移动机器人路径规划的粒子群优化增强方法 MathJax.Hub.Config({ tex2jax: { skipTags: ['script', 'noscript', 'style', 'textarea', 'pre'], inlineMath: [['$','$']] } }); 2023-11-03 slam > path_palnning #原创
使用粒子群优化算法进行机器人在动态环境中的路径规划 MathJax.Hub.Config({ tex2jax: { skipTags: ['script', 'noscript', 'style', 'textarea', 'pre'], inlineMath: [['$','$']] } }); 2023-11-02 slam > path_planning #原创
采用快速无碰撞路径生成器的安全的基于深度学习的全局路径规划 MathJax.Hub.Config({ tex2jax: { skipTags: ['script', 'noscript', 'style', 'textarea', 'pre'], inlineMath: [['$','$']] } }); 2023-10-30 slam > path_palnning #原创
新的基于遗传算法的移动机器人平滑路径规划方法 MathJax.Hub.Config({ tex2jax: { skipTags: ['script', 'noscript', 'style', 'textarea', 'pre'], inlineMath: [['$','$']] } }); 2023-10-23 slam > path_planning #原创
基于混合遗传算法的移动机器人平滑全局路径规划 MathJax.Hub.Config({ tex2jax: { skipTags: ['script', 'noscript', 'style', 'textarea', 'pre'], inlineMath: [['$','$']] } }); 2023-10-20 slam > path_planning #原创
创建GDAL几何对象 创建GDAL几何对象GDAL (Geospatial Data Abstraction Library) 是一个开源的用于读取和写入矢量和栅格地理空间数据格式的库。OGR是GDAL库的一个部分,专门用于处理矢量数据 createFromWktOGRGeometryFactory是OGR库中的一个类,用于创建OGRGeometry对象。OGRGeometry是一个表示地理空间几何对象(如点、线、多边 2023-09-01 GDAL #原创
两阶段查找 两阶段查找两阶段查找(Two-phase lookup)是C++模板中名称查找的一个特点。了解这个概念对于理解和解决一些模板相关的编译错误特别有帮助。 两阶段查找的基本思想是,模板定义时和实例化时,编译器都会对模板代码进行名称查找,但查找的内容和上下文可能有所不同。 第一阶段:这一阶段发生在模板定义的时候,编译器会对非依赖名称(non-dependent names)进行查找。所谓非依赖名称,指 2023-08-25 C++ #原创
移动构造函数 移动构造函数移动构造函数是一种特殊的构造函数,它使用右值引用(使用 && 符号)来接受一个临时对象,然后从该临时对象中“移动”资源,而不是进行深拷贝。这可以大大提高性能,因为资源的所有权可以在不复制数据的情况下从一个对象转移到另一个对象。 移动构造函数的主要目的是避免不必要的数据拷贝,特别是在需要在不同对象之间传递资源(例如堆分配的内存或文件句柄)时。这对于提高性能和减少资源开销非 2023-08-24 C++ #原创
拷贝构造函数 拷贝构造函数拷贝构造函数是一种特殊的构造函数,用于创建一个类的对象,并通过复制另一个相同类型的对象来初始化新对象。当以下几种情况发生时,会调用拷贝构造函数: 通过使用另一个同类型的对象显式初始化新对象。 将对象作为值参数传递给函数。 从函数返回对象。拷贝构造函数通常接受一个对同类型对象的常量引用作为参数。 以下是一个C++示例,说明了拷贝构造函数的用法:12345678910111213141 2023-08-24 C++ #原创
转换构造函数 转换构造函数转换构造函数是一种特殊类型的构造函数,它可以使用一个参数来创建新对象。这允许我们使用一个表达式将一个类型隐式转换为另一个类型。它通常用于定义从一个类型到类类型的转换。 当我们有一个需要类类型的表达式时,而我们提供的是另一种类型(例如,基本类型或另一个类类型),编译器将查找一个只接受该类型作为参数的构造函数,并使用它来执行转换。 以下是一个C++示例,说明了转换构造函数的用法: 1234 2023-08-24 C++ #原创
ros-foxy安装cartographer ros-foxy安装cartographerapt安装12sudo apt install ros-${ROS_DISTRO}-cartographersudo apt install ros-${ROS_DISTRO}-cartographer-ros 源码安装安装依赖1234567891011121314# wstool relatedsudo apt- 2023-07-18 ROS2 #原创
解决ros-foxy打包package为deb安装包问题 解决ros-foxy打包package为deb安装包问题安装依赖1sudo apt install python3-bloom python3-rosdep fakeroot debhelper dh-python rosdep init失败打开host及相关文件进行修改12sudo gedit /etc/hosts在ipv4的部分加入12345678185.199.108.133 raw. 2023-07-14 ROS2 #原创
在机器人技术中估计不确定的空间关系 MathJax.Hub.Config({ tex2jax: { skipTags: ['script', 'noscript', 'style', 'textarea', 'pre'], inlineMath: [['$','$']] } }); 2023-06-20 slam > mapping #原创
在VSCode上调试ROS2 C++节点 在VSCode上调试ROS2 C++节点说明这是一个关于如何使用VSCode调试ROS2 C++节点的小教程。 需求本实现使用了以下工具: ROS2 Foxy Ubuntu 20.04 Visual Code 1.79.1 C/C++ VSCode extension 调试一旦你的C++代码正确实现(至少可以编译),首先要做的是编译软件包并导出符号(允许你在需要停止代码的地方设置断点):123 2023-06-15 ROS2 #原创
利用适应性建议分布和选择性重采样提高基于栅格的Rao-Blackwellized粒子滤波 MathJax.Hub.Config({ tex2jax: { skipTags: ['script', 'noscript', 'style', 'textarea', 'pre'], inlineMath: [['$','$']] } }); 2023-06-13 slam > mapping #原创
一篇综述性文章-使用经典和启发式算法进行机器人覆盖路径规划的全面评估 MathJax.Hub.Config({ tex2jax: { skipTags: ['script', 'noscript', 'style', 'textarea', 'pre'], inlineMath: [['$','$']] } }); 2023-06-12 slam > path_planning #原创
基于网格的离线覆盖路径规划 基于网格的离线覆盖路径规划摘要在视频游戏中,全面覆盖的算法方法具有应用价值,可以实现自动游戏级别探索。当前的设计采用简单的启发式方法,经常导致性能不佳或展现出不自然的行为。在本文中,我们介绍了一种新的算法,用于覆盖一个2D多边形区域(带洞)。我们假设已知地图布局,并使用基于网格的世界表示。在多个场景上进行的实验分析,从简单布局到实际游戏中使用的更复杂地图,都表现出良好的性能。这项工作是构建更有效的 2023-06-12 slam > path_planning #原创
计算多边形的最小包络矩形 计算多边形的最小包络矩形在OpenCV中,可以使用minAreaRect函数来计算一个点集或多边形的最小包络矩形(旋转的矩形)。以下是一个C++的示例,它创建一个多边形,然后计算并绘制最小包络矩形:1234567891011121314151617181920212223242526272829303132333435#include <opencv2/opencv.hpp>#incl 2023-06-09 opencv #原创
如何编辑ROS2中使用的CMakeLists.txt文件 如何编辑ROS2中使用的CMakeLists.txt文件在ROS 2中,CMakeLists.txt文件用于定义构建系统的配置和指令。以下是一些常见的编辑CMakeLists.txt文件的示例操作: 添加依赖项: 如果您的ROS 2包依赖其他的软件包,您需要在CMakeLists.txt文件中添加这些依赖项。找到find_package或ament_target_dependencies行,根 2023-06-07 ROS2 #原创
创建ros2 package并编译 创建ros2 package并编译要创建ROS 2包并进行编译,您可以按照以下步骤进行操作: 设置ROS 2工作空间: 在您选择的目录中创建一个新的ROS 2工作空间。假设您将其命名为ros2_ws,请执行以下命令:123mkdir -p ~/ros2_ws/srccd ~/ros2_ws 初始化工作空间: 执行以下命令初始化ROS 2工作空间:123colcon buildsource 2023-06-07 ROS2 #原创
介绍ROS2节点启动的launch文件 介绍ROS2节点启动的launch文件当使用ROS 2启动文件(launch文件)时,可以使用Python或C++编写。下面是一个示例,展示如何编写一个使用C++的ROS 2启动文件。 假设我们有一个名为my_node的节点,它是用C++编写的。我们将创建一个名为my_launch.cpp的文件来定义启动文件。 12345678910111213141516171819202122#include 2023-06-06 ROS2 #原创
用于最优多机器人覆盖路径规划的分割区域算法DARP MathJax.Hub.Config({ tex2jax: { skipTags: ['script', 'noscript', 'style', 'textarea', 'pre'], inlineMath: [['$','$']] } }); 2023-06-01 slam > map segmentation #原创
基于波纹的地图分割MAORIS MathJax.Hub.Config({ tex2jax: { skipTags: ['script', 'noscript', 'style', 'textarea', 'pre'], inlineMath: [['$','$']] } }); 2023-05-31 slam > map segmentation #原创
基于网格的多个无人机搜索和救援应用的覆盖路径规划 MathJax.Hub.Config({ tex2jax: { skipTags: ['script', 'noscript', 'style', 'textarea', 'pre'], inlineMath: [['$','$']] } }); 2023-05-31 slam > path_planning #原创
机器人系统ROS导航调优指南 MathJax.Hub.Config({ tex2jax: { skipTags: ['script', 'noscript', 'style', 'textarea', 'pre'], inlineMath: [['$','$']] } }); 2023-05-30 slam > ROS #原创
详细介绍cv::floodFill算法 详细介绍cv::floodFill算法OpenCV库中的cv::floodFill函数实现了Flood Fill算法,这是一种常用于计算机图形学的算法。这个算法的目标是确定一个连通区域的像素点,并且可以将这个区域涂成特定的颜色。这个算法从一个种子点开始,寻找所有和种子点颜色(或者在指定的颜色差范围内)相同并且连通的像素点。 cv::floodFill函数的基本形式如下:12345678int cv 2023-05-22 opencv #原创
创建图像时CV_8UC1,CV_32FC3,CV_32S等参数的含义 创建图像时CV_8UC1,CV_32FC3,CV_32S等参数的含义OpenCV库用于图像处理和计算机视觉,它用一种特定的方式来描述图像数据的类型。在OpenCV中,CV_{U|S|F}C是用来描述图像数据的类型的。 这种描述方式可以拆解为几个部分来理解: CV_:这是所有类型的前缀,代表”Computer Vision”。 :这是一个数字,代表每一个通道的位深度。例如,8代表8位,32代表32 2023-05-22 opencv #原创
三种智能指针的使用场景shared_ptr、unique_ptr和weak_ptr 三种智能指针的使用场景shared_ptr、unique_ptr和weak_ptrC++11引入了三种智能指针:shared_ptr,unique_ptr和weak_ptr,它们用于解决原生指针可能导致的内存泄露和非法引用问题。下面我们分别看一下这三种智能指针的使用场景: shared_ptr:shared_ptr是一种引用计数的智能指针,当你需要在多个地方共享同一个资源时,可以使用它。它会跟踪 2023-05-22 C++ #原创
根据设计模式原理实现map_segmentation算法C++架构 根据设计模式原理实现map_segmentation算法C++架构下面是一个使用设计模式原理实现地图分割算法的C++架构示例,其中有一个基类MapSegmentation和两个子类DistanceSegmentation和MorphologicalSegmentation,分别实现了不同的分割方法。 如果DistanceSegmentation子类有成员变量double room_upper_li 2023-05-19 slam > map segmentation #原创
详细介绍ROS中geometry_msgs/Polygon 详细介绍ROS中geometry_msgs/Polygongeometry_msgs/Polygon是ROS (Robot Operating System) 中用于表示多边形的消息类型。Polygon消息中的点定义了一个二维多边形的轮廓,所有的点必须处于同一平面。 下面是Polygon消息类型的详细定义:123# This represents a polygon in 2D spacePoin 2023-05-19 slam > ROS #原创
详细介绍ROS的插件机制 详细介绍ROS的插件机制ROS(Robot Operating System)是一种为机器人研究和开发提供框架的软件。ROS的设计使得它可以方便地编写和运行用于控制复杂和强大机器人系统的软件。尽管ROS被称为一个”操作系统”,但它更像是一种为机器人提供服务的中间件或者库,这些服务包括硬件抽象、底层设备控制、常用功能的实现,以及消息传递等。 ROS插件(plugin)机制是一种实现模块化、可插拔化的 2023-05-16 slam > ROS #原创
详细介绍ROS2的DDS 详细介绍ROS2的DDSROS 2(Robot Operating System 2)是一个用于构建机器人系统的开源软件平台,而DDS(Data Distribution Service)是ROS 2中的通信中间件。DDS是一种分布式系统中用于数据交换的标准协议,它提供了可靠、实时的数据通信,适用于各种实时系统,包括机器人控制、物联网设备、工业自动化等。 下面是对ROS 2的DDS的详细介绍: 2023-05-15 ROS2 #原创
详细介绍ROS2的节点 详细介绍ROS2的节点ROS2(Robot Operating System 2)是一个开源的机器人操作系统,主要用于协调机器人的硬件和软件资源。它包括一套工具、库和规则,用来简化创建复杂和健壮的机器人行为。 在ROS2中,节点(Node)是一个可执行的程序,它可以进行计算和处理数据。节点可以发布消息到话题(Topic),订阅话题来接收消息,提供服务(Service),或者调用其他节点的服务。 以 2023-05-15 ROS2 #原创
介绍ROS 2 的服务质量 (QoS) 策略 介绍ROS 2 的服务质量 (QoS) 策略ROS 2(Robot Operating System 2)引入了服务质量(Quality of Service,QoS)策略,以满足不同的通信需求和应用场景。QoS策略允许开发者根据消息的可靠性、延迟、带宽等方面的要求来配置通信行为。以下是ROS 2中可用的一些重要的QoS策略: 可靠性(Reliability):可靠性指定了消息传递的保证。在RO 2023-05-15 ROS2 #原创
地图分割算法 MathJax.Hub.Config({ tex2jax: { skipTags: ['script', 'noscript', 'style', 'textarea', 'pre'], inlineMath: [['$','$']] } }); 2023-05-11 slam > map segmentation #原创
使用opencv判断黑白图像上的直线是否与图像上黑色区域相交 使用opencv判断黑白图像上的直线是否与图像上黑色区域相交在OpenCV中,可以使用Hough Transform算法检测一幅黑白图像中的直线。如果要判断一条直线是否与图像上的黑色区域相交,可以将黑色区域提取出来,然后检查直线与黑色区域是否有交集。下面是一个示例代码,演示如何使用OpenCV判断黑白图像上的直线是否与图像上黑色区域相交:123456789101112131415161718192 2023-05-10 opencv #原创
详细介绍ROS costmap_2d包中主要函数 详细介绍ROS costmap_2d包中主要函数ROS中的costmap_2d包提供了一种用于建立和维护环境的二维代价地图的方法。该地图包含了障碍物和自由空间的信息,其中障碍物被标记为高代价区域,自由空间被标记为低代价区域。这种代价地图通常被用来规划机器人的移动路径。 在costmap_2d中,使用了一种基于膨胀查找表的方法来计算代价地图中的障碍物。该方法使用了一个查找表来计算代价地图中每个单元格 2023-05-08 slam > ROS #原创
介绍C++中this指针 介绍C++中this指针在C++中,this指针是一个非常重要的概念,它是一个隐式的指针,表示指向正在调用类成员函数的对象的指针。this指针在类的成员函数中可以使用,用于引用调用该成员函数的对象。它主要有以下用途: 区分局部变量和成员变量:当成员函数的局部变量与类的成员变量同名时,可以使用this指针来引用类的成员变量。 链式调用:在类的成员函数中返回this指针,可以实现链式调用。 作为友元 2023-05-04 C++ #原创
详细介绍ROS中的map_server 详细介绍ROS中的map_servermap_server 是 ROS (Robot Operating System) 中的一个功能包,它提供了一个用于处理二维地图的节点。该功能包主要有两个核心组件:map_server 和 map_saver。它们分别用于加载地图到 ROS 系统并从系统中保存地图。 map_server:这是一个用于加载地图的节点。它从文件系统中读取一个 YAML 格式的配 2023-04-27 slam > ROS #原创
单独启动costmap_2d生成代价地图 单独启动costmap_2d生成代价地图要单独启动costmap_2d以生成代价地图,您需要创建一个自定义的ROS节点,将costmap_2d::Costmap2DROS类实例化,并加载适当的参数。以下是一个简单示例: 首先,在您的工作空间中创建一个名为standalone_costmap的ROS包。确保您已安装costmap_2d及其依赖项: 123cd ~/catkin_ws/srccat 2023-04-27 slam > ROS #原创
代价地图costmap_2d包中与点云数据处理相关的部分 代价地图costmap_2d包中与点云数据处理相关的部分在costmap_2d包中,costmap_2d::ObstacleLayer类负责处理来自多种传感器数据的障碍物信息,其中包括点云数据。处理点云数据的关键部分是PointCloud2数据类型的观测源。 首先,在costmap_2d::ObstacleLayer类的配置文件中,需要为PointCloud2数据类型的观测源添加一个条目,如下所示 2023-04-27 slam > ROS #原创
详细介绍ROS costmap_2d的代码结构 详细介绍ROS costmap_2d的代码结构ROS(Robot Operating System)中的costmap_2d包是一个用于处理二维代价地图的库。它用于表示机器人周围的环境,特别是在导航和避障任务中。costmap_2d可以从不同的传感器数据(如激光雷达、深度相机等)构建地图,并提供一种用于规划路径和避障的通用表示。 costmap_2d包的主要组件包括: Costmap2D类: 2023-04-27 slam > ROS #原创
介绍ROS中用到的pgm图像 如何由cv Mat生成pgm 介绍ROS中用到的pgm图像 如何由cv Mat生成pgmROS(Robot Operating System)是一个开源的机器人操作系统平台,提供了软件库和工具以帮助开发机器人应用。在ROS中,pgm(Portable Gray Map)图像是地图数据的一种常用格式,通常用于导航和定位任务。pgm图像是一种灰度图像,可以存储每个像素的灰度值,范围从0(黑色)到255(白色)。 为了从OpenCV 2023-04-27 slam > ROS #原创
面向对象编程设计原则 面向对象编程设计原则面向对象编程(Object-Oriented Programming, OOP)设计原则有助于提高代码的可维护性、可复用性和可扩展性。以下是一些常见的面向对象设计原则: 单一职责原则(Single Responsibility Principle, SRP) 一个类应该只有一个原因引起变化。换句话说,一个类应该只负责一项职责。这有助于降低代码的复杂性和提高可维护性。 开放 2023-04-25 C++ #原创