线程评级:
使用2D相机和夹持器进行挑选和放置模拟
# 1
我想使用2D相机和夹具来做挑选和放置操作。我可以在RoboDK网站上查看类似的模拟(也在下载版本中),但我找不到任何关于构建它的文档/教程。如果我能得到它的教程(图形优先于编程),这将是非常有帮助的。

谢谢你!

Naresh
我也想知道在哪里可以找到它。
# 3
在RoboDK中,您可以使用以下选项模拟2D摄像机和3D深度摄像机:
  • 连接模拟2D相机
然而,图像处理需要使用第三方产品、您自己的图像处理算法或Python本身进行集成。举个例子,如果你打算创建自己的图像处理算法,OpenCV库将是一个很好的起点。或者,您可以找到适合行业的相机,如康耐视,Keyence, Sick, Ensenso,…

从RoboDK,您可以通过右键单击相机的模拟视图来保存图像,并保存图像以测试您的图像处理算法。支持保存图像的格式包括PNG、JPEG和TIFF。您还可以使用API打开一个新的模拟相机窗口并拍摄快照(附带的2个宏可以做到这一点)。当你右键单击相机窗口时,你可以看到相同的相机设置,可以通过API访问。所附宏中的注释可以帮助您设置,以便相机根据您的设置自动打开。



为了模拟目的,您可以执行以下操作之一:
  1. 提取相机应该提供给你的理想X,Y,Theta。建议将此作为确保您的选择和放置应用程序有意义的第一步。
  2. 通过应用图像识别算法模拟相机提供的X,Y,Theta值。
这两种操作都可以使用RoboDK API轻松实现自动化。这段代码提供了一个示例函数,用于等待零件通过传送带:

代码:
#模拟相机的行为(返回TX, TY和RZ)
def WaitPartCamera ():
if RDK.RunMode() == RUNMODE_SIMULATE:
如果这是真的:
#纯模拟选项:
#通过等待一个物体在相机区域内来模拟相机
而真正的:
#遍历所有可以选中的对象:
对于check_objects中的部分:
计算零件相对于相机参考的位置
part_pose = invH(camera_pose_abs) * part.PoseAbs()
Tx,ty,tz,rx,ry,rz = pose_2_xyzrpw(part_pose)
# X,Y,Theta = tx,ty,rz -> tx,ty单位为mm, rz单位为度
如果abs(tx) < 400且ty < 50且abs(tz) < 400:
打印('部分检测到:TX,TY,TZ=%.1f,%.1f,%. 1f,%。1f' % (tx,ty,rz))
返回tx ty rz
其他:
#应用图像处理(RoboDK内模拟):
image_file = RDK.getParam('PATH_OPENSTATION') + "/Image-Camera-Simulation.png"
print("Saving camera snapshot to file:" + image_file)
RDK.Cam2D_Snapshot (image_file)

在这里实现你的图像处理:
返回ImageProcessingAlgorithm (image_file)

其他:
#图像处理应该发生在真正的相机上
返回WaitPartRealCamera ()

返回0,0,0

你会在下面的示例项目中找到一个类似的函数:
例02-3 -用2D camera.rdk选择并放置
(在PartsToPallet程序内)


附加文件
. py CameraAdd.py(大小:1.86 KB /下载:992)
. py CameraSnapshot.py(大小:446字节/下载:810)
# 4
谢谢你的帮助。谢谢你!
我会试着回来的。

问候
# 5
(03-05-2019, 03:53 pm)艾伯特写道:在RoboDK中,您可以使用以下选项模拟2D摄像机和3D深度摄像机:
  • 连接模拟2D相机
然而,图像处理需要使用第三方产品、您自己的图像处理算法或Python本身进行集成。举个例子,如果你打算创建自己的图像处理算法,OpenCV库将是一个很好的起点。或者,您可以找到适合行业的相机,如康耐视,Keyence, Sick, Ensenso,…

从RoboDK,您可以通过右键单击相机的模拟视图来保存图像,并保存图像以测试您的图像处理算法。支持保存图像的格式包括PNG、JPEG和TIFF。您还可以使用API打开一个新的模拟相机窗口并拍摄快照(附带的2个宏可以做到这一点)。当你右键单击相机窗口时,你可以看到相同的相机设置,可以通过API访问。所附宏中的注释可以帮助您设置,以便相机根据您的设置自动打开。



为了模拟目的,您可以执行以下操作之一:
  1. 提取相机应该提供给你的理想X,Y,Theta。建议将此作为确保您的选择和放置应用程序有意义的第一步。
  2. 通过应用图像识别算法模拟相机提供的X,Y,Theta值。
这两种操作都可以使用RoboDK API轻松实现自动化。这段代码提供了一个示例函数,用于等待零件通过传送带:

代码:
#模拟相机的行为(返回TX, TY和RZ)
def WaitPartCamera ():
if RDK.RunMode() == RUNMODE_SIMULATE:
如果这是真的:
#纯模拟选项:
#通过等待一个物体在相机区域内来模拟相机
而真正的:
#遍历所有可以选中的对象:
对于check_objects中的部分:
计算零件相对于相机参考的位置
part_pose = invH(camera_pose_abs) * part.PoseAbs()
Tx,ty,tz,rx,ry,rz = pose_2_xyzrpw(part_pose)
# X,Y,Theta = tx,ty,rz -> tx,ty单位为mm, rz单位为度
如果abs(tx) < 400且ty < 50且abs(tz) < 400:
打印('部分检测到:TX,TY,TZ=%.1f,%.1f,%. 1f,%。1f' % (tx,ty,rz))
返回tx ty rz
其他:
#应用图像处理(RoboDK内模拟):
image_file = RDK.getParam('PATH_OPENSTATION') + "/Image-Camera-Simulation.png"
print("Saving camera snapshot to file:" + image_file)
RDK.Cam2D_Snapshot (image_file)

在这里实现你的图像处理:
返回ImageProcessingAlgorithm (image_file)

其他:
#图像处理应该发生在真正的相机上
返回WaitPartRealCamera ()

返回0,0,0

你会在下面的示例项目中找到一个类似的函数:
例02-3 -用2D camera.rdk选择并放置
(在PartsToPallet程序内)

艾伯特你好,
我已经知道如何添加相机和获取图像文件。是否有可能从相机的功能获得numpy数组来检索视图?我想研究机器人操作中的强化学习。谢谢~
# 6
(12-15-2020, 06:31 am)杰夫写道:艾伯特你好,
我已经知道如何添加相机和获取图像文件。是否有可能从相机的功能获得numpy数组来检索视图?我想研究机器人操作中的强化学习。谢谢~

我也希望能够更直接地访问相机馈送,而不是保存图像。请添加此功能:)
# 7
这是不可能得到一个窗口的视频提要。相反,您可以使用屏幕捕捉软件(例如OBS software)来实现这一点。

使用RoboDK API,您可以拍摄主窗口或模拟相机窗口的快照。这里有一个这样做的例子:
https://github.com/RoboDK/Plug-In-Interf...napshot.py
# 8
(02-28-2019, 07:09)jccourtney写道:我也想知道在哪里可以找到它。

艾伯特你好,
我想购买3D相机:
Robodk支持像intel realsense那样的3D摄像头吗?如果有,有什么要求,如何连接?- Robodk是否能够实时接收来自相机的图像(2D/3D)?
先谢谢你,




浏览此线程的用户:
1客人(年代)