본문 바로가기

팀 프로젝트

C-2345 자세 제어 4족보행 로봇 #7 (ROS 7강-3 roslaunch)

반응형

●7강

https://www.youtube.com/watch?v=iGdQHi_wL1Y&list=PLRG6WP3c31_VIFtFAxSke2NG_DumVZPgw&index=7 

 

●Keyword

-roslaunch

 

 

 

●Study

7강 마지막엔 여러개의 노드를 한번에 실행 시킬 수 있는 명령어인 roslaunch를 배웠다.

 

 

roslaunch는 확장자 .launch 파일을 바탕으로 실행되는데 이 파일 또한 packge.xml파일과 같은 XML기반으로 작성된다.

 

 

 <node pkg="패키지명" type="노드명" name="노드name"/>

*위에 그대로 작성하면 되고 type에는 소스코드상에서 정한 그 노드의 진짜 이름을 넣고 name에는 launch로 실행시킬 때의 노드 이름을 임의로 넣으면 된다.

 

예를 들어

 

 <node pkg="패키지명" type="노드A" name="노드ㄱ"/>

 <node pkg="패키지명" type="노드A" name="노드ㄴ"/>

 

이렇게 넣으면 노드A가 노드ㄱ, 노드ㄴ으로 2개 실행된다.

 

한편 rosrun으로 노드A를 2번 실행시키면 먼저 실행시킨 노드는 꺼진다.

 

 

 

 

$roslaunch 패키지명 launch파일명 --screen

*작성한 launch파일을 바탕으로 노드들을 실행시킬 수 있다.

 

 

한편 launch로 실행시킨 node는 각각 실행했을 때 처럼 터미널 창이 떠서 rosinfo로 출력되는 메시지를 확인할 수 없다.

 

 

그래서 --screen을 붙여주면 roslaunch를 실행시킨 터미널에 노드간에 주고 받는 topic이 전부 보이게 된다.

 

 

 

 

+)그럼 만약 앞에서 만든 topic publisher, subscriber 2쌍을 만들어 각각이 topic을 주고 받게 하려고 

 

 <node pkg="ros_tutorial_topic" type="topic_publisher" name="pub1"/>

 <node pkg="ros_tutorial_topic" type="topic_subscriber" name="sub1"/>

 

 <node pkg="ros_tutorial_topic" type="topic_publisher" name="pub2"/>

 <node pkg="ros_tutorial_topic" type="topic_subscriber" name="sub2"/>

 

이렇게 작성하면 어떻게 될까?

 

노드의 실행상의 이름만 바뀌었기에 topic은 위와 같이 다른 그룹으로도 보내진다.

 

 

이때는 노드를 그룹으로 묶어주는 group tag를 추가해주면 된다.

<group ns="그룹명">
~
</group>

 

<group ns="group1">
<node pkg="ros_tutorials_topic" type="topic_publisher" name="pub1"/>
<node pkg="ros_tutorials_topic" type="topic_subscriber" name="sub1"/>
</group>

<group ns="group2">
<node pkg="ros_tutorials_topic" type="topic_publisher" name="pub2"/>
<node pkg="ros_tutorials_topic" type="topic_subscriber" name="sub2"/>
</group>

 

이렇게하면 pub-sub의 각 쌍이 다른 그룹으로 분리되어 topic도 그룹을 넘어서 보내지지 않는다.

 

 

이외에도 다른 태그가 많다.

 

 

 

 

 

 

 

강의에선 c++로 launch를 실습했으니 파이썬으로도 한번 실습을 해보았다.

 

아주 잘 작동한다.

 

 

*참고로 python으로 launch를 할 때 .launch에서 노드명에 꼭 .py를 붙여줘야 한다. 이거 까먹어서 10분정도 헤맸다...

반응형