2. Nodes and Topics trong ROS

Cách sử dụng các Nodes và Topics trong ROS

Một hệ thống ROS bao gồm rất nhiều nút (node) độc lập giao tiếp với nhau qua việc nhắn (publish) và nhận (subscibe) các tin nhắn (messages) thông qua một chủ đề nào đó (topic). Ví dụ, bạn có một con cảm biến siêu âm, và bạn viết một chương trình driver để tạo một ROS node siêu âm, node siêu âm này sẽ thực hiện gửi liên tục các messages mang nội dung là "giá trị đo được: 0.3 m" qua một topic là "/khoảng cách" đến một node khác tên là controller. Các thông số khoảng cách này có thể được sử dụng bởi bất kỳ số lượng các node khác, bao gồm bộ lọc, logger và các hệ thống cấp cao hơn như hướng dẫn, tìm đường, v.v.

Mỗi Node trong ROS phải chịu trách nhiệm cho một mục đích mô-đun duy nhất (ví dụ: một nút để điều khiển động cơ bánh xe, một nút để điều khiển công cụ tìm phạm vi laser, v.v.). Mỗi nút có thể gửi và nhận dữ liệu đến các nút khác thông qua Topic, Service, Action hoặc Parameters. Một hệ thống rô bốt đầy đủ bao gồm nhiều nút hoạt động cùng lúc. Trong ROS, một tệp thực thi duy nhất (chương trình C ++, chương trình Python, v.v.) có thể chứa một hoặc nhiều nút. Các bạn có thể tham khảo hình bên dưới để hiểu cách thức vận hành của các Nodes cơ bản trong ROS.

1. Bài thí nghiệm cơ bản để hiểu ROS

1.1. ROS Master.

ROSMaster hoạt động như một máy chủ định danh cho các kết nối từ nút tới nút và giao tiếp thông báo. Khởi tạo ROSMaster bằng lệnh bên dưới.

$ roscore 
  • ... logging to ~/.ros/log/9cf88ce4-b14d-11df-8a75-00251148e8cf/roslaunch-machine_name-13039.log
    Checking log directory for disk usage. This may take awhile.
    Press Ctrl-C to interrupt
    Done checking log file disk usage. Usage is <1GB.
    
    started roslaunch server http://machine_name:33919/
    ros_comm version 1.4.7
    
    SUMMARY
    ======
    
    PARAMETERS
     * /rosversion
     * /rosdistro
    
    NODES
    
    auto-starting new master
    process[master]: started with pid [13054]
    ROS_MASTER_URI=http://machine_name:11311/
    
    setting /run_id to 9cf88ce4-b14d-11df-8a75-00251148e8cf
    process[rosout-1]: started with pid [13067]
    started core service [/rosout]

1.2 ROS Node

Một Node đề cập đến đơn vị nhỏ nhất của bộ xử lý chạy trong ROS. Hãy coi nó như một chương trình thực thi. ROS khuyên bạn nên tạo một Node duy nhất cho mỗi mục đích và nên phát triển để dễ dàng sử dụng lại. Để chạy Node, chúng ta có thể sử dụng lệnh sau:

$ rosrun <package_name> <node_name>

1.3 Chạy ROS Node cơ bản

Trong ví dụ này chúng ta sẽ chạy ROS Node Turtlesim để hiểu khái niệm vận hành cơ bản của ROS. Đầu tiên ta khởi tạo turtlesim_node bằng dòng lệnh dưới đây:

 rosrun turtlesim turtlesim_node 

Sau đó ta có thể điều khiển turtlesim bằng cách điều khiển bằng bàn phím, các bạn chạy dòng lệnh dưới đây:

rosrun turtlesim turtle_teleop_key 

Các bạn sẽ thấy turtlesim di chuyển khi bạn bấm các dấu mũi tên trên bàn phím ⬅️⬇️⬆️➡️. Video minh họa bên dưới:

2. ROS Topic

Các turtlesim_node và nút turtle_teleop_key đang giao tiếp với nhau qua một ROS Topic. Turtle_teleop_key đang publish topic khi chúng ta nhấn phím, trong khi turtlesim subscribe topic lúc chúng ta nhấn phím. Hãy sử dụng rqt_graph để hiển thị các nút và chủ đề hiện đang chạy.

2.1 Dùng rqt_graph

$ sudo apt-get install ros-<distro>-rqt
$ sudo apt-get install ros-<distro>-rqt-common-plugins

Chạy lệnh rqt_graph để hiển thị các node và topic đang chạy trên máy.

$ rqt_graph

2.2 Các lệnh của ROS Topic

Công cụ rostopic cho phép bạn lấy thông tin về các chủ đề ROS. Bạn có thể sử dụng tùy chọn trợ giúp để lấy các lệnh khác trong rostopic.

$ rostopic -h
rostopic bw     display bandwidth used by topic
rostopic echo   print messages to screen
rostopic hz     display publishing rate of topic
rostopic list   print information about active topics
rostopic pub    publish data to topic
rostopic type   print topic type

Hoặc nhấn phím TAB sau khi lệnh rostopic in các lệnh có thể có:

$ rostopic
bw    echo  find  hz    info  list  pub   type

Chúng ta hãy sử dụng một số các lệnh con (sub-commands) của chủ đề để kiểm tra turtlesim.

2.3 Rostopic echo

rostopic echo cho thấy dữ liệu xuất bản trên một chủ đề.

rostopic echo [topic]

Chúng ta hãy nhìn vào lệnh dữ liệu vận tốc publish bởi nút turtle_teleop_key. Dữ liệu này được xuất bản trên topic /turtle1 /cmd_vel.

$ rostopic echo /turtle1/cmd_vel

Bạn có lẽ sẽ không thấy bất cứ điều gì xảy ra vì không có dữ liệu đang được publish. Hãy làm cho turtle_teleop_key publish dữ liệu bằng cách nhấn các phím mũi tên. Hãy nhớ nếu con rùa không di chuyển, bạn cần phải chọn lại terminal turtle_teleop_key.

linear:
  x: 2.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0
---
linear:
  x: 2.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0
---

2.4 Rostopic list

rostopic list trả về một danh sách tất cả các chủ đề hiện đang đăng ký và xuất bản. Chúng ta hãy tìm ra các đối số cần trong danh sách lệnh. Trong một terminal chạy:

$ rostopic list -h
Usage: rostopic list [/topic]

Options:
  -h, --help            show this help message and exit
  -b BAGFILE, --bag=BAGFILE
                        list topics in .bag file
  -v, --verbose         list full details about each topic
  -p                    list only publishers
  -s                    list only subscribers

Cho rostopic list dùng lựa chọn verbose. Các bạn sẽ thấy các topic hiện có hiện ra trên terminal.

$ rostopic list -v
Published topics:
 * /turtle1/color_sensor [turtlesim/Color] 1 publisher
 * /turtle1/command_velocity [turtlesim/Velocity] 1 publisher
 * /rosout [roslib/Log] 2 publishers
 * /rosout_agg [roslib/Log] 1 publisher
 * /turtle1/pose [turtlesim/Pose] 1 publisher

Subscribed topics:
 * /turtle1/command_velocity [turtlesim/Velocity] 1 subscriber
 * /rosout [roslib/Log] 1 subscriber

Toàn bộ tài liệu được Robotlab.vn biên soạn vì mục đích giáo dục và đang trong quá trình hoàn thiện. Các bạn có thể tham gia các khóa học Online về lập trình robot, ROS tại địa chỉ: www.robotlab.vn Nếu có sai sót các bạn hãy liên hệ qua địa chỉ email sau: robotlab.vn@gmail.com. Nếu bạn thấy nội dung này hữu ích với bạn xin bạn hãy like, share các bài viết này và thích trang: https://www.facebook.com/RobotLab.vn các bạn nhé. Mọi đóng góp của các bạn là động viên lớn đối với chúng tôi. Bản quyền bài viết thuộc về robotlab.vn mọi hành vi sao chép phải được sự cho phép của tác giả. Xin trân trọng cảm ơn.

Last updated