问题标签 [odometry]

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 回答
423 浏览

c++ - 一段时间后 SolvePNP 返回错误的 rvec 和 tvec

我正在尝试使用来自 KITTI 数据集的立体相机对来估计相机轨迹。该程序在某些时候使用 cv::SolvePNP() 并且对于前 1500 帧它返回了相当好的结果,但之后它就完全疯狂了。

这是我目前正在做的事情:

  1. 加载 2 帧,将它们称为 P 和 Q(一帧是来自立体对的左右图片)
  2. 使用 SIFT/SURF/ORB 获取功能(尝试了所有这些)
  3. 匹配 P 中的特征,以及 P.left 和 Q.left 之间的匹配
  4. 根据匹配,我过滤掉匹配中不存在的关键点。
  5. 我对帧 P 上的点进行三角测量(请注意,我已经有 KITTI 数据集提供的相机矩阵)
  6. 我从 Homogeneous 转换点

现在是最重要的部分,我正在尝试实现我自己的 RANSAC,它将利用 solvePNP 以便从标准 cv::solvePNP 中获得更好的 rvec 和 tvec(请注意,我尝试使用 cv::solvePNPRansac 并且它工作正常但开始一段时间后也失败了)。所以 Ransac 流程是这样的:

7.1 我随机化 3D 空间(P 上的三角点)和 Q.left 上的相应关键点

7.2 我将它们 N 个点(N 是我的 RANSAC 参数)放入 cv::SolvePNP() 以获得在 2 帧之间移动了多少相机(注意我的 dist Coefs 是零矩阵),它返回给我一些 tvec 和 rvec我使用 cv::Rodrigues() 转换为 Matrix

7.3 我连接这些向量

7.4 我尝试使用以下公式将所有三角点(不仅仅是在solvePNP中使用的点)投影回2D图像:

https://i.imgur.com/aMlZw9z.png

(请注意,我没有在左侧得到 1,而是得到了一些 x、y、z 值,因此我将 x 和 y 与 z 分开)。

7.5 我发现 P.left 上的投影点和关键点之间的差异

7.6 现在我的 RANSAC 有一些阈值,我用它来过滤异常值,而不是在 RANSAC 的下一次迭代中使用它们。

7.7 我用新的(过滤的)点重复这个过程 K 次(K 也是 RANSAC 参数)

现在这适用于 80% 的帧,一段时间后它就失败了,因为 solvePNP 收到的分数太少。发生这种情况是因为没有一个投影点实际上超过了距离阈值。所以问题出在前帧的 rvec 和 tvec 中。

真的不知道我将显示代码的哪一部分,请求并编写它。

我预计 rvec 和 tvec 会出现小错误,但错误太高了。

0 投票
1 回答
397 浏览

kinect - 是否有主题或服务可以了解 RTAB-MAP 中何时丢失视觉里程计估计?

我正在使用 rtabmap 从视觉冲击中估计里程计。当里程计丢失时,rtabmapviz 屏幕变为红色。我正在寻找一种方法来知道我何时在我的代码中丢失了里程计,例如要订阅的主题或类似的东西。

谢谢你的帮助

(编辑)

我正在使用 ROS 动力学和以下启动文件:

0 投票
0 回答
48 浏览

opencv - 使用solvepnp时模型坐标和图像坐标可以相同吗?

目前,我正在尝试实现一个相机姿势跟踪系统。我有一组前一帧的模型坐标点(3D)和当前帧的图像坐标(2D)。

我还设置了一个单位矩阵(4x4)作为相机的初始姿势。对于每个新计算的 rvec 和 tvec,我使用 rodrigues 将 rvec 转换为 3x3 Rotaton Matrix,然后创建一个 4x4 同质变换矩阵并将其与之前的姿势相乘。

旋转似乎工作正常,但来自矩阵的平移向量似乎只在旋转时移动,而不是在平移时移动,即它表示旋转。

难道我的模型坐标和图像坐标系都相同?

编辑:我正在尝试使用带有 RGBD 相机的 3D-2D 对应(视觉里程计)来跟踪相机位置。

更新:解决了这个问题。我似乎取错了变换矩阵的列

0 投票
2 回答
2240 浏览

computer-vision - 视觉里程计,Kitti 数据集

我目前正在尝试使用带有KITTI 数据集的 Matlab 制作立体视觉里程计

我知道文件夹“ poses.txt ”包含前 11 个序列的基本真实姿势(轨迹)。每个文件 xx.txt 包含一个 N x 12 表,其中 N 是该序列的帧数。但是,这 12 个参数是什么?x,y,z,行,俯仰,偏航和什么?

我的第二个问题是,如果我想创建自己的数据集,如何使用 IMU 获取这些姿势?

0 投票
2 回答
2601 浏览

ros - 如何从 MD49 编码器输出发布 odom (nav_msgs/Odometry)?

我正在使用 MD49 电机驱动器及其电机

https://www.robot-electronics.co.uk/htm/md49tech.htm

http://wiki.ros.org/md49_base_controller

如何从 md49_base_controller 包订阅(encoder_l 和 encoder_r)并以 odom(nav_msgs/Odometry)的形式发布(vx、vy 和 vth)?

有两个问题:

1-首先是编码器输出不正确“需要修改包。

2-第二个是我想创建一个包,订阅左右轮编码器计数(encoder_l 和 encoder_r)并以 odom(nav_msgs/Odometry)的形式发布(vx、vy 和 vth)以与 imu 兼容MPU9250

http://wiki.ros.org/robot_pose_ekf

建议的包是:

1- 我们必须将 (encoder_l and encoder_r) 转换为 (RPM_l and RPM_r),如下所示:

2- 我们必须将 (RPM_l 和 RPM_r) 转换为 (vx, vy, and vth),如下所示:

提示:r 和 B 分别是车轮半径和车辆宽度。

3- odom (nav_msgs/Odometry) 包是:

0 投票
0 回答
136 浏览

python - 为车辆里程校正实施卡尔曼滤波器

我正在使用里程计数据估计车辆位置。下面是我编写的代码,用于使用偏航率、方向盘角度和车速的输入数据预测车辆位置。该代码采用 dt(不一致)、更新的航向角、x 位置和 y 位置来更新测量值。

我目前已将此代码生成的轨迹与使用 GPS 数据绘制的参考轨迹进行了比较,显示错误。

我想为这个里程计数据实现卡尔曼滤波器,但我不知道为我的状态矩阵和状态转换矩阵设置什么。如果我将状态转移矩阵设置为 x_pos, y_pos, 指向 k+1,我应该使用什么作为状态矩阵?简单地使用 x,y,yaw, x_speed, y_speed, yaw_rate 的状态矩阵似乎是不可能的,因为这些数据中的大部分都在不断更新。

请帮忙!

''' def convert_odometry_info_to_cartesian(odo_yaw_rate, odo_SAS_angle, odo_speed, dt, heading, x_pos, y_pos):

'''

0 投票
1 回答
221 浏览

python - 如何使用 KITTI 里程计数据集评估单目视觉里程计结果

我正在尝试使用 KITTI 开放数据集进行深度单目视觉里程计我尝试使用这个repo

它使用此代码将姿势转换为 6DoF

模型输出也采用相同的格式(6DoF)

问题是如何评估 6DoF 结果,因为此评估工具 ( kitti-odom-eval ) 仅支持以下两种格式

0 投票
0 回答
29 浏览

kitti - 相机位置到 Kitti 数据库里程计

我正在使用以下模型:https://github.com/JiawangBian/SC-SfMLearner-Release,其中相机位置依赖于 PoseResNet(如https://github.com/TRI-ML/packnet-sfm),和其他研究材料。

我想验证相机平移并施加适当的损失函数,问题是姿势的 Kitti GT 与我获得的不同(数量级不同,符号也不同)。

姿势的 PoseResNet 值:[-2.9110e-03, 1.8962e-03, 3.1028e-04]

- Kitti 里程计: 9.999972e-01 -6.991581e-04 2.270602e-03 -7.962199e-03 7.016426e-04 9.999992e-01 -1.093565e-03 -3.417185e-03 -2.269865e-03 9998655e-03 1.0999865e-03 -01 1.441061e+00 和 kitti 位置(使用这个转换:https ://github.com/TRI-ML/packnet-sfm/blob/master/packnet_sfm/datasets/kitti_dataset.py#L405 ),所以 kitti GT 姿势: [0.0436, 0.0390, -1.1027]

有谁知道我应该使用什么转换?我看到 TRI-ML 没有使用任何转换(https://github.com/TRI-ML/packnet-sfm/blob/master/packnet_sfm/losses/velocity_loss.py),他们报告说一切正常。

0 投票
0 回答
8 浏览

ros - 如何从螺旋桨旋转信号中获取里程计,知道它们可以旋转到最大值并在该旋转中保持不变

我试图获得速度以控制水下群 ROV。我可以使用加速度和欧拉积分,但误差会随着时间的推移而累积。由于我们有一群(许多小型机器人),所以我受限于船上的传感器。因此,为了获得更准确的速度估计,正在考虑 IMU 和里程计的传感器融合。由于没有任何里程计传感器,因此采用了一些开箱即用的解决方案

因此,当我可以访问电机(推进器 - 螺旋桨)信号时,机器人可以以最大和恒定速度移动。意味着螺旋桨的旋转有一个最大限制,当它们达到该限制时,它们可以保持该最大值。所以正在考虑一些可以用来为我提供里程计的数学模型,而不是使用一些 ROS 包进行传感器裂变(

机器人本地化

或者

hector_pose_estimation

) 以获得准确的速度

所以我需要一个数学模型的帮助,如何从电机推进器中获得里程计。对此和可能的 ROS 节点(C++)实现有什么帮助吗?

谢谢

0 投票
1 回答
58 浏览

c++ - 如何在不同的框架中重新发布里程计?

有导航里程计,但它有些不在机器人身体框架中。里程计正在世界框架中发布,因此它不正确。所以我需要在机器人身体框架中对其进行转换,因为它应该以正确的方式进行。所以我试图重新发布机器人身体框架中x轴的线速度,只是为了检查我是否以正确的方式,但代码不起作用。这是ROS节点

运行代码时出现错误

而且启动文件中的静态框架也没有帮助。有什么问题?有什么帮助吗?谢谢