대회에 사용할 PX4-Autopilot v1.15.0-beta2를 설치해야 한다.
기존의 PX4-Autopilot에서 바로 checkout 해도 되지만, 혹시 모를 issue에 대비해서 그냥 지웠다가 다시 까는 것을 추천한다. (reference)
-
기존 PX4-Autopilot 제거
cd rm -rf PX4-Autopilot/
-
PX4-Autopilot clone
git clone https://github.com/PX4/PX4-Autopilot.git cd PX4-Autopilot/
-
version 변경
git checkout v1.15.0-beta2
-
submodules update (오래 걸림)
make submodulesclean
-
Ubuntu 환경 setup & 컴퓨터 재부팅
(보통 안 해도 잘 되긴 하는데 재부팅 안 했다고 오류 찾느라 고생한 적이 있다. 혹시 모르니 아래 명령어 실행 후 그냥 재부팅을 하도록 하자.)bash ./Tools/setup/ubuntu.sh
-
build (오래 걸림)
cd PX4-Autopilot/ make px4_sitl gazebo-classic
-
소프트웨어팀 Notion에서 bulnabi.world를 download 받은 후 적혀있는 방식 따라서 world 추가
-
standard_vtol도 download 받은 후 압축 풀어서 PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/models 경로에 덮어씌우기
-
대회 환경 build
cd PX4-Autopilot/ make px4_sitl gazebo-classic_standard_vtol__bulnabi
-
PX4-Autopilot/src/modules/uxrce_dds_client/dds_topics.yaml 에서 아래 내용들을 각각 publications와 subscriptions 항목의 가장 마지막 부분에 추가
- topic: /fmu/out/vtol_vehicle_status type: px4_msgs::msg::VtolVehicleStatus
- topic: /fmu/in/gimbal_manager_set_manual_control type: px4_msgs::msg::GimbalManagerSetManualControl
- topic: /fmu/in/vehicle_global_position type: px4_msgs::msg::VehicleGlobalPosition
-
PX4-Autopilot/ROMFS/px4fmu_common/init.d-posix/airframes/1040_gazebo-classic_standard_vtol 가장 아래에 추가 (짐벌제어)
param set-default MNT_MODE_IN 4 param set-default MNT_MODE_OUT 2
-
해당 repo fork
scroll을 위로 올려보면 Edit pins / Watch / Fork / Star 라고 적힌 부분이 있는데 Fork를 클릭하고 Create Fork를 눌러주자. -
workspace 만들기
cd mkdir test_ws cd test_ws
-
본인 repository를 보면 fork된 repo가 생겼을텐데, 해당 repo clone
git clone https://github.com/[your_github_id]/test_nodes.git
-
src 폴더로 이름 변경
mv test_nodes src
-
directory 구조 확인
tree -aL 2
(정상적인 출력 결과)
└── src ├── .git ├── my_bboxes_msg ├── px4_msgs ├── README.md ├── vehicle_controller └── yolo_detection 6 directories, 1 file
-
upstream 등록
cd src git remote add upstream https://github.com/Bulnabi-SNU/test_nodes.git
-
git 연결 확인
git remote -v
(정상적인 출력 결과)
origin https://github.com/[your_github_id]/test_nodes.git (fetch) origin https://github.com/[your_github_id]/test_nodes.git (push) upstream https://github.com/Bulnabi-SNU/test_nodes.git (fetch) upstream https://github.com/Bulnabi-SNU/test_nodes.git (push)
-
(Optional) alias 추가
나는 잘 안 하는 편인데 원하는 사람은 .bashrc에alias rosfoxy='source ~/test_ws/install/local_setup.bash'
와 같이 추가해도 좋다.
-
Install v4l2_camera
sudo apt update sudo apt install ros-${ROS_DISTRO}-v4l2-camera
-
Download yolov5 at home directory
cd git clone https://github.com/ultralytics/yolov5
-
(Optional) v4l2-ctl: change v4l2_camera settings
(WSL을 사용하는 경우에는 안 되기 때문에 pass.. 혹시라도 되면 알려주면 감사 ㅜ)sudo apt install v4l-utils v4l2-ctl -d /dev/video0 --list-formats-ex # camera formats 확인 v4l2-ctl -d /dev/video0 --set-fmt-video=width=640,height=480 # change settings
(Optional) Auto Landing Auto landing을 사용할 사람들은 notion에 적힌 apriltag download를 참고하여 apriltag를 깔아줘야 한다. 사용하지 않는 사람들은 auto_landing directory를 그냥 지워주자.
- 아래와 같이 my_bboxes_msg를 먼저 build하고 나머지 패키지를 build해야 오류가 생기지 않는다.
- 해당 repo에 아직 auto landing 관련 코드는 없기 때문에 auto landing은 dependency 잘 고려해서 build 문제 없도록 코드 올리기!
cd test_ws
colcon build --symlink-install --packages-select my_bboxes_msg // cbp my_bboxes_msg
colcon build --symlink-install // cba
source ./install/local_setup.bash
- px4_msgs는 별도로 clone 받을 필요 없이 해당 repo에 있는 것 기준으로 코드를 작성하면 된다.
- sitl과 달리 실제 비행에서는 기체의 시작 위치의 local position이 origin이 아니다. 따라서 특정 WP로 이동하려면 takeoff 할 때 home position의 위치를 설정한 후, 상대적인 위치를 계산해야 한다. (test_02에서 self.home_position 관련 코드 확인)
- 코드를 실행하더라도 기체가 바로 동작하지 않고, RC에서 스위치를 켜서 허용해야지 동작하도록 코드를 작성해야 한다. RC에서 offboard mode로 변환하는 스위치가 있기 때문에 offboard mode인지 확인 후 takeoff 하는 코드를 추가하면 된다. (test_02 takeoff_and_arm_callback 관련 코드 확인)
- 본인이 맡은 part의 코드 추가 후, sitl에서 잘 되는지 여러 번 검증하고 기체의 움직임이 너무 과하지 않은지 확인해야 한다. (이동할 때 roll, pitch 등이 너무 큰 폭으로 변하지 않는지 검증) sitl에서조차 기체의 움직임이 과격하다면 실제 비행에서는 더 큰 문제가 발생할 수 있다.
- 비행 시험의 편의성을 위해서 여러 개의 node를 run 해야 하는 경우에는 하나의 launch file로 만드는 것을 추천한다.
-
README.md 수정
본인의 test 코드 실행 명령어 및 간략한 설명을 아래의 Run 부분에 추가 -
upstream 변경 사항 반영
git pull upstream main
-
충돌 문제가 발생한다면, 충돌 문제 해결 후 병
-
수정 사항을 본인 repo에 올리기
git add . git commit -m "[YOUR_COMMIT_MESSAGE]" # e.g. FIX: yolo_test_00 gimbal control git push origin main
-
본인 repo에 들어가서 commit이 제대로 됐는지 확인한다. Pull requests에 들어가서 New pull request를 클릭한다. 본인이 어떤 코드를 작성했는지 자세하게 설명하고 reviewer에 okj001010을 추가 후, Create pull request 버튼을 클릭한다.
-
여기까지 한 이후에는 코드 확인 후 직접 merge 할 예정이니, (아마 안 되긴 할텐데) 절대 바로 merge 버튼을 누르지 말아야 한다.
터미널 6개를 실행해야 한다.
terminal 1:
MicroXRCEAgent udp4 -p 8888
terminal 2:
./QGroundControl.AppImage
terminal 3:
cd PX4-Autopilot/
make px4_sitl gazebo-classic_standard_vtol__bulnabi
terminal 4:
cd autoland_ws
source ./install/local_setup.bash (rosfoxy)
ros2 run usb_cam usb_cam_node_exe --ros-args --params-file ~/autoland_ws/src/usb_cam/config/params_1.yaml
terminal 5:
cd test_ws/
source ./install/local_setup.bash (rosfoxy)
ros2 run yolo_detection yolo_detector
terminal 6:
cd test_ws/
source ./install/local_setup.bash (rosfoxy)
ros2 run test_nodes mc_test_00
ros2 run test_nodes mc_test_01
ros2 run test_nodes mc_test_02 --ros-args --params-file ~/test_ws/src/vehicle_controller/config/mc_test_02_waypoint.yaml
ros2 run test_nodes mc_test_05 --ros-args --params-file ~/test_ws/src/vehicle_controller/config/mc_test_05_gps_waypoint.yaml
ros2 run test_nodes mc_test_06 --ros-args --params-file ~/test_ws/src/vehicle_controller/config/mc_test_06_gps_waypoint.yaml
ros2 run test_nodes yolo_test_01
ros2 run test_nodes yolo_test_02
ros2 run test_nodes yolo_test_03
ros2 run test_nodes final_01 --ros-args --params-file ~/test_ws/src/vehicle_controller/config/final_01_gps_waypoint.yaml
- mc_test_00: arming
- mc_test_01: takeoff → land
- mc_test_02: takeoff → N 2m → NE 2m → E 2m → home → land (사각 비행)
- yolo_test_01: takeoff → gimbal control → ladder detection → land
- yolo_test_02: takeoff → gimbal control → heading 방향으로 5m → 가다가 ladder detect 시 stop → land
- yolo_test_03: takeoff → gimbal control → heading 방향으로 5m → 가다가 ladder detect 시 stop → ladder 위치 반대로 5m 이동 → land
- yolo_test_04: (switch 조종 없이 바로 시작함) gimbal pitch angle 0 → -30 → -60 → -90 → -60 → ...
-
Start MJPG-streamer before execute launch files
-
Streaming website: http://127.0.0.1:8080/?action=stream
# install mjpg streamer
git clone https://github.com/jacksonliam/mjpg-streamer.git
cd mjpg-streamer/mjpg-streamer-experimental
make
sudo make install
# run mjpg streamer
cd mjpg-streamer/mjpg-streamer-experimental
./mjpg_streamer -i "./input_file.so -f /tmp -n stream.jpg -d 0.1" -o "./output_http.so -w ./www"
// precise landing (with apriltag)
ros2 launch goal_pub one.launch.py
ros2 run px4_offboard land_test
// gps landing (without apriltag)
ros2 run px4_offboard land_test_gps
- flight_test_cmd bash = Micro XRCE-DDS Agent + MJPG Stremer + USB Camera + YOLO detection
cd ~/test_ws/src
bash flight_test_cmd.bash