Phương án giải thuật để robot có thể thoát khỏi mê cung 1.1 Giới thiệu thuật toán tím kiếm theo chiều rộng BFS 1.1.1 Giới thiệu Thuật toán tìm kiếm theo chiều rộng BFS: là một thuật toán
Trang 1BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TP.HCM
KHOA CÔNG NGHỆ CƠ KHÍ
TP.HCM, THÁNG 10 NĂM 2023
Trang 2BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TP.HCM
KHOA CÔNG NGHỆ CƠ KHÍ
-
-BÁO CÁO THIẾT KẾ HỆ THỐNG CƠ ĐIỆN TỬ Đề tài: Robot giải mê cung và đấu trường sumo Giảng viên hướng dẫn : TS Lê Ngọc Trân Sinh viên thực hiện : Đỗ Thành Tân 20087721
Nguyễn Văn Tân 20096381
Đỗ Xuân Thắng 20075041
Đỗ Chí Tâm 20086971
TP.HCM, THÁNG 10 NĂM 2023
Trang 3NHẬN XÉT CỦA GIÁO VIÊN
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
Trang 4Lời nói đầu
Thiết Kế Hệ Thống Cơ Điện Tử là nội dung không thể thiếu với chương trình đào tạo kĩ sư cơ điện tử nhằm cung cấp cho sinh viên những kiến thức cơ sở
về kết cấu máy và các quá trình cơ bản khi thiết kế máy Trong quá trình học môn thiết kế hệ thống cơ điện tử nhóm em đã được làm quen với những kiến thức cơ bản về kết cấu máy, các bộ phận của máy và các tính năng cơ bản của các chi tiết máy thường gặp Thiết kế hệ thống cơ điện tử giúp chúng em hệ thống lại các kiến thức đã học và tìm hiểu sâu hơn về nó Thông qua việc hoàn thiện đồ án, em có thể
áp dụng được các kiến thức từ các môn học như: Chi tiết máy, Sức bền vật liệu, Vẽ
kỹ thuật, Dung sai kỹ thuật đo, Nguyên lý máy, Vi xử lý, Kỹ thuật số…
Nhân dịp trường có tổ chức “CUỘC THI ĐẤU TRƯỜNG ROBOT” Chúng
em quyết định tham gia và sử dụng sản phẩm cuộc thi làm báo cáo môn học
Do là lần đầu làm quen với công việc thiết kế hệ thống cơ điện tử,cùng với
sự hiểu biết còn hạn chế cho nên dù đã rất cố gắng tham khảo các tài liệu và bài giảng của các môn có liên quan song bài làm của sinh viên chúng em không thể tránh khỏi những sai sót Kính mong được sự hướng dẫn và chỉ bảo nhiệt tình của các thầy cô trong bộ môn giúp cho những sinh viên như chúng em ngày càng tiến
bộ trong học tập Cuối cùng em xin chân thành cảm ơn các thầy trong bộ môn, đặc biệt là thầy Lê Ngọc Trân đã trực tiếp hướng dẫn, chỉ bảo tận tình để em có thể hoàn thành tốt nhiệm vụ được giao
Em xin chân thành cảm ơn!
Trang 5CHƯƠNG I Tổng quan về cuộc thi đấu trường robot
1 Lợi ích của Robot trong lao động sản xuất
Hiện nay, việc sử dụng robot trong quy trình sản xuất mang lại nhiều lợi ích đối với các doanh nghiệp Dưới đây là một số lợi ích quan trọng của việc sử dụng robot trong sản xuất:
Tăng cường Năng Suất:
Robot có khả năng làm việc liên tục 24/7 quá trình làm việc của robot thường nhanh chóng và chính xác, giảm thời gian sản xuất so với việc thực hiện bằng tay
Trang 6 Mặc dù chi phí đầu tư ban đầu cho robot có thể cao, nhưng trong thời gian dài, chúng có thể giảm chi phí lao động và tăng tính cạnh tranh của doanh nghiệp.
Tăng Cường Khả Năng Đối Phó với Độ Phức Tạp:
Robot có thể xử lý công việc phức tạp, lặp lại, và chi tiết mà con người có thể gặp khó khăn hoặc mệt mỏi khi thực hiện
Để giúp sinh viên dễ dáng tiếp cận hơn trường đã tạo ra CUỘC THI ĐẤU TRƯỜNG ROBOT nhằm tạo sân chơi trí tuệ sáng tạo, là dịp để các bạn trẻ tiếp cận, là nơi giao lưu, học tập, nâng cao kiến thức cũng như phát huy tính sáng tạo trong nghiên cứu, học tập và lao động chuẩn bị hành trang cho cuộc cách mạng công nhiệp lần thứ 4
2 Giới thiệu về cuộc thi “ Đấu trường Robot ”
Tên gọi: Cuộc thi “Đấu trường Robot” năm 2023
Đối tượng tham gia: Là sinh viên đang theo học tại các trường Đại học, Cao đẳng,
Học viện trên địa bàn Thành phố Hồ Chí Minh
Đơn vị tổ chức: Trường đại học Công Nghiệp thành phố Hồ Chí Minh
Tóm tắt thể lệ thi đấu:
Các đội tối đa 5 thành viên sẽ thi đấu robot với nhau gồm 2 phần Phần đầu là thi thoát khỏi mê cung Phần 2 là thi đấu Sumo Một đội chỉ được dùng một Robot ở chế
độ tự động cho cả 2 vòng thi.Ở phần thi thoát khỏi mê cung, Robot không thoát khỏi được mê cung sau 2 lần thi sẽ bị loại Robot thoát được mê cung trong 2 lần
Trang 7thi đấu sẽ được vào vòng 2 Kết quả tốt nhất trong 2 lần sẽ được ghi nhận cho Robot.
Ở phần 2, các Robot thi đấu với nhau dựa trên cuộc thi Sumo của người Nhật Các Robot không được phép sử dụng vũ khí và không được phép lật đổ lẫn nhau Nhiệm vụ duy nhất của Robot trong trận đấu là đẩy Robot đội khác ra khỏi vòng tròn của sân thi đấu
Cuộc thi giải mã mê cung
Hỉnh ảnh cuộc thi đấu trường sumo
Trang 8CHƯƠNG II Tổng hợp lưu đồ giải thuật và thiết kế thuật toán cho
robot giải mê cung và robot sumo
1 Phương án giải thuật để robot có thể thoát khỏi mê cung
1.1 Giới thiệu thuật toán tím kiếm theo chiều rộng (BFS)
1.1.1 Giới thiệu
Thuật toán tìm kiếm theo chiều rộng (BFS): là một thuật toán tìm kiếm trong đồ
thị, được sử dụng để tìm kiếm đường đi từ một đỉnh bắt đầu đến một đỉnh đích trong đồ thị không có trọng số
Cách hoạt động của BFS như sau:
(1) Bắt đầu từ đỉnh bắt đầu, đánh dấu đỉnh này là “đã thăm” và thêm nó vào
hàng đợi
(2) Lặp lại các bước sau đó cho đến khi hàng đợi trống:
Lấy một đỉnh từ đầu hàng đợi
Kiểm tra xem đỉnh này có phải là đỉnh đích hay không Nếu có, thuật toán kết thúc và trả về đường đi từ đỉnh bắt đầu đến đỉnh đích
Nếu không, thêm tất cả các đỉnh kề cận của đỉnh hiện tại mà chưa được thăm vào hàng đợi và đánh dấu chúng là “đã thăm”
(3) Nếu thuật toán không tìm thấy đỉnh đích sau khi đã thăm hết tất cả các
đỉnh có thể, nghĩa là không có đường đi từ đỉnh bắt đầu đến đỉnh đích
BFS đảm bảo tìm ra đường đi ngắn nhất từ đỉnh bắt đầu đến đỉnh đích trong trường
hợp đồ thị không có trọng số Nó duyệt qua các đỉnh theo cấp độ, tức là trước tiên
Trang 9duyệt qua các đỉnh cách đỉnh bắt đầu 1 bước, sau đó duyệt qua các đỉnh cách đỉnh bắt đầu 2 bước và tiếp tục cho đến khi tìm thấy đỉnh đích hoặc đã thăm hết tất cả các đỉnh có thể
1.1.2 Lưu đồ thuật toán
1.2 Giới thiệu thuật toán tìm kiếm theo chiều sâu DFS
1.2.1 Giới thiệu
Trang 10Thuật toán tìm kiếm theo chiều sâu (DFS) là một thuật toán tìm kiếm trong đồ
thị, được sử dụng để tìm kiếm đường đi từ một đỉnh bắt đầu đến một đỉnh đích trong một đồ thị không có trọng số
Cách hoạt động của DFS:
(1) Bắt đầu từ đỉnh bắt đầu, đánh dấu đỉnh này là “đã thăm” và thực hiện
các hành động liên quan đến đỉnh này
(2) Lặp lại các bước sao cho tất cả các đỉnh kề cận của đỉnh kề cận của đỉnh
hiện tại mà chưa được thăm:
Chọn một đỉnh kề cận chưa được thăm
Đánh dấu đỉnh này là “đã thăm” và thực hiện các hành động liên quanđến đỉnh này
Tiếp tục thực hiện DFS từ đỉnh này
(3) Nếu không còn đỉnh kề cận nào chưa được thăm, quay lại đỉnh trước đó
và tiếp tục lặp lại bước 2 cho các đỉnh kề cận khác chưa được thăm
(4) Nếu đã thăm hết tất cả các đỉnh có thể mà không tìm thấy đỉnh đích,
thuật toán kết thúc và không có đường đi từ đỉnh bắt đầu đến đỉnh đíchDFS thường được thực hiện bằng cách sử dụng đệ quy hoặc stack để lưu trữ các đỉnh cần thăm Nó khám phá một nhánh của đồ thị càng sâu càng tốt trước khi quay và khám phá các nhánh khác
1.2.2 Lưu đồ giải thuật
Trang 111.3 Sử dụng DFS và BFS để giải mê cung
Trang 121.2 Xây dựng lưu đồ giải thuật robot giải mê cung
1.2.1 Khai báo mê cung
Trang 13Khai báo mê cung:
a Thuộc tính
(1) Walls: Một danh sách bốn phần tử biểu diễn tường xung quanh ô, mỗi phần tử
là một giá trị Boolean, nếu True thì có tường và False thì không có tường, thứ tự các phần tử biểu diễn lần lượt là tường phía Bắc, Đông, Nam, Tây của ô
(2) Position: Một danh sách 2 phần tử biển diễn vị trí của ô trong mê cung, phần
tử đầu tiên là tọa độ x (hàng), phần tử thứ hai là tọa độ y (cột)
(3) Visited: Một giá trị bool biểu diễn việc ô đó đã được khám phá hay chưa, nếu True thì ô đã được khám phá và ngược lại False thì ô chưa được khám phá
b Phương thức
(1) Thiết lập thông tin ô (set_position, set_walls, set_visited)
(2) can_move_to: kiểm tra xem có thể di chuyển tử ô này đến ô khác hay không
(hai ô liền kề có liên kề nhau không và không có tường giữa chúng)
Khai báo Robot:
a Thuộc tính
(1) Location: Một đối tượng Location biểu diễn vị trí hiện tại của Robot trong
mê cung
(2) Parent: Một đối tượng State biểu diễn trạng thái trước đó của RoBot Điều
này giúp ta truy vết ngược lại đường đi từ trạng thái hiện tại đến trạng thái bắt đầu
(3) Action: Một số nguyên biễu diễn hành động mà robot đã thực hiện để di
chuyển từ trạng thái parent đến trạng thái hiện tại Giá trị của Action có thể là 0
(không quay), 1 (quay phải), 2 (quay đầu), 3 (quay trái) hoặc -1 là hành động rỗng
Trang 14(4) Cur_dir: một số nguyên biểu diễn hướng hiện tại của Robot
Trang 151.2.3 Lưu đồ tìm đường đi ngắn nhất với thuật toán BFS
2 Phương án giải thuật cho đấu trường Sumo
2.1 Lưu đồ giải thuật Robot Sumo
Trang 163 Mô phỏng thuật toán 3.1 Phần mềm mô phỏng
Giao diện chính phần mềm:
Trang 171 Khu vực quan sát: mô phỏng cách di chuyển của Robot trong mê cung
2 Khu vực điều khiển cơ bản (Controls):
- Build: Kiểm tra lỗi của đoạn mã hiện tại được nạp trong phần mềm
- Run: chạy mô phỏng
3 Khu vực nạp chương trình (Config)
- Maze: chọn đường dẫn file mô tả mê cung
- Mouse: chọn đường dẫn file chứa mã chương trình robot tìm kiếm
đường đi trong mê cung
3.2 Mã chương trình Robot tìm đường đi ngắn nhất
Lựa chọn ngôn ngữ Python
1
2
3
Trang 18(1) Định nghĩa class Location để lưu trữ thông tin về một ô trong mê cung Mã:
class Location :
self walls [ = False False False False , , , ]
self position [ , ] = - 1 - 1
self visited = False
if pos is not None :
self position [ 0 ] = pos [ 0 ]
self position [ 1 ] = pos [ 1 ]
self position [ 0 ] = pos [ 0 ]
self position [ 1 ] = pos [ 1 ]
self walls [ 0 ] = walls [ 0 ]
self walls [ 1 ] = walls [ 1 ]
self walls [ 2 ] = walls [ 2 ]
self walls [ 3 ] = walls [ 3 ]
self visited = vis
return ( loc position[ 0 ] == self position [ 0 ] and loc position[ 1 ] - self position [ 1 ] == + 1 and not self walls [ 0 ])\
( or loc position[ 1 ] == self position [ 1 ] and loc position[ 0 ] - self position [ 0 ] == + 1 and not self walls [ 1 ])\
( or loc position[ 0 ] == self position [ 0 ] and loc position[ 1 ] - self position [ 1 ] == - 1 and not self walls [ 2 ])\
( or loc position[ 1 ] == self position [ 1 ] and loc position[ 0 ] - self position [ 0 ] == - 1 and not self walls [ 3 ])
(2) Đinh nghĩa class State để lưu trữ trạng thái của Robot trong mê cung
Mã:
import location
Trang 19class State :
self location = loc
self cur_dir = cur_dir
self location = loc
self parent = par
self action = act
self cur_dir = cur_dir
return self location position == [ , ] 7 7 or self location position == [ , ] \ 7 8
or self location position == [ , ] 8 7 or self location position == [ , ] 8 8
Trang 20maze [[ = location Location ([ , i j ]) for j range ( 0 MAZE_WIDTH )] for in range ( 0
cur_position [ 0 ] = cur_position [ 0 ] - move_direction
global cur_direction
cur_direction ( = cur_direction + turn_direction ) % 4
walls [ = False False False False , , , ]
walls [ cur_direction ] = API wallFront ()
walls cur_direction [( ) ] + 1 % 4 = API wallRight ()
walls cur_direction [( ) ] + 2 % 4 = False
API setColor ( pos [ 0 ], pos [ 1 ], "G" )
API setText ( pos [ 0 ], pos [ 1 ], "hit" )
if pos is None :
pos = cur_position
API setColor ( pos [ 0 ], pos [ 1 ], "B" )
API setText ( pos [ 0 ], pos [ 1 ], "Sol" )
if pos is None :
Trang 21def log ( string ):
sys stderr write ( {} \n" format ( string )) sys stderr flush ()
return
if _dir == ( cur_direction ) : + 2 % 4 turn_right ()
turn_right ()
return
Trang 22turn_left ()
return
_dir = cur_direction
if cur_position [ 0 ] == loc position[ 0 ]:
if cur_position [ 1 ] - loc position[ 1 ] == : 1
cur_loc = maze [ cur_position [ 0 ]][ cur_position [ 1 ]]
if not cur_loc visited :
cur_loc set_visited ( True )
cur_loc set_walls ( get_walls ())
Trang 23set_dir (( dir_stack get () ) ) + 2 % 4
move_forward ()
dfs_map_maze ()
return
next_loc = loc_stack get ()
if not next_loc visited:
loc_stack put ( next_loc )
set_dir (( dir_stack get () ) ) + 2 % 4
move_forward ()
for i in range ( 0 , MAZE_HEIGHT ):
for j in range ( 0 , MAZE_WIDTH ):
maze [ i ][ ] j visited = False;
first_state = state State ( maze [ 0 0 ][ ])
frontier put ( first_state )
while not frontier empty ():
next_state = frontier get ()
maze [ next_state location.position[ ]][ 0 next_state location.position[ ]].set_visited( 1 True ) mark_bfs_api ( next_state location.position)
if next_state is_goal():
return next_state
my_loc = next_state location
if not my_loc walls[ ]: 0
north_loc = maze [ my_loc position[ ]][ 0 my_loc position[ 1 ] ] + 1
if not my_loc walls[ ]: 1
east_loc = maze [ my_loc position[ 0 ] + 1 ][ my_loc position[ 1 ]]
if not my_loc walls[ ]: 2
south_loc = maze [ my_loc position[ ]][ 0 my_loc position[ 1 ] ] - 1
if not my_loc walls[ ]: 3
west_loc = maze [ my_loc position[ 0 ] - 1 ][ my_loc position[ 1 ]]
if not my_loc walls[ 0 ] and my_loc can_move_to( north_loc ) and not north_loc visited:
Trang 24if not my_loc walls[ 2 ] and my_loc can_move_to( south_loc ) and not south_loc visited:
south_state = state State ( south_loc next_state , , ( 2 - next_state cur_dir) , ) % 4 2 frontier put ( south_state )
if not my_loc walls[ 3 ] and my_loc can_move_to( west_loc ) and not west_loc visited:
west_state = state State ( west_loc next_state , , ( 3 - next_state cur_dir) , ) % 4 3 frontier put ( west_state )
while sol parent is not sol :
act_stack put ( sol action)
mark_bktrk_api ( sol location.position)
sol = sol parent
while not act_stack empty
act = act_stack get ()
Trang 25CHƯƠNG III Lựa chọn thiết bị, xây dựng mô hình điều khiển
1 Tổng quan khối chức năng hệ thống robot giải mê cung và robot sumo
Với những chỉ tiêu về công nghệ và thống nhất các chức năng chính của robot ta tiến hành thiết kế và đưa ra sơ đồ khối chức năng và cấu tạo, hoạt động chitiết của từng khối như mô tả dưới đây:
Sơ đồ khối chức năng của hệ thống robot giải mê cung và robot sumo
2 Chi tiết các khối chức năng
2.1 Khối nguồn
2.1.1 Chức năng:
Trang 26- Có nhiệm vụ cấp nguồn cho động cơ và toàn bộ mạch điện trên xe.
- Do đó tiêu chí của khối nguồn là phải tạo được công suất đủ lớn và có độ
2.1.2 Lựa chọn linh kiện:
Trang 27Mạch ổn áp LM2596S nhận nguồn điện vào từ nguồn ngõ vào có thể có điện
áp cao hơn hoặc thấp hơn so với điện áp đầu ra mong muốn
Giao tiếp với Thiết bị Điều Khiển:
Trang 28Mạch sử dụng một bộ điều khiển để giám sát điện áp đầu ra và điều chỉnh nguồn điện vào để duy trì một điện áp đầu ra ổn định.
Thiết Bị Điều Chỉnh Điện Áp:
Mạch LM2596S có một thiết bị điều chỉnh điện áp tích hợp, thường là một voltage reference (thiết bị tham chiếu điện áp) được xây dựng bên trong IC Nó giúp xác định điện áp đầu ra mong muốn
Cắt/Giảm Điện Áp:
Nếu điện áp đầu ra cao hơn điện áp mong muốn, bộ điều khiển giảm nguồn điện vào thông qua một chopper switch (bộ cắt sóng) tích hợp trong IC Điều này giúp giảm điện áp xuống đến mức mong muốn
2.2 Khối điều khiển động cơ
2.2.1 Chức năng
- Điều khiển hoạt động của động cơ, bao gồm việc điều chỉnh tốc độ, hướng di chuyển và các thao tác liên quan đến động cơ
- Bảo vệ động cơ trong các trường hợp ngắn mạch hay quá tải
2.2.2 Lựa chọn linh kiện
2.2.2.1 Động cơ DC GA25-370 ecoder giảm tốc 280 rpm