[ROS] remapping

MURRAIYA·2024년 2월 28일
0

노드를 재사용하는 내용이다.

ROS 에서 image를 publish하는 노드를 두 개 실행하고 그것을 구분하고 싶을 때 코드를 수정하거나 복잡한 과정 없이 그냥 이름을 구분하여 두 번 실행시키면 된다.

두 가지 방법이 있다.

node이름 변경 __name 이용

일단은 같은 노드가 또 실행되면 roscore가 이전 노드를 종료시키는 문제를 해결할 수 있다.

시작할 때 프로그램의 이름을 바꿔서 구분하는 방법

./talker __name:=talker1 

talker라는 노드를 talker1이라는 이름으로 켜라는 설정.

underbar 두개임에 유의.

rosrun rospy_tutorials talker.py ./talker __name:=talker1
rosrun rospy_tutorials talker.py ./talker __name:=talker2

talker 이름을 바꿔주고 출력하면 아래처럼 보인다.

같은 코드 두개 켜는게 무슨 의미인가 하는 생각이 드는데, 다른 프로그램 내에 같은 기능을 붙여넣고 쓸때 이름을 구분해서 본다든가 할 때 쓰지 않을까 싶다.

topic이름 변경

./image_view image:=imageright

image_view라는 프로그램에 image라는 토픽을 imageright이라고 바꿔 확인하는 설정.

어느 디렉토리에서 image_view를 포함하고 있을때 이렇게 터미널에 치면 된다고 한다.

실제로 해보니 rqt그래프로는 연결되지 않고 rostopic list에는 바뀐 이름으로 나온다. pub은 되는데 sub이 연결이 안되는 듯하다. 책에는 되니까 다음에 다시 시도. 이게 디버깅할때 유용할 듯한데.

__namespace 이용

책의 본문: 노드를 이름공간으로 넣으려면 __ns 이름공간 재사상 문법으로 가능하다. 작업 디렉토리가 camera 프로그램을 포함하고 있으면 다음 셸 명령어로 right 이름공간과 함께 camera를 실행할 것이다.

./camera __ns:=right

본문에서 프로그램이라고 말한 것이 소스파일(.py)등을 말하는 것인지 패키지 자체인지 런치파일인지 노드인지 명확하지 않다.

—>roslaunch 명령으로 했을때는 pkg, launchfile에 대해서 불가능함.

귀찮지만 각각의 node를 같은 namespace 명령으로 실행시켰을때

rosrun rospy_tutorials talker.py ./talker __ns:=right
rosrun rospy_tutorials listener.py ./listener __ns:=right

이와 같이 네모박스로 감싸진 rqt그래프가 나온다. 이는 많은 github 코드에서 봤던 모양이므로 이후에 패키지 단위나 launch시에 쓸 수 있다면 네임 스페이스를 써보도록 한다.

profile
🙃SUJI KIM🙃 🚩 Inha University Undergraduate 🚗 Autonomous Driving Robots 📷 Computer Vision 💫 SLAM

0개의 댓글