[ROS] 03 ROS2 Workspace

1 minute read

Published:

In this post, ros lecture 3 is introduced.

ROS2 Workspace

ROS에서 패키지는 기능을 구현하는 가장 작은 단위이고, 워크스페이스는 여러 개의 패키지를 모아 관리하는 작업 공간이다.

colcon은 ROS 2 프로젝트를 빌드(build)하기 위한 도구이다. 다음 명령어로 설치한다.

sudo apt install python3-colcon-common-extensions 

예를 들어, 다음과 같은 프로젝트 구조를 생각하자.

ros2_ws/
 ├── src/
 │    ├── my_robot
 │    ├── my_msgs
 │    └── camera_node
  • colcon build를 하면 현재 워크스페이스 안의 모든 ROS 패키지를 컴파일한다. 실행하면, build/, install/, log/ 디렉터리가 생기는데, 각각 컴파일 중간 파일, 실행 가능한 결과물, 빌드 로그를 담는다.
  • ~/.bashrc 에 source ~/ros2_ws/install/setup.bash 를 추가하여, 내가 방금 빌드한 패키지를 ROS가 인식하도록 한다.

  • 패캐지를 만들기 위해선 src 디렉터리에서 ros2 pkg create my_robot_controller --build-type ament_python --dependencies rclpy 와 같이 명령어를 입력한다.

    • --build-type ament_python : ROS2 패키지는 python과 C++ package 두 개가 있는데 python package로 작성할 것임을 의미한다.
    • --dependencies rclpy : Python에서 노드를 만들려면 import rclpy를 사용한다. --dependencies rclpy 를 적으면 패키지 생성시 package.xml 안에 <depend>rclpy</depend> 가 자동으로 들어간다.
  • src/my_robot_controller 안의 디렉터리 구조는 다음과 같게 된다.

    • my_robot_controller/
      ├── package.xml
      ├── setup.py
      ├── setup.cfg
      ├── resource/
      │   └── my_robot_controller
      ├── my_robot_controller/
      │   ├── __init__.py
      └── test/
      

📝 XML

XML(eXtensible Markup Language)은 데이터를 구조적으로 저장하기 위한 형식이다. ROS2에서 package.xml은 이 패키지가 어떤 패키지인지 설명하는 메타데이터 파일이다.

<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
  <name>my_robot_controller</name>
  <version>0.0.0</version>
  <description>TODO: Package description</description>
  <maintainer email="arcstone@todo.todo">arcstone</maintainer>
  <license>TODO: License declaration</license>

  <depend>rclpy</depend>

  <test_depend>ament_copyright</test_depend>
  <test_depend>ament_flake8</test_depend>
  <test_depend>ament_pep257</test_depend>
  <test_depend>python3-pytest</test_depend>

  <export>
    <build_type>ament_python</build_type>
  </export>
</package>

Leave a Comment