问题标签 [mobile-robot-toolkit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
39 浏览

mobile-robot-toolkit - 机器人导航期间环境变化的 MRPT 方法是什么?

关于 MRPT 项目中的 2D SLAM 库(如使用 2D LiDAR 的 rbpf-slam 和 icp-slam 库),当环境变化或人们在机器人周围走动时会发生什么?图书馆检测到这些环境变化并消除它们?或者在导航期间将更改应用到地图中?或者它们被简单地视为位置计算中的错误来源?

0 投票
1 回答
117 浏览

maps - 填充MRPT velodyne扫描观察

我是 MRPT 的新手,我想用它来使用 velodyne 点云构建占用网格地图。

KITTI 数据集提供 (x,y,z,r) 格式的 velodyne 点云,其中 r 是反射率。我正在尝试用此类数据填充 mrpt::obs::CObservationVelodyneScan,但使用 insertObservation 方法似乎无济于事。你能指出我使用这种观察类型的正确方向吗?

我的代码基本上是这样的:

谢谢,

弗朗切斯科

0 投票
1 回答
67 浏览

mobile-robot-toolkit - mrpt_ekf_slam_2d 不将地标与 [90, -90] 之外的偏航角相关联

我在配备 RPLidar 的室内机器人上运行 mrpt_ekf_slam_2d ( http://wiki.ros.org/mrpt_ekf_slam_2d )。通过在激光雷达点云上运行聚类算法,将地标馈送到 ekf。

我遇到的问题是 ekf 似乎没有将观察结果与位于机器人后面的地标关联起来,即在区间 [90, -90] 之外的偏航角。这些观察只是简单地添加为新的地标。地标在机器人前面时被正确映射和关联,但一旦它们最终落在它后面,ekf 就会发送多个地标:1

这是过滤激光雷达扫描以仅包含 [90,-90] 内的点时相同运行的结果:2

有没有人在使用 mrpt 时遇到过类似的问题?

0 投票
1 回答
74 浏览

slam - MRPT SLAM MRPT::slam::CMetricMapBuilderICP 警告 姿势外推失败

我正在使用 MRPT 库的 Map Builder ICP 通过使用 Sick LMS151 获取 CObservation2DRangeScan 在 C++ 上实现 2D slam。每当我向地图生成器提供 2D 范围扫描时,它都会生成姿势外推失败的警告。我如何知道代码中的错误在哪里?

预期的输出是 ICP-slam 算法预测的 2D 姿势,但事实并非如此。

但是,输出如下:

[x, y, 偏航, 协方差]

0 投票
1 回答
44 浏览

mobile-robot-toolkit - How to use gyro data with RBPF SLAM?

I'm using CMetricMapBuilderRBPF in MRPT to do SLAM, but after the robot makes sharp turns, subsequent LIDAR observations are not correctly aligned with the rest of the map. The robot has a very accurate DSP-3000 gyro, and I'd like to use this orientation data to improve the performance of the SLAM process. What is the best approach to using this gyro data for SLAM within MRPT? Thank you.

0 投票
1 回答
62 浏览

localization - 无法通过 mrpt 定位在 rviz 地图上定位激光雷达

我正在尝试仅使用激光雷达进行本地化。我使用 cartographer_ros 生成的地图并使用 mrpt_localization ( http://wiki.ros.org/mrpt_localization ) 进行本地化。

我尝试使用命令“roslaunch mrpt_localization demo.launch”,它从包文件创建现有地图,类似于“rosbag play”。

这是启动文件:

但是,在完成映射后,激光雷达位置 (tf) 会消失。我想在生成的/现有的地图上实时定位激光雷达的位置。即使在我启动 rplidar_s1.launch 之后它也不起作用。发送帮助!

0 投票
1 回答
82 浏览

robotics - 如何将 MRPT 粒子滤波器用于 3D 数据而不是 2D?

我正在构建一个仅限范围的本地化应用程序,我想使用 MRPT 粒子过滤器。我正在查看 MRPT 示例应用程序:

所有这些都在样本数据上运行良好,但生成的姿势仅以 2D 形式返回。该pf-localization示例有一个use_3D_poses = true设置,但这只是增加了0Z 轴的返回值。

我尝试将 Z 值添加到信标,但姿势 Z 始终为零。如何在 3D 空间而不是 2D 空间中使用 MRPT 粒子过滤器?

我只对移动节点的 XYZ 位置值感兴趣。

如何使用自己的实时数据?我有:

锚点位置 锚点到移动节点的距离。

我在 Windows 上使用 MRPT,从源代码构建。

0 投票
1 回答
420 浏览

c++ - 构建 MRPT 库时 cmake 配置失败

我正在尝试安装 MRPT,尤其是PL-SLAM 文档中推荐的提交0c3d605c3c ;但是,我在构建 repo 时总是遇到 cmake 错误。有没有办法解决这个问题?您的帮助将是非常可观的。

系统信息:

Linux rock 5.3.0-40-generic #32~18.04.1-Ubuntu SMP Mon Feb 3 14:05:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

Cmake 输出:

0 投票
0 回答
46 浏览

c++ - 尝试在 VS2019 解决方案中使用 MRPT 库作为外部依赖项时出现错误 LNK2019

我正在 Visual Studio 2019 中实现 SLAM 算法,我想使用 MRPT 库中的 ICP 算法进行扫描匹配。

我使用 CMake 从源代码将 MRPT 库安装为 32 位。问题是我在构建解决方案时收到的错误(如下所示)。我认为这是因为我没有为链接器添加附加库目录或附加依赖项,因为我在任何地方都找不到 .lib/.dll 文件。我尝试为 Windows 安装 64 位预编译的二进制文件,在那里我发现了一个 lib 文件夹中的 .lib 文件,该文件在使用源代码手动编译时不会出现 - 但不能使用相同的 lib,因为我需要 32 -位(我尝试链接到它们,但是除了一堆关于库是 64 位而目标是 32 位的警告之外,还发生了同样的错误)。

代码与这里的第一个示例几乎完全相同,(我相信)包括所有必要的标头。

产生的错误(对于我尝试从库中使用的每个类,我还会收到更多相同的错误):

particle.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall mrpt::poses::CPose2D::CPose2D(double,double,double)" (__imp_??0CPose2D@poses@mrpt@@QAE@NNN@Z) referenced in function (function)

快速的问题是:从源代码编译时不应该生成 .lib/.dll 文件吗?或者图书馆中是否嵌入了一些东西所以我不需要它们,在这种情况下一定有其他问题?

更复杂的问题是:如果丢失的 .dll/.lib 文件不是问题,那会是什么?

抱歉,如果我遗漏了任何相关信息,这是我的第一篇文章。只要让我知道,我会提供。

任何帮助是极大的赞赏!

0 投票
0 回答
132 浏览

c++ - 在 VS2019 解决方案中包含 MRPT 库时出现错误 C2039

我正在 Visual Studio 2019 中实现 SLAM 算法,我想使用 MRPT 库中的 ICP 算法进行扫描匹配。因此,我使用 CMake 下载并编译了源代码,并将其添加为外部依赖项。

代码与这里的第一个示例几乎相同,包括(我相信)所有必要的标头。

我的项目是用 C++17 编写的,但似乎不是 MRPT 库,因为我收到以下错误:

快速搜索发现这些函数random_shuffle, bind1st, bind2nd在 C++17 中被删除。

这是否意味着我必须手动编辑这些文件才能使用 C++17,或者是否有任何快速修复解决方案?例如,外部库是用受支持的 C++ 版本而不是 C++17 编译的?