지금까지 총 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를 받아들여 소스코드에 적힌 것들을 수행한다.
https://github.com/udacity/RoboND-simple_arm/
look_away의 소스코드를 공부하는 과정에서 void와 함수 return에 대해 알게 되었고
void는 값을 리턴하지 않아도 되는, 리턴값이 필요없는 함수에 사용하며 '리턴값이 필요없는'이란 동작만 하면 되고 값을 도출할 필요가 없음을 알았다.
함수를 return한다는 것은 즉 함수를 종료하고 함수로부터 빠져나올 때 쓴다는 것 정도로만 알아 두었다.
이 후에 look_away 뿐 아니라 다른 노드의 소스코드를 더 알아볼 계획이고
global define과 call back function(class {public .. private ..})에 대해 공부한다.
'기계공학부 시절의 기록 > 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 |
댓글