본문 바로가기
기계공학부 시절의 기록/ROS일기

새로운 node 추가 : subscribe와 client 수행하기

by juhyeonglee 2020. 8. 18.
728x90
반응형

지금까지 총 2개의 노드를 만들었는데 여기에 하나의 노드를 추가로 만들어 다른 2개의 노드로부터 message를 받는 실습을 했다.

 

새로운 노드를 추가하면 해야할 것이 있다.

1. 패키지 파일 안의 launch 파일에 있는 .launch를 수정해 새로운 노드가 roslaunch를 했을 때 실행되도록 수정한다.

2. 패키지 파일에 있는 CMakeList.txt 혹은 package.xml를 수정한다. (필요한 라이브러리, dependencies를 불러오기 위해?)

3. 최상위 파일에서 catkin_make로 build 한다.

4. 최상위 파일에서 

$ source devel/setup.bash

$ roslaunch <패키지이름> <launch파일이름.launch>

를 차례로 수행하여 모든 노드를 실행한다.

 

이렇게 새로운 노드인 look_away의 소스코드를 살펴보면 1개의 client와 2개의 subscriber를 만드는데

이는 safe_move 서비스가 있는 arm_mover노드에 request하고 : client

joint_position을 저장하는 publisher가 있는 simple_mover 노드로 부터 조인트 정보를 subscribe하고

새 터미널 창에서 rgb_camera를 실행하고 이로부터 이미지를 subscribe하기 위함이다.

 

새로운 터미널 창의 rgb_camera까지 하나의 노드로 생각하면  총 4개의 노드가 있고

그 중 look_away노드는 나머지 3개의 노드로부터 message를 받아들여 소스코드에 적힌 것들을 수행한다.

 

 

최종 결과물. 카메라로부터 들어온 이미지로부터 이미지 변화가 없으면 이를 정지한 것으로 인식하여 2개의 조인트를 90도로 회전하게 하는 코드를 수행한다. 터미널창에 rossevice all로 조인트를 0도(일직선 로봇)로 명령한다. 일직선이 되었을 때, look_away 소스코드에 따라 다시 90도로 돌아온다.

https://github.com/udacity/RoboND-simple_arm/

 

udacity/RoboND-simple_arm

RoboND Refresh mini-project to explain pub-sub architecture in ROS - udacity/RoboND-simple_arm

github.com

 

 

look_away의 소스코드를 공부하는 과정에서 void와 함수 return에 대해 알게 되었고

void는 값을 리턴하지 않아도 되는, 리턴값이 필요없는 함수에 사용하며 '리턴값이 필요없는'이란 동작만 하면 되고 값을 도출할 필요가 없음을 알았다.

함수를 return한다는 것은 즉 함수를 종료하고 함수로부터 빠져나올 때 쓴다는 것 정도로만 알아 두었다.

 

이 후에 look_away 뿐 아니라 다른 노드의 소스코드를 더 알아볼 계획이고 

global define과 call back function(class {public .. private ..})에 대해 공부한다.

728x90
반응형

'기계공학부 시절의 기록 > ROS일기' 카테고리의 다른 글

rviz, gazebo에서 모델 붕괴  (0) 2021.03.10
OpenManipulator-X(1)  (0) 2021.02.25
간단한 node 작성, 실행해보기  (0) 2020.08.16
200813일기 c++과 ros  (0) 2020.08.13
github에 push하기  (0) 2020.08.07

댓글