네임스페이스
같은 거북이 노드를 두 번 띄우면 무슨 일이 생길까?
겹침
이름이 같으면 구별이 안 됩니다
런치 파일에 같은 Node를 두 번 적으면 노드 이름도, 토픽 이름도 똑같은 둘이 생깁니다. 한 거북이에게 보낸 명령을 두 거북이가 함께 받습니다. ros2 node list는 이름이 겹친다는 경고를 냅니다.
네임스페이스
이름 앞에 성을 붙입니다
네임스페이스(namespace)는 이름 앞에 붙이는 접두어입니다. 노드에 네임스페이스를 주면 노드 이름과, 그 노드가 쓰는 토픽·서비스 이름 앞에 함께 붙습니다. 폴더 이름과 비슷합니다.
런치에서
namespace= 한 줄이면 됩니다
Node에 namespace='turtlesim1'을 주면 그 노드는 /turtlesim1 아래로 들어갑니다. 노드 이름은 둘 다 sim이어도 네임스페이스가 달라 전체 이름은 겹치지 않습니다.
공식 튜토리얼 "Creating a launch file"의 예와 같은 값입니다.
결과
토픽도 따로 생깁니다
turtlesim은 토픽 이름을 turtle1/cmd_vel처럼 앞에 /가 없는 상대 이름(relative name)으로 만듭니다. 그래서 네임스페이스가 앞에 붙어 거북이마다 토픽이 따로 생기고, 명령도 따로 받습니다.
절대 이름
/로 시작하면 그대로입니다
이름이 /로 시작하면 절대 이름(absolute name)이라 네임스페이스가 붙지 않습니다. 이런 노드는 네임스페이스를 줘도 토픽이 나뉘지 않습니다.
내 노드를 만들 때도 토픽 이름은 /없이 쓰는 편이 런치에서 다시 쓰기 좋습니다.
따라 하기
나뉜 이름을 눈으로 확인합니다
1편의 ros2 launch turtlesim multisim.launch.py를 띄운 채, 새 터미널에서 확인합니다. multisim은 노드 이름을 따로 주지 않아, 기본 이름 turtlesim 앞에 네임스페이스만 붙었습니다.
다음 편