大家好,
我正在做一个项目,我想单击图像的单点,并在现实生活中获得该点的坐标(x,y,z)。然后在Robodk上重新创建相机的场景,然后将机器人臂(Universal Robots的UR5E)移至该点。事实是,如果我打印我从相机中获得的坐标(x,y,z),我认为它们很有意义,但是当我使用它们来为Robodk创建目标并将手臂移到那里时,它们就不会与应该走的地方匹配。
这是我正在使用的代码。
如果有人知道如何旋转相机,那也将非常有用。
提前致谢,
问候。
我正在做一个项目,我想单击图像的单点,并在现实生活中获得该点的坐标(x,y,z)。然后在Robodk上重新创建相机的场景,然后将机器人臂(Universal Robots的UR5E)移至该点。事实是,如果我打印我从相机中获得的坐标(x,y,z),我认为它们很有意义,但是当我使用它们来为Robodk创建目标并将手臂移到那里时,它们就不会与应该走的地方匹配。
这是我正在使用的代码。
代码:
导入CV2#艺术状态计算机视觉算法库
导入Numpy作为NP#科学计算的基本软件包
导入imageio
导入matplotlib.pyplot作为PLT#2D绘图库生产出版物质量图
导入pyrealsense2为卢比
导入Win32Gui
导入Win32API
导入时间
导入Pyautogui
导入tkinter
导入tkinter.messagebox
从Robolink Import *#API与Robodk通信
来自Robodk Import *#基本矩阵操作
#与Robodk的任何互动都必须通过
rl = robolink()
top = tkinter.tk()
点= rs.points()
管道= rs.pipeline()
config = rs.config()
profile = pipe.start(config)
着色器= rs.Colorizer()
align = rs.Align(rs.Stream.Color)
state_left = win32api.getKeyState(0x01)#左键向上= 0或1。按钮down = -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.item('frame 2')
target = rl.addtarget('target 2',帧)
尝试:
而真:
帧= pipe.wait_for_frames()
帧= Align.Process(帧)
depth_frame = frames.get_depth_frame()
color_frame = frames.get_color_frame()
如果不是depth_frame:继续
#print(宽度,高度)
depth = np.asanyarray(colorizer.Colorize(depth_frame).get_data())
color = np.asanyarray(color_frame.get_data())
图像= np.hstack(((颜色,深度)))
#cv2.namedwindow('rgb_view',cv2.window_normal)
#cv2.setwindowproperty('rgb_view',cv2.wnd_prop_fullscreen,cv2.window_fullscreen)
cv2.imshow('rgb_view',深度)
depth_intrin = depth_frame.profile.as_video_stream_profile()。
#flags,hcursor,(x,y)= win32gui.getCursorInfo()
x,y = win32api.getCursorpos()
#print(x,y)
pixel_coord = [x,y]
KeyPress = win32api.getKeystate(0x01)
key = cv2.waitkey(1)
#按ESC或“ Q”关闭图像窗口
如果键&0xff == ord('q')或key == 27:
cv2.destroyallwindows()
休息
#Calculate距离
如果KeyPressed!= state_left:
state_left =键
打印(关键)
如果Keypressed <0:
if(0 dist_to_center = depth_frame.get_distance(x,y)
dist_to_center = round(dist_to_center,4)
depth_point = rs.rs2_deproject_pixel_to_point(depth_intrin,pixel_coord,dist_to_center)
depth_point = [i * 100 for i in depth_point]
depth_point = [round(i,5)for i in depth_point]
#depth_point =(“,” .join(in in depth_point e ret(e)))
#with open('coordinates.txt','w')为f:
#f.write(“%s \ n”%depth_point)
#f.close()
打印(depth_point)
打印(“相机正面向对象:',dist_to_center,'米之外')
target.setpose(offset(eike(),depth_point [0],depth_point [1],depth_point [2],0,0,0,0))
robot.movej(目标)
时间。
最后:
pipe.stop()
如果有人知道如何旋转相机,那也将非常有用。
提前致谢,
问候。