Note: This tutorial assumes that you have completed the previous tutorials: building a ROS package.
(!) 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ề nút ROS

Description: Hướng dẫn giới thiệu về khái niệm đồ thị trong ROS và thảo luận dùng công cụ dòng lệnh roscore, rosnode, and rosrun.

Tutorial Level: BEGINNER

Next Tutorial: Tìm hiểu về ROS topics

Chuẩn bị

Trong hướng dẫn này, chúng ta sẽ sử dụng trình giả lập, hãy cài đặt nó bằng cách sử dụng

$ sudo apt-get install ros-<distro>-ros-tutorials

Thay thế '<distro>' bằng tên của phiên bản ROS của bạn (ví dụ. indigo, jade, kinetic)

Tổng quan về khái niệm

  • Nút (Nodes): Một nút là một tập tin thực thi dùng ROS giao tiếp với các nút khác.

  • Tin nhắn (Messages): Loại dữ liệu ROS được sử dụng khi đăng ký hoặc xuất bản một chủ đề.

  • Topics : Các nút có thể xuất bản tin nhắn đến một chủ đề cũng như đăng ký một chủ đề để nhận tin nhắn.

  • Master: Trình dịch vụ cho ROS (nghĩa là giúp các nút tìm thấy nhau)

  • rosout: Tương đương ROS stdout/stderr

  • roscore: Master + rosout + parameter server (Tham số máy chủ sẽ được giới thiệu sau)

Nút

Một nút thực ra là một tập tin thực thi trong một gói ROS. Các nút ROS sử dụng thư viện bởi ROS để giao tiếp với các nút khác. Các nút có thể xuất bản hoặc đăng ký một chủ đề. Các nút cũng có thể cung cấp hoặc sử dụng một trình phục vụ.

Thư viện Client

Thư viện ROS client cho phép nút được viết trong các ngôn ngữ khác nhau để giao tiếp:

  • rospy = python client library
  • roscpp = c++ client library

roscore

roscore là nút đầu tiên bạn phải chạy khi dùng ROS.

Thử chạy:

$ roscore

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

  • ... 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]

Nếu roscore không khởi tạo, bạn có thể có vấn đề về cấu hình mạng. Xem Thiết đặt mạng - Cấu hình máy

Nếu roscore không khởi tạo và gửi thông báo thiếu quyền truy cập, có lẽ thư mục ~ / .ros sở hữu bởi root, thay đổi quyền sở hữu thư mục đó bằng:

$ sudo chown -R <your_username> ~/.ros

Dùng rosnode

Mở một terminal mới, và hãy sử dụng rosnode để xem những gì roscore đã thực thi ...

Chú ý: Khi mở một thiết bị đầu cuối mới, môi trường của bạn được đặt lại và tập tin ~ / .bashrc của bạn được lấy ra. Nếu bạn gặp rắc rối khi chạy các lệnh như rosnode, bạn có thể cần thêm một số tập tin thiết lập môi trường vào ~ / .bashrc của bạn.

Rosnode hiển thị thông tin về các nút ROS hiện đang chạy. Lệnh rosnode list liệt kê các nút đang hoạt động này:

$ rosnode list
  • Bạn sẽ thấy:
  • /rosout

Điều này cho thấy rằng chỉ có một nút chạy: rosout. Nút này luôn luôn chạy khi nó thu thập và ghi lại thông tin gỡ lỗi của các nút. Lệnh rosnode info trả về thông tin về một nút cụ thể.

$ rosnode info /rosout

Điều này cho chúng ta biết thêm một số thông tin về rosout, chẳng hạn như nó xuất bản / rosout_agg.

  • ------------------------------------------------------------------------
    Node [/rosout]
    Publications:
     * /rosout_agg [rosgraph_msgs/Log]
    
    Subscriptions:
     * /rosout [unknown type]
    
    Services:
     * /rosout/set_logger_level
     * /rosout/get_loggers
    
    contacting node http://machine_name:54614/ ...
    Pid: 5092

Bây giờ xem thêm những nút khác. Chúng ta sẽ dùng rosrun để chạy những nút khác.

Dùng rosrun

Rosrun cho phép bạn sử dụng tên gói để chạy trực tiếp một nút bên trong một gói (mà không cần phải biết đường dẫn gói).

Dùng:

$ rosrun [package_name] [node_name]

Bay giờ chúng ta có thể chạy nút turtlesim_node trong gói turtlesim.

Sau đó, trong một terminal mới:

$ rosrun turtlesim turtlesim_node

Bạn sẽ thấy cửa sổ turtlesim:

  • turtlesim.png

Chú ý: Cửa sổ turtle có thể trông không giống nnư trên máy bạn. Điều này là do có nhiều loại many types of turtle !

Trong một terminal mới:

$ rosnode list

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

  • /rosout
    /turtlesim

Một chức năng mạnh mẽ trong ROS đó là bạn có thể đặt tên lại từ command-line.

Đóng cửa sổ turtlesim để dừng nút (hoặc quay trở lại terminal rosrun turtlesim và sử dụng ctrl-C). Bây giờ chúng ta hãy chạy lại nó, nhưng lần này sử dụng Remapping Argument để thay đổi tên của nút:

$ rosrun turtlesim turtlesim_node __name:=my_turtle

Nếu ta quay trở lại dùng rosnode list:

$ rosnode list
  • Bạn sẽ thấy giống như sau :
  • /rosout
    /my_turtle

Chú ý : Nếu bạn vẫn thấy /turtlesim trong danh sách, có thể là bạn đã dừng nút trong terminal sử dụng ctrl-C thay vì đóng cửa sổ, hoặc bạn không có biến môi trường $ ROS_HOSTNAME được định nghĩa như mô tả trong Cài đặt Mạng - Cấu hình Máy đơn. Bạn có thể thử xóa danh sách rosnode với: $ rosnode cleanup

Chúng ta sẽ thấy nút mới / my_turtle. Hãy sử dụng một lệnh rosnode khác, ping, để kiểm tra rằng nó đã được chạy:

$ rosnode ping my_turtle
  • rosnode: node is [/my_turtle]
    pinging /my_turtle with a timeout of 3.0s
    xmlrpc reply from http://aqy:42235/     time=1.152992ms
    xmlrpc reply from http://aqy:42235/     time=1.120090ms
    xmlrpc reply from http://aqy:42235/     time=1.700878ms
    xmlrpc reply from http://aqy:42235/     time=1.127958ms

Review

Tổng kết lại:

  • Roscore = ros + core: master (cung cấp tên dịch vụ cho ROS) + rosout (stdout / stderr) + tham số máy chủ(tham số máy chủ sẽ được giới thiệu sau)
  • rosnode = ros+node : ROS công cụ để nhận thông tin về nút.
  • rosrun = ros+run : chạy một nút từ một gói.

Bây giờ bạn đã hiểu cách các nút ROS hoạt động, hãy xem how ROS topics work. Bạn cũng có thể nhấn Ctrl-C để dừng turtlesim_node.

Wiki: vn/ROS/Tutorials/UnderstandingNodes (last edited 2017-04-10 08:14:36 by HoangGiang88)