Hướng dẫn các câu lệnh cơ bản với topic trong ROS2 – ROS Vietnamese Tutorial

Hướng dẫn các câu lệnh cơ bản với topic trong ROS2 – ROS Vietnamese Tutorial

This tutorial is created by RA 018 Tung

Rosbotics Ambassador Program https://www.theconstruct.ai/rosbotics-ambassador/)

Chào các bạn. Trong bài viết này, mình sẽ hướng dẫn các bạn sử dụng các câu lệnh cơ bản với topic trong ROS2 sử dụng nền tảng The Construct.

Nguồn tham khảo:

  1. Nền tảng học ROS trực tuyến The Construct
  2. Khóa học ROS2 (Python): ROS2 Basics in 5 Days

Liệt kê các topic đang hoạt động

Để liệt kê tất cả các topic đang hoạt động, ta sử dụng câu lệnh sau:

ros2 topic list

Để tìm kiếm một topic cụ thể, chúng ta sử dụng thêm lệnh grep như khi sử dụng Terminal bình thường:

ros2 topic list | grep cmd_vel

Xem thông tin chi tiết về một topic

Để xem thông tin chi tiết về một topic nào đó, các bạn có thể sử dụng lệnh info. Ví dụ mình sẽ sử dụng lệnh info để xem thông tin của topic cmd_vel vừa được liệt kê ở trong phần trước:

ros2 topic info /cmd_vel

Thông tin về topic sẽ được hiển thị trên Terminal bao gồm các trường như sau:

  • Type: kiểu dữ liệu của topic
  • Publisher count: số lượng publisher đang hoạt động được kết nối tới topic
  • Subscription count: số lượng subscriber đang hoạt động được kết nối tới topic

Tương tự như vậy, các bạn có thể xem thông tin về bất cứ topic nào mà mình quan tâm. Ví dụ như topic /scan là dữ liệu mà lidar trên robot quét, topic /camera/image_raw là dữ liệu hình ảnh mà camera nhận được:

ros2 topic info /scan
ros2 topic info /camera/image_raw

Các bạn cũng có thể xem trực tiếp dữ liệu nào đang được lưu truyền trên topic bằng lệnh echo. Mình sẽ lấy ví dụ về topic cmd_vel ở trên:

ros2 topic echo /cmd_vel

Không có gì xuất hiện, các bạn có thấy gì kì lạ không?

Các bạn không thao tác nhầm ở đâu đâu. Terminal không xuất hiện gì cả vì hiện tại đang không có dữ liệu nào lưu hành trên topic này. Các bạn sẽ được hướng dẫn cách gửi dữ liệu lên topic trong phần dưới đây.

Xuất bản (Publish) dữ liệu lên một topic

Như các bạn thấy thì hiện tại topic /cmd_vel đang không có dữ liệu nào cả. Vì vậy, chúng ta sẽ tiếp tục tìm hiểu cách gửi dữ liệu, hay là publish dữ liệu lên một topic.

Để publish dữ liệu lên một topic, chúng ta cần biết kiểu dữ liệu của topic đó trước. Sử dụng lệnh sau để xem lại kiểu dữ liệu mà topic /cmd_vel sử dụng:

ros2 topic info /cmd_vel

Theo kết quả hiển thị trên Terminal, kiểu dữ liệu của /cmd_velgeometry_msgs/msg/Twist. Chúng ta cùng xem một message loại này thì gồm những thành phần gì bằng lệnh:

ros2 interface show geometry_msgs/msg/Twist

Một message geometry_msgs/msg/Twist bao gồm hai vector 3 chiều là linear (tốc độ dài) và angular (tốc độ góc) trong không gian ba chiều. Các bạn lưu ý là mỗi tọa độ của vector là một số thực (float64) nhé.

OK. Bây giờ các bạn đã có đủ thông tin để publish các message tới topic /cmd_vel. Chúng ta cùng publish một message lên topic /cmd_vel để turtlebot di chuyển trong không gian mô phỏng nhé. Ta sử dụng câu lệnh sau:

ros2 topic pub /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.1, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.0}}"

Trong đó:

  • ros2: cú pháp của ROS2
  • topic: câu lệnh liên quan tới topic
  • pub: câu lệnh publish message lên topic
  • /cmd_vel: tên topic
  • geometry_msgs/msg/Twist: tên của interface/loại message
  • Phần còn lại: nột dung message muốn publish

Sau khi lệnh trên được chạy, các bạn sẽ thấy Terminal thông báo đang publish các message lên topic /cmd_vel, đồng thời turtlebot cũng bắt đầu di chuyển thành vòng tròn.

Kiểm tra topic hoạt động

Để kiểm tra xem topic có đang hoạt động ổn định hay không, chúng ta cùng thực hiện lại các lệnh tương tự như phần đầu của bài viết và so sánh.

Đầu tiên là xem thông tin về topic bằng lệnh:

ros2 topic info /cmd_vel

Terminal hiển thị hiện tại đã có thêm một publisher, vậy là chúng ta đã publish dữ liệu lên topic thành công.

Tiếp theo, chúng ta sẽ kiểm tra dữ liệu nào đang được lưu truyền trên topic bằng lệnh:

ros2 topic echo /cmd_vel

Trên Terminal sẽ xuất hiện các message đang được lưu hành trên topic.

OK xong. Vậy là qua bài viết này các bạn đã làm quen với các câu lệnh cơ bản để làm việc với topic trong ROS2. Chúc các bạn thực hành thành công.

Video Tutorial

 


How to Publish & Subscribe to a ROS2 Topic Using Command line

How to Publish & Subscribe to a ROS2 Topic Using Command line

In this video you will learn how to publish and subscribe to a topic in ROS2 using the command line.

COMMANDS TO USE:

  • ros2 topic list
  • ros2 msg list
  • ros2 msg show std_msgs/String
  • ros2 topic pub /chatter std_msgs/String "data: Hello ROS Developers"
  • ros2 topic echo /chatter

RELATED ROS2 RESOURCES:

  • ROS2 Course for Beginners: Introduce you to the basic concepts that you need to know in order to start working with ROS2.
  • ROS Development Studio: Develop your first ROS2 project online (Ready online including Gazebo simulations + ros1_bridge)

The following steps take through the development as shown in the video:

  • Open ROS Development Studio and create a new project (use a suitable name for the project).
  • Activate the docker image for ROS2 by executing the following command in a SHELL
    $ docker run -it osrf/ros2:ardent-basic

 

  • The first command to know is ros2 topic list. This command is same as the rostopic list command in ros1.
  • The command for publishing a topic is ros2 topic pub. This command takes the topic name and message just like the rostopic pub command in ros1.
  • In ros2, we can use the command ros2 msg list to see all the supported message types

  • Now let’s see the usage with a String type message. We can see the structure of the String message with the following command
    $ ros2 msg show std_msgs/String

The output of this command will give us the information about the content of the message type String. To publish the message we will use the following command

$ ros2 topic pub /chatter std_msgs/String "data: Hello ROS Developers"

  • Once we execute the above command, a message will start publishing to the /chatter topic.

  • Next, we can check the published message by using ros2 topic echo command. This should show us the message on /chatter topic

    $ ros2 topic echo /chatter

The output of the above command should be the message that we encoded in the last command.

 

FEEDBACK:

Did you like this video? Whatever the case, please leave a comment on the comments section below, so we can interact and learn from each other.

If you want to learn about other ROS topics, please let us know on the comments area and we will do a video about it.


ros2-basics-course

Pin It on Pinterest