반응형

ROS2 FOXY Fitzroy

 

ROS2에서 패키지를 만들기 위한 방법

 

 

1) 패키지 생성

cd ~/robot_ws/src
ros2 pkg create [패키지명] --build-type ament_python
  1. 이전에 만들어 놓은 ROS2 워크스페이스 src에 [패키지명]으로 패키지를 생성
  2. '--build-type ament_python'
    1. 파이썬으로 패키지를 생성할것이기에 ament_python으로 빌드하도록 설정
  3. src 폴더내에 [패키지명]으로 된 폴더가 생성됨
  4. ros2 pkg create [패키지명] --build-type ament_python --dependencies rclpy std_msgs
    1. 패키지 생성시 의존성을 한번에 설정하는 방법
      1. 현재 rclpy와 std_msgs가 추가됨
      2. 아래 package.xml에서 설명

 

2) 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>test1234</name>
  <version>0.0.0</version>
  <description>TODO: Package description</description>
  <maintainer email="lee@todo.todo">lee</maintainer>
  <license>TODO: License declaration</license>

  <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>

 

  1. 의존 패키지
    1. 의존 패키지 내용을 적는 부분
    2. 실행시킬 패키지가 사용하는 라이브러리라 생각하면 됨
    3. 위의 패키지 생성에서 뒤에 '--dependencies rclpy std_msgs'를 붙인 경우 이미 의존 패키지 설정이 되어 있음
  2. 빌드 타입
    1. 우린 파이썬으로 만들것이기에 빌드 타입이 'ament_python'으로 설정되어 있음
      1. 위에서 '--build-type ament_python'으로 설정되었기에 건드릴것 없음
  3. 포인트
    1. 의존 패키지 내용 잘 확인 할것
      1. 위에 패키지 생성시 안적었으면 여기다 적으면 됨
    2. 빌드 타입 확인 할 것
      1. 파이썬인지 cpp(ament_cmake)인지 확인 할 것

 

3) setup.py

# 기본 내용

from setuptools import setup

package_name = 'test1234'

setup(
    name=package_name,
    version='0.0.0',
    packages=[package_name],
    data_files=[
        ('share/ament_index/resource_index/packages',
            ['resource/' + package_name]),
        ('share/' + package_name, ['package.xml']),
    ],
    install_requires=['setuptools'],
    zip_safe=True,
    maintainer='lee',
    maintainer_email='lee@todo.todo',
    description='TODO: Package description',
    license='TODO: License declaration',
    tests_require=['pytest'],
    entry_points={
        'console_scripts': [
        ],
    },
)
  1. entry_points
    1. 여기에 패키지 노드 이름 작성
      1. 나중에 실행시 ros2 run test1234 hello_pub 또는 ros2 run test1234 hello_sub 로 실행
    2. 노드 이름과 파이썬 파일을 연결

 

4) 결론

  1.  패키지 생성
    1. 어려울것 없음
    2. 실수로 옵션 빼먹어도 package.xml에서 수정 가능
      1. 단 '--build-type ament_python'빼먹으면 패키지 폴더내에 생성되는 파일이 다름
      2. 잘 확인해서 생성할것
  2.  package.xml
    1. 의존 패키지 확인이 매우 중요
    2. 나머지 내용은 저작자, 라이센스 등 부수적 내용
      1. 추후에 찾아서 배포판을 만들시 자세히 작성
  3. setup.py
    1. 'entry_points'에 사용할 노드명, 경로 잘 입력할 것

 

 

아래 출처의 내용을 수정 변경하였습니다.

개인적 공부를 위해 올린 글로 공부하실분은 아래 링크의 글을 참고하시기 바랍니다.

출처 : 오로카 카페 (cafe.naver.com/openrt/24450)

반응형

+ Recent posts