大家好!
我在做一个项目,我想点击一个单点图像,得到的坐标(x, y, z)在现实生活中。然后重建robodk相机和移动机械臂的场景(ur5e通用机器人)。事情是这样的,如果我打印坐标(x, y, z),我的相机,我认为他们是有意义的,但当我使用它们来创建一个目标robodk和移动手臂,他们不与它应该去的地方。
这是我使用的代码。
如果有人知道如何得到相机的旋转,这将是非常有用的。
提前谢谢,
的问候。
我在做一个项目,我想点击一个单点图像,得到的坐标(x, y, z)在现实生活中。然后重建robodk相机和移动机械臂的场景(ur5e通用机器人)。事情是这样的,如果我打印坐标(x, y, z),我的相机,我认为他们是有意义的,但当我使用它们来创建一个目标robodk和移动手臂,他们不与它应该去的地方。
这是我使用的代码。
代码:
进口cv2 #库最先进的计算机视觉算法
进口numpy np #科学计算的基本方案
进口imageio
进口matplotlib。pyplot plt # 2 d绘图图书馆出版生产质量数据
进口pyrealsense2 rs
进口win32gui
进口win32api
导入的时间
进口pyautogui
进口tkinter
进口tkinter.messagebox
从robolink进口* # API与RoboDK沟通
从robodk进口* #基本矩阵运算
#任何与RoboDK交互都必须通过
RL = Robolink ()
顶级= tkinter.Tk ()
点= rs.points ()
管= rs.pipeline ()
配置= rs.config ()
形象= pipe.start(配置)
彩色化= rs.colorizer ()
align = rs.align (rs.stream.color)
state_left = win32api.GetKeyState (0 x01) #左按钮= 0或1。扣= -127年或-128年
设备= profile.get_device() #类型:rs.device
depth_sensor = device.first_depth_sensor() #类型:rs.depth_sensor
如果depth_sensor.supports (rs.option.depth_units):
depth_sensor.set_option (rs.option.depth_units, 0.0001)
机器人= RL.Item (“UR5e”)
帧= RL。项目(第二帧)
目标= RL。AddTarget(目标2,框架)
试一试:
而真正的:
帧= pipe.wait_for_frames ()
帧= align.process(帧)
depth_frame = frames.get_depth_frame ()
color_frame = frames.get_color_frame ()
如果不是depth_frame:继续
#打印(宽度、高度)
深度= np.asanyarray (colorizer.colorize (depth_frame) .get_data ())
颜色= np.asanyarray (color_frame.get_data ())
图像= np。hstack((颜色、深度))
# cv2.namedWindow (RGB_View, cv2.WINDOW_NORMAL)
# cv2。cv2 setWindowProperty (“RGB_View”。WND_PROP_FULLSCREEN cv2.WINDOW_FULLSCREEN)
cv2。imshow (“RGB_View”、深度)
.intrinsics depth_intrin = depth_frame.profile.as_video_stream_profile ()
#旗帜,hcursor (x, y) = win32gui.GetCursorInfo ()
x, y = win32api.GetCursorPos ()
#打印(x, y)
pixel_coord = (x, y)
keypressed = win32api.GetKeyState (0 x01)
关键= cv2.waitKey (1)
#按esc或“q”关闭窗口形象
如果关键& 0 xff = =奥德(q)或关键= = 27:
cv2.destroyAllWindows ()
打破
#计算距离
如果keypressed ! = state_left:
state_left = keypressed
打印(keypressed)
如果keypressed < 0:
如果(0 < x < 632和32 < < 512):
dist_to_center = depth_frame.get_distance (x, y)
dist_to_center =圆(dist_to_center, 4)
depth_point = rs.rs2_deproject_pixel_to_point (depth_intrin pixel_coord dist_to_center)
depth_point =(我为我在depth_point * 100)
depth_point =[圆(我,5)因为我在depth_point)
# depth_point = (“,”。加入(ein depth_point repr (e)))
#张开(“坐标。txt”、“w”)作为f:
# f。写(“% s \ n”% depth_point)
# f.close ()
打印(depth_point)
print(相机正面临一个对象:,dist_to_center,“米”)
Target.setPose(抵消(眼睛(),depth_point [0], depth_point [1], depth_point [2], 0, 0, 0))
robot.MoveJ(目标)
time . sleep (0.7)
最后:
pipe.stop ()
如果有人知道如何得到相机的旋转,这将是非常有用的。
提前谢谢,
的问候。