ROS #6 - ROS 프로그래밍 규칙(코드 스타일) & 프로그래밍 기초(파이썬)

남생이·2024년 10월 7일

ROS

목록 보기
4/28

1. ROS 프로그래밍 규칙

1.1 코드 스타일 가이드

  • 오픈 소스 커뮤니티에서 가장 많이 사용되고 있는 인기있는 가이드라인이 존재
  • 협업 시 코드 가독성 등을 위하여 코드 스타일 가이드라인을 따르는 것이 필요

1.2 기본 이름 규칙

기본 네이밍 3가지

명칭설명비고
''snake_case모두 소문자파일 이름 및 변수명, 함수명
CamelCased단어첫글자 대문자타입 및 클래스, ROS 인터페이스 파일
ALL_CAPITALS모두 대문자상수
  • 패키지 생성 시 만들어지는 파일의 경우 규칙을 따르지 않음

1.3 Python && C++ style

  • PEP 8을 준수
Python
기본 규칙파이썬 3(3.5 이상)을 사용
라인 길이최대 100문자
이름 규칙- CamelCased: 타입, 클래스
- snake_case: 파일, 패키지, 인터페이그, 모듈, 변수, 함수, 메소드
- ALL_CAPITALS: 상수
공백문자 vs 탭- 기본 들여쓰기 = space*4 (tab key는 사용 금지)
- hanging indent(문장 중간에 들여쓰기) -> K&R, BSD, GNU
괄호(Brace)- 계산식 및 배열 인덱스로 사용
- 자료형에 따라 적절한 괄호를 사용
주석- """(문장주석)
- #(구현 주석)
린터- 파이썬 코드 스타일의 자동 오류 검출을 위하여 ament_flake8 사용
기타- 모든 문자는 "가 아닌 '을 사용


C++
기본 규칙C++14 Standard
라인 길이최대 100문자
이름 규칙- CamelCased: 타입, 클래스
- snakecase: 파일, 패키지, 인터페이그, 모듈, 변수, 함수, 메소드
- ALL_CAPITALS: 상수
- 소스파일: .cpp
- 헤더파일: .hpp
- 전역변수는 되도록 사용하지 않고 사용할 경우 'g'접두어 붙이기
- 클래스 멤버 변수: 마지막에 (
_)붙이기
공백문자 vs 탭-기본 들여쓰기(indent) = space*2
- class의 접근 지정자 (public, protected, private)는 들여쓰기를 하지 않는다
괄호(Brace)if, else, do, while, for 구문에 괄호 사용 {}
주석- 문서 주석 /* */
- 구현 주석 //
린터c++ 코드 스타일의 자동 오류 검출(ament_cpplint, ament_uncrustify)
정적 코드 분석(ament_cppcheck)
기타- Boost 라이브러리의 사용은 피하기
- 포인트 구문: char"c;처럼 사용
- 중첩 템플릿: set<list< string >>

1.4 files

1.4.1 package.xml

  • 패키지에 대한 메타 정보를 포함하는 파일 -> 이름, 버전, 저작자, 라이센스 등의 정보 정의, 패키지의 의존성, 인터페이스 정보 포함(메시지, 서비스, 액션 등)
  • 사용 목적
    - 소스 코드를 실제 가능한 프로그램이나 라이브러리로 변환하기 위해 colocn build를 수행 시 package.xml을 참조하여, 빌드할 패키지들 사이의 의존성을 해석 및 적절한 빌드 순서를 결정
    - 패키지의 의존성을 설치하기 위해 rosdep과 함께 사용될 때 이 파일의 정보를 기반으로 진행

1.4.2 CMakeLists.txt

  • 패키지 내 코드를 빌드하는 방법을 기술하는 파일

  • 빌드에 필요한 컴파일러, 라이브러리, 소스 파일 등을 명시하고, 실행 파일, 라이브러리, 메시지, 서비스 등의 빌드 대상 및 의존성 관리를 설정

  • 빌드 프로세스를 자동화하기 위한 CMake 빌드 시스템에 의해 사용

  • 사용 목적
    - ros2에서 패키지의 빌드 규칙 정의
    - cmake가 각 패키지를 어떻게 컴파일하고 링크할지 지시하는 지침을 포함 p17

CMakeLists.txt의 역할
1. 패키지에 필요한 최소 CMake 버전 지정
2. 프로젝트 이름과 버전 설정
3. 빌드해야 할 타겟 정의 --> executables, libraries
4. 필요한 종속성 패키지를 찾고 링크
5. 특정 빌드 옵션을 설정하거나 사용자 정의 빌드 규칙
6. 테스트 실행 및 설치 규칙을 정의
  • setup.py, cfg와의 비교
    - setup.py, cfg는 주로 python 패키지와 관련된 설정을 정의,
    - CMakeLiset.txt는 C/C++ 코드의 컴파일과 링크, ROS에서 사용되는 메시지 및 서비스 생성을 정의
  • Package.xml과의 비교
    - package.xml은 패키지의 메타데이터와 의존성을 관리하는데 중점
    • CMakeLists.txt는 빌드시 필요한 지침을 담고 코드 컴파일과 관련
    • 두 파일은 함께 작동하여 ROS2 패키지의 빌드와 배포를 가능하게 함

1.4.3 setup.py & setup.cfg

https://velog.io/@rlwnd0122/ROS2-setup.py-setup.cfg

1.4.4 추가 cmakelist, package.xml

https://velog.io/@rlwnd0122/ROS2-package.xml-CMakeLists.txt

profile
공부하는 거북이

0개의 댓글