토픽은 노드에서 발행되나 원하는 데이터를 노드 실행 없이 발행 시킬 수도 있습니다.
ros2 topic pub <topic_name> <msg_type> '<args>'
또한, 현재 발행되고있는 토픽의 이름이나 토픽의 데이터, 토픽의 발행자, 구독자 수 및 데이터 형식을 확인해볼 수도 있습니다.
ros2 topic list # 발행되고있는 토픽의 이름 확인
ros2 topic echo <topic_name> # 해당 토픽의 데이터 확인
ros2 topic info <topic_name> # 해당 토픽의 발행자, 구독자 수 및 데이터 형식 확인
마지막으로 해당 토픽의 발행 주기(hz)를 확인할 수 있습니다.(노드에 따라 해당 토픽이 일정 시간 이상 갱신이 안되는 경우 에러 메시지를 내보내는 경우가 있으니 주의하시길 바랍니다.)
ros2 topic hz <topic_name>
서비스는 토픽과는 다르게 양방향 통신입니다. 클라이언트가 서버에게 데이터를 요청하면 서버는 클라이언트에게 해당 데이터를 주는 방식입니다. 토픽의 경우 수시로 데이터를 주고받아야 할때 사용한다면 서비스의 경우 데이터의 갱신이 필요 없거나 적은 경우에 사용됩니다.(자율 주행의 예로 들면 지도 데이터가 해당될 수 있습니다.) 또한 그림과 같이 클라이언트는 다수일 수 있으나 서버는 한개여야 합니다.
서비스는 노드에서 발행되나 원하는 데이터를 노드 실행 없이 요청 시킬 수도 있습니다.
ros2 service call <service_name> <service_type> <arguments>
또한, 현재 발행되고있는 서비스의 이름 및 데이터 형식을 확인할 수 있습니다.
ros2 service list # 서비스 이름 확인
ros2 service type <service_name> # 해당 서비스의 데이터 형식 확인
ros2 service list 로 현재 서비스를 확인하면 parameters가 있는 것을 볼 수 있습니다. 이는 ros1에선 parameters서버가 따로 존재하여 각 노드의 파라미터를 일괄 처리하였으나 ros2에서는 각 노드가 파라미터를 처리하기 때문에 이에 대한 정보를 서비스로 주고 받습니다.