日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

scare机器人如何手眼标定_SCARA机器人手眼标定之目标抓取

發布時間:2023/12/31 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 scare机器人如何手眼标定_SCARA机器人手眼标定之目标抓取 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SCARA機器人手眼標定之目標抓取的例子:

顯示如何基于由SCARA手眼校準確定的校準信息,使用SCARA機器人執行拾取和放置應用程序。 在第一步驟中,根據模型圖像定義形狀模型。 然后,基于該形狀模型,在每個圖像中搜索對象。 對于一個選定的對象,計算可用于掌握該對象的機器人坐標。 為了使該示例適用于實際應用,必須從相機獲取圖像(而不是從文件讀取),并且必須實施機器人的控制(而不是在本示例中被注釋掉的相應行)。 通常,圖像必須在匹配之前校正。 如果攝像機完全正交于測量平面,則此步驟可以僅被省略。 要使用提供的示例圖像運行示例程序,RectifyImages必須設置為true。

RectifyImages := true

*使用實例圖像

RectifyImages?:=?true

***********讀取手眼標定結果***********************************

try

*?讀取機器人坐標系下攝像機位姿

read_pose?('cam_in_base_pose.dat',?CamInBasePose)

*讀取攝像機內參

read_cam_par?('camera_parameters.dat',?CameraParam)

*讀取攝像機坐標系下測量平面位姿

read_pose?('measurement_plane_in_cam_pose.dat',?MPInCamPose)

catch?(Exception)

*當沒有找到時,可以通過SCARA機械手有眼標定來獲取位姿和攝像機內參

CamInBasePose?:=?[0.05592166548,0.19497621789,0.48025117245,180.09816119,29.85593363,179.94389014,0]

CameraParam?:=?[0.0165251,-642.277,4.65521e-006,4.65e-006,595.817,521.75,1280,1024]

MPInCamPose?:=?[0.0045679683065,-0.0028695297318,0.4088853425,359.78658429,29.732027579,0.22946472765,0]

endtry

if?(RectifyImages)

*獲取攝像機坐標系下測量平面位姿校正后的映射關系

prepare_rectification_map?(Map,?CameraParam,?MPInCamPose,?MappingScale,?MPInCamPoseMapping)

*將圖像坐標系下圓點[0,0]坐標轉換為世界坐標系下MapUpperLeftX,?MapUpperLeftY坐標

image_points_to_world_plane?(CameraParam,?MPInCamPoseMapping,?\

0,?0,?'m',?MapUpperLeftX,?MapUpperLeftY)

endif

*

dev_update_off?()

*該參數確定使用find_shape_model查找的形狀模型可以部分在圖像外面,允許

set_system?('border_shape_models',?'true')

***************對含標定板圖像進行校正********************

//這里,應該建立與機器人的連接,并且機器人應該移動到一個定義的待機姿態,允許獲取測量平面的未被遮擋的圖像

//定義要抓取的對象形狀模型

//獲取模型的圖像

*?讀取圖像模板

read_image?(Image,?'3d_machine_vision/handeye/scara_stationary_cam_setup_01_metal_parts_01')

if?(RectifyImages)

*通過映射投影圖對圖像進行校正

map_image?(Image,?Map,?ModelImage)

else

copy_image?(Image,?ModelImage)

endif

*關閉打開的窗口

dev_close_window?()

*打開一個新窗口

dev_open_window_fit_image?(ModelImage,?0,?0,?600,?600,?WindowHandle)

*設置字體信息:字體大小14,字體類型:mono,粗體

set_display_font?(WindowHandle,?16,?'mono',?'true',?'false')

*清除窗口內容

dev_clear_window?()

*顯示變換后的圖像

dev_display?(ModelImage)

*設置字寬度

dev_set_line_width?(2)

********創建形狀模板*********************************

*產生一個標準矩形

gen_rectangle1?(ModelROI,?400,?500,?1100,?1300)

*對圖像進行高斯濾波

gauss_filter?(ModelImage,?ImageGauss,?5)

*剪切矩形里圖像

reduce_domain?(ImageGauss,?ModelROI,?ImageReduced)

*用剪切圖像創建形狀模板

create_shape_model?(ImageReduced,?'auto',?rad(0),?rad(360),?'auto',\

'auto',?'use_polarity',?[10,50],?'auto',?ModelID)

*獲取模板矩形區域的面積,中心坐標;

area_center?(ModelROI,?ModelROIArea,?ModelROIRow,?ModelROIColumn)

*顯示模板輪廓

dev_display_shape_matching_results?(ModelID,?'green',?ModelROIRow,?ModelROIColumn,?0,?1,?1,?0)

*通過記錄相應的機器人姿勢來定義物體上的抓取點

DefineGraspingPointByRobot?:=?true

//指定對象的抓取點

//它要在圖像中(只有當對象可以由工具以任何方向拾取時)

//或者通過用機器人抓取它并記錄相應的機器人姿態

if?(DefineGraspingPointByRobot)

dev_set_colored?(12)

*機器人坐標系下模板抓取點位姿

GraspingPointModelInBasePose?:=?[0.2592,0.1997,0.1224,0,0,1.2572,0]

*位姿反轉,獲取攝像機坐標系下機器人位姿

pose_invert?(CamInBasePose,?BaseInCamPose)

*將攝像機坐標系下機器人位姿轉換為其次變換矩陣

pose_to_hom_mat3d?(BaseInCamPose,?BaseInCamHomMat3D)

*將仿射三維變換應用于點【GraspingPointModelInBasePose[0],?\

*GraspingPointModelInBasePose[1],?GraspingPointModelInBasePose[2]】

affine_trans_point_3d?(BaseInCamHomMat3D,?GraspingPointModelInBasePose[0],?\

GraspingPointModelInBasePose[1],?GraspingPointModelInBasePose[2],?Qx,?Qy,?Qz)

*把點【Qx,?Qy,?Qz】投影到圖像坐標系

project_3d_point?(Qx,?Qy,?Qz,?CameraParam,?GraspingPointModelRow,?GraspingPointModelColumn)

*抓取模板角度,位姿格式:[TransX;?TransY?;?TransZ;?RotX;?RotY;?RotZ]

GraspingPointModelAngle?:=?GraspingPointModelInBasePose[5]

*將圖像坐標系下抓取位置點轉換為世界坐標下,參數Scale可以縮放得到的三維坐標

image_points_to_world_plane?(CameraParam,?MPInCamPoseMapping,?GraspingPointModelRow,\

GraspingPointModelColumn,?MappingScale,?GraspingPointModelXMP,?GraspingPointModelYMP)

*當前抓取坐標減去原點坐標

GraspingPointModelRow?:=?GraspingPointModelYMP?-?MapUpperLeftY?/?MappingScale

GraspingPointModelColumn?:=?GraspingPointModelXMP?-?MapUpperLeftX?/?MappingScale

endif

*顯示模板矩形的面積和中心坐標

area_center?(ModelROI,?ModelROIArea,?ModelROIRow,?ModelROIColumn)

*設置模板原點坐標,該原點相對于形狀模板重心的位置[GraspingPointModelRow?-?ModelROIRow,

*?GraspingPointModelColumn?-?ModelROIColumn]

*設置手眼抓取零件位置與零件重心偏移量

set_shape_model_origin?(ModelID,?GraspingPointModelRow?-?ModelROIRow,?\

GraspingPointModelColumn?-?ModelROIColumn)

disp_continue_message?(WindowHandle,?'black',?'true')

stop?()

*******循環讀取機器人要抓取的物體的圖像*********************

*將攝像機坐標系下測量平面位姿轉換為其次變換矩陣

pose_to_hom_mat3d?(MPInCamPoseMapping,?MPInCamHomMat3DMapping)

//在下列圖像中找被抓取的物體

for?ImageIdx?:=?2?to?6?by?1

*?獲取圖像

read_image?(Image,\

'3d_machine_vision/handeye/scara_stationary_cam_setup_01_metal_parts_'+?ImageIdx$'02d')

*校正圖像

if?(RectifyImages)

map_image?(Image,?Map,?SearchImage)

else

copy_image?(Image,?SearchImage)

endif

dev_clear_window?()

dev_display?(SearchImage)

*在校正圖像中尋找工件模板

find_shape_model?(SearchImage,?ModelID,?rad(0),?rad(360),?0.5,?0,?0.5,\

'least_squares',?[0,3],?0.9,?Row,?Column,?Angle,?Score)

if?(|Row|?

disp_message?(WindowHandle,'No?objects?found',?'window',?12,?12,?'black',?'true')

continue

endif

*

*?獲取最左邊工件的抓取坐標和角度

LeftmostIdx?:=?sort_index(Column)[0]

GraspingPointRow?:=?Row[LeftmostIdx]

GraspingPointColumn?:=?Column[LeftmostIdx]

GraspingPointAngle?:=?Angle[LeftmostIdx]

*

*?顯示匹配結果和待抓取的零件

dev_display_shape_matching_results?(ModelID,?'blue',?Row,?Column,?Angle,?1,?1,?0)

dev_display_shape_matching_results?(ModelID,?'green',?GraspingPointRow,\

GraspingPointColumn,?GraspingPointAngle,?1,?1,?0)

disp_message?(WindowHandle,?|Row|?+?'?objects?found?(Green:?Object?to?be?grasped)',\

'window',?12,?12,?'black',?'true')

disp_continue_message?(WindowHandle,?'black',?'true')

*

*?計算出機器人坐標系下校正對象的位姿

calculate_point_to_approach_scara_stationary?(GraspingPointRow,?GraspingPointColumn,?\

GraspingPointAngle?+?rad(GraspingPointModelAngle),?RectifyImages,?\

MapUpperLeftX,?MapUpperLeftY,\

MappingScale,?MPInCamHomMat3DMapping,?CameraParam,?MPInCamPose,?\

CamInBasePose,?ObjInBasePose)

*

*將攝像機坐標系下校正對象位姿中X,Y,Z偏移量轉換為mm

ToolInBasePoseMM?:=?[ObjInBasePose[0:2]?*?1000,ObjInBasePose[3:6]]

*?Pick?and?place?the?object

*在這里,機器人應該移動到上面確定的對象的位置(ToolInBasePoseMM),在那里對象應該被拾取,

*然后放置在某個預定位置(像PlacePositionInBasePoseMM)。

*最后,機器人應該再次移動到備用姿勢,以便拍攝測量平面的未被遮擋的圖像。

stop?()

endfor

//這兒機器人連接被關閉

*清除形狀模板

clear_shape_model?(ModelID)

**該參數確定使用find_shape_model查找的形狀模型可以部分在圖像外面,禁止

set_system?('border_shape_models',?'false')

dev_clear_window?()

#轉載請注明出處 www.skcircle.com 《少有人走的路》勇哥的工業自動化技術網站。如果需要本貼圖片源碼等資源,請向勇哥索取。

總結

以上是生活随笔為你收集整理的scare机器人如何手眼标定_SCARA机器人手眼标定之目标抓取的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。