-
Notifications
You must be signed in to change notification settings - Fork 263
Description
Generated by Generative AI
No response
Operating System:
Linux wouter-laptop 6.14.0-36-generic #36~24.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Oct 15 15:45:17 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
ROS version or commit hash:
jazzy
RMW implementation (if applicable):
rmw_fastrtps_cpp
RMW Configuration (if applicable):
No response
Client library (if applicable):
rclpy
'ros2 doctor --report' output
ros2 doctor --report
<COPY OUTPUT HERE>Steps to reproduce issue
Our parameter config file starts with:
/**:
ros__parameters:
carrier_id: carrier
oddcore_id: oddcore
odometry_frame_rate: 10.0
odometry_frame_rate_min: 8.0
odometry_frame_rate_max: 12.0
detections_frame_rate: 5.0
detections_frame_rate_min: 4.0
detections_frame_rate_max: 6.0
/*:
gps_node:
ros__parameters:
port: "/dev/ttyACM0"
baud: 9600
frame_id: "gps"
time_ref_source: "gps"
useRMC: False
We're using this file many years now, so it should be valid.
Then we load a redis parameter node to connect ROS2 parameters and Redis. This nodes needs the parameter files for its own parameters, but as well needs the paths to the parameter files, so that it can read the complete files:
default_parameters_file = LaunchConfiguration('default_parameters_file', default=default_parameters_file)
override_parameters_file = LaunchConfiguration('override_parameters_file', default=override_parameters_file)
redis_parameter_node = Node(
condition=IfCondition(run_redis_parameter_node),
package='database',
executable='redis_parameter_node',
output='screen',
parameters=[
default_parameters_file,
override_parameters_file,
{'default_parameters_file': default_parameters_file},
{'override_parameters_file': override_parameters_file}
],
)
In the redis parameter node we try to read the files:
class RedisParameterNode(NodeBase): # NodeBase subclass of Node
def __init__(self):
super().__init__('redis_parameter_node')
self.__read_parameter_files()
...
#
def __read_parameter_files(self):
self.get_logger().debug(self.parameters.default_parameters_file) # correctly logs path to file
default_parameters = parameter_dict_from_yaml_file(self.parameters.default_parameters_file) # reads file but fails with error
Within the node I can read and print the parameter file. parameter_dict_from_yaml_file reads the file but says it's invalid. See stack trace under 'Actual behavior'.
Expected behavior
parameter_dict_from_yaml_file return a parameter dict.
Actual behavior
[redis_parameter_node-1] [DEBUG] [1764068550.222920305] [oddcore.redis_parameter_node]: /home/wouter/Documents/repos/oddbot/vision-ros/install/vision_launch/share/vision_launch/config/oddcore_default_configs.yaml
[redis_parameter_node-1] Traceback (most recent call last):
[redis_parameter_node-1] File "/home/wouter/Documents/repos/oddbot/vision-ros/install/database/lib/database/redis_parameter_node", line 33, in <module>
[redis_parameter_node-1] sys.exit(load_entry_point('database', 'console_scripts', 'redis_parameter_node')())
[redis_parameter_node-1] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[redis_parameter_node-1] File "/home/wouter/Documents/repos/oddbot/vision-ros/build/database/database/redis_parameter_node.py", line 291, in main
[redis_parameter_node-1] node = RedisParameterNode()
[redis_parameter_node-1] ^^^^^^^^^^^^^^^^^^^^
[redis_parameter_node-1] File "/home/wouter/Documents/repos/oddbot/vision-ros/build/database/database/redis_parameter_node.py", line 37, in __init__
[redis_parameter_node-1] self.__read_parameter_files()
[redis_parameter_node-1] File "/home/wouter/Documents/repos/oddbot/vision-ros/build/database/database/redis_parameter_node.py", line 65, in __read_parameter_files
[redis_parameter_node-1] default_parameters = parameter_dict_from_yaml_file(self.parameters.default_parameters_file)
[redis_parameter_node-1] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[redis_parameter_node-1] File "/opt/ros/jazzy/lib/python3.12/site-packages/rclpy/parameter.py", line 323, in parameter_dict_from_yaml_file
[redis_parameter_node-1] raise RuntimeError(f'YAML file is not a valid ROS parameter file for node {n}')
[redis_parameter_node-1] RuntimeError: YAML file is not a valid ROS parameter file for node /*
Additional information
The error says YAML file is not a valid ROS parameter file for node /*. Apparently it mistakes /* for a node?
Also tried default_parameters = parameter_dict_from_yaml_file(self.parameters.default_parameters_file, use_wildcard=True), but it made no difference.