增加标签id过滤
This commit is contained in:
parent
0e267ce936
commit
049987f52d
@ -177,7 +177,10 @@ class StereoHandDepthNode(Node):
|
|||||||
)
|
)
|
||||||
msg_out = PoseStamped()
|
msg_out = PoseStamped()
|
||||||
if ids is not None:
|
if ids is not None:
|
||||||
|
detected_ids = ids.flatten().tolist()
|
||||||
cv2.aruco.drawDetectedMarkers(left_rect, corners, ids)
|
cv2.aruco.drawDetectedMarkers(left_rect, corners, ids)
|
||||||
|
if 0 in detected_ids:
|
||||||
|
self.get_logger().info("Detected ArUco id=0")
|
||||||
# c = corners[0][0]
|
# c = corners[0][0]
|
||||||
# center = c.mean(axis=0)
|
# center = c.mean(axis=0)
|
||||||
# u, v = int(center[0]), int(center[1])
|
# u, v = int(center[0]), int(center[1])
|
||||||
@ -188,43 +191,43 @@ class StereoHandDepthNode(Node):
|
|||||||
# left_gray, f"disp={d:.2f}", (u+5, v-5),
|
# left_gray, f"disp={d:.2f}", (u+5, v-5),
|
||||||
# cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 1
|
# cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 1
|
||||||
# )
|
# )
|
||||||
for e in corners:
|
for e in corners:
|
||||||
ret, rvec, tvec = cv2.solvePnP(
|
ret, rvec, tvec = cv2.solvePnP(
|
||||||
objectPoints=np.array([
|
objectPoints=np.array([
|
||||||
[-self.marker_size/2, self.marker_size/2, 0],
|
[-self.marker_size/2, self.marker_size/2, 0],
|
||||||
[ self.marker_size/2, self.marker_size/2, 0],
|
[ self.marker_size/2, self.marker_size/2, 0],
|
||||||
[ self.marker_size/2, -self.marker_size/2, 0],
|
[ self.marker_size/2, -self.marker_size/2, 0],
|
||||||
[-self.marker_size/2, -self.marker_size/2, 0]
|
[-self.marker_size/2, -self.marker_size/2, 0]
|
||||||
], dtype=np.float32),
|
], dtype=np.float32),
|
||||||
imagePoints=e,
|
imagePoints=e,
|
||||||
cameraMatrix=self.K1,
|
cameraMatrix=self.K1,
|
||||||
distCoeffs=self.D1
|
distCoeffs=self.D1
|
||||||
)
|
)
|
||||||
if(ret == True):
|
if(ret == True):
|
||||||
cv2.drawFrameAxes(left_rect, self.K1, self.D1, rvec, tvec, 0.1, 2)
|
cv2.drawFrameAxes(left_rect, self.K1, self.D1, rvec, tvec, 0.1, 2)
|
||||||
R_cv, _ = cv2.Rodrigues(rvec)
|
R_cv, _ = cv2.Rodrigues(rvec)
|
||||||
R_cv_to_ros = np.array([
|
R_cv_to_ros = np.array([
|
||||||
[ 0, 0, -1],
|
[ 0, 0, -1],
|
||||||
[ 1, 0, 0],
|
[ 1, 0, 0],
|
||||||
[ 0, -1, 0]
|
[ 0, -1, 0]
|
||||||
])
|
])
|
||||||
R_ros = R_cv_to_ros @ R_cv
|
R_ros = R_cv_to_ros @ R_cv
|
||||||
t_ros = R_cv_to_ros @ tvec.reshape(3)
|
t_ros = R_cv_to_ros @ tvec.reshape(3)
|
||||||
# t_ros = tvec.reshape(3)
|
# t_ros = tvec.reshape(3)
|
||||||
rot = R.from_matrix(R_ros)
|
rot = R.from_matrix(R_ros)
|
||||||
|
|
||||||
qx, qy, qz, qw = rot.as_quat()
|
qx, qy, qz, qw = rot.as_quat()
|
||||||
roll, pitch, yaw = rot.as_euler('xyz')
|
roll, pitch, yaw = rot.as_euler('xyz')
|
||||||
# self.get_logger().info(f"quat: ({qx}, {qy}, {qz}, {qw})")
|
# self.get_logger().info(f"quat: ({qx}, {qy}, {qz}, {qw})")
|
||||||
self.get_logger().info(f"euler: ({roll*180/3.14:.1f}, {pitch*180/3.14:.1f}, {yaw*180/3.14:.1f})")
|
self.get_logger().info(f"euler: ({roll*180/3.14:.1f}, {pitch*180/3.14:.1f}, {yaw*180/3.14:.1f})")
|
||||||
|
|
||||||
# 记录时间
|
# 记录时间
|
||||||
self.last_marker_time = time.time()
|
self.last_marker_time = time.time()
|
||||||
|
|
||||||
# 记录最后一次有效目标
|
# 记录最后一次有效目标
|
||||||
self.last_valid_pos = np.array([t_ros[0] + 0.7, t_ros[1], t_ros[2]])
|
self.last_valid_pos = np.array([t_ros[0] + 0.7, t_ros[1], t_ros[2]])
|
||||||
self.get_logger().info(f"Marker position (ROS frame): ({self.last_valid_pos[0]:.3f}, {self.last_valid_pos[1]:.3f}, {self.last_valid_pos[2]:.3f})")
|
self.get_logger().info(f"Marker position (ROS frame): ({self.last_valid_pos[0]:.3f}, {self.last_valid_pos[1]:.3f}, {self.last_valid_pos[2]:.3f})")
|
||||||
self.last_valid_quat = np.array([qx, qy, qz, qw])
|
self.last_valid_quat = np.array([qx, qy, qz, qw])
|
||||||
|
|
||||||
# u = int(u * (w / 2)) # 注意这里是左图宽度
|
# u = int(u * (w / 2)) # 注意这里是左图宽度
|
||||||
# v = int(v * h)
|
# v = int(v * h)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user