Báo cáo đồ án i đề tài nghiên cứu ros robot operating system

Báo cáo đồ án ROS: Tìm hiểu hệ điều hành robot ROS (Robot Operating System) qua đề tài nghiên cứu chi tiết. Phân tích, ứng dụng và kết quả thực nghiệm.

Trường đại học

Đại học Bách Khoa Hà Nội

Chuyên ngành

Điện - Điện tử

Người đăng

Ẩn danh

Thể loại

Báo cáo đồ án

2022

41
7
0

Phí lưu trữ

30 Point

Mục lục chi tiết

LỜI NÓI ĐẦU

I. CHƯƠNG I: TỔNG QUAN VỀ HỆ ĐIỀU HÀNH DÀNH CHO ROBOT – ROS

I.1. Thuật ngữ sử dụng trong ROS

II. CHƯƠNG II: ROBOT OPERATING SYSTEM (ROS)

II.1. Cài đặt ROS noetic và ubuntu 20

II.2. Packages & xây dựng một package

II.2.1. Giới thiệu packages

II.2.2. Tạo một package và xây dựng 2 nodes

III. CHƯƠNG III: SLAM

III.1. Triển khai Slam trong ROS

III.1.1. Kết nối với Rplidar

III.1.2. Khởi tạo gói Rplidar_ros

III.1.3. Khởi chạy Rplidar

IV. CHƯƠNG IV: NAVIGATION

IV.1. Tổng quan về Navigation

IV.1.1. Tổng quan về Navigation stack

Tóm tắt

I. Tổng Quan Về ROS Robot Operating System Giới Thiệu Chi Tiết

ROS (Robot Operating System) là một framework mã nguồn mở, đóng vai trò như một hệ điều hành cho robot, được sử dụng rộng rãi trong lĩnh vực robot học. Ưu điểm chính của ROS là khả năng tạo ra một nền tảng phần mềm linh hoạt, hoạt động trên nhiều loại robot khác nhau mà không cần thay đổi nhiều về mã nguồn. ROS ra đời với mục tiêu chia sẻ và tái sử dụng mã nguồn một cách dễ dàng trên các phần cứng robot khác nhau, thay vì xây dựng lại mọi thứ từ đầu cho từng nền tảng. Việc xây dựng nền tảng robot riêng biệt tốn nhiều thời gian và công sức, đồng thời gây khó khăn trong việc ứng dụng các thành quả nghiên cứu trước đó để xây dựng các thuật toán cao cấp hơn.

Nhờ những lợi ích mà ROS mang lại, các tổ chức nghiên cứu và phát triển trên thế giới đã đóng góp vào việc xây dựng một nguồn thông tin dồi dào về cả phần cứng lẫn phần mềm. Nhiều công ty và tổ chức đã bắt đầu ứng dụng ROS vào sản phẩm của họ, tạo ra các sản phẩm chất lượng cao. Hiện nay, nhiều thiết bị trên thế giới hỗ trợ framework này.

ROS cung cấp các dịch vụ tương tự như một hệ điều hành, bao gồm phần cứng trừu tượng, kiểm soát thiết bị cấp thấp, thực thi các chức năng phổ biến, truyền thông điệp giữa các tiến trình và quản lý gói. Nó cũng cung cấp các 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. Các chuỗi quy trình trong ROS được thể hiện dưới dạng kiến trúc graph, biểu diễn mối quan hệ giữa các thành phần trong hệ điều hành. ROS hỗ trợ giao tiếp RPC đồ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. Mặc dù không phải là một framework thời gian thực, ROS cho phép viết chương trình thời gian thực. ROS là một hệ điều hành mã nguồn mở thu hút sự quan tâm của cộng đồng, dẫn đến sự phát triển phong phú của các công cụ và thư viện. Hiện nay, nhiều mô hình robot đang được xây dựng trên hệ điều hành này với nhiều ứng dụng thực tiễn cao.

Hiện tại, ROS chỉ chạy trên nền tảng Unix. Các phần mềm chạy trên ROS chủ yếu được thử nghiệm trên Ubuntu và Mac OS X. Cộng đồng đang nỗ lực để hỗ trợ các nền tảng khác như Fedora, Gentoo, Arch Linux và các nền tảng Linux khác. Các phiên bản mới của chương trình cốt lõi, công cụ tiện ích và thư viện của ROS được phát hành dưới dạng ROS Distribution, tương tự như Linux Distribution, cung cấp một chuỗi các phần mềm tương thích. Khi ROS được ứng dụng cho robot học, khối lượng công việc kỹ thuật cơ bản giảm, cho phép tập trung vào các ứng dụng chuyên sâu và đạt hàm lượng khoa học cao hơn trong dự án.

1.1. Master Node Package Thành Phần Cốt Lõi ROS Robot OS

Trong ROS, Master đóng vai trò trung tâm, kết nối các node và quản lý luồng thông tin. Lệnh <roscore> khởi động Master, sử dụng XMLRPC để giao tiếp với các node. Mỗi node, là một đơn vị nhỏ nhất thực hiện một chức năng cụ thể, cần thông tin như tên, kiểu message, địa chỉ URI và cổng. Node có thể là publisher, subscriber, service server hoặc service client, giao tiếp qua topicsservices.

Package là một đơn vị cơ bản chứa các file cấu hình và node để thực thi chức năng. Nó bao gồm các thư mục như config, include, scripts, src, launch, msg, srv, action và các file package.xml (chứa thông tin về package) và CMakeLists.txt (hướng dẫn tạo các folder, executables, dependencies). Để tạo một package, sử dụng lệnh catkin_create_pkg package_name dependences và sau đó catkin_make để xây dựng workspace.

1.2. Topics Messages và Services Cơ Chế Giao Tiếp ROS Robot OS

Topics là chủ đề giao tiếp giữa các node. Các node giao tiếp với nhau nếu chúng có cùng topic. Các lệnh rostopic được sử dụng để thao tác với topics, ví dụ: rostopic echo để in message ra màn hình, rostopic pub để publish data lên topic.

Message là nội dung thông tin, dữ liệu trao đổi giữa các node. Có nhiều kiểu message khác nhau, được thực hiện trên các biến cơ bản như int, boolean, string. PublishSubscriber là hai thuật ngữ mô tả vai trò của node: publisher truyền thông tin, subscriber nhận thông tin. Một node có thể vừa là publisher vừa là subscriber.

Service là giao tiếp đồng bộ hai chiều giữa service clientservice server. Service server tiếp nhận yêu cầu từ service client và hồi đáp lại. Action là một phương pháp giao tiếp đồng bộ hai chiều, thường được sử dụng cho các quá trình phản hồi diễn ra lâu, yêu cầu phản hồi liên tục cho đến khi kết quả được trả về.

1.3. ROS Launch và Bag Tiện Ích Quan Trọng Trong ROS Robot OS

Roslaunch cho phép thực thi nhiều node cùng lúc, thiết lập các tham số, định nghĩa thiết bị, remap tên, thi hành các file launch khác, chỉ định biến môi trường và gộp nhóm các phần tử chia sẻ namespace. Roslaunch giúp đơn giản hóa việc khởi động và quản lý hệ thống ROS phức tạp.

Bag 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, đặc biệt là giá trị của các cảm biến, phục vụ cho việc nghiên cứu, phát triển và kiểm tra thuật toán. Việc sử 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. Lệnh để lưu trữ dữ liệu bằng file bag là rosbag record -O my_data /topic1 /topic2.

II. Hướng Dẫn Cài Đặt ROS Noetic Trên Ubuntu 20

Để cài đặt ROS Noetic trên Ubuntu 20.04, cần thực hiện theo các bước sau. Đầu tiên, cài đặt Ubuntu 20.04 bằng cách tải về từ trang web chính thức và cài đặt song song với Windows hoặc cài đặt trên máy ảo. Sau khi cài đặt xong, mở terminal và thực hiện các lệnh sau:

  1. Thiết lập máy tính để chấp nhận phần mềm từ packages.ros.org: sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list'
  2. Thiết lập key: sudo apt install curl (nếu chưa cài đặt) curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
  3. Cài đặt: sudo apt update sudo apt install ros-noetic-desktop-full
  4. Thiết lập môi trường: echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc
  5. Cài đặt các phụ thuộc để xây dựng các gói: sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential sudo apt install python3-rosdep sudo rosdep init rosdep update

Nếu cài đặt thành công, mở cửa sổ terminal mới và thực hiện lệnh <roscore>, giao diện sẽ hiển thị thông tin về ROS Master. Sau khi cài đặt xong có thể tạo một workspace catkin bằng các lệnh: mkdir -p ~/catkin_ws/src, cd ~/catkin_ws/, catkin_make.

2.1. Packages ROS Cấu Trúc và Các Thành Phần Quan Trọng

Packages trong ROS được tổ chức theo một cấu trúc thư mục nhất định. Thư mục config chứa các file cấu hình của package. Thư mục include chứa các header và thư viện. Thư mục scripts chứa các file Python (.py). Thư mục launch chứa các file launch để chạy một hoặc nhiều node. Thư mục msg chứa các file message tự tạo (.msg). Thư mục srv chứa các file service (.srv).

File package.xml chứa các khai báo của package, mô tả các thành phần và các phụ thuộc. File CMakeLists.txt là CMake file của package, hướng dẫn máy tính tạo các folder, executables, dependencies và target libraries.

2.2. Hướng Dẫn Chi Tiết Tạo Package ROS và Xây Dựng 2 Nodes Python

Để tạo một package và xây dựng 2 node bằng Python, thực hiện các bước sau:

  1. Mở terminal và di chuyển đến thư mục src của catkin workspace: cd ~/catkin_ws/src
  2. Tạo package với tên hello_world và các gói phụ thuộc std_msgs rospy: catkin_create_pkg hello_world std_msgs rospy
  3. Di chuyển vào package vừa tạo: cd ~/catkin_ws/src/hello_world
  4. Tạo thư mục scripts để chứa các file Python: mkdir scripts
  5. Di chuyển vào thư mục scripts: cd ~/catkin_ws/src/hello_world/scripts
  6. Tạo hai file Python hello_world_publisher.pyhello_world_subscriber.py: touch hello_world_publisher.py touch hello_world_subscriber.py
  7. Mở hai file và viết code Python cho publishersubscriber.
  8. Cấp quyền thực thi cho 2 node vừa tạo bằng lệnh: chmod +x hello_world_publisher.py chmod +x hello_world_subscriber.py
  9. Biên dịch lại workspace: cd ~/catkin_wscatkin_make.
  10. Nguồn workspace: source devel/setup.bash.
  11. Chạy roscore và chạy hai node bằng lệnh rosrun hello_world hello_world_publisher.pyrosrun hello_world hello_world_subscriber.py.

III. SLAM Trong ROS Tổng Quan Thực Hiện và Ứng Dụng Gmapping

SLAM (Simultaneous Localization and Mapping) là kỹ thuật đồng thời tạo bản đồ môi trường và xác định vị trí của robot. SLAM được ứng dụng rộng rãi trong robot học di động. Trong khi di chuyển, các phép đo và bản địa hóa thay đổi liên tục, để tạo bản đồ, cần hợp nhất các phép đo từ các vị trí trước đó. Vấn đề SLAM được xác định bởi các giá trị điều khiển robot u, bản đồ môi trường m, quỹ đạo robot x. Ước tính quỹ đạo của robot được xác định với công thức p (x 0: t , m | z 1: t , u 1: t ).

Tf được sử dụng để xuất bản mối quan hệ giữa cơ sở robot và máy quét laser bằng lệnh rosrun tf static_transform_publisher 0 0 0 3.14 0 0 base_link laser 100. Các tham số trong lệnh này bao gồm trục tịnh tiến xyz (tính bằng mét), trục quay zyx (tính bằng radian), khung mẹ (base_link), khung con (laser) và độ trễ giữa các tin nhắn (mili giây). Có thể sử dụng để điều chỉnh vị trí của Rplidar so với robot.

3.1. Kết Nối RPLIDAR và Khởi Tạo Package RPLIDAR_ROS Trong ROS

Để kết nối với RPLIDAR trong ROS, cần thực hiện các lệnh sau:

  1. Kiểm tra cổng USB kết nối RPLIDAR: ls /dev/tty/USB0
  2. Cấp quyền truy cập cho cổng USB: sudo chmod 777 /dev/tty/USB0

Quyền 777 cho phép tất cả người dùng đọc, ghi và thực thi trên cổng USB. Tuy nhiên, trong môi trường sản xuất, cần cân nhắc các biện pháp bảo mật thích hợp hơn.

Sau khi kết nối RPLIDAR, khởi tạo package RPLIDAR_ROS bằng lệnh: git clone https://github.com/robopeak/rplidar_ros

3.2. Khởi Chạy RPLIDAR Kiểm Tra Cấu Hình và Sử Dụng Gmapping

Để khởi chạy RPLIDAR, thực hiện các bước sau:

  1. Khởi chạy ROS Master: roscore
  2. Khởi chạy catkin workspace: cd catkin_ws && catkin_make
  3. Nguồn workspace: source devel/setup.bash
  4. Khởi chạy RPLIDAR: roslaunch rplidar_ros view_rplidar.launch
  5. Kiểm tra cấu hình RPLIDAR: rostopic list, rostopic echo /scan

Sau khi khởi chạy và kiểm tra cấu hình RPLIDAR, có thể sử dụng Gmapping để tạo bản đồ. Khởi tạo package hector_slam bằng lệnh git clone https://github.com/tu-darmstadt-ros-pkg/hector_slam. Sau đó cần khởi chạy lại catkin: cd catkin_ws && catkin_makesource devel/setup.bash. Chạy Gmapping bằng lệnh roslaunch hector_mapping mapping_default.launch. Sử dụng topic pose để định hướng lidar và di chuyển lidar để quét hết map và lưu map.

IV. Navigation Stack Trong ROS Điều Hướng Robot Tự Động Hiệu Quả

Navigation Stack trong ROS là một hệ thống cho phép robot tự động di chuyển từ vị trí hiện tại đến mục tiêu đã định. Navigation Stack lấy thông tin từ các cảm biến (ví dụ: lidar, camera, odometry) và tạo ra các lệnh vận tốc để điều khiển robot di chuyển. Để sử dụng Navigation Stack, robot cần đang chạy ROS, có cây biến đổi tf và xuất bản dữ liệu cảm biến bằng các loại Message ROS chính xác. Navigation Stack cần được cấu hình để phù hợp với hình dạng và động lực của robot. Thành phần quan trọng của Navigation Stackmove_base, cung cấp giao diện ROS để định cấu hình, chạy và tương tác với Navigation Stack.

Navigation Stack được thiết kế cho cả robot lái bằng hiệu tốc độ (differential drive) và robot có bánh xe đa hướng (holonomic wheeled robots). Nó cần một cảm biến laser scan để xây dựng bản đồ, định vị và phát hiện vật cản. Navigation Stack hoạt động tốt nhất trên robot có hình dạng vuông hoặc tròn, nhưng cũng có thể làm việc trên robot có hình dạng bất kỳ.

4.1. Move_Base và Các Thành Phần Quan Trọng Của Navigation Stack ROS

Nút move_base cung cấp giao diện ROS để định cấu hình, chạy và tương tác với Navigation Stack. Nó bao gồm các thành phần bắt buộc như Global Planner, Local Planner và Recovery Behaviors, cũng như các thành phần tùy chọn như AMCL (Adaptive Monte Carlo Localization) và Map Server.

Robot được cấu hình với move_base sẽ cố gắng đạt được mục tiêu đặt ra với sai số cho phép. Khi gặp vật cản, move_base sẽ thực hiện các hành vi khôi phục, ví dụ như xóa các chướng ngại vật bên ngoài khu vực chỉ định, xoay tại chỗ để dọn sạch không gian, hoặc xóa mạnh hơn bản đồ để loại bỏ tất cả các chướng ngại vật. Nếu tất cả các hành vi khôi phục không thành công, robot sẽ coi mục tiêu là không khả thi.

4.2. API Hành Động và Các Topics Quan Trọng Trong Navigation Stack ROS

Nút move_base cung cấp một triển khai SimpleActionServer, nhận các mục tiêu chứa các message geometry_msgs/PoseStamped. Để gửi mục tiêu đến move_base và theo dõi trạng thái của chúng, nên sử dụng SimpleActionClient. Các topics đã đăng ký bao gồm move_base/goal (mục tiêu để move_base) và move_base/cancel (yêu cầu hủy bỏ mục tiêu).

Các topics đã xuất bản bao gồm move_base/feedback (thông tin phản hồi chứa vị trí hiện tại của robot), move_base/status (thông tin trạng thái về các mục tiêu) và move_base/result (kết quả của hành động move_base). Topic move_base_simple/goal cung cấp giao diện không hành động cho move_base cho người dùng không quan tâm đến việc theo dõi trạng thái thực hiện các mục tiêu. Topic cmd_vel là một dòng lệnh vận tốc được thực hiện bởi robot.

4.3. Hướng Dẫn Tải Turtlebot3 và Mô Phỏng Trên Gazebo Trong ROS

Để tải Turtlebot3 và mô phỏng trên Gazebo, thực hiện các lệnh sau:

  1. sudo apt-get install ros-noetic-joy
  2. cd ~/catkin_ws/src
  3. git clone -b melodic-devel https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
  4. git clone -b melodic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git
  5. cd ~/catkin_ws && catkin_make
  6. cd ~/catkin_ws/src
  7. git clone -b melodic-devel https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
  8. cd ~/catkin_ws && catkin_make

Sau khi tải Turtlebot3 về, có thể chọn một stage có sẵn trong thư mục turtlebot3_simulations/turtlebot3_gazebo/launch để mô phỏng. Ví dụ, để chạy stage_3, thực hiện lệnh export TURTLEBOT3_MODEL=burgerroslaunch turtlebot3_gazebo turtlebot3_stage_3.launch.

V. Hướng Dẫn Tạo Map Cho Turtlebot3 Sử Dụng Gmapping Trong ROS

Để tạo bản đồ cho Turtlebot3 bằng Gmapping, thực hiện các bước sau:

  1. Khởi chạy Gazebo với Turtlebot3: export TURTLEBOT3_MODEL=burger roslaunch turtlebot3_gazebo turtlebot3_stage_3.launch
  2. Cho phép điều khiển Turtlebot3 bằng bàn phím: export TURTLEBOT3_MODEL=burger roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
  3. Chạy Gmapping: export TURTLEBOT3_MODEL=burger roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=gmapping

Sử dụng các phím điều khiển để di chuyển Turtlebot3 và quét môi trường. Sau khi quét xong, lưu bản đồ bằng lệnh rosrun map_server map_saver -f ~/Desktop/stage_3.

5.1. Sửa Lỗi Gmapping Trên Noetic

Trong quá trình sử dụng có thể bị lỗi sau đây nên không thể in ra dạng của bản đồ ra màn hình. Để sửa lỗi này bật terminal và gõ lệnh sau đây: sudo apt-get install ros-noetic-gmapping Sau khi thực hiện lệnh thì gõ lại những lệnh trên màn hình sẽ hiển thị

  • Tiếp theo mở 1 terminal khác và gõ các lệnh sau để cho phép điều khiển robot bằng bàn phím : export TURTLEBOT3_MODEL=burger roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
  • Mở 1 terminal khác và chạy lệnh sau để chạy gmapping: export TURTLEBOT3_MODEL=burger roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=gmapping
15/09/2025

Trích đoạn nội dung tài liệu

CHƯƠNG I. 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.1 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 abtraction), 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.

Ngoà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. 3 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. Thuật ngữ sử dụng trong ROS ➢ Master - Master hoạt động như một máy chủ có chức năng kết nối giữa các node và" đường dẫn" trong truyền thông tin tức. - Câu lệnh để thi hành Master là: <roscore> - Master giao tiếp với các slavers bằng việc sử dụng XMLRPC ( XML- Remote Procedure Call), là một tính năng truyền tải dữ liệu của Wordpress. Khi thao tác với master, nó sẽ được cấu hình với địa chỉ URI và một cổng được cấu hình trong ROS_MASTER_URI.

Mặc định, địa chỉ URI chính là địa chỉ IP của máy, còn cổng được đặt là 11311. ➢Node 4 - Node là một phần tử nhỏ nhất trong ROS, nó thường được xem như một chương trình để thực thi một chức năng hoặc một nhiệm vụ nào đó. - Để một node có thể hoạt động, nó phải có các thông tin cơ bản như: tên, kiểu message, địa chỉ URI, cổng. Node có thể đóng vai trò như publisher, subscriber, service server hoặc service client.

tùy thuộc vào thông tin mà nó đăng ký lên master. Các nodes có thể giao tiếp với nhau bằng cách sử dụng topics và services. - Node sử dụng XMLRPC khi giao tiếp với master và sử dụng XMLRCP hoặc TCPROS của giao thức TCP/IP khi giao tiếp với các nodes khác. ➢ Package - Package là một phần tử cơ bản trong ROS.

Trong package chứa các file cấu hình, các nodes. và nó có chức năng thi hành các node đó. - Package chứa nhiều files cần thiết cho việc thi hành package, các gói, thư viện, các phụ thuộc. - Cách tạo ra một gói: <catkin_create_pkg package_name dependences> - Sau khi tạo xong một gói, cần phải catkin_make lại workspace: <catkin_make> ➢Metapackage - 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. Ví dụ như: Navigation chứa 10 packages bao gồm ACML, DWA, EKF và map_server. ➢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. ➢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.1 Mục tiêu của việc dùng Stack là để đơn giản hóa cho quá trình chia sẻ chương trình ứng dụng. ➢Message types: là mô tả của một thông điệp được gửi qua lại giữ các quá trình, được lưu trữ dưới dạng my_package/msg/MyMessageType. 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 quá trình giao tiếp giữa các node với nhau. Ngoà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. 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 đó. ➢Message - Message chính là nội dung thông tin, dữ liệu trao đổi giữa các nodes. Có rất nhiều kiểu message khác nhau được thực hiện trên các biến cơ bản như int, boolean, string. 6 - Message là một "bó" dữ liệu để trao đổi giữa các nodes.

Các topics, service, action đều sử dụng message để giao tiếp. Cấu trúc của một kiểu message như sau: fieldtype1 fieldname1 fieldtype2 fieldname2 fieldtype3 fieldname3 Ví dụ: int32 x int32 y ➢Topic - Topic là chủ đề để các nodes có thể giao tiếp được với nhau. Bởi vì trong một hệ thống của chúng ta có rất nhiều nodes, các nodes giao tiếp được với nhau nếu chúng có cùng topic. - Thao tác với topic: $ rostopic bw: display bandwidth used by topic.

$ rostopic delay: display delay for topic which has header. $ rostopic echo: print messages to screen. $ rostopic find: find topics by type. $ rostopic hz: display publishing rate of topic.

$ rostopic info: print information about active topic. $ rostopic list: print information about active topics. $ rostopic pub: publish data to topic. $ rostopic type: print topic type.

➢Publish và Subscriber - Đây là hai thuật ngữ dùng để cho biết đâu là node truyền thông tin và đâu là node nhận thông tin. Một node vừa có thể truyền thông tin và vừa có thể nhận thông tin. Sử dụng Publish để truyền thông tin tới Master và Subcriber để nhận thông tin từ Master. ➢Service - Service là một giao tiếp đồng bộ 2 chiều giữa dịch vụ máy khách (service client) và dịch vụ máy chủ (service server).

- Ros wiki hướng dẫn cụ thể cách viết một service client và service server. - Service server: là một server trong dịch vụ giao tiếp tin nhắn. Nó tiếp nhận các yêu cầu từ dịch vụ máy khách và hồi đáp lại yêu cầu đó. Nó được thi hành trong node mà nhận được và thi hành một yêu cầu.

- Service client: là một client trong dịch vụ giao tiếp tin nhắn. Nó gửi yêu cầu tới 7 server và sau đó nhận hồi đáp. ➢Action - Action là một phương pháp giao tiếp đồng bộ hai chiều. Nó được thực hiện khi mà quá trình phản hồi diến ra lâu, khi thực hiện action thì phản hồi sẽ được yêu cầu liên tục cho đến khi kết quả được trả về.

- Cấu trúc của một file action giống với service. Tuy nhiên, phần phản hồi dữ liệu cho sự hồi đáp ngay lập tức được thêm vào cùng với dữ liệu đích và kết quả, cái mà được mô tả như yêu cầu và hổi đáp ở service. - Action server: phụ trách việc nhận mục tiêu từ client sau đó đáp trả lại với phản hồi và kết quả. - Action client: phụ trách việc truyền mục tiêu tới server và nhận lại kết quả và phản hồi như là đầu vào từ action server.org hướng dẫn đầy đủ cách tạo và sử dụng Action server cũng như action client.

➢ROS launch Roslaunch được tạo ra để : - Thi hành nhiều nodes một lúc. Ví dụ: <node name="listener1" pkg="rospy_tutorials" type="listener.py" args="—test> - Set các tham số. Ví dụ: <param name="publish_frequency" type="double" value="10.0" /> - Định nghĩa một thiết bị để sử dụng cho việc thi hành. Ví dụ: <launch> <machine name="foo" address="foo-address" ros-root="/u/user/ros/ros/" ro <env name="LUCKY_NUMBER" value="13" /> </machine> <node machine="foo" name="footalker" pkg="test_ros" type="talker.py" /> </launch> - Định nghĩa tên một remap.

Ví dụ: <remap from="/different_topic" to="/needed_topic"/> - Thi hành các file launch khác thông qua <include> - Định nghĩa các tham số. Thông qua <arg> - Chỉ định biến môi trường cho node thi hành. Thông qua <env> - Gộp nhóm các phần tử mà chia sẻ một namespace hoặc remap. Thông qua 8 <group> ➢Bag - 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 toá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. Cách lưu trữ dữ liệu bằng file bag: http://wiki./Recording%20and%20playing%20back.2 Quan hệ giữa các node trong ROS Hình 2.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ