rclpy 빌드 / 설치 /배포

About_work·2024년 3월 5일
0

ros2

목록 보기
23/41

1.0. 개념 정리


1.1. 새 ROS 2 패키지 생성

  • ros2 pkg create 명령어: 새로운 패키지를 생성하는 데 사용 (ROS 2 개발 환경에서 패키지가 올바르게 인식되고 사용될 수 있도록)
    • ROS 2에서 패키지
      • 관련된 기능, 라이브러리, 노드(nodes), 프로세스, 코드 파일, 데이터 등을 포함하는 소프트웨어의 단위 또는 구성 요소를 의미
      • 이 패키지는 특정 로봇 기능이나 애플리케이션을 구현하기 위해 필요한 모든 자원을 묶어 관리
      • 예를 들어, 센서 데이터 처리, 이미지 인식, 동작 계획 등의 기능을 갖는 패키지를 생성할 수 있음
      • ros2 pkg create 명령어를 통해 이를 생성함으로써 ROS 2 개발 환경에서 올바르게 인식되고 사용될 수 있도록 합니다.
      • 패키지 빌드/설치/배포를 용이하게 하기 위해 수행!
  • 목적
    • 패키지의 기본 구조를 설정
    • 필요한 메타데이터 파일들을 생성
  • 터미널을 열고 다음 명령어를 실행하세요:
ros2 pkg create --build-type ament_python <your_package_name> --dependencies rclpy sensor_msgs
  • <your_package_name>을 원하는 패키지 이름으로 변경하세요.
    • --build-type ament_python:
      • 이 옵션은 패키지의 빌드 시스템과 빌드 방법을 지정
      • ament_python은 Python 기반의 패키지를 위한 빌드 타입
      • Ament 빌드 시스템을 사용하여 Python 스크립트 및 모듈을 설치하고 관리
    • <your_package_name>
      • 여기에는 생성하려는 패키지의 이름을 지정
      • 이 이름은 고유해야 하며 ROS 2 네이밍 규칙을 따라야 함
      • 일반적으로 소문자를 사용하며, 단어 사이에는 언더스코어(_)를 사용
    • --dependencies rclpy sensor_msgs
      • 이 옵션은 새로운 패키지가 의존하는 다른 패키지들을 지정
      • 이 의존성들은 패키지를 빌드하고 실행할 때, 필요한 모듈이 자동으로 찾아지고, 필요한 경우 설치되도록 보장

  • ros2 pkg create 명령어를 사용하면 ROS 2 패키지의 기본적인 디렉토리 구조와 필요한 설정 파일들을 생성
  • 명령어를 실행하여 <your_package_name>으로 지정된 이름의 패키지를 생성하면, 다음과 같은 디렉토리 구조와 파일들이 생성됩니다:
your_package_name/
├── package.xml
├── setup.cfg
├── setup.py
├── resource/
│   └── your_package_name
└── your_package_name/
    ├── __init__.py
    └── (other python files)

  • resource/:

    • 패키지 추가 리소스를 포함하는 디렉토리
    • 여기에 포함된 your_package_name 파일은 일반적으로 패키지의 리소스와 관련된 정보를 포함
    • 예를 들어, 패키지의 리소스 파일, 설정 파일 등이 여기에 포함될 수 있습니다.
    • example_pkg의 경우 특별한 리소스 파일이 없어도 됩니다.
  • your_package_name/:

    • 실제 Python 패키지 코드를 포함하는 디렉토리
    • 이 디렉토리 이름은 패키지 이름과 동일하며,
    • 패키지의 모듈 및 패키지 초기화를 위한 __init__.py 파일을 포함
    • 여기에는 패키지의 실제 기능을 구현하는 Python 파일들이 위치
    • init.py:
      • Python에서 패키지의 디렉토리로 인식되게 하는 빈 파일
      • 이 파일이 있는 디렉토리는 Python 모듈로서 import될 수 있음
  • 이 구조를 통해 ROS 2 패키지가 Python 언어로 구성되고 관리될 수 있으며, ament_python 빌드 시스템과 ROS 2의 인프라를 통해 패키지를 쉽게 빌드하고 실행할 수 있음.

  • 추가적으로 필요한 의존성은 package.xml에 명시되며, 패키지의 빌드 및 설치 과정에서 적절히 처리됩니다.


1.1. 위 명령어로 패키지를 생성했는데, 그 후에, geometry_msgs 의존성도 갖추고 추가로 싶어지면?

  • 기존 패키지에 새로운 의존성을 추가하기 위해, package.xml 파일과 패키지 설정 파일을 수정하면 됩니다.
  • geometry_msgs를 예로 들면 다음과 같이 할 수 있습니다:

1. package.xml 수정

package.xml 파일을 열고, geometry_msgs에 대한 의존성을 추가합니다. <depend> 태그를 사용하여 이를 명시할 수 있습니다. 예를 들어:

<depend>geometry_msgs</depend>
  • 이 태그를 파일 내의 적절한 위치에 추가합니다. 일반적으로 다른 <depend> 태그들과 함께 그룹으로 묶어 관리합니다.

2. 의존성 설치

  • 새로운 의존성을 추가한 후에는 ROS2 환경에서 해당 의존성이 설치되어 있는지 확인해야 합니다.
  • geometry_msgs는 ROS2의 표준 메시지 패키지 중 하나이므로, 대부분의 ROS2 설치에 이미 포함되어 있을 것입니다.

1.2. Python 스크립트 작성

  • 예: 패키지 디렉토리의 your_package_name/your_package_name 폴더 안에 image_publisher.py라는 이름으로 파일을 생성. (아래 코드)

1.3. 패키지 설정 (Optional)

entry_points={
    'console_scripts': [
        'image_publisher = your_package_name.image_publisher:main',
    ],
},
  • your_package_name을 실제 패키지 이름으로 변경하세요.

1.4. 빌드 및 실행

1.4.1. 빌드

  • 패키지를 빌드하려면, 터미널에서 패키지가 위치한 디렉토리로 이동한 다음, 다음 명령어를 실행
colcon build --packages-select <your_package_name>
  • your_package_name의 부모 디렉토리에서 실행해야하는듯
your_package_name/
├── package.xml
├── setup.cfg
├── setup.py
├── resource/
│   └── your_package_name
└── your_package_name/
    ├── __init__.py
    └── (other python files)

1.4.2. 노드 실행

  • 빌드가 완료되면, 다음과 같이 노드를 실행할 수 있습니다:
. install/setup.bash
source install/setup.bash
ros2 run <your_package_name> image_publisher
  • https://velog.io/@jk01019/source-명령어와-sh-명령어와-.-명령어의-차이
  • install/setup.bash 파일은 ROS2 및 일부 다른 소프트웨어 프로젝트에서 빌드 과정 이후 생성되는 스크립트 파일
    • 역할: 빌드된 패키지와 프로젝트가 사용하는 환경 변수, 경로, 그리고 다른 설정들을 현재 사용자의 쉘 환경에 로드
    • 즉, 이 스크립트를 source 명령을 통해 실행함으로써, 사용자는 해당 터미널 세션에서 빌드된 패키지를 사용 가능

source install/setup.bash의 주요 기능:

  • 환경 변수 설정
    • ROS_PACKAGE_PATH, LD_LIBRARY_PATH, PYTHONPATH와 같은 중요한 환경 변수들을 설정
    • 빌드된 패키지와 라이브러리를 ROS2 런타임 및 사용자가 쉽게 접근할 수 있도록
  • 패키지 경로 추가
    • ROS2 시스템이 패키지를 찾을 수 있도록 빌드된 패키지의 위치를 환경 변수에 추가
  • 자동 완성 활성화:
    • 일부 경우, source setup.bash 명령은 ROS2 명령어에 대한 쉘 자동 완성 기능을 활성화할 수 있습니다.
  • Workspace 초기화:
    • 특히 ROS2에서, 여러 workspace를 사용할 때 각각의 setup.bash를 source함으로써 현재 쉘 세션에서 활성화할 workspace를 변경할 수 있습니다.
  • 새로운 터미널 창을 열 때마다, 혹은 시스템을 재시작한 후에는 다시 해당 명령어를 실행해야 빌드된 패키지를 사용할 수 있습니다.

1.-1. 추가 질문



profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글