0. 简介 在阅读了近些年的前视的工作后,发现现在以特斯拉为首的BEV纯视觉语义分割方法目前也越来收到关注,并吸引了大量的研究工作,但是灵活的,不依赖内外参的任意位置安装单个或多个摄像头仍然是一个挑战,而Nullmax就提出了《BEVSegFormer: Bird’s Eye View Semantic Segmentation From Arbitrary Camera Rigs》以用来解决这
0. 简介 我们在遇到类似GUI中多种Button点击功能的操作时,我们应该将请求的所有细节 (例如调用的对象、 方法名称和参数列表) 抽取出来组成命令类, 该类中仅包含一个用于触发请求的方法。 命令模式就是这样一种行为设计模式, 它可将请求转换为一个包含与请求相关的所有信息的独立对象。 并能根据不同的请求将方法参数化、 延迟请求执行或将其放入队列中, 且能实现可撤销操作。 1. 命令模式示
0. 简介 最近在群里划水时,看到很多初学的SLAMer面对精度评估这个问题无从下手。而精度评估确实是在SLAM算法实际评估中急需一种手段和工具,本文将从2维室内和3维室外两个层面来向各位展示如何通过各种手段来对SLAM算法完成。 1. 2D评估—基于cartographer 室内的评估方案比较多样,作者也选取了几种方法来实现二维层面上的室内定位性能评估 1.1 直尺和角度计 这种是作为
0. 简介 定位模块是自动驾驶最核心的模块之一,定位又包括全局定位和局部定位,对于自动驾驶,其精度需要达到厘米级别。传统的AGV使用一类SLAM(simultaneous localization and mapping)的方法进行同时建图和定位,但是该方法实现代价高,难度大,难以应用到自动驾驶领域。自动驾驶车辆行驶速度快,距离远,环境复杂,使得SLAM的精度下降,同时远距离的行驶将导致实时构建
0. 简介 对于责任链模式,其作为一种行为设计模式, 允许你将请求沿着处理者链进行发送。 收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。这种处理方法类似包与包之间的调用的思路,只是其可以不在主程序中累赘的去申明一堆if else变量使得程序更加臃肿。 相比于创建设计模式的对整体架构进行的设计,和结构设计模式对对象的化繁为简的操作,作为行为设计模式,其需要我们对数据
0. 简介 相比于传统的回环检测方法,SC给激光回环带来了更多的可能性,这里我们将会对SC进行解析,也顺便为之前的两篇文章填坑了。LEGO-LOAM改进思路以及代码, SC-LEGO-LOAM 扩展以及深度解析。Scan Context 就包括空间描述子的定义方法和与之对应的匹配算法。并提供了高效的 bin 编码函数,同时这种编码对点云的密度和法向的变化不敏感。另外SC还保存点云的内部结构,并使
0. 简介 confluence 是我们日常文档的整理工具,有时候我们经常需要拉取一些好文章或是查看最近有什么更新,而可视化界面对于细节查找不太友好,这里我将尝试着使用atlassian-api对confluence实现二次开发,并将特定时间段的源码快速导出 1. Atlassian-api atlassian-api 作为一款基于python的API lib,非常适合快速开发,conful
0. 简介 外观模式作为我们常用结构模式的最后一节,一些不常用的比如说桥接、享元、代理等,这里等有时间在补充学习吧。下面我将会来继创建模式和结构模式后来讲行为模式。 外观模式是一种结构型设计模式, 能为程序库、 框架或其他复杂类提供一个简单的接口。外观模式(Facade)为子系统中的一组接口提供了一个一致的界面,此模式定义了一个高层接口,这些接口使得这一子系统更加容易使用. 其基本的结构体大致
0. 简介 作为SLAMer常用的优化工具,我们会经常接触Ceres这一优化工具,但是在优化的过程中一直不支持GPU加速,这就导致优化性能难以提高,但是在Ceres2.1这一版本后,GPU加速开始适用于Ceres,为此本文来采坑看一看如何适用GPU加速Ceres。 1. 删除原本Ceres 通过find . -name ceres*函数我们可以发现ceres代码路径是存在在下面三个路径下的,
0. 前言 在C++编程中,我们经常会发现段错误这类问题,而这类问题经常是指访问的内存超出了系统所给这个程序的内存空间。一般是随意使用野指针或者数组、数组越界等原因造成的。段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址、访问了系统保护的内存地址、访问了只读的内存地址等等情况。此前我们也在博客中讲述了通过GDB对ROS的调试,而段错误也会通过这样类似的形式运行
0. 简介 三角化作为SLAM中的基础问题,最近经常被提及,通过单目运动的方式可以有效的恢复深度信息 1. 线性三角化数学推导 特征点在某个相机中被观测到,根据相机位姿和观测向量可以得到3D空间中的一条从相机中心出发的观测射线,多个相机位姿观测会产生多条观测射线,理想情况下这些观测射线会相交于空间中的一点,求所有观测射线的交点就是特征点在3D空间的位置,这也就是三角化过程。$x$,$x’$为
0. 简介 在提升算法认识的同时,本人逐渐认识到有一个好的开发文档/UML图是多么方便,而很多时候代码的开发维护总是会缺少这样的工作。这里以Doxygen为主,介绍本人在Ubuntu环境下的开发操作。 1. Doxygen安装 Ubuntu/Debian安装 sudo apt-get install doxygen 生成配置文件 doxygen -g 该命令会在当前路径生成一
0. 简介 在开发大型的机器人工程时候,我们会发现团体开发以及代码的review的会非常重要。而这些离不开敏捷开发(Scrum)以及Git管理。而最常用敏捷开发流程就是DoD。本文也将介绍和学习这种方式,来辅助各位能够在实验室和工作中团体开发中有效的管理自己以及团队。 1. 常见的迭代DoD条款 所有完成的用户故事得到PO的验证 所有代码得到静态分析,纠正最高级别的不符合项 所有新增
0. 简介 最近在收到了很多读者的消息后,我觉得有必要开这个坑,来给大家阐述下如何对激光雷达点云以及图像点云去做栅格化以及体素化的操作.这部分需要各位读者拥有PCL,octomap,ROS2,C++的一些基础.好了废话不多说,我们第二章主要介绍点云的体素化. 1. octomap octomap是一种基于八叉树的三维地图创建工具, 可以显示包含无障碍区域及未映射区域的完整3D图形, 而且基于
0. 简介 作为主流框架的前端中常用的方法,划窗优化是很常见迭代策略。因为随着SLAM系统的运行,状态变量规模不断增大,如果使用滑动窗口,只对窗口内的相关变量进行优化便可以大大减小计算量。这些之前在我的博客中有提到,但是之前作者没有深入的去了解这些,只是对边缘化中的舒尔补策略进行了简略的介绍。 而作为划窗优化,我们除了创建滑动窗口的存储空间外,我们还要通过边缘化的方法保留滑窗外的状态,我们可以
0. 简介 这一次我们继续来讲结构型模式中的组合设计模式。组合模式是一种结构型设计模式, 你可以使用它将对象组合成树状结构, 并且能像使用独立对象一样使用它们。在一般组合模式中中声明所有用来管理子对象的方法,其中包括Add、Remove等,这样实现组合方法接口的所有子类都具备了Add和Remove,但是只是是虚函数,并不会去使用。 1. 组合模式结构 如下图所示为组合模式的示意图,主要的核心
0. 简介 很多时候我们在接手代码的时候会发现很多时候我们需要在原本基础的类中加入一些功能,或者要调用多个类来组合成一个新类来工作。这时候我们需要使用装饰或者适配器模式来对整个结构去聚合或者多重继承出自己想要的类型。装饰模式是一种结构型设计模式,其可以动态的为一个类增加职责(相对于继承)。 1装饰模式 部件 (Component) 声明封装器和被封装对象的公用接口。 具体部件 (Concre
0. 简介 适配器模式是一种结构型设计模式, 它能将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。 根据适配器类与适配者类的关系不同,适配器模式可分为对象适配器和类适配器两种,在对象适配器模式中,适配器与适配者之间是关联关系;在类适配器模式中,适配器与适配者之间是继承(或实现)关系。他和装饰器模式一样可以动态扩展一些遗留或者不好改动的代码。
0. 简介 在深入剖析了Ceres、Eigen、Sophus、G2O后,以V-SLAM为代表的计算方式基本已经全部讲完。就L-SLAM而言,本系列也讲述了PCL、Open3D、与GTSAM点云计算部分。最近在了解boost,个人觉得这些仍然在SLAM以及自动驾驶中是必须的,打算仍然延续本质剖析的结构来续写这个系列,方便自己回顾以及后面的人一起学习。 1. C++总体介绍 通用库 Boost:Boo
0. 简介 生成器是一种创建型设计模式, 当构建一个复杂对象时,将构建过程与表示分离。使得同样的过程创建不同的对象。生成器与其他创建型模式不同, 生成器不要求产品拥有通用接口。 这使得用相同的创建过程生成不同的产品成为可能。生成器方法通常支持方法链 (例如 someBuilder->setValueA(1)->setValueB(2)->create() ),来组成复杂的对象。相
0. 简介 继单例模式写完后,我觉得对于C++的高级用法可以来开一个专栏来专门整理与阐述,这里,我将以我们最常用的工厂模式开始,来逐步的共同学习。 1. 初级工厂模式 工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。本节从一个具体的例子逐步深入分析,来体会三种工厂模式的应用场景和利弊。这里借用网络上的例子
0. 简介 有时候我们在面对通用代码时候,经常会尝试着创建多个示例函数来对一个函数多次赋值,这样会损耗很多的内存空间,这对于代码来说是不利的。而单例模式可以很好的解决这个问题。但是实现一个实用的单例模式来说,这个并不容易。 1. 单例函数 1.1 饿汉模式 饿汉模式 是指单例实例在类装载时就构建,并被立即执行初始化: public class Test { private Test
0. 简介 在设计复杂的运行程序时,我们经常需要创建一定数量的线程,然而很多时候线程不都是一直执行的,会存在一些线程处于空闲状态。所以通过线程池的方式,可以有效的对线程进行分配。若线程池中有空闲线程,则从线程池中取出一个空闲的线程处理该任务,任务处理完后,该线程被放到线程池中;若线程池中无空闲线程,则将任务放入任务队列等待线程池中有线程空闲,这样的处理方式可以避免线程在建立与销毁时存在的开销。 1
0. 简介 protobuf也叫protocol buffer是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。 由于它是一种二进制的格式,比使用 xml 、json进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种
0. 前言 在许多优化问题中,尤其是传感器融合问题,必须对存在于称为流形的空间中的数量进行建模,例如由四元数表示的传感器的旋转/方向。其中流型中的加法用⊞表示。以旋转矩阵更新为例: LocalParameterization 接口允许用户定义参数块并与它们所属的流形相关联。它通过定义 Plus (⊞) 运算及其在 Δ=0 处相对于 Δ 的导数来实现。 class LocalParameteriza
0. 简介 最近在收到了很多读者的消息后,我觉得有必要开这个坑,来给大家阐述下如何对激光雷达点云以及图像点云去做栅格化以及体素化的操作.这部分需要各位读者拥有PCL,octomap,ROS2,C++的一些基础.好了废话不多说,我们第一章主要介绍点云的栅格化. 1. 栅格化 点云地图存储的是传感器对环境的原始扫描点云,优点是保留信息完整,缺点是计算量大、但是不能直接用于导航避障;特征地图存储的是环境
0.简介 快过年了,这里打算以这一篇长博文作为结尾,来迎向2022春节。同时也希望新的一年能够继续不断提升自我。 1. 系统介绍 本文提出了一种紧耦合的雷达视觉惯导SLAM系统,可以实时高精度鲁棒的进行状态估计和建图。LVI-SAM构建在因子图之上,由两个子系统组成: 一个视觉惯导系统 一个激光惯导系统。 下面是LVI-SAM的整体流程图,通过视觉里程计和激光里程计两个子系统紧
0. 简介 gazebo作为ros当中常用的模块,可以做很多有趣的工作,正值双旦,最近想着以平衡车为基础开一个系列来向大家展示如何搭建一个仿真机器人平台。 1. 模型的创建 首先现在solid works 里面将模型文件建立出来,注意各个坐标系以及他们之间的关系。然后根据自己创建的节点命名一个urdf文件。 在这个模型文件里,由于我还可能去添加很多其他的传感器或者是摄像头,所以我在写文件的时候才用
0. 简介 最近一直苦于自己写的代码的开发的质量不高,急需要一种可以适用于C++代码的代码质量检测工具,这里发现SonarQube可以很好的适用于Ubuntu环境,并能够很好的与Gitlab兼容,从而保证代码的敏捷式开发。 1. SonarQube安装 ubuntu中安装jdk详细过程可参考:https://blog.csdn.net/qq_26709459/article/details/80
0. 前言 最近空闲时间在看点云地图的动态加载,这部分在自动驾驶领域是非常有必要的。由于点云地图的稠密性,导致我们在大场景中没办法一次性加载所有的地图,这就需要我们将地图切分成多个子地图。 1. NDT降维 建立好的点云文件中,有很多点是重合的,需要通过采用合适的downsample_resolution以减小点云文件体积,便于传输和加载,通常降采样后体积可以降到原来的一半以下。同时由于ND
0. 简介 在VINS优化中,我们除了对IMU的P(位置),Q(旋转角),V(速度),Ba(加速度偏转角),Bg(陀螺仪偏转角)以外,我们还需要对相机本身的外参、逆深度、与时差进行优化。其中逆深度最为重要,但是网上的信息没有能够很好的对逆深度进行科学的阐释。所以本文根据自己的理解来讲述一下里程计。 1. 参数化 在了解逆深度之前,我们需要了解下为什么需要参数化。参数化作为点、线、面的slam表现形
0. 前言 在深入剖析了Ceres、Eigen、Sophus、G2O后,以V-SLAM为代表的计算方式基本已经全部讲完。就L-SLAM而言,本系列也讲述了PCL、与GTSAM点云计算部分。之前的系列部分作者本以为已经基本讲完,但是近期突然发现还有关于Open3D的部分还没有写。趁着这次不全来形成一整个系列,方便自己回顾以及后面的人一起学习。 1. Open3D环境安装 这里将Open3D的环境安装
0. 简介 Intel的CPU和ARM的CPU都有SIMD指令,可以完成CPU 指令级的并行化。这里边主要涉及CPU的汇编的知识和一些寄存器的知识。在一些耗时的SLAM优化迭代的场合,经常出现这样的指令的优化。SSE是Intel x86架构CPU的SIMD指令的简称,NEON是ARM CPU的SIMD指令的简称。 最近在jetson的ARM架构平台下发现在移植slam的代码的时候,无法快速处理,而
0. 简介 李群李代数作为SLAM当中非常重要的一部分,作者最近才对该部分有了清晰地认知,感觉有必要放出来说一说。因为李群本身存在加法不闭合性,所以李群与李代数之间的转换需要每一个slamer人有着充分清晰地认识。 1. 李群扰动 Baker-Campbell-Hausdorff公式,这个公式作为李群相乘转到李代数的式子,我们可以看到李群的相乘会带来李代数产生高次项输出。近似为在SO(3)上,我们
0.背景 在自动/辅助驾驶中,车道线的检测非常重要。在前视摄像头拍摄的图像中,由于透视效应的存在,本来平行的事物,在图像中确实相交的。而IPM变换就是消除这种透视效应,所以也叫逆透视。 而我们需要认识的变换主要分为三类透视变换、仿射变换、单应性变换: 透视变换:不能保证物体形状的“平行性”。仿射变换是透视变换的特殊形式。透视变换是将一个平面投影到另一个平面,简单理解就是把一张图片投影到另一
0.简介 作为常用的滤波器形式,低通滤波是一种适中的滤波处理方式,相较于卡尔曼滤波算法和滑动平均滤波而言。其计算量适中,同时能拿到一个较为合适的结果。低通滤波算法可以解决这种长期可靠,短期噪声大的传感器,并有效地实现噪声的滤除。 1. 相关代码 oldData表示上一次的输出Y(n-1), newData表示新的输入X(n); deltaT 采样周期, Fcut 截止频率 。 float L
0.前言 平滑技术作为事后或准实时数据处理的一种方法,可以在一定程度上提高数据处理的精度,在测绘领域获得了广泛的应用。平滑技术总的来说分为三类:固定区间平滑(Fixed—Interval Smoot—hing)、固定点平滑(Fixed—Point SmoOthing) 和 固定滞后平滑(Fixed—Lag Smoothing)。其中在数据后处理中应用最为广泛的方法就是固定区间平滑,其原理图如下图所
0. 前言 最近群里有些老哥在问cartographer配置的相关问题,将我以前自己记录的文件测试后发现竟然已经失效,其原因在于cartographer官网对程序又进行了一次升级,以前的部分操作已经无法适用,这里在此记录一下。 1. 环境配置(melodic) 安装依赖包 sudo apt-get update sudo apt-get install -y google-mock libboo
0. 简介 最近群里有些老哥在问cartographer纯定位相关问题,网上已有的方法均已失效,这里作者研究了下cartographer相关的流程以及源码,给出了一种简单的解决策略。 1. 旧版cartographer_ros launch文件的修改 在启动cartographer_occupancy_grid_node节点时,增加pure_localization参数。 <node nam
0. 前言 最近尝试着去在SLAM当中使用深度学习,而目前的SLAM基本上是基于C++的,而现有的Pytorch、Tensorflow这类框架均是基于python的。所以如何将Python这类脚本文件来在C++这类可执行文件中运行,这是非常有必要去研究的,而网络上虽然存在有例子,但是很多都比较杂乱,所以本篇文章将网络上常用的方法进行整理,以供后面初学者有迹可循 1. 模型认识 我们知道,目前基于C
0.简介 为了保证激光雷达的360°环境覆盖,我们常常需要用到多传感器的拼接,如果我们单纯的取读取激光雷达的信息会出现如下图的情况,两个激光雷达会发生重叠,这就需要我们去对激光雷达进行标定。 <arg name="device_ip1" default="192.168.1.200" /> <arg name="device_ip2" default="192.168.1.200
0. 前言 最近一直在啃SLAM优化方面的相关知识,发现以前对于se3与sim3之间的理解不太深入,这里专门开一篇文章来整理这两者之间的区别。相似变换sim(3),尺度s与R相乘,而不是t。ORB-SLAM2中使用sim3的主要原因是考虑到单目尺度漂移,这个在第一版系统的论文中的VII。 LOOP CLOSING的Compute the Simlilarity Transformation部分有提
0.前言 之前作者整理了一份ROS1中常用的GUI测试工具,最近作者在完善ROS2部分时觉得有必要写一篇关于ROS2常用命令行工具的文章来作为ROS2第一部分的一个小结。 1. 通信层面 ROS_DOMAIN_ID标记一个 ROS 域,不同的 ROS 域之间不能通信。这部分可以参照作者ROS2 DDS通信漫谈这篇文章,主要是因为ROS2本身的通讯是基于DDS的,所以存在域这个概念。 colcon_
0. 简介 本文档用于记录现ROS1与ROS2之间的区别,以及如何向ROS2移植。整体架构基于该文章 ROS2的教程参见:https://docs.ros.org/en/ros2_packages/rolling/api/ 1 工程构建 1.1 CMakeList的编写 ROS2采用ament cmake系统,最主要的区别是原先的catkin Cmake宏被取代 find_package(cat
0. 简介 最近在看点云匹配相关的知识点,而KD树和八叉树作为点云匹配中最为重要的方法,当然需要好好看看。这里写一篇博客记录一下,便于后面回顾。(最近发现SLAM、ROS方面已经基本粗略的写了一遍,后面会针对一些重要的点去零碎的填坑)。 1. KD-Tree KD-Tree, 或称 k 维树,是计算机科学中使用的一种数据结构,用来组织表示 k 维空间中的点集合。一般在会基于 FLANN 进行快速最
0. 前言 在使用深度学习时候,我们可以有效地提取出我们想要的结果,但是常常会缺少深度信息(双目测景深会耗费大量的计算资源)。因此将激光雷达和单目摄像头相结合,可以有效的补充室内环境的深度信息,而目前3D的激光雷达成本高昂,这里提供一个2D激光雷达的解决方案。 1. 相机坐标系变换 上文提过, 在相机世界中, 3D外界点转换到2D图像像素点转换方程是我们可以通过相机的内在参数 intrinsic
0. 前言 我们都知道ROS1与ROS2的通信是不一样的,而ROS2也因为DDS的通讯带来了一些问题,其中最严重的就属于在存储大数据包的时候会出现的丢帧问题。而如何解决这样的问题目前官方没有给出非常好的解决方案,所以我们只有曲线救国,通过保存图片的方式来实现bag包的完整录制。操作系统:Ubuntu 20.04版本:foxyDDS实现:Fast-RTPS客户端库(如适用):rclcpp/rclpy
0. 前言 目前是ROS1到ROS2的过度阶段,由于ROS2内部的机制大幅变动,导致我们ROS1录制的bag包和ROS2的bag包并不能通用。网上基本上均是如何将ros2录制的bag包转换为ros1格式的bag包的方案,这里做出归纳,并给出全套的解决方案。测试环境:ubuntu 20.04ROS 1 noeticROS 2 foxy两个版本的ROS 均需要按照官网教程进行安装,这里可以参照作者之前
大前提 一定要会科学上网!一定要会科学上网!一定要会科学上网!不然谷歌账号登录不了。 wget特性 这里介绍下常用的wget,及其常用命令。 wget是非交互的网络下载器。通过manpage,主要特性如下: 支持http,https, ftp以及http代理。对安全强度很高的系统而言,一般不会将自己的系统直接暴露在互联网上,所以,支持代理是下载软件必须有的功能 非交互。 可识别(fol
0. 前言 ubuntu下安装cuda、cuddn等NVIDIA机器学习、深度学习环境往往是在使用Linux中最头疼的配置步骤,同时,由于nvidia的cuda、cuddn版本众多,这让统一环境开发成为了难点。而Nvidia官方也认清楚了这一点,并基于docker开发了nvidia docker并且提供cuda镜像,这让我们完全不用考虑环境问题了 环境:ubuntu20.04docker 19.0
0. 前言 我们都知道ROS2比ROS1好很多,就比如说: 去中心化master,ROS和ROS2中间件不同之处在于,ROS2取消了master节点。在去中心化后,各个节点之间可以通过DDS的节点相互发现,各个节点都是平等的,且可以1对1、1对n、n对n进行互相通信。 不造通信的轮子,通信直接更换为DDS进行实现。通信采用采用DDS通信,使得ROS2的是实行、可靠性和连续性上都有了增强。
0. 前言 在使用ROS时候,我们常常感叹ROS的好用,但是在ROS开发方面,从前的我常常会拘泥于教程上的POP的开发方式,这样让我在开发相对大型的机器人程序时就倍感不适。而在19年开始我尝试着在ROS1中使用OOP的形式编程。但是我们知道ROS2和ROS1存在着差异性,所以我们不能直接套用ROS1的编程习惯去实现ROS2的编程。为此本文针对ROS2去给出一套POP和OOP编程以供各位对比。这里也
0. 前言 最近公司需要实现基于HD-MAP的自动驾驶定位技术,而这方面之前涉及的较少,自动驾驶这部分的定位技术与SLAM类似,但是缺少了建图的工程,使用HD-MAP的形式来实现车辆的定位(个人感觉类似机器人SLAM当中的初始化+回环定位的问题)。下面是我个人的思考与归纳 1. AVP-SLAM 从AVP-SLAM自动泊车SLAM中我们发现基础(封闭)的视觉定位模式避不开下面几个步骤 A 首先是I
0. 前言 随着ROS在机器人行业的越来越普及,机器人领域已经和ROS密不可分,无论是单体机器人还是群体机器人。而最近大热的自动驾驶行业也是以ROS为基础进行改动和开发的,但是由于ROS1自身的不足,越来越多的企业开始转投ROS2的怀抱(当然ROS1和ROS2的编程思想类似,所以转起来还是挺方便的)。最近本人也开始转ROS2,而如何科学有效地对ROS2代码的debug调试,看了全网发现都没有合适的
0. 前言 系统要求:Ubuntu20.04 ROS安装版本: Noetic 清华源配置 sudo gedit /etc/apt/sources.list #清华源 deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse deb https://mirrors.tuna
0. 前言 最近无事,在想着做一些工作。正好碰巧看到了yuanguobin01作者写的Lego-Loam的改进思路系列文章,这部分看完后遗憾于作者仅仅提供了一些初步的设想,而没有系统的学习代码,为此本文打算从作者提出的几个改进点来给出自己实现的策略思路。 1. 二维轮式里程计+IMU = 三维里程计 替换 原本3D激光前端里程计 这部分作者说通过二维里程计提供位移 + IMU航姿模块提供三向角度
0. 前言 在讲完激光SLAM和视觉SLAM后,个人感觉目前对这两块的基础剖析已经较为完善了。这一次也想借着这个机会来写一下外参标定相关的东西。因为对于SLAM而言,在实现多传感器融合前,就需要对每个传感器进行标定,以便于融合的精确。当一个车上装了多个/多种传感器,而它们之间的坐标关系是需要确定的。这个工作可分成两部分:内参标定和外参标定,内参是决定传感器内部的映射关系,比如摄像头的焦距,偏心和像
0. 前言 在深入剖析了Ceres、Eigen、Sophus、G2O后,以V-SLAM为代表的计算方式基本已经全部讲完,但是就L-SLAM而言我们还差一块,那就是PCL、GTSAM点云计算部分我们还没有详细的去写,正好就这个时间,我想把这块坑给填完,来形成一整个系列,方便自己回顾以及后面的人一起学习。 GTSAM系统认知 我们在一般的认知,G2O和GTSAM都做着后端图优化的功能,而他们当中的全局
0. 前言 在深入剖析了Ceres、Eigen、Sophus、G2O后,以V-SLAM为代表的计算方式基本已经全部讲完,但是就L-SLAM而言我们还差一块,那就是PCL、GTSAM点云计算部分我们还没有详细的去写,正好就这个时间,我想把这块坑给填完,来形成一整个系列,方便自己回顾以及后面的人一起学习。 1. PCL系统认知 PCL(Point Cloud Library) 是在吸收了前人点云相关研
前言 CPU并行加速 CPU并行加速的本质就是通过硬件并发(hardware concurrency)的形式来实现。这种的操作方式是通过单个进程里多线程,从而实现共享地址空间,全局变量,指针,引用。但是这种方式相对而言更加传统,但是同时更加具有普适性。其中操作是使用以pthread为代表的多线程并行加速 pthread 这是一个pthread的简单示例代码。 class helloFromObje
0.前言 局部优化作为VSLAM当中常用的策略,其作用相当于激光SLAM中的局部地图的ICP or NDT优化(scan2localmap)。如下图所示,在VIO当中,随着时间的推移,路标特征点(landmark)和相机的位姿pose越来越多,BA的计算量随着变量的增加而增加,即使BA的H矩阵是稀疏的,也吃不消。因此,我们要限制优化变量的多少,不能只一味的增加待优化的变量到BA里,而应该去掉一些变
0. 前言 随着路径的不断延伸,机器人的建图过程会存在不断地累计误差。而传统的以gmapping为代表的使用粒子滤波进行定位的slam建图方式。以及ORB-SLAM为代表包含的局部优化和全局优化来调整外。但是这些处理方式只能减缓误差累计的程度,无法消除,而现在最为常用消除累计误差的方法就是利用回环检测来优化位姿。 当新的关键帧加入到优化模型时,在关键帧附近进行一次局部优化。在全局优化中,所有的关键
0.前言 多传感器融合(Multi-sensor Fusion, MSF)是利用计算机技术,将来自多传感器或多源的信息和数据以一定的准则进行自动分析和综合,以完成所需的决策和估计而进行的信息处理过程。和人的感知相似,不同的传感器拥有其他传感器不可替代的作用,当各种传感器进行多层次,多空间的信息互补和优化组合处理,最终产生对观测环境的一致性解释。具体来讲,多传感器数据融合处理: (1)多个不同类
0. 前言 对于我们这些搞机器人的工程师来说,当前嵌入式开发板需要安装一些外网才能安装的软件包时,总需要我们从电脑下载相应的软件包然后remote到嵌入式开发板中,这导致我们配置非常繁琐,为此本文提供一套小米4C刷openwrt并配置的文章,来方便各位工程师配置嵌入式环境 1. 认识刷机 上面的图片是小米4C的配置,虽然4C没有usb口,但是搞一搞环境搭建还是ok的。 开启Telnet 和 FTP
Valgrind查找内存泄露利器 Valgrind是一个GPL的软件,用于Linux(For x86, amd64 and ppc32)程序的内存调试和代码剖析。你可以在它的环境中运行你的程序来监视内存的使用情况,比如C 语言中的malloc和free或者 C++中的new和 delete。使用Valgrind的工具包,你可以自动的检测许多内存管理和线程的bug,避免花费太多的时间在bug寻找上,
0. 前言 在了解SLAM的原理、流程后,个人经常实时困惑该如何去从零开始去设计编写一套能够符合我们需求的SLAM框架。作者认为Ceres、Eigen、Sophus、G2O这几个函数库无法避免,而作者在此之前已经对Ceres、Eigen、G2O做了详细的介绍,目前仍剩下Sophus还未进行详写,所以这篇文章作为这个系列的最后一篇文章,主要对Sophus函数库进行详细的阐述,来方便各位后续的开发。
0. 前言 在了解SLAM的原理、流程后,个人经常实时困惑该如何去从零开始去设计编写一套能够符合我们需求的SLAM框架。作者认为Ceres、Eigen、Sophus、G2O这几个函数库无法避免,尤其是Ceres函数库在激光SLAM和V-SLAM的优化中均有着大量的应用。作者分别从Ceres和Eigen两个函数进行了深入的解析,这一篇文章主要对G2O函数库进行详细的阐述,来方便各位后续的开发。 1.
0. 前言 在了解SLAM的原理、流程后,个人经常实时困惑该如何去从零开始去设计编写一套能够符合我们需求的SLAM框架。作者认为Ceres、Eigen、Sophus、G2O这几个函数库无法避免,尤其是Ceres函数库在激光SLAM和V-SLAM的优化中均有着大量的应用。所以作者已从Ceres作为开端,这一篇文章主要对Eigen函数库进行详细的阐述,来方便各位后续的开发。 1. Eigen示例 相较
0. 前言 在了解SLAM的原理、流程后,个人经常实时困惑该如何去从零开始去设计编写一套能够符合我们需求的SLAM框架。作者认为Ceres、Eigen、Sophus、G2O这几个函数库无法避免,尤其是Ceres函数库在激光SLAM和V-SLAM的优化中均有着大量的应用。所以作者从Ceres作为开端,来对手写SLAM开个头,来方便各位后续的开发。这里分享以为博主写的博客,个人看了感觉写的不错,对SL
本次工作 我首先参照网络上的文档整理了全部的代码,并对于C++和OpenCV的一些操作也进行了详细的注释,并写了这篇的博客进行全部的讲解,其中1-4章节是前端VIO信息,5章节是后端DBOW词袋回环,6-7章节是GPS与VIO融合,8章节是参考文献。 1. 程序入口rosNodeTest.cpp 1.1 定义内容 运行程序时,首先进入的是主程序vins_estimator/src/estimato
相机标定 作为t265而言,虽然官方提供了标定的出厂内参rs-enumerate-devices -c可以获得,但是我们在vins和orbslam中仍然有可能需要自己标定数据,这里给出教程。 首先我们要明确适用的模型,一般普通相机小孔模型即可,而鱼眼镜头则是适用KB4(Kannala-Brandt Camera Model)或者Mei模型 目前可以用kalibr或者vins-fusion里面的ca
简介 D455作为新一代的英特尔RealSense深度摄像头,网上的资料很少,同时除了官方的资料以外,我们很难找到相关的ROS相关的文档。同时由于D455支持的是realsense SDK2.0。所以SDK1.0的数据也不适用。本文档主要提供了一套完整的Ubuntu 18.04 + Realsense D455 + ROS melodic 的代码。 详细步骤 1.环境依赖 依赖环境 版本号
让我们看看基本的基于Python的I2C函数,这些函数经常用于Raspberry Pi上的I2C通信。 在python中开发Raspberry Pi I2C通信程序时,我们可以使用SMBus库包,它对访问I2C设备有很大的支持。因此,我们应该使用apt数据包管理器为Python添加SMBus支持, sudo apt-get install python-smbus 基于Python的I2C函数
Epuck2机器人是一款最新的科研教学实践使用的多功能移动机器人。由EPFL和GCtronic两个机构合作研发生产。这款机器人的全貌如上图所示,主控芯片是STM32F4,具备蓝牙、WIFI等通信功能。详情请参见官网:Epuck2科研教学机器人详细资料官网 由于这款机器人是从国外进口,价格比较贵(10000RMB/台),因此需要开发使用的代价成本较高。而且开发IDE采用的是基于C语言的Eclipse
树莓派读取mpu6050内容 sudo vi /etc/modules //文件的最后写入 i2c-bcm2708 i2c-dev //保存退出 然后是可选的,把设备解除屏蔽,一块全新的板子可能是没有的。 接着去树莓派选项里面,把GPIO打开: sudo raspi-config 这里有个选项回车进去会有I2C的选项,再回车选择OK就行了,之后重启树莓派 sudo reboo
1.下载镜像 我的树莓派打算基于ROS搭成一个机器人核心控制器,所以打算装一个ubuntu server。本篇文章是我踩过坑之后的分享。 ubuntu server的官方引导下载地址已经失效,只能安装20.04。 https://ubuntu.com/download/raspberry-pi/thank-you?version=20.04&architecture=arm64+raspi
1、远程桌面闪退,shell可以用的问题: (1)需要在该用户目录创建一个.xsession:touch .xsession(2)里面写“xfce4-session”一句话就行:echo xfce4-session >~/.xsession 。(3)然后进入到用户目录下,sudo chown username:username .xsession 2、windows桌面连接后远程使用Term
0 前言 最近没啥可以写博客的好点子,为此一直咕咕咕了。端午节没啥事,左右苦思冥想,发现网上针对ROS的bash启动脚本几乎还是处于0的状态。为此针对性的给ROS开一个bash脚本的教程是非常有必要的。也希望各位大佬能提点意见,如果后续合适,我会继续根据各位的意见来继续开坑的。 1 bash 脚本简介 1.1 bash 脚本基础介绍 首先我们知道常见的bash脚本是基于shell文件的。因为bas
移动机器人地图构建问题,主要以gmapping为例,讲解了地图构建的整个流程。看过前面文章的小伙伴肯定都知道,gmapping算法把SLAM问题分解成两个部分,定位问题和地图构建问题。而gmapping中的地图构建就是采用占据栅格地图构建算法实现的。 。懂了占据栅格地图构建算法,就意味着SLAM问题不再是抽象的理论公式,它变成了浮现在你我脑海里的动态构建过程。这将对我们完整理解各种激光SLAM算法
1. 问题描述 在ROS编译过程中经常会遇到找不到ROS包的情况,如下所示 CMake Error at /opt/ros/kinetic/share/catkin/cmake/catkinConfig.cmake:83 (find_package ): Could not find a package configuration file provided by "gazebo_plugin
ROS 常用GUI测试工具 作为一个成熟的ros开发工程师,我们常常会需要用到GUI工具方便我们进行调试,为此rqt工具是我们日常使用时必不可少的工具。 rqt_plot 这个命令常常是我们需要长时间观察topic数据变化所需要用的。在我们需要观看某个topic的动态参数时候会非常有用。 rosrun rqt_plot rqt_plot #画出发布在topic上的数据变化图 rqt_plo
本文借鉴文章,但是该文存在致命性问题,所以博主另开一版,来讲述如何在ubuntu16.04中安装cv_bridge。 使用ROS的时候只用了C++,没有发现cv_bridge这个坑,最近增加了一个使用pytorch的节点,为此使用Anaconda配置了一个只有Python3.5的环境,运行cv_bridge时出现报错 from cv_bridge.boost.cv_bridge_boost im
安装 Opencv 3.2 on Ubuntu 16.04 并创建node测试 —假设我们已经安装好一版OpenCV,一般都安装在/usr/local下。—如果需要安装另一个版本的OpenCV,就不能再安装到/usr/local,而是选择其他路径,否则会覆盖掉之前的版本。 step 1: 安装一些package sudo apt-get -y install libopencv-dev build
上一篇 featureAssociation.cpp 其次featureAssociation这一个node节点,主要是特征提取。代码中先初始化了lego_loam::FeatureAssociation,用来订阅了上一节点发出来的分割出来的点云,点云的属性,外点以及IMU消息,并设置了回调函数。其中IMU消息的订阅函数较为复杂,它从IMU数据中提取出姿态,角速度和线加速度,其中姿态用来消除重力对
上一篇 回环检测 在LOAM系列中回环检测主要存在有四种方法 传统的领域距离搜索+ICP匹配 基于scan context系列的粗匹配+ICP精准匹配的回环检测 基于scan context的回环检测 基于Intensity scan context+ICP的回环检测 在参考很多大佬的比对结果中我们发现,传统的领域距离搜索+ICP匹配是这三个方法中最耗时的,相较于基于scan context的
第一步 下载 QT 并安装 1 1 官网( http://download.qt.io/archive/qt/5.13/5.13.0/)下载 qt 安装包qt-opensource-linux-x64-5.13.0.run 1 2 给安装 run 文件增加执行权限并运行,安装选项全选,路径默认 sudo chmod +x qt-opensource-linux-x64-5.13.0.run 2.
前言 本作者在16年大学开始接触ROS后,逐步向着机器人建图导航方面扩展,尤其是对激光雷达方向比较感兴趣,目前打算针对近阶段的SC-LEGO-LOAM进行分析讲述。从ScanContext和Lego LOAM两个部分进行分析阐述。一方面也是记录自己的学习成果,另一方面也是帮助他人一起熟悉这篇20年的经典文章。 LOAM系列发展 LOAM LOAM作为该系列的鼻祖,在前几年kitti数据集中常年霸占
docker作为一种开源的应用容器引擎,基于Go 语言并遵从 Apache2.0 协议开源。之前网上存在一些使用docker去安装ros的相关教程。但是目前网上的教程都无法装载GAZEBO RVIZ等常用的一些软件。 在做纯编译开发时,我们不需要对CPP/Python代码进行编译,这时候能够一键安装环境的Docker就显得十分有必要,这样的方式不会考虑环境配置的差异,而且能够快速的搭建好环境。 创
构建语义地图时,用的是 octomap_server和 semantic_slam: octomap_generator,不过还是整理下之前的学习笔记。 一、Octomap 安装并使用Octomap_Server1.1 Apt 安装 Octomap 库如果你不需要修改源码,可以直接安装编译好的 octomap 库,记得把 ROS 版本「kinetic」替换成你用的: sudo apt-get in
首先为这几个坐标系的定义世界坐标(map)该map坐标系是一个世界固定坐标系,其Z轴指向上方。相对于map坐标系的移动平台的姿态,不应该随时间显著移动。map坐标是不连续的,这意味着在map坐标系中移动平台的姿态可以随时发生离散的跳变。典型的设置中,定位模块基于传感器的监测,不断的重新计算世界坐标中机器人的位姿,从而消除偏差,但是当新的传感器信息到达时可能会跳变。map坐标系作为长期的全局参考是很
ubuntu16.04+ROS+Inter D415安装本文主要参考kkruaruarua博文结合自己的实际操作写成 ROS部分安装鉴于我在安装ros和D415驱动的过程中遇到的许多问题,在此和大家分享,希望可以帮助到大家 安装ubuntu16.04,我用的是64bit的系统,安装步骤大家可以参考百度,很多更改软件源,我用的是清华的软件源,但是在我刚装好系统的时候出现了这个问题 解决办法如下:先s
WiringPi是一个用C语言编写的树莓派(RaspberryPi)软件包,可用于树莓派GPIO引脚控制、串口通信、SPI通信及I2C通信等功能,非常适合熟悉C/C++的人员在树莓派上进行软件开发。WiringPi的作者是Gordon Henderson,其官方网址为http://wiringpi.com。WiringPi遵循GNU GPLv3公约,任何人都可以免费使用该软件包。 1、Wiring
一、环境配置参考turtlebot3-多机交互程序:多机交互-创客智造小车: Ubuntu-mate16.04+ROSkinetic;必要的bringup.launch文件(包括雷达信息、IMU、编码器信息、电器驱动),详情见bringup详解。上位机: Ubuntu16.04+ROSkinetic安装多机地图合并软件包ros-kinetic-multirobot-map-merge: sudo
根据官方Distributions说明,Dashing Diademata为Ubuntu 18.04上支持最长的版本,下一个长期版本目标系统为 Ubuntu 20.04,因此作为学习的话,建议安装该版本,同时经过简单测试,当前ROS2对一般开发者并不算太友好,很多功能包也没有,不建议作为主力开发使用。ROS2架构说明可参考ROS2探索总结(六)——迎接ROS2.0时代的到来 一、安装 1.设
本文借鉴文章,但是该文存在致命性问题,所以博主另开一版,来讲述如何在ubuntu16.04中安装cv_bridge。 使用ROS的时候只用了C++,没有发现cv_bridge这个坑,最近增加了一个使用pytorch的节点,为此使用Anaconda配置了一个只有Python3.5的环境,运行cv_bridge时出现报错from cv_bridge.boost.cv_bridge_boost impo
引言在写ROS工程代码,有时候找一个bug非常麻烦,尤其是运行时出错的bug,这时候借助一些调试器可以极大的提高查找bug的效率。ROS官方列出了许多可用的IDE:http://wiki.ros.org/IDEs,如VScode, Qtcreator, Ecllipse, Clion等,而这些不方便快速的调试。 所以,下面介绍如何使用GDB调试器来进行ROS C++项目的调试 在debug模式编译
ZED摄像头 获得中心点深度,未考虑RGB与深度映射(可参考下面D415) #include <iostream> #include <fstream> #include <sstream> #include <algorithm> #include <dirent.h> #include <opencv2/core/core.hp
方法1: 交叉编译环境搭建流程 交叉编译环境搭建的主要思路是利用catkin提供的rostoolchain脚本设置相应的交叉编译工具、lib库地址等,中间遇到问题再针对性解决。 基础环境: 目标运行环境 arm64 cpu Ubuntu 16.04 ros kinetic for arm 编译环境 x86_64 cpu Ubuntu Kylin(16.04) ros kinetic
一、Anaconda与Virtualenv 虚拟环境Anaconda与Virtualenv可以二选一 1.1 Anaconda Tip:ros 和Anaconda 一起使用的时候,如果先安装了Anaconda,再安装ros,会报错,因此正确的联合使用方式为:先安装ros相关,后安装anaconda即可。Anaconda安装完成后会在~/.bashrc中写入如下命令: # >>>
安卓与ROS通信的现状 因为ROS官方支持的语言绑定只有C++和Python,所以目前安卓想与ROS通信,必须借助半官方的rosjava包,而Rosjava太重了,因为它跟C++/Python一样,是一个全功能的ROS绑定,意即你可以在Java(android)平台上创建Master Node,然后其他Node(C++/Python)可以连上这个Master,进行分布式通信!这对于桌面Java或许
使用octomap_server创建八叉树地图和栅格地图 说明 问题1:点云与网格垂直 问题2:八叉树显示不完整 问题3:地面滤除 说明 Octomap 在ROS环境下实时显示、Lego_loam使用教程两篇博文对如何从PCD创建PointCloud2点云、如何用octomap_server创建八叉树地图和栅格地图已经说的很详细了,但是我在使用时还是遇到了一些问题。 问题1:点云与网格
近期有一个项目用到了Azure Kinect,之前Kinect 1与Kinect 2均使用过的老用户,自然不能放过这个机会。为此专门对Azure Kinect进行了学习,以下是这次自己调研摸索的一些成果 Azure Kinect简介 在芯片顶级会议 ISSCC 2018微软亮相自家的一百万像素的 ToF传感器,与此在论文发表三个月后,小型化的 Kinect for Azure (K4A)工业用开发
决定总结最近一个月的工作,这个月在orbslam2的基础上,使用kineticV2完成了稠密点云地图的重建,实现了点云的回环,并使用octomap转换成实时的八叉树地图,导航部分已经有了思路,打算下个月所一个基于octomap的航迹生成能用在视觉的导航上。 一、传感器和依赖包安装 PC性能:Dell xps13 内存16GB 硬盘SSD:500GB 显卡:Intel iris集显 操作系统:ub
前言 在使用ROS的过程中,我们常常需要使用复杂的编译源代码和相关的解析操作,才能单独对某一个任务进行启动。在修改时,也需要单独打开某个文件、编辑、保存,这个过程比较繁琐。这些数据信息均需要在终端中以字符的方式显示出来,键入命令同样需要在终端中输入字符命令,如果是用于较大的ROS工程,总不能所有调试工作,每改动一下参数都键入字符命令吧。为此人机交互界面氤氲而生,使用按钮,输入框等控件简化这一过程,
背景介绍 目前,市面上大多数的拖动试教机器人是UR的协作机器人和DLR-KUKA的iiwa机器人,相比于UR机器人,iiwa机器人在结构上有一点重要的不同。 UR在每个关节上采取的是双编码器的方式,分别测量电机角度和连杆角度。而iiwa机器人在每个关节上还加入了一个单轴力矩传感器(一般位于减速器输出端与末端连杆间),用于测量每个关节的输出力矩。如图所示,iiwa在牵引拖动时表现更好,同时iiw
哈哈哈,谢谢
C++而已,都适用的
不可以,因为架构不一样,一个是x86架构,一个是arm架构
https://www.guyuehome.com/project/detail/id/34,等审核通过你就可以下了,项目太小了,原本不想传上来的
过几天还有一个八叉树的,到时候一起公开代码
想问下这门课是什么课,也想系统学习一下
ros2 只可以colcon build
这是自定义的lidar结构
抱歉,不便公开哦,这只是一些初步的思想
这是新开的一个系列啊,欢迎大家关注~
哈哈哈,给你点个赞,挺有意思滴~
看一下ros版本,18以前都是2.7,20是支持python3然后还是没有通过pip安装即可
transform.Decopose查一下输入的类型,目测是类型不对
没遇到过,有可能源或者数字签名失效了,请自行查找新的清华源
重装系统即解决了么?
作者写的很棒啊
从图中看应该是Eigen并行加速出问题了。请检查:https://blog.csdn.net/derteanoo/article/details/83303760
吧第一行python3换成python看看
哦哦,是可以的,你换成双引号看看呢
get_param好像无法使用~
GCC和G++查一下https://stackoverflow.com/questions/53278637/ubuntu-18-04-no-cmake-c-compiler-could-be-found
可以使用下面的函数:sensor_msgs::convertPointCloud2ToPointCloud(msg, clouddata);,按道理来说sensor_msgs:pointcloud已经弃用了,不会再用这个了
不错呦
在yaml文件中,有imu=False,改成True就行吧。或者通过EKF融合一下也行,ROS中有robot_pose_ekf这个包,可以融合IMU。(tip:这个没中文输入法是要笑死我么)
是的,后面我会出一期这方面的教程的博客的
嘿嘿
写的很到位
是的
我刚刚查了一下,有可能你需要修改DDS通讯方式RMW implementations
你的topic_name和Link两个雷达都是一致的么
请检查清华源是否正确
后面我将会有时间把这个做成一个系列的
冲冲冲
不是,需要在两个终端,1只能拥有一个环境
需要开多个终端
得开ROS1和ROS2都开才能转
具体是什么参数问题
因为你加了r1后odom到footprint的topic断了,你需要查一下ekf的这块tf命名
需要看下你urdf,一般base_link作为旋转中心来实现的
非常明显了,需要你apt-get update或者通过--fix-missing来修复
很有意思的工作
是的,隐藏文件夹
src文件夹下
换成python3
是不是usb口的问题
代码已经整理好并更新在github: https://github.com/lovelyyoshino/Realsense-multi/tree/master
我也是通过终端运行的,并没有用双击的方式打开
你看看你的ubuntu系统,我用的ubuntu16的ros,照着改变ros名称就行
期待后续的博文
代码都在上面哈,如果有需求可以加我微信:mpl9725440
谢谢,后面我会继续给大家带来一些便捷的操作的
建议附上薪资范围呢
应该是你吧ros设为客户端了吧
改一下transform_tolerance:参数值,调大容忍度,比如调为1.0或者更高
可以降低订阅频率
工业一般CAN总线会稳定
从报错来看是你没有导入科大讯飞语音包的授权文件,建议查一下对应目录下的文件是否存在
pip版本不对,需要降低pip版本
目前看来首先你用了虚拟时间,而同时你应该有其他传感器采用了真实时间导致了这个问题
写的好棒!
你可以看下内存的占用,应该是cache占用了内存导致的卡顿,你可以尝试手动释放内存
互相学习,哈哈哈
棒棒哒!
谢谢鼓励
就你目前报错的信息来看,应该是时间不一样,首先你需要把你的仿真时间设置为true,然后检查你的时间差是否有问题,然后看下你的tf坐标系
include_directories( include ${catkin_INCLUDE_DIRS} ) 处添加你这个头文件的绝对路径即可
如果您要追求可视化效果,建议webot,不然建议vrep,这样上手门槛会低很多,而且支持c++,lua,python,java,matlab一系列语言
目前是打算跑开源算法,但是不知道该怎么搞
请问下全志板子是如何部署ros的,是否可以指导一下么
非常不错,支持博主
好的,期待博主能写出更多的好文章
这个我记得必须在同配置电脑之间才可以安装,如果配置不一样好像还是无法安装的
我加一下
import os import subprocess from subprocess import PIPE def run_command(command): subprocess.call(command, shell=True) def get_repo_root(): return subprocess.check_output('git rev-parse --show-toplevel'.split()).strip() def get_uid(): return os.getuid() def get_user(): return os.getlogin() def create_directory(directory): run_command("mkdir -p {}".format(directory)) run_command("sudo chown {0}:{0} {1}".format(get_user(), directory))
哦哦,您就是登龙,之前看到了您的那一系列文章,我们实验室也做了这个方向,所以复现了您的这些步骤。有可能转载有些问题,我这边在我这改一下,抱歉哇
这是官方搬运的,我当时已经在csdn上标注了出处,我只是整理了一位博主的相关文章。https://blog.csdn.net/cdeveloperV,您这里可以看下
我也fork该项目,如果对您有用可以关注我的github:https://github.com/lovelyyoshino
参考的是这个:https://github.com/ncnynl/turbot3
需要自己设置
目前开源的是python版本,后续会针对性的给出C#版本的数据读取以及使用
一位立志成为机器人攻城狮的自动驾驶从业人员。目前是阿里云专家博主、古月居签约作者、CSDN博客专家。主要专注机器人运动学、定位感知算法、深度学习研究等,平时涉猎较广。希望未来可以努力学习并胜任系统架构师!
积分
粉丝
勋章
第三方账号登入
看不清?点击更换
第三方账号登入
QQ 微博 微信