ROS2 알고리즘 통합 방법 - JOCIIIII/PX4-PILS-Runner GitHub Wiki
Warning
- 본 매뉴얼은 Quick Start Guide를 진행한 것으로 가정하고 작성된 문서입니다. Quick Start Guide를 진행하지 않았다면 Quick Start Guide 문서를 따라 진행해주세요.
Warning
- 본 매뉴얼은 개별 알고리즘 패키지의 빌드가 정상적으로 된다는 가정하에 진행됩니다.
- 개별 알고리즘 패키지 빌드가 정상적으로 되지 않은 상태에서 통합을 진행하면 디버깅이 어려울 수 있습니다.
- 아래 명령어로 기존 ROS2 알고리즘이 저장되어 있는 폴더를 엽니다.
open ~/Documents/A4VAI-SITL/ROS2/ros2_ws/src
Note
기본적으로 ROS2 알고리즘은 ~/Documents/A4VAI-SITL/ROS2/ros2_ws/src 폴더에 저장됩니다.
- 폴더에서 기존 ROS2 패키지를 삭제하고 변경된 알고리즘 ROS2 패키지를 추가합니다.
- 이어서, 아래 명령어로 ROS2 패키지와 메시지들을 빌드합니다:
cd ~/PX4-SITL-Runner
./scripts/run.sh ros2 build ros2_ws
./scripts/run.sh ros2 stop
Warning
터미널에서 빌드오류가 발생하는지 확인하세요.
Warning
./scripts/run.sh ros2 build 로 빌드를 하면 안됩니다. airsim 등 다른 ROS2 패키지와 같이 빌드가 되어 이경우엔 Quick Start Guide를 다시 실행하십시오.
- 통합 환경에서는 각 알고리즘의 unit test을 지원합니다.
- unit test에서 문제가 없는 코드의 경우 통합환경에 바로 반영해도 문제가 발생하지 않습니다.
- 아래 명령어로 path planning unit test를 실행합니다.
cd ~/PX4-SITL-Runner
./scripts/run.sh gazebo-classic-airsim-sitl test path-planning
- 종료 시 아래 명령어로 알고리즘 unit test를 종료합니다.
./scripts/run.sh gazebo-classic-airsim-sitl stop
Note
- 시작지점과 도착지점을 바꾸고 싶은 경우 algorithm_test의 path_planning_test.py에서 코드를 수정합니다.
- 아래 명령어로 path_planning_test.py파일을 엽니다.
code ~/Documents/A4VAI-SITL/ROS2/ros2_ws/src/algorithm_test/algorithm_test/path_planning_test.py
- path_following_test.py의 26, 27번째 줄의 self.start_point와 self.goal_point를 수정 후 저장합니다.
# set start and goal point
self.start_point = [0.0, 5.0, 0.0]
self.goal_point = [950.0, 15.0, 950.0]
- 아래 명령어로 path fowlling unit test를 실행합니다.
cd ~/PX4-SITL-Runner
./scripts/run.sh gazebo-classic-airsim-sitl test path-fowlling
- 종료 시 아래 명령어로 알고리즘 unit test를 종료합니다.
./scripts/run.sh gazebo-classic-airsim-sitl stop
Note
Wapoint를 바꾸고 싶은 경우 algorithm_test의 path_following_test.py에서 코드를 수정합니다. 아래 명령어로 path_following_test.py파일을 엽니다.
code ~/Documents/A4VAI-SITL/ROS2/ros2_ws/src/algorithm_test/algorithm_test/path_following_test.py
path_following_test.py의 26, 27, 28번째 줄의 self.waypoint_x와 self.waypoint_y, waypoint_z를 수정 후 저장합니다.
# set waypoint
self.waypoint_x = [0.0, 72.28235294117647, 216.8470588235294, 349.36470588235295, 313.22352941176473, 445.74117647058824, ...
self.waypoint_y = [0.0, 0.0, 48.188235294117646, 180.70588235294116, 481.88235294117646, 614.4, 746.9176470588235, ...
self.waypoint_z = [12.0, 20.0, 38.0, 103.0, 109.0, 68.0, 151.0, 84.0, 20.0, 35.0]
- TBD
Note
- ~/Documents/A4VAI-SITL/ROS2/logs 폴더에 각 노드의 실행 결과가 나타납니다. 에러는 각 노드 파일에서 확인할 수 있습니다. [!WARNING]
- print는 출력이 안되는 버그가 있습니다. 가능한 self.get_logger().info("내용")를 사용하세요.
- 디버깅 방법
- 기본적으로 디버깅은 debug.sh shell script를 수정함으로써 수행됩니다.
- debug.sh는 터미널과 동일한 방식으로 사용하면 됩니다.
- debug.sh는 시뮬레이션 시작과 동시에 실행됩니다.
- 일반적으로 Error는 두가지가 발생합니다
- 파이썬 패키지가 없는 경우(module import error)
- 정해진 ICD 인터페이스와 다를 경우
- 아래 명령어로 debug.sh shell script를 엽니다.
code ~/PX4-SITL-Runner/scripts/ros2/debug.sh
- debug.sh 파일의 # USER-DEFINED SATEMENTS 하단에 pip install <패키지 이름>을 추가합니다. 그러면 시뮬레이션 시작과 동시에 파이썬 패키지가 설치됩니다.
EX)
# pip install msgpack-rpc-python
# pip install airsim
- 다시 시뮬레이션을 실행하고 필요한 파이썬 패키지를 모두 추가합니다.
./scripts/run.sh gazebo-classic-airsim-sitl debug ros2
- 정해진 ICD 인터페이스와 다를 경우는 코드 수정이 필요합니다.
- 아래 명령어로 소스코드 폴더를 엽니다.
code ~/Documents/A4VAI-SITL/ROS2/ros2_ws/src
-
이후 코드를 디버깅합니다.
-
코드 디버깅이 끝나면 시뮬레이션을 실행합니다.
./scripts/run.sh gazebo-classic-airsim-sitl debug ros2
- 신규 노드 실행 추가는 아래의 명령어로 debug.sh를 실행합니다.
code ~/PX4-SITL-Runner/scripts/ros2/debug.sh
- USER-DEFINED SATEMENTS에 아래와 같이 ros2 run을 추가하면 됩니다.
ros2 run <패키지 이름> <실행 노드> &
- VS CODE
code ~/Documents/A4VAI-SITL/ROS2/ros2_ws/src
code ~/PX4-SITL-Runner/scripts/ros2/debug.sh
- 실행 터미널 세팅
cd ~/PX4-SITL-Runner
./scripts/run.sh gazebo-classic-airsim-sitl debug ros2
- 아래 명령어를 이용해 시뮬레이션을 시작합니다.
# xhost +는 매 재부팅 시마다 한 번씩만 실행해주시면 됩니다.
xhost +
cd ~/PX4-SITL-Runner
./scripts/run.sh gazebo-classic-airsim-sitl run
- 시뮬레이션 종료는 아래 명령어로 가능합니다.
cd ~/PX4-SITL-Runner
./scripts/run.sh gazebo-classic-airsim-sitl stop