💡 궁금점
터미널에서 ros2 param set 명령어를 통해 파라미터 값을 바꿀 수 있습니다.
또는 ros2 run rqt_reconfigure rqt_reconfigure 를 통해 UI로 같은 기능을 수행할 수 있습니다.
그렇다면, 코드로 이것이 가능할지가 궁금하여 찾아봤습니다.
다른 노드에 설정된 파라미터를 직접 바꾸려면 service call 을 이용할 수 있습니다.
1. 노드에 배정된 service 목록 확인
아래 이미지처럼 service 중에서 'set_parameters' 라는 서비스가 보입니다.
다른 노드도 마찬가지로 위의 사진과 같이 공통된 service를 기본적으로 가지고 있습니다.
아래의 명령어로 확인이 가능합니다.
ros2 service list
ros2 wiki 에 기재된 service type에 기반하여 아래와 같이 터미널에서 service call 을 날릴 수 있습니다.
ros2 service call /local_costmap/local_costmap/set_parameters rcl_interfaces/srv/SetParameters "{parameters: [{name: 'inflation_layer.inflation_radius', value: {type: 3, double_value: 1.0}}]}"
2. '/set_parameters' service type 정리
1번에 기재된 터미널 명령어의 형식을 따라야 service call 을 내보낼 수 있습니다.
아래 log 로 나온 내용에서 알 수 있듯이 데이터 변수에 따른 타입을 올바르게 지정해줘야 합니다.
정리된 type 내용이 궁금하시면 아래 항목을 펼쳐서 확인하시면 됩니다.
bool -> 1, bool_value
integer -> 2, integer_value
double -> 3, double_value
string -> 4, string_value
byte array -> 5, byte_array_value
bool array -> 6, bool_array_value
integer array -> 7, integer_array_value
double array -> 8, double_array_value
string array -> 9, string_array_value