python - scipy 和 numpy 与 as_matrix 函数没有错误
问题描述
这是一个不起作用的“工作示例”。为什么这不运行?scipy 似乎不起作用。
我收到此错误:
文件“display_map.py”,第 35 行,在 rot_cw = R.from_quat(keyframe["rot_cw"]).as_matrix() AttributeError: 'Rotation' object has no attribute 'as_matrix'
请有人可以帮我改变它。我尝试降低 scipy 的版本
import msgpack
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
from numpy.linalg import inv
from scipy.spatial.transform import Rotation as R
import open3d as o3d
import sys
if len(sys.argv) < 2:
print(
"ERROR: Please provide path to .msg file. Example usage is; python3 visualize_openvslam_map.py path_to.msg"
)
exit()
with open(sys.argv[1], "rb") as f:
upacked_msg = msgpack.Unpacker(f)
packed_msg = upacked_msg.unpack()
keyfarmes = packed_msg["keyframes"]
landmarks = packed_msg["landmarks"]
# FILL IN KEYFRAME POINTS(ODOMETRY) TO ARRAY
keyframe_points = []
keyframe_points_color = []
for keyframe in keyfarmes.values():
# get conversion from camera to world
trans_cw = np.matrix(keyframe["trans_cw"]).T
rot_cw = R.from_quat(keyframe["rot_cw"]).as_matrix()
# compute conversion from world to camera
rot_wc = rot_cw.T
trans_wc = -rot_wc * trans_cw
keyframe_points.append((trans_wc[0, 0], trans_wc[1, 0], trans_wc[2, 0]))
keyframe_points = np.array(keyframe_points)
keyframe_points_color = np.repeat(np.array([[0., 1., 0.]]),
keyframe_points.shape[0],
axis=0)
# FILL IN LANDMARK POINTS TO ARRAY
landmark_points = []
landmark_points_color = []
for lm in landmarks.values():
landmark_points.append(lm["pos_w"])
landmark_points_color.append([
abs(lm["pos_w"][1]) * 4,
abs(lm["pos_w"][1]) * 2,
abs(lm["pos_w"][1]) * 3
])
landmark_points = np.array(landmark_points)
landmark_points_color = np.array(landmark_points_color)
# CONSTRUCT KEYFRAME(ODOMETRY) FOR VISUALIZTION
keyframe_points_pointcloud = o3d.geometry.PointCloud()
keyframe_points_pointcloud.points = o3d.utility.Vector3dVector(keyframe_points)
keyframe_points_pointcloud.colors = o3d.utility.Vector3dVector(
keyframe_points_color)
# CONSTRUCT LANDMARK POINTCLOUD FOR VISUALIZTION
landmark_points_pointcloud = o3d.geometry.PointCloud()
landmark_points_pointcloud.points = o3d.utility.Vector3dVector(landmark_points)
landmark_points_pointcloud.colors = o3d.utility.Vector3dVector(
landmark_points_color)
# VISULIZE MAP
o3d.visualization.draw_geometries([
keyframe_points_pointcloud, landmark_points_pointcloud,
o3d.geometry.TriangleMesh.create_coordinate_frame()
])
解决方案
在 scipy.spatial.Rotation 方法中,from_dcm、as_dcm 分别重命名为 from_matrix、as_matrix。
推荐阅读
- parsing - 如何从单词列表中制作 Haskell 解析器?
- tensorflow - 使用不可训练的权重是否等同于在 TensorFlow 中使用 Python 变量?
- ember.js - EmberJS:依赖键的计算属性意识
- html - DIV 在容器中并排
- java - 如何根据 Java 中的格式控制从 JSON 获取的数据?
- xml - 使用 powershell 编辑 XML 选择器
- python - 为什么字符串方法在 for 循环中使用时停止在对象列上工作
- javascript - 可折叠不工作 [包括 JSFiddle 演示]
- arrays - 在参数请求中传递字符串数组 - swift 5
- typescript - 声明后使用相同变量的打字稿