DataView.getFloat32() 返回 NaN

问题描述

我正在使用一个名为 ros3djs(它使用 Three.js)的库在浏览器中显示一个 Pointcloud。但是,我认为我现在遇到的问题与此没有直接关系,但可以将其视为有关 Javascript 中缓冲区/数据视图的一般问题。

我的问题是我无法从示例代码 here显示点云。数据来自 ros 中的 bagfile 并通过 WebSocket 发送到一边。

接收到的消息中的一些元数据用于计算缓冲区的大小等,似乎需要从消息中提取点云中每个点的位置 (x,y,z)。这段代码对我来说似乎很有意义,但是,在检索实际坐标时,getFloat32() 函数总是返回 NaN。

这是返回 NaN 值的部分:

var dv = new DataView(this.buffer.buffer);
  var littleEndian = !msg.is_bigendian;
  var x = this.points.fields.x.offset;
  var y = this.points.fields.y.offset;
  var z = this.points.fields.z.offset;
  var base,color;
  for(var i = 0; i < n; i++){
    base = i * pointRatio * msg.point_step;
    this.points.positions.array[3*i    ] = dv.getFloat32(base+x,littleEndian);
    this.points.positions.array[3*i + 1] = dv.getFloat32(base+y,littleEndian);
    this.points.positions.array[3*i + 2] = dv.getFloat32(base+z,littleEndian);
}

我知道背景中点云的原点工作正常,因为我能够在另一个可视化工具中显示它。所以也许偏移量等有问题? 如果我在浏览器中检查调试器/控制台,dv 确实是一个 Dataview,其 Arraybuffer 的长度为 320000。缓冲区的结构为 [[Int8Array]],[[UInt8Array]],[[Int16Array]],[[Int32Array] ]]。它们的长度不同,分别为 320000、320000、160000、80000。 当我打开它们时,它们都有每个值的值,并且没有 NaN。每个数组中的值都不同,所以我发现很难理解现在可以在哪里找到正确的数据以及这个缓冲区是如何工作的。 有人可以帮助我如何继续解决这个问题吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...