자율주행 시스템 구성을 위한 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() 호출 전에 선언을 해줘야한다.
◦
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 실행 파일 및 라이브러리를 찾는 데 필요함. 무조건 실행해야함