包含物体obj与相机camera的 代数几何代码解释

反余弦函数的值域在 [0, pi]
斜体样式在这里插入图片描述

cam_pose = self._cameras['hand_realsense'].camera.get_model_matrix()  # cam2world

# 物体到相机的向量
obj_tcp_vec = cam_pose[:3, 3] - self.obj_pose.p
dist = np.linalg.norm(obj_tcp_vec)
# 物体位姿的旋转矩阵
obj_rot_mat = self.obj_pose.to_transformation_matrix()[:3, :3]
x, y, z = obj_rot_mat[:, 0], obj_rot_mat[:, 1], obj_rot_mat[:, 2]

# 计算角度 theta 和 phi
# dot_value = norm(obj_tcp_vec)*norm(z)*cos (theta)
vec_z_dot = np.dot(obj_tcp_vec, z)
# 向量vec_z_dot 与 平面 xy 的夹角 (等价于与z 轴)
theta = np.pi / 2 - np.arccos(vec_z_dot / dist)
# 向量在 z 轴的投影
obj_tcp_vec_proj_z = vec_z_dot * z
# 向量在 平面 xy 的投影
obj_tcp_vec_proj_xy = obj_tcp_vec - obj_tcp_vec_proj_z
dist_xy = np.linalg.norm(obj_tcp_vec_proj_xy) + 0.001
# 向量在 xy 平面投影 与 x 轴的内积
vecxy_x_dot = np.dot(obj_tcp_vec_proj_xy, x)
# 把空间一分为二,在两边使得 值 分别 [0, pi)  (-pi,0]可以一一对应

# vecxy_x_dot 是 向量在 xy平面投影 与 x 轴的内积
# 向量在 第一,第二象限 (x轴朝向东边,y轴朝向北边)
if np.dot(obj_tcp_vec_proj_xy, y) > 0:
    phi = np.pi - np.arccos(vecxy_x_dot / dist_xy)
# 向量在 第三,第四象限
else:
    phi = np.arccos(vecxy_x_dot / dist_xy) - np.pi   

theta: 向量 obj_tcp_vec 与 平面 xy 所成的角度,俯仰角,等价于与 z 轴所成角度。
phi:向量obj_tcp_vec ,与 x 轴所成角度相关

# 将 phi 和 theta 离散化为索引
phi_min, phi_max = -180, 180 * 5 / 6
phi_d = (phi_max - phi_min) // 11
phi_t = (phi / np.pi * 180 - phi_min) / phi_d  # [0, 12)

# theta 是与 平面 xy 的夹角
theta_min, theta_max = 10, 80
theta_d = (theta_max - theta_min) // 5
theta_t = (theta / np.pi * 180 - theta_min) / theta_d  # [0, 5) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

培之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值