|
|
|
# ROS Hello world
|
|
|
|
|
|
|
|
## Start up
|
|
|
|
From the ~/workspace/ros directory
|
|
|
|
```
|
|
|
|
roscore
|
|
|
|
```
|
|
|
|
|
|
|
|
In a new terminal run the keyboard capture node
|
|
|
|
```
|
|
|
|
rosrun simple_example command_node.py
|
|
|
|
```
|
|
|
|
|
|
|
|
In a third window
|
|
|
|
```
|
|
|
|
rosrun simple_example drive_node.py
|
|
|
|
```
|
|
|
|
|
|
|
|
## 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
|