ROS

ROS1-02. 주요 개념 정의[1]

dkjeong 2022. 7. 19. 10:45

노드(node)

  • ROS는 하나의 실행 주체를 Node로 정의한다.
  • 전문적인 표현으로 POSIX(Portable Operating System Interface)라고 한다.
  • 노드간의 연결을 Edge라고 호칭하며, TCP(P2P) 연결 방식이다.
  • 이렇게 각 실행 주체를 구분함으로서, 에러 발생시 해당 노드만 종료시킨다.
  • 다양한 노드간의 데이터 전달을 총괄하는 것이 roscore 이다.

 

roscore

  • roscore는 각 노드가 발행(publish)/구독(subscribe)원하는 메시지스트림(stream)의 세부사항(이름 및 주소)을 알려준다.
  • 이러한 확인(=탐색)과정은 '짧게' 일어난다.
  • 또한 roscore 없이는 다른 노드를 찾을 방법이 없다.
  • 그래서 각 노드는 roscore의 주소값을 환경변수로 가지고 있어야 한다. 일반적으로 ~/.bashrc에서 아래와 같이 설정한다. 
export ROS_MASTER_URI=http://192.168.XXX.XXX:11311

 

캣킨(catkin)

  • catkin은 ROS의 빌드 시스템이다. 
  • 이 빌드 시스템은 workspace에 있는 모든 소스파일을 한꺼번에 빌드하는데, 이 때문에 실행시 아래와 같이 workspace로 이동하여 실행해야 한다.
$cd ~/catkin_ws
$catkin_make
  • catkin_make 를 실행하면, 워크스페이스 폴더안에 'build'와 'devel' 폴더가 만들어 지는데, 'build'는 C++ 빌드파일들이 저장되는 곳이기 때문에 파이썬의 경우 (대부분) 사용하지 않는다. 반면 devel이라는 폴더 안에 다양한 환경 파일들이 만들어 진다. 

 

워크스페이스(workspace)

  • catkin 빌드가 워크스페이스 단위로 되기 때문에, 하나의 workspace가 정의되어 있어야 하는데, 이 폴더의 정의는 워크스페이스 안에 있는 setup.bash를 실행하는 과정에서 등록이 되기 때문에 해당 스크립트를 아래와 같이 ~/.bashrc에서 실행해 놓아야 한다. 
source /opt/ros/melodic/setup.bash
source ~/catkin_ws/devel/setup.bash
  • ~/catkin_ws/devel/setup.bash안에 등록된 기본 폴더 정의 문구
_CATKIN_SETUP_DIR=$(builtin cd "`dirname "${BASH_SOURCE[0]}"`" > /dev/null && pwd)
. "$_CATKIN_SETUP_DIR/setup.sh"
  • 워크스페이스 공간을 만들고 최초에 초기화 하는 작업은 아래 명령어를 통해 할 수 있다. 
  • 워크스페이스 안에 여러 개의 프로젝트(패키지)를 생성하여 작업 할 수 있는데, 아래 명령어를 통해서 프로젝트 폴더가 생성된다. 
$cd ~/catkin_ws/src
$catkin_init_workspace
  • 위 명령어를 실행하면, src 폴더 안에 워크스페이스 빌드를 총괄하는 환경변수인 CMakeLists.txt가 생성된다. 

 

패키지(실제 프로젝트 공간)

  • 실제로 하나의 프로세스(=하나의 프로그램? = 하나의 프로젝트?)는 패키지라는 이름으로 워크스페이스 안에 만들게 되는데, 아래 명령어를 통해 패키지를 최초 생성할 수 있다. 
$cd ~/catkin_ws/src
$catkin_create_pkg my_code rospy
  • my_code는 내가 만들 패키지 이름을 의미하고, 그 뒤에 붙는 것은 종속성이 있는 다른 패키지이다. (기본적으로 rospy는 python 패키지라는 뜻이고, roscpp는 C++ 패키지라는 뜻이다.) 
  • 하나의 패키지 안에는 해당 패키지의 빌드 환경을 설정하는 CMakeLists.txt 파일과 타 패키지와의 연계성을 설정하는 package.xml이라는 파일이 생성된다. 
  • 외부에서 설치된 패키지는 ~/catkin_ws/src 안에서 확인할 수 있다.