所以ROS2采用了另外一种模式.
https://design.ros2.org/articles/ros_parameters.html
1. 参数和node绑定, 参数只能由此node访问, 参数生命周期与node一致. node可以保存参数.以便于下次重启加载.
2. 参数将由两个元素来寻址: 完整的节点名称和参数名称。
3. 支持的数据类型
- bool
- int64
- float64
- string
- byte[]
- bool[]
- int64[]
- float64[]
- string[]
List Parameters Describe Parameters Get Parameters Set Parameters
5. 多个节点内进行参数访问. 那就只能用 service了
点击(此处)折叠或打开
- $ ros2 service list ## 查看是否存在服务.
- /motor_node/describe_parameters
- /motor_node/get_parameter_types
- /motor_node/get_parameters
- /motor_node/list_parameters
- /motor_node/set_parameters
- /motor_node/set_parameters_atomically
- ....
##查看节点发布的参数
- $ ros2 service call /motor_node/list_parameters rcl_interfaces/srv/ListParameters "prefixes: ['chasiss_sv']"#10"depth: 1"
- requester: making request: rcl_interfaces.srv.ListParameters_Request(prefixes=['chasiss_sv'], depth=0)
- response:
- rcl_interfaces.srv.ListParameters_Response(result=rcl_interfaces.msg.ListParametersResult(names=['chasiss_sv.max_angular', 'chasiss_sv.max_linear', 'chasiss_sv.min_angular', 'chasiss_sv.min_linear'], prefixes=['chasiss_sv']))
- ## 获取某个参数
- $ ros2 service call /motor_node/get_parameters rcl_interfaces/srv/GetParameters "names: [chasiss_sv.min_angular]"
- requester: making request: rcl_interfaces.srv.GetParameters_Request(names=['chasiss_sv.min_angular'])
- response:
- rcl_interfaces.srv.GetParameters_Response(values=[rcl_interfaces.msg.ParameterValue(type=3, bool_value=False, integer_value=0, double_value=-2.8435, string_value='', byte_array_value=[], bool_array_value=[], integer_array_value=[], double_array_value=[], string_array_value=[])])
- ## 获取多个参数
- $ ros2 service call /motor_node/get_parameters rcl_interfaces/srv/GetParameters "names: [chasiss_sv.min_angular, chasiss_sv.max_angular]"
- requester: making request: rcl_interfaces.srv.GetParameters_Request(names=['chasiss_sv.min_angular', 'chasiss_sv.max_angular'])
- response:
- rcl_interfaces.srv.GetParameters_Response(values=[rcl_interfaces.msg.ParameterValue(type=3, bool_value=False, integer_value=0, double_value=-2.8435, string_value='', byte_array_value=[], bool_array_value=[], integer_array_value=[], double_array_value=[], string_array_value=[]), rcl_interfaces.msg.ParameterValue(type=3, bool_value=False, integer_value=0, double_value=2.8435, string_value='', byte_array_value=[], bool_array_value=[], integer_array_value=[], double_array_value=[], string_array_value=[])])