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:
- Nền tảng học ROS trực tuyến The Construct
- 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_vel
là geometry_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 ROS2topic
: câu lệnh liên quan tới topicpub
: câu lệnh publish message lên topic/cmd_vel
: tên topicgeometry_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
0 Comments