[Documentation] [TitleIndex] [WordIndex

Note: This tutorial assumes that you have completed the previous tutorials: understanding ROS nodes.
(!) Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags.

Tìm hiểu về ROS Topics

Description: Hướng dẫn giới thiệu về ROS topics cũng như dùng công cụ dòng lệnh rostopicrqt_plot .

Tutorial Level:

Next Tutorial: Hiểu về trình phục vụ trong ROS và các thông số

Thiết đặt

roscore

Hãy chắc là roscore đang chạy, trong một terminal mới:

$ roscore

Nếu roscore đã gọi và còn đang chạy, bạn có thể nhận được thông báo lỗi:

Chỉ có duy nhất một roscore chạy trên máy.

turtlesim

Trong hướng dẫn này chúng ta sẽ dùng turtlesim. Chạy trong một terminal mới:

$ rosrun turtlesim turtlesim_node

turtle keyboard teleoperation

Chúng ta cũng cần một cái gì đó để lái con rùa chạy quanh. Vui lòng chạy trong một terminal mới:

$ rosrun turtlesim turtle_teleop_key

Bây giờ bạn có thể sử dụng các phím mũi tên của bàn phím để lái con rùa chạy xung quanh. Nếu bạn không thể lái con rùa chọn cửa sổ terminal của turtle_teleop_key để đảm bảo rằng các phím bạn gõ được ghi lại.

Bây giờ bạn có thể lái rùa của bạn chạy xung quanh, hãy xem những gì xảy ra đằng sau.

Chủ đề ROS

Các turtlesim_node và nút turtle_teleop_key đang giao tiếp với nhau qua một chủ đề ROS. Turtle_teleop_key đang công bố chủ đề nhấn phím, trong khi turtlesim đăng ký cùng một chủ đề để nhận sự kiện 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.

Lưu ý: Nếu bạn đang sử dụng phiên bản electric hoặc cũ hơn, rqt không có sẵn. Sử dụng rxgraph thay thế.

Dùng rqt_graph

Rqt_graph tạo ra một biểu đồ động về những gì đang xảy ra trong hệ thống. Rqt_graph là một phần của gói rqt. Một khi bạn đã cài đặt xong, hãy chạy:

Thay thế <distro> với tên của phiên bản ROS bạn dùng (indigo, jade, kinetic)

Trong một terminal mới:

$ rosrun rqt_graph rqt_graph

Bạn sẽ thấy giống như sau:

rqt_graph_turtle_key.png

Nếu bạn đặt con trỏ chuột của bạn trên / turtle1 / cỏommand_velocity nó sẽ làm nổi bật các nút ROS (ở đây màu xanh và màu xanh lá cây) và các chủ đề (ở đây màu đỏ). Như bạn thấy, turtlesim_node và các nút turtle_teleop_key đang truyền đạt về chủ đề có tên / turtle1 / command_velocity.

rqt_graph_turtle_key2.png

Hướng dẫn rostopic

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

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.

Dùng rostopic echo

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

Dùng:

rostopic echo [topic]

Chúng ta hãy nhìn vào lệnh dữ liệu vận tốc xuất bản bởi nút turtle_teleop_key.ơn Đối với ROS Hydro và mới hơn, dữ liệu này được xuất bản trên chủ đề / turtle1 / cmd_vel. Trong một thiết bị đầu cuối mới, chạy:

$ rostopic echo /turtle1/cmd_vel

Đối với ROS Groovy và cũ hơn, dữ liệu này xuất bản trên /turtle1/command_velocity topic. Trong một terminal mới, chạy:

$ rostopic echo /turtle1/command_velocity

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 xuất bản về chủ đề. Hãy làm cho turtle_teleop_key xuất bản 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. Đối với ROS Hydro và mới hơn, bạn sẽ thấy những điều sau khi nhấn phím lên:

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
---

Đối với ROS Groovy cũ hơn, bạn sẽ thấy như sau khi nhấn phím:

---
linear: 2.0
angular: 0.0
---
linear: 2.0
angular: 0.0
---
linear: 2.0
angular: 0.0
---
linear: 2.0
angular: 0.0
---
linear: 2.0
angular: 0.0

Bây giờ chúng ta hãy nhìn lại rqt_graph. Nhấn nút làm mới ở phía trên bên trái để hiển thị nút mới. Như bạn có thể nhìn thấy echo rostopic, hiển thị ở đây màu đỏ, bây giờ cũng đã đăng ký chủ đề turtle1 / command_velocity.

rqt_graph_echo.png

Dùng 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 thiết bị đầu cuối mới chạy:

$ rostopic list -h

Cho rostopic list dùng lựa chọn verbose:

$ rostopic list -v

Điều này sẽ hiển thị một danh sách đầy đủ các chủ đề để xuất bản lên và đăng ký và loại của topic.

ROS Messages

Giao tiếp giữa các chủ đề xảy ra bằng cách gửi các thông điệp ROS giữa các nút. Đối với nút xuất bản (turtle_teleop_key) và nút đăng ký (turtlesim_node) để giao tiếp, nút xuất bản và nút nhận phải gửi và nhận cùng một loại tin nhắn. Điều này có nghĩa là loại chủ đề được xác định bởi loại thông báo được xuất bản trên đó. Loại tin nhắn gửi trên một chủ đề có thể được xác định bằng cách sử dụng loại rostopic.

Dùngrostopic type

rostopic type trả lại loại tin nhắn của một chủ đề xuất bản ra.

Dùng:

rostopic type [topic]

Đối với ROS Hydro và sau đó,

Cho ROS Groovy và phiên bản cũ hơn,

Now that we know what type of message turtlesim expects, we can publish commands to our turtle.

Bây giờ chúng ta biết loại tin nhắn turtlesim mong muốn, chúng ta có thể xuất lệnh cho rùa di chuyển.

rostopic continued

Bây giờ chúng ta đã học được về các tin nhắn ROS, chúng ta hãy sử dụng rostopic với các tin nhắn.

Dùng rostopic pub

rostopic pub xuất bản dữ liệu về chủ đề hiện đang được xuất bản.

Dùng:

rostopic pub [topic] [msg_type] [args]

Đối với ROS Hydro và bản mới hơn, ví dụ:

$ rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

Đối với ROS Groovy và bản cũ hơn, ví dụ:

$ rostopic pub -1 /turtle1/command_velocity turtlesim/Velocity  -- 2.0  1.8

Lệnh trước đó sẽ gửi một tin nhắn duy nhất tới rùa để nó vận hành với vận tốc tuyến tính là 2,0 và vận tốc góc là 1,8.

Đây là một ví dụ khá phức tạp, vì vậy hãy nhìn vào mỗi đối số một cách chi tiết.

Đối với ROS Hydro và bản mới hơn,

Cho ROS Groovy và trước đó,

Bạn có thể nhận thấy con rùa đã ngừng di chuyển; Điều này là do rùa cần một dòng lệnh ổn định ở 1 Hz để tiếp tục di chuyển. Chúng ta có thể xuất bản một dòng lệnh ổn định bằng lệnh rostopic pub -r:

Cho bản ROS Hydro và về sau,

Cho bản ROS Groovy và trước đó,

Điều này sẽ xuất lệnh vận tốc ở tốc độ 1 Hz .

Chúng ta cũng có thể nhìn vào những gì đang xảy ra trong rqt_graph, nút pub rostopic (màu đỏ) đang giao tiếp với nút echo rostopic (ở đây là màu xanh lá cây):

rqt_graph_pub.png

Như bạn thấy rùa đang chạy trong một vòng tròn liên tục. Trong một thiết bị đầu cuối mới, chúng ta có thể sử dụng echo rostopic để xem dữ liệu được xuất bản bởi turtlesim: Sử dụng rostopic hz Rostopic hz báo cáo tầng số dữ liệu được xuất bản. Sử dụng:

rostopic hz [topic]

Hãy xem turtlesim_node đang xuất bản nhanh như thế nào /turtle1/pose:

$ rostopic hz /turtle1/pose

Bạn sẽ thấy:

Bây giờ chúng ta có thể nói rằng turtlesim đang xuất bản dữ liệu về con rùa với tốc độ 60 Hz. Ta cũng có thể sử dụng rostopic type kết hợp với rosmsg show để có được thông tin sâu hơn về một chủ đề:

Cho ROS Hydro và sau đó,

Cho ROS Groovy và trước đó,

Bây giờ chúng ta đã kiểm tra các chủ đề bằng cách sử dụng rostopic chúng ta hãy sử dụng một công cụ khác để xem dữ liệu được xuất bản bởi turtlesim:

rqt_plot

Lưu ý: Nếu bạn đang sử dụng bản electric hoặc cũ hơn, rqt không có sẵn. Sử dụng rxplot thay thế. Rqt_plot hiển thị một thanh cuộn thời gian theo dữ liệu được xuất bản trên các chủ đề. Ở đây chúng ta sẽ sử dụng rqt_plot để vẽ dữ liệu đang được xuất bản trên chủ đề / turtle1 / pose. Đầu tiên, bắt đầu rqt_plot bằng cách gõ

$ rosrun rqt_plot rqt_plot

Trong một thiết bị đầu cuối mới. Trong cửa sổ mới sẽ xuất hiện, một hộp văn bản ở góc trên bên trái cho bạn thêm bất kỳ chủ đề nào vào đồ thị. Gõ / turtle1 / pose / x sẽ làm nổi bật nút cộng, bị vô hiệu hóa trước đó. Nhấn và lặp lại quy trình tương tự với chủ đề / turtle1 / pose / y. Bây giờ bạn sẽ thấy vị trí x-y của con rùa được vẽ trên đồ thị.

rqt_plot.png

Nhấn nút trừ sẽ hiển thị menu cho phép bạn ẩn chủ đề đã được chỉ định khỏi đồ thi. Ẩn cả hai chủ đề bạn vừa thêm vào và thêm / turtle1 / pose / theta sẽ được hiển thị trong hình tiếp theo.

rqt_plot2.png

Sử dụng Ctrl-C để đóng các thiết bị đầu cuối rostopic nhưng giữ turtlesim chạy. Bây giờ bạn đã hiểu các chủ đề ROS hoạt động như thế nào, hãy xem các dịch vụ và các tham số hoạt động ra sao services and parameters work.

Video Hướng

The following video presents a small tutorial using turtlesim on ROS nodes and ROS topics.

Video dưới đây trình bày một hướng dẫn nhỏ sử dụng rùa mô hình trên các nút ROS và các chủ đề ROS.


2019-10-19 13:20