Mô tả
Trong cuộc sống robot có thể giúp ta làm các công việc nặng nhọc, nguy hiểm cho sức khỏe ch ng hạn nhƣ trong các nhà máy hóa chất, nơi có nhiều chất phóng xạ. Những dây chuyền cần tự động hóa không thể thiếu
robot, đặc biệt robot có thể làm việc liên tục trong thời gian dài với độ chính xác cao.
Đối với ứng dụng này ta thiết kế robot di chuyển dọc theo hành lang bằng cách gắn thêm vào robot một camera để thu nhận hình ảnh, sau đó những hình ảnh này đƣợc gửi về máy tính phân tích và xử lý. Sau khi xử lý xong máy tính tìm đƣợc đƣờng đi và điều khiển robot di chuyển theo đƣờng đi này. Quá trình thu nhận ảnh và tìm đƣờng đi cho robot đƣợc lặp đi lặp lại cho đến khi robot đi đƣợc đến đích.
Do điều kiện về thời gian nên tôi chƣa kịp nghiên cứu để thiết kế robot thật vì vậy tôi sử dụng đoạn video clip để mô phỏng hành động di chuyển dọc theo hành lang của robot và thuật toán sẽ duyệt từng frame của đoạn video này cho đến khi kết thúc, ứng với mỗi frame thuật toán sẽ tiến hành thực hiện các bƣớc sau:
1. Xác định tọa độ robot (là tọa độ đƣợc xác định từ frame trƣớc) 2. Xác định biên dựa vào thuật toán Canny [3] [5] [6]
3. Xác định các đƣờng th ng Hough [7] [8] [9] [10] 4. Xác định tọa độ tiếp theo mà robot cần di chuyển tới 5. Di chuyển robot đến tọa độ mới
6. Quay lại bƣớc 2 cho đến khi đọc hết frame.
Ghi chú: Frame chính là hình ảnh ghi nhận tiếp theo của robot khi di chuyển sang vị trí mới.
Lưu đồ End. Đ S Begin img:=SelectFrameFromVideo(v) Canny(img) Lines:=HoughLine(img) Frame cuối cùng ? Video và độ dài bƣớc đi của robot
StartPosition(x,y) là tọa độ ban đầu của robot
NextPosition:= GetNextPosition(lines)
StartPosition.x = NextPosition.x StartPosition.y = NextPosition.y MoveRobotToPosition(StartPosition)
Thuật toán xác định đường đi
Input : Video, độ dài bƣớc đi của robot Output : Tọa đô robot cần di chuyển đến Procedure XacDinhDuongDi (v:Video) Begin
Var img : ImagePointer;
lines : array of StructLine; StartPosition: Point;
NextPosition: Point;
img := SelectFrameFromVideo(v);
StartPosition.x = {tọa độ x0 ban đầu của robot}; StartPosition.y = {tọa độ y0 ban đầu của robot};
While (img) Begin
Canny(img);
lines := HoughLine(img);
NextPosition := GetNextPosition (img,bƣớc đi,lines,StartPosition);
MoveRobotToPosition (NextPosition); StartPosition.x = NextPosition.x; StartPosition.y = NextPosition.y;
End; End.