From f54f8c01002211f8ebb5546cb1a23d1faba0582e Mon Sep 17 00:00:00 2001 From: Drew Bednar Date: Fri, 25 Feb 2022 19:27:09 +0000 Subject: [PATCH] Update 'README.md' Adding more ros notes --- README.md | 189 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 188 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 08560c7..7cb0a89 100644 --- a/README.md +++ b/README.md @@ -14,4 +14,191 @@ rosrun simple_example command_node.py In a third window ``` rosrun simple_example drive_node.py -``` \ No newline at end of file +``` + +## Nodes and Topics + +``` +rostopic bw display bandwidth used by topic +rostopic echo print messages to screen +rostopic hz display publishing rate of topic +rostopic list print information about active topics +rostopic pub publish data to topic +rostopic type print topic type +``` + +In a fourth window you can see the active nodes: +``` +ubuntu@rospi:~/catkin_ws$ rosnode list +/keyb_commander_1845_1645809765799 +/motor_driver_1870_1645809783593 +/rosout +``` + +You can look at the topics used in the deployment: + +``` +ubuntu@rospi:~/catkin_ws$ rostopic list -v + +Published topics: + * /rosout_agg [rosgraph_msgs/Log] 1 publisher + * /command [std_msgs/String] 1 publisher + * /rosout [rosgraph_msgs/Log] 2 publishers + +Subscribed topics: + * /rosout [rosgraph_msgs/Log] 1 subscriber + * /command [std_msgs/String] 1 subscriber +``` + +We can see the publisher and subscriber of a topic and it's message type: +``` +ubuntu@rospi:~/catkin_ws$ rostopic info /command +Type: std_msgs/String + +Publishers: + * /keyb_commander_1845_1645809765799 (http://rospi:35435/) + +Subscribers: + * /motor_driver_1870_1645809783593 (http://rospi:34943/) +``` + +We can see the topic type, which is this case is one that uses `std_msgs/String` +``` +ubuntu@rospi:~/catkin_ws$ rostopic type /command +std_msgs/String +``` + +If we want to look at the definition of a message we can use `rosmsg`: +``` +rosmsg show geometry_msgs/Twist +``` + +Slam together the `rostopic type` command with `rosmsg show` command to immediately get the message type info +``` +rostopic type /command | rosmsg show +``` + +We can also publish a message to the /command topic like so `rostopic pub [topic] [msg_type] [args]` + +``` +rostopic pub /command std_msgs/String "left" +``` + +We can also echo out the messages received by the topic: + +``` +ubuntu@rospi:~/catkin_ws$ rostopic echo /command +data: "forward" +--- +data: "back" +--- +data: "left" +--- +data: "right" +--- +data: "back" +--- +data: "forward" +--- +``` + +If we want to look at descriptive stats of the rate of messages published to a topic we can use the hertz subcommand: +``` +rostopic hz /command +``` + +## Parameters and Services + +### Services + +From [Understanding ROS Parameters and Services] +Services are synchronous (blocking) RPC servers essentially + +``` +rosservice list print information about active services +rosservice call call the service with the provided args +rosservice type print service type +rosservice find find services by service type +rosservice uri print service ROSRPC uri +``` + +``` +ubuntu@rospi:~/catkin_ws$ rosservice list +/keyb_commander_1845_1645809765799/get_loggers +/keyb_commander_1845_1645809765799/set_logger_level +/motor_driver_1870_1645809783593/get_loggers +/motor_driver_1870_1645809783593/set_logger_level +/rosout/get_loggers +/rosout/set_logger_level +``` + +In this package we have no services available beyond the basic logging facilities. + +We cab get the type of service messages that they expect much like the rostopics. +``` +rosservice type /keyb_commander_1845_1645809765799/get_loggers +roscpp/GetLoggers +``` + +If we have `std_srvs/Empty` as a message type like in `/turtlesim` we would call that service with no arguments +using the `rosservice call /clear` command. Other services might look like this: + +``` +toor@ubuntu:~/workspace/ros/src$ rosservice type /spawn | rossrv show +float32 x +float32 y +float32 theta +string name +--- +string name +``` + +``` +toor@ubuntu:~/workspace/ros/src$ rosservice call /spawn 2 2 0.2 "" +name: "turtle2" +``` + +Spawns a second turtle + +### Parameters + +ROS provides a parameter server that you read and write values to. + +``` +rosparam set set parameter +rosparam get get parameter +rosparam load load parameters from file +rosparam dump dump parameters to file +rosparam delete delete parameter +rosparam list list parameter names +``` + +Let's just look at all the parameters. +``` +toor@ubuntu:~/workspace/ros/src$ rosparam get / +rosdistro: 'noetic + + ' +roslaunch: + uris: + host_ubuntu__38527: http://ubuntu:38527/ +rosversion: '1.15.14 + + ' +run_id: a50b0b18-9666-11ec-b706-21c9002ce246 +turtlesim: + background_b: 255 + background_g: 86 + background_r: 150 +``` + +## Ros Utility Programs + +`rqt_plot` displays a scrolling time plot of the data published on topics. It's a GUI that only works on ros-desktop. + +``` +rosrun rqt_plot rqt_plot +``` + + +[Understanding ROS Parameters and Services](https://wiki.ros.org/ROS/Tutorials/UnderstandingServicesParams \ No newline at end of file