voxblox结构图 上一讲我们说过insertPointCloud函数负责voxblox_io.png中的TSDF Integrator部分,而updateMeshEvent函数负责Mesh Integrator部分。这一讲我们就讲updateMeshEvent如何更新mesh可视化的。 在TsdfServer::TsdfServer构
在tsdf的第一讲里我们讲解了最基本的TSDF重构算法。也提出了算法的一些不足之处。 1:体素的大小需要预先设定并固定。这意味着场景超出体素涵盖的范围时,将不能重建。 2:我们利用体素重构表面时,理论上需要选tsdf为0的点,这些点才在表面上。但这几乎是不能满足的,所以参考代码退而求其次,选取tsdf小于某个数值的体素。这种做法比较粗糙也会损失不
一些背景知识 TSDF的主要作用是进行三维场景在计算机中的重建。目前的那些中文博客与成熟的TSDF应用其实还有差距,故写此文。 视觉SLAM应用的一个分支为Dense SLAM。简单来说就是在定位机器人的同时对周围的环境进行(近乎)实时的3维重建,比如下图[1] 比较出名的有开源代码的代表作为15年之前的Kinect Fusion, Dense V
这篇文章针对同一个任务进行了单线程,多线程和CUDA程序的比较。以显示GPU在并行计算上的时间节省能力。 对GPU编程不了解的同学,这篇文章可能不会有特别大的帮助,因为我不打算对CUDA编程有很详细的讲解,我浏览了一下网上,无论所英文还是中文都有了很详细的入门讲解,比我目前能写出的好,就不重新造轮子了。下面是几篇写地不错的入门博客。内容很类似,看其中任何任意一篇即可。 https://
这篇文章针对有一定SLAM基础的同学或者对李群李代数的应用感兴趣的数学专业同学,已经很小众了,但对于真正干这行并想要更深理解的同学可能会很有帮助,因此花了些时间整理发出来。要从理论推导到后面代码应用都读懂难度还是比较大,尽量讲解。 李群李代数其实已经算SLAM里最深的数学知识了(至少我目前接触到的),而事实上的SLAM应用也只是用了它们中的很小一部分。这篇文章不会详细地介绍李群李代数
理解坐标系之间的转换关系很重要。对于刚体变换矩阵,搞机器人的朋友肯定不陌生,它一般如下表示 其中是位移而是旋转。它的物理意义或者说作用是什么呢?这个矩阵的作用就是,给出一个坐标系下的点的坐标,乘上这个矩阵,你就可以得到它在另一个坐标系下的坐标。比如说我目前这个矩阵的作用是把位于坐标系2下的点的坐标'转移'到坐标系1下。假设某个点在坐标系2下的位置为,那么我们可以得到它在坐标系1下
欢迎来到最后一讲。关于自定义消息类型网上已经有一些文章了,写地也明了,不过这这里会补充的几点就是你自定义了一个新的消息类型之后在不同的package和不同的workspace中如何使用,当然我们仍然从基本的讲起。 定制基本消息类型 当ROS提供的消息类型不满足你的需求时,你就需要考虑制作自己的消息类型了。比如你想要发布一则消息,这则消息包含一个double类型的向量,一个整数,一个
在机器人领域里,多个坐标系统应该是最常见的事之一了。 一个机械臂,每一个关节都需要一个坐标系,一个无人小车不同的传感器一般都需要自己的坐标系。必不可少的,他们都需要世界坐标系。 有些坐标系是移动的,比如在一个车子上的传感器的自己的坐标系,随着车子的移动而移动;有的坐标系是静止的,比如世界坐标系。那些固定在机器人身上的传感器,他们之间的位置是固定的,有了一者的位置,我们应该就能知道另一者
欢迎来到第8讲,预计还有两讲结束ROS相关的话题。 Rviz作为ROS的可视化工具拥有非常强大的功能,我也不是全部都用过,略懂皮毛。可视化是我们分析问题,向他人展现成果时最重要的工具。打个比方,我们在第三讲能够发布poseStamped类型的消息了,并且在上一讲我们还制作了一个包含poseStamped类型消息,topic名字为chatter的rosbag. 我们得到了不同timestamp
欢迎来到第七讲,我居然能写这么多,撒花!! rosbag是用来储存ros消息的东西。 在我们平时处理一些robotics问题的时候,我们得到一些数据,有些时候我们需要实时的处理,即获得数据,写好的程序分析数据然后得出结果,但另一些时候 我们只是想采集数据,事后分析,这些数据存储在哪儿呢?就存储在rosbag里了。
之前我们一直在用rosrun跑程序,格式如下 rosrun package_name executable_file_name 在使用rosrun之前,我们一定得需要启动rosmaster,即开启一个窗口输入roscore.使用rosrun就只能单纯地跑一个节点,当我们要写大型的程序时,有时候会涉及到跑同时很多个节点,这时候就需要使用roslau
本文作者:陈瓜瓜 许久没更新了,放假回家没想到还要被老师催论文,连玩耍的时间都不够= =.好了,闲话少说 例1 上一讲讲了一些类什么的基础.这一讲我们就谈谈怎么在类中发布和接收消息了.当你遇到稍微大型一点的程序时,在类中发布和接收消息才是主流,毕竟不在类中的callback函数返回值能做的有限.代码结构其实很类似,咱们直接先上代码再来找不同.同样以发布一个整型
本文作者:陈瓜瓜 由于下一讲要讲到怎么在类中pub和sub消息.那么考虑到有些同学对类不甚熟悉.我们稍微回顾一下.但关于类网上一查其实一大堆东西,而且都是从入门讲起.所以我这儿肯定不会重复书写那些内容.要介绍的几个东西,其实本来要用得好的话蛮复杂,我们只会涉及到皮毛,重心会放在和之前的代码比较,以了解之前我们之前三讲的很多语法为什么可以那么写. 比如上一讲的geomet
上一讲我们讲了如何发布接收int,float和array类型的消息,这些也都算是c++自有的消息,被归纳在ROS中的std_msgs这个命名空间下(命名空间skr啥?).这讲我们来看看如何发布接收ROS自己独特的message类型:PoseStamped.Pose好理解,就是机器人的位姿(position and orientation),那么Stamped呢?Stamped表示时间戳(tim
发布接收int类型消息 第一篇文章我们发布接收了string类型的消息.我们提到在ROS里发布的消息必须是在ROS中定义了的.就是如果你要发布一个string类型的消息,你不能直接发布一个std::string,你得发布一个std_msgs::String类型的消息.后者在ROS中才有定义.那么发布其他类型的消息我该怎么办呢?比如现在如果我想发布一个int8类型的消息,Int8是8位整型的消
又过了好久了...Em...上一讲我们不甚详细地提及了EKF扩展卡尔曼滤波,这一讲我们就来说扩展卡尔曼滤波在SLAM里的应用。需要再次提及的是EKF-SLAM是比较早期的应用,但是因为简单好懂,所以用来帮助我们来熟悉一下SLAM的过程。 一旦要使用扩展卡尔曼滤波,我们就需要两个重要模型,一个是过程模型(Process Model)一个是测量模型(Measurement M
背景和初衷 小弟是University of Colorado at Boulder的一个在读学生.在ARPG(Autonomous Robotics and Perception Group)实验室学习. 自己当初入门ROS的时候还是挺艰难的,因为连c++都不太熟(当然现在也是一知半解).英文资料很全但是并不见得对新手那么友好.中文资料也基本是英文copy过来的.
关于2维的SLAM我们主要讲解两个算法,基本都源于<probabilistic robotics>。第一是基于滤波的扩展卡尔曼滤波SLAM,第二是基于图优化SLAM。前者现在基本上已经没有实际使用了,实际的应用3d的SLAM也基本是基于后者的。但扩展卡尔曼滤波SLAM还是很经典,值得学习。 从名字可以看出,扩展卡尔曼滤波(Extended Kalman Filter,
磨蹭了好久终于开始写本行SLAM系列了。鄙人目前水平一般,但接下来的几年也都会在这个方向继续深入下去,所以打算尽我所能地写一个完整的SLAM从入门到精(fang)通(qi)的系列。文章的内容大概会分为三个大部分: 2维平面的SLAM系统 视觉SLAM 视觉惯性SLAM 每一个大部分都会分为代码和理论两个小部分,以帮助大家理解如何实现。
积分
粉丝
勋章
TA还没有专栏噢
第三方账号登入
看不清?点击更换
第三方账号登入
QQ 微博 微信