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机器人手眼标定之目标抓取的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux设备驱动原理与本质
- 下一篇: linux设备驱动模型架构分析(一)——