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
Contents
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:
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.