ROS1 中存在一个参数服务器, 统一管理着所有node导入或设置的参数, 这些参数可以被其他的任意节点访问. 即所谓的黑板模式. 好处是访问和修改灵活, 问题是难以保证命名的正确性以及参数的私密性.
所以ROS2采用了另外一种模式.
1. 参数和node绑定, 参数只能由此node访问, 参数生命周期与node一致. node可以保存参数.以便于下次重启加载.
2.
参数将由两个元素来寻址: 完整的节点名称和参数名称。
3. 支持的数据类型
-
bool
-
int64
-
float64
-
string
-
byte[]
-
bool[]
-
int64[]
-
float64[]
-
string[]
4. 参数访问方式
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=[])])
阅读(4854) | 评论(0) | 转发(0) |