ROS
1. Tổng quan về hệ điều hành dành cho robot – ROS
2. Cấu trúc của ROS
2.1. ROS Filesystem Level
2.2. ROS Computation Graph Level
2.3. ROS Community Level
Tìm hiểu về SLAM
1. SLAM là gì?
1.1. Khái niệm
1.2. Lịch sử của SLAM
1.3. Các loại cảm biến phục vụ cho SLAM
Tìm hiểu về ROS
1. Tổng quan về hệ điều hành dành cho robot – ROS
Robot Operating System – ROS là hệ điều hành mã nguồn mở dành cho robot, là một
framework được dùng rất rộng rãi trong lĩnh vực robotic với nhiều ưu điểm. Nó tạo ra một
nền tảng phần mềm có thể hoạt động trên rất nhiều robot khác nhau mà không cần sự thay
đổi quá nhiều trong chương trình phần mềm.
ROS được bắt đầu với ý tưởng tạo ra sự thuận tiện là có thể chia sẻ dễ dàng và có thể được
sử dụng lại trên những phần cứng robot khác nhau mà không cần phải xây dựng lại từ đầu.
Việc xây dựng lại từ đầu cho một nền tảng robot riêng biệt sẽ tốn rất nhiều thời gian và
cơng sức; bên cạnh đó, việc ứng dụng lại những thành quả của việc nghiên cứu trước đó
để xây dựng những thuật toán cao hơn cũng gặp rất nhiều khó khăn.
Từ những lợi ích của ROS mang lại, những tổ chức nghiên cứu phát triển trên thế giới về
ROS góp phần mang lại nguồn thơng tin dồi dào về cả phần cứng lẫn phần mềm. Trên thế
giới, cũng có rất nhiều công ty và tổ chức đã bắt đầu ứng dụng nền tảng này vào ứng dụng
của họ để tạo ra những sản phẩm có chất lượng tốt hơn. Nhờ vào đó, hiện nay trên thế giới
có rất nhiều thiết bị được hỗ trợ framework này.
Một số robot được chế tạo trên nền tảng ROS
ROS cung cấp, hỗ trợ các dịch vụ (services) như một hệ điều hành như phần cứng trừu
tượng (hardware abstraction), kiểm soát các thiết bị cấp thấp (low-level device control),
thực thi (implementation) các chức năng phổ biến, tin nhắn (message) qua lại giữa các quá
trình, và quản lý gói. Ngồi ra, nó cũng cung cấp nhiều công cụ và thư viện cho việc tham
khảo, biên dịch, viết và chạy chương trình trên nhiều máy khác nhau.
Việc chạy các chuỗi quy trình (processes) dựa trên ROS được thể hiện dưới kiến trúc graph,
biểu diễn mối quan hệ của các thành phần trong hệ điều hành.
ROS thực thi một số loại giao tiếp khác nhau như giao tiếp kiểu RPC dạng đồng bộ thông
qua services, truyền dữ liệu bất đồng bộ thông qua topics và lưu trữ dữ liệu trên Parameter
Server.
ROS không phải là một framework thời gian thực, nhưng thơng qua nó ta có thể viết
chương trình thời gian thực.
ROS là một hệ điều hành mã nguồn mở nên thu hút sự quan tâm của cộng đồng, đồng nghĩa
với các công cụ, thư viện sẽ được xây dựng và phát triển phong phú. Hiện nay, mơ hình
robot đã và đang được xây dựng trên hệ điều hành này với nhiều ứng dụng có tính thực
tiễn cao.
Hiện nay, ROS chỉ chạy trên nền tảng Unix. Các phần mềm được chạy trên ROS chủ yếu
được thử nghiệm trên hệ điều hành Ubuntu và Mac OS X. Bên cạnh đó, thơng qua cộng
đồng này, nó cịn đang được xây dựng để hỗ trợ cho các nền tảng khác như Fedora, Gentoo,
Arch Linux và các nền tảng Linux khác.
Chương trình cốt lõi của ROS, các cơng cụ tiện ích và các thư viện cũng được phát hành
các phiên bản mới được gọi là ROS Distribution. Những Distribution này giống như Linux
Distribution và đồng thời cung cấp chuỗi các phần mềm tương thích.
Khi ROS được ứng dụng cho robotic thì khối lượng cơng việc kỹ thuật cơ bản sẽ giảm, bên
cạnh đó khối lượng công việc dành cho xây dựng hệ thống tăng một cách đáng kể. Do đó,
chúng ta có thể dành thời gian cho việc nghiên cứu các ứng dụng chuyên sâu, đạt hàm
lượng khoa học cao hơn trong dự án.
2. Cấu trúc của ROS
Kiến trúc ROS có ba cấp khái niệm: Filesystem, Computation Graph và Community.
Cấp thứ nhất – Filesystem: giải thích về các dạng hình thức bên trong, cấu trúc thư mục và
các tập tin tối thiểu để ROS hoạt động. Nó chủ yếu là các tài nguyên của ROS và được thực
hiện trên đĩa cứng.
Cấp thứ hai – Computation Graph: nơi giao tiếp giữa các quá trình và hệ thống. Trong cấp
khái niệm này, ta sẽ phải thiết lập hệ thống, quản lý các quá trình, giao tiếp giữa nhiều máy
tính với nhau,...
Cấp thứ ba – Community: giải thích/ hướng dẫn các công cụ và các khái niệm để chia sẻ
kiến thức, thuật tốn chương trình từ bất kỳ nhà phát triển nào. Đây là cấp độ quan trọng
vì nó ảnh hưởng đến sự phát triển lớn mạnh của cộng đồng ROS.
2.1. ROS Filesystem Level
Filesystem chủ yếu là các nguồn tài nguyên ROS được thực thi trên bộ nhớ lưu trữ hệ
thống, bao gồm:
Packages: là đơn vị chính để tổ chức phần mềm trên ROS. Một package có thể chứa các
nodes (ROS runtime processes), các thư viện đặc thù của ROS, các file cài đặt hoặc bất cứ
file nào cho việc tổ chức.
Mục đích của package là để tạo ra tập hợp chương trình có kích thước nhỏ nhất để có thể
dễ dàng sử dụng lại.
Cấu trúc package trong ROS
Metapackages: là một package chuyên biệt, dùng để phục vụ cho việc thể hiện mối quan
hệ một nhóm các package khác với nhau. Metapackage thường được dùng như nơi để giữ
các tương thích ngược cho việc chuyển đổi sang rosbuild Stacks.
Package Manifests: là một bảng mô tả về một package như tên, version, mô tả, thông tin
license, …Manifests được quản lý bởi một file tên là manifests.xml.
Stacks: khi chúng ta kết hợp các package với nhau với một vài chức năng thì được gọi là
Stack. Trong ROS, có rất nhiều stack với cơng dụng khác nhau. Tương tự Package, nơi
chứa thông tin về stack gọi là Stack Manifests.
Mục tiêu của việc dùng Stack là để đơn giản hóa cho q trình chia sẻ chương trình ứng
dụng.
Cấu trúc Stack trong ROS
Message types: là mô tả của một thông điệp được gửi qua lại giữa các quá trình, được lưu
trữ dưới dạng my_package/msg/MyMessageType.msg. Message định nghĩa cấu trúc dữ liệu cho
các thông điệp được gửi đi. Trong ROS, có rất nhiều loại message tiêu chuẩn phục vụ cho
q trình giao tiếp giữa các node với nhau. Ngồi ra, ta cũng có thể tự định nghĩa lại một
kiểu message theo nhu cầu sử dụng của chúng ta.
Service types: là mô tả một service, được lưu trữ dưới dạng my_package/msg/MyServiceType.srv. Service định nghĩa cấu trúc dữ liệu request và response giữa các node
trong ROS. Để gọi một service, ta cần phải sử dụng tên của service cùng với tên của
package chứa service đó.
Mơ hình Server – Client trong ROS
2.2. ROS Computation Graph Level
Computation Graph là một mạng nơi các quy trình trong ROS được kết nối với nhau. Bất
kỳ một node nào trong hệ thống cũng có thể truy cập vào mạng này, tương tác với các node
khác, trao đổi các dữ liệu nằm trong mạng. Các khái niệm cơ bản của Computation Graph
là nodes, Master, Parameter Server, messages, services, topics và bags.
Nodes: là một quy trình dùng để tính tốn, điều khiển. Một node có thể được tạo ra khi
biên dịch một package thành cơng và trong cùng một package có thể tạo nhiều node. Khi
một node muốn giao tiếp, tương tác các node khác thì bản thân node đó phải được kết nối
với mạng ROS. Trong một hệ thống, mỗi node sẽ có một chức năng khác nhau.
Để tạo ra sự dễ dàng trong quản lý và chuyên biệt hóa trong một chương trình, chúng ta
nên tạo ra nhiều node với mỗi node có một chức năng riêng biệt; khơng nên để một node
quản lý quá nhiều tác vụ sẽ gây khó khăn trong lập trình và bảo trì.
Master: ROS Master cung cấp một tên đăng ký và tra cứu phần cịn lại của Computation
Graph. Nếu khơng có ROS Master thì các node khơng thể tìm thấy nhau, trao đổi các
message hay gọi các service.
Parameter Server: Parameter Server cho phép dữ liệu được lưu trữ bởi các từ khóa trong
một vị trí trung tâm. Nó là một phần của Master.
Với các biến này, nó có thể được cấu hình các node trong khi nó đang hoạt động hoặc để
thay đổi hoat động của node.
Messages: các node giao tiếp với nhau thông qua messages. Một message đơn giản là một
cấu trúc dữ liệu, bao gồm các trường được định nghĩa như integer, floating point, boolean,
… Messages có thể bao gồm các kiểu cấu trúc và mảng lồng nhau (giống kiểu struct trong
C). Chúng ta cũng có thể tự phát triển kiểu message dựa trên các message chuẩn.
Topics: messages được định tuyến thơng qua hệ thống vận chuyển, trong đó được phân
loại thành publish và subscribe. Một node sẽ gửi một messages bằng việc publishing
message đó lên một topic định trước. Topic chỉ là một cái tên để nhận dạng nội dung của
message. Một node chỉ có thể subscribe một topic có tên và kiểu dữ liệu được khai báo.
Trong cùng một thời điểm, có thể nhiều publishers và subscribers cùng truy cập vơ cùng
một topic, và một node có thể publish và subscribe nhiều topic. Nhìn chung, publishers và
subscriber sẽ khơng thể nhận thức được sự tồn tại của nhau. Ý tưởng xây dựng trao đổi
thông tin ở ROS nhằm tách rời giữa nguồn tạo thông tin và nơi sử dụng thông tin.
Tên của topic phải là duy nhất để tránh các vấn đề và xung đột giữa các topic có cùng tên
với nhau.
Services: mơ hình publish/subscribe thì rất linh hoạt trong việc giao tiếp nhưng đặc điểm
là truyền được đa đối tượng và một chiều. Nhưng đôi khi lại không thích hợp cho việc
truyền theo dạng request/reply, thường được dùng trong kiểu hệ thống phân bổ. Do đó,
việc truyền nhận theo dạng request/reply được dùng thông qua services. Service được định
nghĩa một cặp cấu trúc dữ liệu: một cho request và một cho reply. Một node cung cấp một
service thơng qua một thuộc tính name, và một client sử dụng service bằng việc gửi một
request message và đợi phản hồi.
Tương tự như message, service phải cần có một tên duy nhất trong mạng ROS để tránh
những lỗi không mong muốn xảy ra.
Bags: là một định dạng để lưu trữ và phát lại dữ liệu message ROS. Bags là một cơ chế
quan trọng cho việc lưu trữ dữ liệu; ví dụ như giá trị của các cảm biến rất khó để thu thập
cho sự nghiên cứu, phát triển và kiểm tra thuật tốn. Vì thế việc dùng bags là rất quan trọng
trong việc phát triển robot, đặc biệt là những robot mang tính phức tạp cao.
2.3. ROS Community Level
Các khái niệm về ROS Community Level là các nguồn tài nguyên của ROS được cộng
đồng người dùng trao đổi với nhau về phần mềm và kiến thức. Các nguồn tài nguyên đó
là:
Distributions: là tổng hợp các phiên bản của stack mà chúng ta có thể cài đặt. ROS
Distributions có vai trò tương tự như Linux Distributions.
Một số phiên bản của ROS ở từng giai đoạn khác nhau
Respositories: là nguồn tài nguyên dựa trên cộng đồng mạng lưới các tổ chức khác nhau
phát triển và phát hành những mơ hình riêng của họ.
The ROS Wiki: gồm nhiều tài liệu về ROS. Bất cứ ai cũng có thể chia sẻ tài liệu, cung
cấp các bản cập nhật, viết các bài hướng dẫn,… bằng tài khoản mà họ đã đăng ký.
Tìm hiểu về SLAM
1. Giới thiệu
2. SLAM là gì?
2.1. Khái niệm
Simultaneous Localization And Mapping (SLAM) là công nghệ sử dụng thông tin ảnh thu
được từ camera để tái tạo mơi trường bên ngồi bằng cách đưa thơng tin mơi trường vào
một map (2D hoặc 3D), từ đó thiết bị (robot, camera, xe) có thể định vị (localization) đang
ở đâu, trạng thái, tư thế của nó trong map để tự động thiết lập đường đi (path planning)
trong môi trường hiện tại.
2.2. Lịch sử của SLAM
Đồng thời định vị và tái tạo môi trường (SLAM) là vấn đề được biết đến khá phổ biến với
những ứng dụng liên quan đến điều khiển tự động (bao gồm xe tự hành, các thiết bị robot
thông minh, thiết bị bay tự động). Các cảm biến cung cấp những dữ liệu để xây dựng hình
ảnh xung quanh chúng và vị trí của chúng trong mơi trường đó. Từ đó, thiết bị (robot, xe)
có thể định vị đang ở đâu, trạng thái, tư thế của nó trong mơi trường để tự động tìm đường
đi trong mơi trường hiện tại. Ban đầu hai vấn đề về định vị và tái tạo môi trường được
nghiên cứu độc lập, tuy nhiên khi nhận thấy mối liên quan giữa hai vấn đề này:
● Định vị: cần xác định vị trí hiện tại của thiết bị dựa trên bản đồ tái tạo.
● Tái tạo bản đồ: cần xác định vị trí của đối tượng trong bản đồ để xây dựng bản đồ chính
xác nhất và ít sai số nhất.
Trong giai đoạn 1985 – 1990, Raja Chatila và Jean-Paul Laumond (1985) và Randall Smith
(1990) đã đề xuất gộp hai vấn đề với nhau để nghiên cứu. Một thời gian sau đó, SLAM ra
đời.
2.3. Các loại cảm biến phục vụ cho SLAM
Được chia thành 2 loại:
Cảm biến ngoại vi (exteroceptive sensor): có nhiệm vụ nhận và đo thông tin về các thành
phần ở môi trường xung quanh. Một số cảm biến ngoại vi phổ biến hiện nay:
Cảm biến siêu âm
LiDAR
Cảm biến hình ảnh
- Cảm biến siêu âm là thiết bị sử dụng sóng âm thanh với tần số cao để dị tìm và xác định
vị trí của đối tượng.
- Cảm biến phát hiện ánh sáng và phạm vị (LiDAR) là thiết bị sử dụng tia laser để xác định
khoảng cách đến một đối tượng, phương pháp được sử dụng phổ biến là bắn một chùm tia
laser đến đối tượng và đo thời gian phản xạ lại từ đối tượng về nơi bắn tia laser.
- Cảm biến hình ảnh thu thập hình ảnh từ mơi trường xung quanh.
Cảm biến nội vi (proprioceptive sensor): là những cảm biến giúp cho thiết bị có thể đo
được tốc độ, sự thay đổi vị trí và gia tốc của thiết bị. Một số cảm biến nội vi như
Gyroscope
Encoder
Accelerometers
- Bộ mã hóa vịng quay (encoder) là thiết bị được sử dụng phổ biến trong các hệ thống điều
khiển tự động để báo vận tốc.
- Cảm biến gia tốc (accelerometer) là một thiết bị để đo gia tốc ba chiều x, y, z.
- Con quay hồi chuyển (gyroscope) là thiết bị để đo và duy trì phương hướng.
3. Các bước để xây dựng một hệ thống SLAM
Xây dựng bản đồ: Trong bước này, các kỹ sư cần cho AGV di chuyển thủ công quanh
kho xưởng để lidar quét toàn bộ khu vực và lập bản đồ thơ. Sau đó, bộ tích hợp sẽ xóa các
đối tượng tạm thời hoặc động (chẳng hạn như hộp, pallet, các phương tiện khác, v.v.) khỏi
bản đồ. Kết quả là một bản đồ sạch chỉ bao gồm các đối tượng địa lý tĩnh, vĩnh viễn của
địa điểm, chẳng hạn như tường, cột trụ và máy móc cố định. Tiếp đó là đối sánh tính năng
để lập được một bản đồ hồn chỉnh và chính xác.
Khoanh vùng hoạt động và vẽ bản đồ chi tiết: Sau khi có bản đồ, kỹ sư xác định khu
vực hoạt động cụ thể, những cung đường, những điểm dừng, điểm giao…để AGV có thể
thực hiện được nhiệm vụ.
4. Các ứng dụng thực tế của SLAM
Xe hơi tự động lái
Các tập đoàn lớn trên thế giới là GM, Mercedes-Benz, Audi, Nissan, BMW, Renault, Tesla
và Google mong chờ vào năm 2020 sẽ bán ra thị trường xe hơi tự động lái trong một khoảng
thời gian nhất định. Ngày 4/9/2015 Toyota đã chính thức lên tiếng khi đầu tư 50 triệu đô
la Mỹ cho MIT và Stanford để nghiên cứu và phát triển công nghệ mà Toyota gọi là
“Advanced Driving Support”.
Các thiết bị bay tự động
Microdrones md4-1000 (2013, DHL tạo ra với dịch vụ phân phát thuốc), dự kiến đến năm
nay, microdrones md4-3000 sẽ ra mắt. Yuneec H920 Drone được sử dụng để theo dõi quá
trình xây dựng một sân vận động ở Sacramento, California; và phát hiện khu vực nào mà
cơng trình bị chậm tiến độ. Yuneec H920 Drone cũng được NASA sử dụng trong máy bay
không người lái Global Hawk để theo dõi thời tiết trong mùa bão năm nay.
PrimeAir của Amazon
Drone được sử dụng để giao hàng.
Project Tango của Google
Đây là project với định hướng xây dựng hệ thống SLAM trên Tablet và trên smartphone,
tái tạo mơi trường 3 chiều bên ngồi một cách chân thực nhất.
Dự án ra đời nhằm xây dựng các ứng dụng dựa trên mơ hình này: tạo project game 3 chiều
thực tại tăng cường, hỗ trợ người khiếm thị, hỗ trợ các thiết bị cần hệ thống SLAM cho
những mục đích kế tiếp.
Các ứng dụng khác
Thiết bị thám hiểm không gian được đưa lên đến hành tinh khác từ tàu vũ trụ.
Robot giúp việc nhà: lau nhà (iRobot Roomba Robotic Vacuum), nấu ăn.
Robot giúp người khiếm thị di chuyển dễ dàng hơn.