ros2 service call
명령 한 줄로 거북이를 한 마리 더 만들 수 있을까?
명령 모양
이름, 타입, 요청 내용 순서
ros2 service call 뒤에는 2편에서 본 서비스 이름과 타입, 그리고 요청에 실을 값을 차례로 적습니다. 값은 3강 6편의 topic pub처럼 YAML로 씁니다.
값 없는 서비스
먼저 /clear로 연습합니다
/clear의 타입 std_srvs/srv/Empty는 요청이 비어 있어서 값을 적지 않습니다. 부르면 거북이가 그린 선이 지워집니다.
명령이 길어 \로 줄을 나눴습니다. 한 줄로 쳐도 됩니다.
따라 하기
/spawn으로 한 마리 더
ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.2, name: ''}"
왼쪽 아래 (2, 2) 자리에 0.2라디안만큼 돌아간 거북이가 새로 생깁니다.
답 읽기
응답에 새 이름이 옵니다
위는 보낸 요청, 아래는 서버가 돌려준 응답입니다. name을 비워 두면 turtlesim이 turtle2처럼 겹치지 않는 이름을 지어 응답으로 알려 줍니다. 토픽으로는 받을 수 없던 답입니다.
실제로는 요청과 응답이 각각 한 줄로 나옵니다. 화면에 맞게 줄을 나눴습니다.
자주 막히는 곳
YAML은 콜론 뒤 한 칸
YAML에서는 x: 2처럼 콜론 뒤에 한 칸을 띄워야 값으로 읽힙니다. 필드 이름도 타입에 있는 그대로 써야 합니다. 바깥은 큰따옴표, 빈 이름은 작은따옴표 두 개('')입니다.
명령은 손으로 치기보다 그대로 복사해서 쓰는 편이 안전합니다.
치우기
/kill로 다시 지웁니다
ros2 service call /kill turtlesim/srv/Kill "{name: 'turtle2'}"
방법은 늘 같습니다. 이름과 타입을 확인하고, 요청에 실을 값을 YAML로 적습니다. 무엇을 적어야 하는지는 타입이 정합니다.
다음 편