Warning
This topic is under heavy construction. Don’t forget your PPE if you’re venturing forward.
Inspecting parameters (ros2 param)
ROS2 has a tool to interact with launch files called ros2 param.
We can obtain more information on it with
ros2 param -h
which returns
usage: ros2 param [-h] Call `ros2 param <command> -h` for more detailed usage. ...
Various param related sub-commands
options:
-h, --help show this help message and exit
Commands:
delete Delete parameter
describe Show descriptive information about declared parameters
dump Dump the parameters of a node to a yaml file
get Get parameter
list Output a list of available parameters
load Load parameter file for a node
set Set parameter
Call `ros2 param <command> -h` for more detailed usage.
Note
By the time you try this out, the documentation of ros2 param dump might have changed. See ros2/ros2cli/#835.
As shown in the emphasized lines above, the ros2 param tool has a large number of useful commands to interact with parameters.
Launching the Node with parameters
Hint
If you left the Node running from the last section, just keep it that way and skip this.
ros2 launch \
python_package_that_uses_parameters_and_launch_files \
peanut_butter_falcon_quote_publisher_launch.py
List-up parameters with ros2 param list
Hint
Remember that grep is your new best friend.
Similar to other ROS2 commands, we can get a list of currently loaded parameters with
ros2 param list
which returns a well organized list showing the parameters of each active Node
/peanut_butter_falcon_quote_publisher_node:
period
philosopher_name
quote
topic_name
use_sim_time
Obtain parameters with ros2 param get
To obtain the value of a parameter, we can do as follows
ros2 param get \
/peanut_butter_falcon_quote_publisher_node \
quote
which will return the current value of the parameter, in this case, the initial value we set in the launch file
String value is: Yeah, you're gonna die, it's a matter of time. That ain't the question. The question's, whether they're gonna have a good story to tell about you when you're gone
Let’s check the output of the Node
Hint
If you left ros2 topic echo running from the last section, just keep it that way and skip this.
Before the next step, as we did in the past section, we do, IN ANOTHER TERMINAL WINDOW
ros2 topic echo /truly_inspirational_quote
Assign values to parameters with ros2 param set
For testing and regular usage, setting parameters from the command line is extremely helpful. Similar to how we are able to publish messages to topics using a ROS2 tool, we can set a parameter with the following syntax
ros2 param set \
/peanut_butter_falcon_quote_publisher_node \
quote \
"You got a good-guy heart. You can't do shit about it, that's just who you are. You're a hero."
If everything is correct, we’ll get
Set parameter successful
Changing parameters is not instantaneous and, after the change becomes visible in the Node, our Node might have to loop once before it updates itself. We will be able to see that change as follows in the terminal window running ros2 topic echo
id: 2220
quote: Yeah, you're gonna die, it's a matter of time. That ain't the question. The question's, whether they're gonna have a good story ...
philosopher_name: Tyler
---
id: 2221
quote: You got a good-guy heart. You can't do shit about it, that's just who you are. You're a hero.
philosopher_name: Tyler
---
id: 2222
quote: You got a good-guy heart. You can't do shit about it, that's just who you are. You're a hero.
philosopher_name: Tyler
---
id: 2223
quote: You got a good-guy heart. You can't do shit about it, that's just who you are. You're a hero.
philosopher_name: Tyler
---
id: 2224
quote: You got a good-guy heart. You can't do shit about it, that's just who you are. You're a hero.
philosopher_name: Tyler
Save parameters to a file with ros2 param dump
Warning
At the time I was writing this part of the tutorial, the description of ros2 param dump was outdated. By the time you try this out, it might have been corrected. See ros2/ros2cli/#836 for more info.
Words are sometimes little happy accidents. This usage of the word dump has no relation whatsoever to, for example, Peter got dumped by Sarah and went to Hawaii. Dump files are usually related to crashes and unresponsive programs, so this name puzzles me since ROS: the first.
While we wait for someone to come and correct me on my claims above, just think about this as a weird name for ros2 param print_to_screen_as_yaml. It prints the parameters in the terminal with a YAML file format. It is nice because it gives a bit more info than ros2 param list, but not so useful as-is. The trick is that we can put all that nicely formatted content into a file with
cd ~/ros2_tutorial_workspace/src
ros2 param dump \
/peanut_butter_falcon_quote_publisher_node \
> peanut_butter_falcon_quote_publisher_node.yaml
where we are using the >
(see bash redirections) to overwrite the contents of the peanut_butter_falcon_quote_publisher_node.yaml
file with the output of ros2 param dump, so be careful not to overwrite your precious files by mistake.
We can inspect the contents of the file with
cat peanut_butter_falcon_quote_publisher_node.yaml
which outputs
/peanut_butter_falcon_quote_publisher_node:
ros__parameters:
period: 0.25
philosopher_name: Tyler
quote: Yeah, you're gonna die, it's a matter of time. That ain't the question.
The question's, whether they're gonna have a good story to tell about you when
you're gone
topic_name: truly_inspirational_quote
use_sim_time: false
Load parameters from a file with ros2 param load
Warning
To proceed, end the peanut_butter_falcon_quote_publisher_node
Node with CTRL+C.
As in the prior step, suppose that we have a file peanut_butter_falcon_quote_publisher_node.yaml
with the parameters we love the most. What we can do with ros2 param load is load that file. Nicely predictable and understandable naming convention.
We can start the Node with the launch file
ros2 launch python_package_that_uses_parameters_and_launch_files \
peanut_butter_falcon_quote_publisher_launch.py
which, at the beginning, will have the parameters set in the _launch.py
. We can then
cd ~/ros2_tutorial_workspace/src
ros2 param load \
/peanut_butter_falcon_quote_publisher_node \
peanut_butter_falcon_quote_publisher_node.yaml
which will return
Set parameter period successful
Set parameter philosopher_name successful
Set parameter quote successful
Set parameter topic_name successful
Set parameter use_sim_time successful
indicating that all parameters defined in the YAML were successfully loaded.