Наступний скрипт запитає всі параметри з RViz (/rviz/get_parameters) за допомогою Python.
Це досягається спочатку шляхом переліку всіх параметрів, а потім їх запиту та виведення.
rviz_param_query.py
#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
from rcl_interfaces.srv import GetParameters, ListParameters
class RvizParamQuery(Node):
def __init__(self):
super().__init__('rviz_param_query')
self.get_client = self.create_client(GetParameters, '/rviz2/get_parameters')
self.list_client = self.create_client(ListParameters, '/rviz2/list_parameters')
# Очікування сервісів
while not all([
self.get_client.wait_for_service(timeout_sec=1.0),
self.list_client.wait_for_service(timeout_sec=1.0)
]):
self.get_logger().info('Сервіси недоступні, очікування...')
def list_all_parameters(self):
request = ListParameters.Request()
future = self.list_client.call_async(request)
rclpy.spin_until_future_complete(self, future)
return future.result().result.names
def query_parameters(self, param_names):
request = GetParameters.Request()
request.names = param_names
future = self.get_client.call_async(request)
rclpy.spin_until_future_complete(self, future)
return future.result()
def main():
rclpy.init()
param_query = RvizParamQuery()
# Отримати список усіх параметрів
param_names = param_query.list_all_parameters()
# Запитати значення для всіх параметрів
result = param_query.query_parameters(param_names)
# Відобразити результати
for name, value in zip(param_names, result.values):
if value.type == 1: # PARAMETER_BOOL
val = value.bool_value
elif value.type == 2: # PARAMETER_INTEGER
val = value.integer_value
elif value.type == 3: # PARAMETER_DOUBLE
val = value.double_value
elif value.type == 4: # PARAMETER_STRING
val = value.string_value
elif value.type == 5: # PARAMETER_BYTE_ARRAY
val = value.byte_array_value
elif value.type == 6: # PARAMETER_BOOL_ARRAY
val = value.bool_array_value
elif value.type == 7: # PARAMETER_INTEGER_ARRAY
val = value.integer_array_value
elif value.type == 8: # PARAMETER_DOUBLE_ARRAY
val = value.double_array_value
elif value.type == 9: # PARAMETER_STRING_ARRAY
val = value.string_array_value
else:
val = "Невідомий тип"
print(f"{name}: {val}")
param_query.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()Приклад виводу
rviz_param_query_output.yaml
qos_overrides./parameter_events.publisher.depth: 1000
qos_overrides./parameter_events.publisher.durability: volatile
qos_overrides./parameter_events.publisher.history: keep_last
qos_overrides./parameter_events.publisher.reliability: reliable
start_type_description_service: True
tf_buffer_cache_time_ms: 10000
use_sim_time: FalseЯкщо ця стаття допомогла вам, будь ласка, подумайте про те, щоб купити мені каву або зробити пожертву через PayPal на підтримку досліджень та публікації нових статей на TechOverflow