전공/컴퓨터 코딩 데이터

ROS2 기본 구조와 패키지

흔한 학생 2024. 10. 3. 14:29

ROS2 기본 구조

ROS2의 기본적인 폴더&파일 구성과 패키지에 알아보려고 한다.

우선 ROS2는 /opt/ros/[버전이름] 폴더에 설치된다.

ROS2 humble의 경우 설치 경로 다음과 같다. /opt/ros/humble 

사용자 작업폴더(워크스페이스 폴더) 는 주로 ~/robot_ws/ 와 같이 위치한다.

즉 전체 경로를 적어보자면 다음과 같다. /home/[username]/robot_ws

ROS2 패키지

패키지는 ROS2 프로그램 개발의 기본 단위라고 할 수 있다.

이 패키지는 ROS의 최소 단위 실행 프로세서인 노드를 포함하며 여러 노드를 실행하기 위한 launch 파일과 같은 실행&설정 파일을 포함한다.

 

ROS2 패키지 설치 및 빌드

패키지를 사용하기 위해서는 1. 설치 후 실행 하는 방법과 2. 소스코드 다운로드 후 빌드해 사용하는 방법이 있다.

1. 바이너리 설치

sudo apt install ros-humble-teleop-twist-joy

2. 소스코드 설치

워크스페이스의 src 경로에서 git 클론하고 워크스페이스 경로로 돌아와 빌드

$ cd ~/robot_ws/src 
$ git clone https://github.com/ros2/teleop_twist_joy.git 
$
cd ~/robot_ws/ 
$ colcon build --s ymlink-install --packages-select teleop_twist_joy

 

ROS1 에서는 빌드툴로 주로 catkin 을 사용했지만 ROS2에서는 주로 colcon을 사용하는 듯 하다.

전체 패키지 빌드

 cd ~/robot_ws && colcon build --symlink-install

해당 패키지만 빌드

cd ~/robot_ws && colcon build --symlink-install --packages-select [패키지 이름]

 

colon build와 colcon build symlink,,, 둘의 차이에 제대로 알지 못하는 사람은 colcon build만 사용하기 

ROS2 패키지 생성

패키지를 만드는 명령어는 

ros2 pkg create 이며

ros2 pkg create [패키지 이름] --build-type [ament_python 혹은 ament_cmake] --dependencies rclpy std_msgs

ros2 pkg create --build-type [ament_python 혹은 ament_cmake] --node-name

등등 과 같이 쓸 수 있는가보다?

ROS2 패키지 파일 구성

  • 패키지 설정 파일 package.xml
    - 패키지 정보를 기술하는 필수 파일
    - 이름, 저작자, 의존성 패키지 등 기술
  • 빌드 설정 파일 CMakeLists.txt
    - 빌드 환경을 기술한 파일
    - C++ 을 이용한 패키지나 RQt plugin의 경우 CMake를 이용하기에
  • 파이썬 패키지 설정 파일 setup.py
  • 파이썬 패키지 환경 설정 파일 setup.cfg
  • RQt 플러그인 설정 파일 plugin.xml
    - RQT 플러그인으로 작성 시 필수 파일
  • 패키지 변경로그 파일 CHANGELOG.rst
    - 패키지 변경 로그(업데이트 내역 기술) 파일
    - 개발 이력 추적
  • 라이선스 파일 LICENSE
    - 코드에 사용된 License
  • 패키지 설명 파일 README.md

 

 

ROS 인터페이스 만들기

인터페이스로만 구성된 패키지를 구성하여야 함.

사용하려는 패키지에 인터페이스를 포함시켜도 되지만 별도로 만드는 것이 의존성면에서 관리하기 좋다.

패키지를 만들고 패키지 폴더에 msg, srv, action 폴더를 만든다.

그리고 각 폴더에 인터페이스 파일을 만든다.

 

패키지 설계 예시

Publisher 

  • 토픽 발행

Subsicriber

  • 토픽 구독

Service Client

  • 서비스 서버 노드에 요청

Service Server

  • 요청값으로 받은 값을 이용해 연산 후 클라이언트 노드에 응답

Action

  • 액션 목표값을 전달, 피드백받, 최종 결과 보냄

 

노드 실행 방법

토픽 / 서비스 / 액션/ 파라미터 / 실행인자 / 런치 프로그래밍 

ros2 run [해당노드이름]

여러 노드 한 번에 실행

launch 파일 실행

ros2 launch [파일 이름].launch.py