CHÉM GIÓ, BÀN LUẬN VỀ KỸ THUẬT
Lập trình robot với ROS - Phần 1: Giới thiệu tổng quan
09 Tháng Hai 2021
Bạn muốn phát triển các ứng dụng robot mới, nhưng không biết cách viết hệ thống ánh xạ hoặc nhận dạng đối tượng? Bạn không đơn độc, nhưng bạn chắc chắn không phải là không có sự giúp đỡ. Bằng cách kết hợp các ví dụ thực tế với kiến thức quý giá từ cộng đồng Hệ điều hành Robot (ROS), bài viết thực tế này cung cấp một bộ công thức thúc đẩy để giải quyết các trường hợp phát triển robot cụ thể.
Robot Operation System (ROS) là một framework để viết ứng dụng robot. Nó là một tập hợp các công cụ, thư viện và quy ước nhằm mục đích đơn giản hóa nhiệm vụ tạo ra các hành vi phức tạp và mạnh mẽ của robot trên nhiều nền tảng robot khác nhau.
Bởi vì việc tạo ra phần mềm robot thực sự hữu ích, có mục đích chung là rất khó. Từ các khía cạnh của robot, nhiều vấn đề có vẻ nhỏ nhặt đối với con người thực sự có thể bao gồm các biến thể phức tạp giữa các task và môi trường.
Hãy xem xét một nhiệm vụ đơn giản “tìm vật phẩm”, trong đó một robot trợ lý văn phòng được hướng dẫn lấy một chiếc kim bấm. Đầu tiên, robot phải hiểu yêu cầu, bằng lời nói hoặc thông qua một số phương thức khác, chẳng hạn như giao diện web, email hoặc thậm chí là SMS. Sau đó, robot phải bắt đầu một số loại kế hoạch để điều phối việc tìm kiếm vật phẩm, điều này có thể sẽ yêu cầu điều hướng qua các phòng khác nhau trong một tòa nhà, có lẽ bao gồm cả thang máy và cửa ra vào. Khi đến một căn phòng, rô bốt phải tìm kiếm các bàn làm việc lộn xộn với các đồ vật có kích thước tương tự vì tất cả các đối tượng cầm tay đều có kích thước gần giống nhau) và tìm một chiếc kim bấm. Sau đó, rô bốt phải dò lại các bước của nó và đưa kim bấm đến vị trí mong muốn. Mỗi bài toán con có thể có số lượng yếu tố phức tạp tùy ý. Và đây là một nhiệm vụ tương đối đơn giản!
Đối phó với các trường hợp trong thế giới thực trong các nhiệm vụ và môi trường phức tạp khó khăn đến mức không một cá nhân, phòng thí nghiệm hoặc tổ chức nào có thể hy vọng xây dựng một hệ thống hoàn chỉnh từ đầu. Kết quả là, ROS đã được xây dựng ngay từ đầu để khuyến khích sự hợp tác phát triển phần mềm robot. Ví dụ, trong bài toán “tìm kim bấm”, một tổ chức có thể có các chuyên gia lập bản đồ môi trường trong nhà và có thể đóng góp một hệ thống phức tạp nhưng dễ sử dụng để tạo bản đồ trong nhà. Một nhóm khác có thể có kiến thức chuyên môn trong việc sử dụng bản đồ để điều hướng một cách hiệu quả các môi trường trong nhà. Tuy nhiên, một nhóm khác có thể đã phát hiện ra một phương pháp thị giác máy tính cụ thể hoạt động tốt để nhận ra các vật thể nhỏ trong sự lộn xộn. ROS bao gồm nhiều tính năng được thiết kế đặc biệt để đơn giản hóa loại hình cộng tác quy mô lớn này.
Lược sử
ROS là một dự án lớn có nhiều thế hệ và người đóng góp.Sự cần thiết của một khuôn khổ hợp tác mở được cảm nhận bởi nhiều người trong cộng đồng nghiên cứu robot. Các dự án khác nhau tại Đại học Stanford vào giữa những năm 2000 liên quan đến tích hợp, ứng dụng AI, chẳng hạn như STanford AI Robot (STAIR) và chương trình Robot cá nhân (PR), đã tạo prototype nội bộ của các loại hệ thống phần mềm linh hoạt, năng động. Năm 2007, Willow Garage, Inc., một vườn ươm người máy gần đó, đã cung cấp nguồn lực đáng kể để mở rộng những khái niệm này hơn nữa và tạo ra triển khai. Nỗ lực đã được thúc đẩy bởi vô số nhà nghiên cứu, những người đã đóng góp thời gian và kiến thức chuyên môn cốt lõi của ROS và các gói phần mềm cơ bản của nó. Trong suốt quá trình, phần mềm được phát triển ngoài trời bằng cách sử dụng giấy phép nguồn mở BSD, và nó dần dần được sử dụng rộng rãi trong cộng đồng nghiên cứu robot
Triết học
Tất cả các framework phát triển phần mềm đề được áp đặt triết lý của những nhà phát triển ra nó. ROS cũng tương tự và nó tuân theo triết lý phát triển phần mềm của Unix ở một số khía cạnh chính. Điều này làm cho việc tiếp cận ROS của những developer có nền tảng về Unix cảm thấy dễ dàng hơn, đối với những developer đến từ các nền tảng chủ yếu về Window hay MacOS
- Peer to peer
Hệ điều hành ROS bao gồm nhiều chương trình máy tính nhỏ kết nối với nhau và liên tục trao đổi thông tin. Những thông tin này truyền trực tiếp từ chương trình này sang chương trình khác; không có trung tâm thực hiện thao tác "định tuyến". Mặc dù điều này làm cho "hệ thống ống nước" bên dưới phức tạp hơn, nhưng bù lại hệ điều hành hoạt động tốt hơn trong điều kiện dữ liệu lớn hơn
- Tools-based
Dựa kiến trúc bền vững của Unix, các hệ thống phần mềm phức tạp có thể được tạo ra từ nhiều chương trình nhỏ, chung chung. Không giống như nhiều khuôn khổ framework robot khác, ROS không có môi trường runtime và phát triển tích hợp chính tắc. Các tác vụ như điều hướng mã nguồn, hình dung các kết nối hệ thống, vẽ đồ thị luồng dữ liệu, tạo tài liệu, ghi dữ liệu, v.v. đều được thực hiện bởi các chương trình riêng biệt. Điều này khuyến khích việc tạo ra các triển khai mới, cải tiến, vì (lý tưởng là) chúng có thể được trao đổi để triển khai phù hợp hơn cho một miền nhiệm vụ cụ thể. Các phiên bản gần đây của ROS cho phép nhiều công cụ này được tạo thành các quy trình duy nhất để đạt hiệu quả hoặc tạo ra các giao diện nhất quán cho người vận hành hoặc gỡ lỗi, nhưng nguyên tắc vẫn như cũ: bản thân các công cụ riêng lẻ tương đối nhỏ và chung chung.
- Multilingual
Nhiều tác vụ phần mềm dễ thực hiện hơn bằng các ngôn ngữ “bậc cao” như Python hoặc Ruby. Tuy nhiên, đôi khi các yêu cầu về hiệu suất quy định việc sử dụng các ngôn ngữ nhanh hơn, chẳng hạn như C ++. Cũng có nhiều lý do mà một số lập trình viên thích các ngôn ngữ như Lisp hoặc MATLAB. Các cuộc chiến tranh email bất tận đã được tiến hành, hiện đang được tiến hành và chắc chắn sẽ tiếp tục được tiến hành về ngôn ngữ nào phù hợp nhất cho một nhiệm vụ cụ thể. Thừa nhận rằng tất cả các ý kiến này đều có giá trị, rằng các ngôn ngữ có các tiện ích khác nhau trong các ngữ cảnh khác nhau và nền tảng riêng của mỗi lập trình viên là cực kỳ quan trọng khi chọn ngôn ngữ, ROS đã chọn cách tiếp cận đa ngôn ngữ. Các mô-đun phần mềm ROS có thể được viết bằng bất kỳ ngôn ngữ nào mà thư viện máy khách đã được viết. Tại thời điểm viết bài, các thư viện máy khách tồn tại cho C ++, Python, LISP, Java, JavaScript, MATLAB, Ruby, Haskell, R, Julia và các thư viện khác. Các thư viện máy khách ROS giao tiếp với nhau bằng cách tuân theo một quy ước mô tả cách các thông điệp được “làm phẳng” hoặc “tuần tự hóa” trước khi được truyền qua mạng.
- Thin
Các quy ước ROS khuyến khích những người đóng góp tạo các thư viện độc lập và sau đó gói các thư viện đó lại để họ có thể gửi và nhận tin nhắn đến và từ các mô-đun ROS khác. Lớp bổ sung này nhằm cho phép sử dụng lại phần mềm bên ngoài ROS cho các ứng dụng khác và nó giúp đơn giản hóa đáng kể việc tạo các testcase tự động bằng cách sử dụng các công cụ tích hợp.
- Free and open source
Phần lõi của ROS được phát hành theo giấy phép BSD, cho phép sử dụng thương mại và phi thương mại. ROS truyền dữ liệu giữa các mô-đun bằng cách sử dụng giao tiếp (IPC), có nghĩa là các hệ thống được xây dựng bằng ROS có thể có giấy phép chi tiết cho các thành phần khác nhau của chúng. Ví dụ, các hệ thống thương mại thường có một số mô-đun nguồn đóng giao tiếp với một số lượng mô-đun nguồn mở. Các dự án học thuật và sở thích thường hoàn toàn là mã nguồn mở. Việc phát triển sản phẩm thương mại thường được thực hiện hoàn toàn sau tường lửa. Tất cả các trường hợp sử dụng này và hơn thế nữa, đều phổ biến và hoàn toàn hợp lệ theo giấy phép ROS.
Cài đặt
Mặc dù ROS đã được tạo ra để hoạt động trên nhiều hệ điều hành, nhưng trong loạt bài về tìm hiểu ROS này, chúng ta sẽ sử dụng Ubuntu Linux, một phiên bản của Linux khá phổ biến và tương đối thân thiện với người dùng. Ubuntu cung cấp một trình cài đặt dễ sử dụng cho phép máy tính khởi động kép giữa hệ điều hành mà chúng được vận chuyển (thường là Windows hoặc Mac OS X) và chính Ubuntu. Điều quan trọng là phải sao lưu máy tính của bạn trước khi cài đặt Ubuntu, phòng trường hợp có điều gì đó không mong muốn xảy ra và ổ đĩa bị xóa hoàn toàn trong quá trình này. Mặc dù có các môi trường ảo hóa như VirtualBox và VMware cho phép Linux chạy đồng thời với hệ điều hành máy chủ như Windows hoặc Mac OS X, trình mô phỏng được sử dụng trong cuốn sách này khá nặng về máy tính và đồ họa, và có thể quá chậm trong một môi trường ảo hóa. Do đó, chúng tôi khuyên bạn nên chạy Ubuntu Linux nguyên bản bằng cách làm theo hướng dẫn trên trang web Ubuntu. Ubuntu Linux có thể được tải xuống miễn phí từ http://ubuntu.com, mình sẽ có 1 bài viết về cài đặt ROS
Tạm kết
Bài viết này đã giới thiệu với các bạn tổng quan về hệ điều ROS. ROS là một khuôn khổ để phát triển phần mềm dành cho robot. Phần mềm được cấu trúc gồm một số lượng lớn các chương trình nhỏ truyền nhanh các thông điệp cho nhau. Mô hình này được chọn để khuyến khích việc sử dụng lại phần mềm robot bên ngoài robot và môi trường cụ thể đã thúc đẩy sự sáng tạo của nó. Thật vậy, cấu trúc được kết hợp lỏng lẻo này cho phép tạo ra các mô-đun chung có thể áp dụng cho các loại phần cứng và phần mềm robot, tạo điều kiện cho việc chia sẻ và sử dụng lại mã giữa các cộng đồng robot toàn cầu