px4_sim

jetson orin nano yolo

정지홍 2025. 11. 14. 17:39

1. 로그인

ssh -i ~/.ssh/id_ed25519 -Y quad@192.167.1.31

 

2. 파이썬 가상 환경을 만들어 준다...

sudo apt install python3-venv

python3 -m venv ~/venv_yolo
source ~/venv_yolo/bin/activate

 

 

 

3. 다음 라이브러리를 설치해준다.

pip install --upgrade pip
pip install ultralytics opencv-python pyrealsense2 numpy


sudo apt install nvidia-jetpack

 

 

4. pytorch설치

export TORCH_INSTALL=https://developer.download.nvidia.com/compute/redist/jp/v512/pytorch/torch-2.1.0a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl
export TORCH_URL="https://developer.download.nvidia.com/compute/redist/jp/v512/pytorch/torch-2.1.0a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl"
pip install --no-cache-dir "$TORCH_URL"

 

 

4. 동작하는지 확인 ( 아래 사진과 같이 될거임 )

yolo detect predict model=yolov8n.pt source=https://ultralytics.com/images/bus.jpg

 

 

5. 이번에는 d455카메라를 가지고, yolo를 돌려본다.

  • 아래의 py파일을 만들고 실행시킨다.
  • python realsense_yolo_rt.py
#!/usr/bin/env python3
import time
import numpy as np
import cv2
import pyrealsense2 as rs
from ultralytics import YOLO


def main():
    # 1) RealSense 파이프라인 설정
    pipeline = rs.pipeline()
    config = rs.config()

    # 컬러 스트림만 사용 (640x480@30fps)
    config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)

    # 파이프라인 시작
    pipeline.start(config)

    # 2) YOLO 모델 로드
    # - 이미 다운로드한 yolov8n.pt 사용 (같은 폴더에 있다고 가정)
    # - yolo11n.pt 쓰고 싶으면 파일명만 교체하면 됨.
    model = YOLO("yolov8n.pt")  # 또는 "yolo11n.pt"

    # GPU 세팅은 나중에 CUDA 버전 PyTorch 설치 후에:
    # model.to("cuda")

    print("[INFO] RealSense + YOLO 시작합니다. ESC 또는 q 를 누르면 종료합니다.")

    try:
        while True:
            # 3) 프레임 읽기
            frames = pipeline.wait_for_frames()
            color_frame = frames.get_color_frame()
            if not color_frame:
                continue

            # RealSense 프레임을 numpy 배열(BGR)로 변환
            frame = np.asanyarray(color_frame.get_data())

            t0 = time.time()

            # 4) YOLO 추론
            #    - imgsz 줄이면 속도↑ (예: 512, 416 등)
            results = model.predict(
                source=frame,
                imgsz=640,
                device="cpu",   # 나중에 "cuda:0" 로 변경
                verbose=False
            )

            # 5) 결과 그리기
            annotated = results[0].plot()

            fps = 1.0 / (time.time() - t0)
            cv2.putText(
                annotated,
                f"FPS: {fps:.1f}",
                (10, 30),
                cv2.FONT_HERSHEY_SIMPLEX,
                1.0,
                (0, 255, 0),
                2,
                cv2.LINE_AA,
            )

            cv2.imshow("YOLO + D455 (Jetson Orin Nano)", annotated)

            key = cv2.waitKey(1) & 0xFF
            if key == 27 or key == ord("q"):  # ESC 또는 q
                break

    finally:
        # 6) 리소스 정리
        pipeline.stop()
        cv2.destroyAllWindows()
        print("[INFO] 종료합니다.")


if __name__ == "__main__":
    main()

 

#!/usr/bin/env python3
import time
import numpy as np
import cv2
import pyrealsense2 as rs
from ultralytics import YOLO
import torch  # 추가


def main():
    # 1) RealSense 파이프라인 설정
    pipeline = rs.pipeline()
    config = rs.config()
    config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)
    pipeline.start(config)

    # 2) YOLO 모델 로드
    model = YOLO("yolov8n.pt")

    # ---- 여기서 device 선택 ----
    device = "cuda:0" if torch.cuda.is_available() else "cpu"
    print("[INFO] device =", device)

    print("[INFO] RealSense + YOLO 시작합니다. ESC 또는 q 를 누르면 종료합니다.")
    print("torch.cuda.is_available():", torch.cuda.is_available())

    try:
        while True:
            frames = pipeline.wait_for_frames()
            color_frame = frames.get_color_frame()
            if not color_frame:
                continue

            frame = np.asanyarray(color_frame.get_data())
            t0 = time.time()

            results = model.predict(
                source=frame,
                imgsz=640,
                device=device,   # ← 여기!
                verbose=False
            )

            annotated = results[0].plot()

            fps = 1.0 / (time.time() - t0)
            cv2.putText(
                annotated,
                f"FPS: {fps:.1f}",
                (10, 30),
                cv2.FONT_HERSHEY_SIMPLEX,
                1.0,
                (0, 255, 0),
                2,
                cv2.LINE_AA,
            )

            cv2.imshow("YOLO + D455 (Jetson Orin Nano)", annotated)
            key = cv2.waitKey(1) & 0xFF
            if key == 27 or key == ord("q"):
                break

    finally:
        pipeline.stop()
        cv2.destroyAllWindows()
        print("[INFO] 종료합니다.")


if __name__ == "__main__":
    main()

'px4_sim' 카테고리의 다른 글

[Drone] realsense camera를 사용하여 서버로 실시간 스트리밍  (0) 2025.12.29
맵 작성 2트  (0) 2025.12.05
맵 작성 1트 ( 간소화 )  (1) 2025.10.16
움직이기 2트  (0) 2025.10.13
[rtabmap] error 3개  (0) 2025.10.02