Search

04. Directory

SECTION
SYSTEM
태그
In progress
Date
Date 1
github
연관 된 작업 / 지식
작업자

자율주행 시스템 구성을 위한 ROS Directory 구성은 대략적으로 다음과 같다.

📂 driven_ros_final ⏐ ├ 📂 devel ├ 📂 build ⎣ 📂 src ⏐ ├ 📂 driven(pkg) ⏐ ├ 📂 include(cpp) ⏐ ├ 📄 CMakeList.txt ⏐ ├ 📄 package.xml ⏐ ├ 📂 launch ⏐ ⏐ ⎣ 📄 .launch ⏐ ├ 📂 src(python) ⏐ ⏐ ⏐ 📄 main_thread.py ⏐ ⏐ ├ 📂 control ⏐ ⏐ ⏐ ├ 📂 library ⏐ ⏐ ⏐ ⎣ ... ⏐ ⏐ ├ 📂 perception ⏐ ⏐ ⏐ ├ 📂 library ⏐ ⏐ ⏐ ⎣ ... ⏐ ⏐ ├ 📂 decision ⏐ ⏐ ⏐ ├ 📂 library ⏐ ⏐ ⏐ ⎣ ...
Bash
복사
📂 Driven_ws(Driven_autonomous_driving) ⏐ ├ 📂 devel ├ 📂 build ⎣ 📂 src ⏐ ├ 📂 perception(pkg) ⏐ ├ 📄 CMakeList.txt ⏐ ├ 📄 package.xml ⏐ ├ 📂 src ⏐ ⏐ ⏐ 📄 mapConvert.cpp ⏐ ⏐ ⎣ 📄 slam.cpp ⏐ ├ 📂 launch ⏐ ⏐ ⎣ 📄 .launch ⏐ ├ 📂 msg ⏐ ⏐ ⎣ 📄 .msg ⏐ ├ 📂 include ⏐ ⏐ ⎣ 📄 .h ⏐ ⎣ 📂 scripts ⏐ ⎣ 📄 node.py / .sh ⏐ ├ 📂 decision(pkg) ⏐ ⎣ ... ⎣ 📂 control(pkg)...
Bash
복사

src

src 에는 .cpp .c 소스코드 scripts 에는 .py .sh 파일을 넣어둔다.
.sh 파일의 경우는 쉘 스크립트라고 하며 보통 터미널에 입력하는 명령어를 해당 파일에 여러개 적어두어 하나하나씩 입력하는 노고를 줄여준다.

launch

launch 파일을 여러개의 노드를 실행하기 위해 필요하며

msg

msg 폴더에는 사용하고 싶은 메시지타입을 적어둔다.
int64 x int64 y string Class ...
Bash
복사

include

include 에는 #include <ros/ros.h> 와 같은 헤더파일을 쭉 넣어두고 src/node.cpp 에서는 #include header.h 와 같이 사용한다

CMakeList.txt

전체 구조
1.
최소 CMake 버전 요구사항 (cmake_minimum_required)
2.
패키지 이름 (project())
3.
빌드를 위해 필요한 다른 CMake/Catkin 패키지 (find_package())
4.
파이썬 모듈 지원 여부 (catkin_python_setup())
5.
메시지/서비스/액션 생성자 (add_message_files(), add_service_files(), add_action_files())
6.
메시지/서비스/액션 생성 실행 (generate_messages())
7.
패키지 빌드 정보 (catkin_package())
8.
빌드할 라이브러리와 실행파일 (add_library()/add_executable()/target_link_libraries())
9.
테스트 (catkin_add_gtest())
10.
설치 룰 (install())
.cpp 파일의 경우
// 실행 파일 타겟 add_executable(myProgram src/main.cpp src/some_file.cpp src/another_file.cpp) // 의존성 기술 add_dependencies(imageProjection ${catkin_EXPORTED_TARGETS} cloud_msgs_gencpp) // 실행 파일 타겟과 링크될 라이브러리를 지정 target_link_libraries(<executableTargetName>, <lib1>, <lib2>, ... <libN>)
JavaScript
복사
와 같이 CMakeList.txt에 추가해줘야 실행이 가능하다.
python 스크립트의 경우는 좀 다른데 이번 프로젝트에서는 slam 외 대부분 python 파일을 사용하니 이에 대해 좀 더 자세히 서술하겠다.
파이썬 실행 스크립트 설치하기
catkin_install_python(PROGRAMS scripts/myscript.py DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
Plain Text
복사
파이썬 모듈 지원 활성화
catkin_python_setup()
Plain Text
복사
이는 패키지에 python파일이 있는 경우 추가해줘야 하는데 generate_messages() 와 catkin_package() 호출 전에 선언을 해줘야한다.
그리고 해당 명령어 실행을 위해선 루트 디렉토리에 setup.py 를 추가해주어야 한다.
from distutils.core import setup from catkin_pkg.python_setup import generate_distutils_setup # fetch values from package.xml setup_args = generate_distutils_setup( packages=['lego_loam'], # 패키지 이름 package_dir={'': 'scripts'}, # py파일이 있는 폴더 위치 ) setup(**setup_args)
Python
복사
.py 파이썬 파일 내에서 상단에 추가해줘야 하는 것이 있다.
#!/usr/bin/env python3 # 파이썬 실행을 위해 #-*- coding:utf-8 -*- # 한글 주석을 위해
Plain Text
복사
1.
catkin_make 실행 이유:
catkin_make 명령어는 ROS 패키지를 빌드하고 컴파일하는데 사용. 패키지를 수정하거나 추가한 경우, 변경 사항을 반영하려면 catkin_make를 실행하여 패키지를 재빌드 해야함
2.
source devel/setup.bash 실행 이유:
ROS ws에서 devel/setup.bash 스크립트를 실행하면, 현재 터미널 세션에서 ROS 패키지와 관련된 환경 변수를 설정함. 이 환경 변수는 ROS 실행 파일 및 라이브러리를 찾는 데 필요함. 무조건 실행해야함