🔔패키지 생성
- ROS 2 패키지 생성 방법에는 두 가지가 있다.
1. 직접 패키지 폴더를 만들어 그 안에 필수적인 파일 시스템에 필수적인 package.xml이나 CMakeLists.txt나 setup.py 등을 포함시켜 소스코드를 작성
2. ros2cli 명령어를 이용하는 것
보통은 주로 사용하는 기능을 중심으로 기본 패키지를 복사, 붙여넣기로 패키지를 만든 후 이름과 몇 가지 설정만 변경해 사용하는 방법이 편하다. 초반에는 익숙하지 않기에 ros2cli 명령어를 통한 작업이 더 편할 수도 있다.
ros2 pkg create [패키지이름] --build-type[빌드 타입] --dependencies [의존패키지1] [의존패키지n]
빌드 타입에서 RCL로 C++을 사용한다면 ament_cmake를 설정하고, 파이썬을 사용하면 ament_python을 입력한다.
GUI 프로그램 작성이 필요하면 파이썬을 쓰더라도, rqt plugin 계열을 사용해야 하기 때문에 ament_cmake를 입력하면 된다.
찾아서 적으니까 뭔 말을 이렇게 어렵게 했나 싶다;
그냥 GUI 프로그램 필요하면 C++이나 파이썬이나 ament_cmake 입력하자
$ ros2 pkg create test_pkg_rclcpp --build-type ament_cmake
$ ros2 pkg create test_pkg_rclpy --build-type ament_python
ros2 pkg create
: 사용자가 패키지 작성 시 ament 빌드에 필요한 CMakeLists.txt와 package.xml을 포함한 패키지 폴더를 생성한다
CTRL + ALT + T키를 통해 새로운 터미널을 열 수 있다.(여지껏 다른 프로그램 다운받아서 이 키가 새 터미널이 열리는줄..)
ROS 패키지 이름은 모두 소문자를 사용하며 공백이 있으면 안된다.
밑줄을 통해 각 단어를 잇는 것을 스타일 규칙으로 삼는다.
막론하고
$ros2 pkg create my_first_ros_rclcpp_pkg --build-type ament_cmake --dependencies rclcpp std_msgs
$ros2 pkg create my_first_ros_rclpy_pkg --build-type ament_python --dependencies rclpy rclpy std_msgs
1번이 c++, 2번이 python용 이다.
패키지 빌드
ROS2에서는 특정 패키지/전체 패키지를 빌드할 때는 colcon 빌드 툴을 사용한다.
코드가 있는 workspace로 이동하고 colocn build 명령어를 통해 전체를 빌드하게 된다.
빌드 옵션을 추가해 사용하는 게 일반적지만 특정 패키지만을 선택해 빌드하고자 하면
--packages-select나 --packages-up-to 옵션을 이용해, symlink를 이용하려면 --symlink-install 옵션을 붙여주면 된다.
✅자주 쓰는 빌드 명령어
1. 전체 패키지 빌드시 사용
$ cd ~/robot_Ws && colcon build --symlink-install
2. --packages-select옵션을 이용해 명령어 마지막에 특정패키지명을 기재해 해당 패키지만 빌드 시 사용
$ cd ~/robot_ws && colcon build --symlink-install --packages-select [패키지 이름]
3. --packages-up-to 옵션을 이용해 특정 패키지의 의존성 패키지들까지도 함께 빌드할 때 사용
$ cd ~/robot_ws && colcon build --symlink-install --packages-up-to [패키지 이름]
빌드 시스템에 필요한 부가 기능
- vcstool : ROS의 버전 컨트롤 시스템 툴
- rosdep : 의존성 관리 툴
- bloom : 바이너리 패키지 관리 툴
1️⃣ vcstool(버전 컨트롤 시스템 툴)
$ mkdir -p ~/ros2_foxy/src
$ cd ~/ros2_foxy
$ wget https://raw.githubusercontent.com/ros2/ros2/foxy/ros2.repos
$ vcs import src < ros2.repos
wget : 특정 리포지터리의 파일을 내려받음
vcs : Version Control System의 약자로 ROS 커뮤니티에서 사용하는 vcstool의 실행 명령어
ROS1에서는 rosws가 포함된 wstool을 이용하다가 ROS2에서는 vcstool을 사용한다.
vcstool은 여러 리포지터리 작업을 보다 쉽게 관리할 수 있도록 설계된 버전 관리시스템(vcs) 툴이다.
2️⃣ rosdep(의존성 관리 툴)
앞서 언급한 빌드 툴들은 각 패키지의 의존성을 고려한 빌드는 해결하지만, 의존성 자체를 해결하지는 못한다.
때문에 ROS에서 사용하는 rosdep 툴은 package.xml에 기술된 의존성 정보를 가지고 의존성 패키지들을 설치해 주는 역할을 한다.
$ sudo rosdep init
$ rosdep update
$ rosdep install --from-paths src --ignore-src --rosdistro foxy -y --skip-keys
"console_bridge fastcdr fastrtps rti-connext-dds-5.3.1 urdfdom_headers"
rosdep은 예시로 /ros2_foxy/src에 설치된 패키지들의 의존성을 보고 패키지들을 설치하거나 특재어 패키지는 의존성 문제를 무시한다. 각 패키지마다 package.xml의 의존성 옵션을 보고 직접 의존성 패키지들을 설치할 수도 있으나 간단하게 rosdep툴을 통해 해당 패키지의 의존성 환경을 해결하는 방법이 더 수월하다.
3️⃣ bloom(바이너리 패키지 관리 툴)
ROS에서는 바이너리 패키지 배포 및 관리를 위한 툴을 bloom이라고 한다.
해당 툴을 사용 시 바이너리 패키지를 관리하기 위한 메타 데이터를 생성하며 dpkg-buildpackage같은 플랫폼 종속 도구가 바이너리 패키지를 빌드하는데 사용된다.
1️⃣2️⃣번은 개발 과정에서 많이 사용되나 bloom은 개발이 모두 끝난 후 배포하고 유지 관리할 때 사용한다.
끄읕~
'Language & Framework & GIT > ROS2' 카테고리의 다른 글
[ROS] source /opt/ros/humble/setup.bash 와 source install/local_setup.bash 의 차이 (88) | 2023.10.25 |
---|---|
[ROS2] Underlay? Overlay? (85) | 2023.10.25 |
ROS2 : BUILD SYSTEM & BUILD TOOLS - 1 (24) | 2023.07.11 |
[ROS2] ROS DOCTOR를 통한 시스템 진단 - 1 (42) | 2023.07.10 |
[ROS] ROS Doctor? (28) | 2023.07.07 |
댓글