장애물회피 프로젝트

조환영·2023년 6월 13일
1

Project

목록 보기
2/3

▷ 프로젝트 목표

  • Xycar라이다(Lidar), 초음파(Ultrasonic), 카메라(Camera) 센서를 사용해 라바콘 장애물이 있는 미로를 탈출하는 것을 목표로 한다.

    • Xycar: 실차의 1/10 scale로 제작된 RC Car
      • NVIDIA JetPAck 4.6.2 / BLDC모터 / 2D-LiDAR / Ultrasonic sensor / IMU / monocular Camera / stereo Camera
  • C++ / ROS / OpenCV / Control method (PID, Stenley etc) / Filtering (Moving avereage, Low pass Filter etc)

▷ 프로젝트 기간

  • [7일] 23.06.01 ~ 23.06.09

▷ 프로젝트를 통해 얻은 SkillSet

  • 객체지향 프로그래밍 구조 설계

  • CMake를 이용한 프로젝트 빌드

  • Git을 이용한 프로젝트 코드 관리

  • ROS를 이용한 로봇 시스템 구축(Node간 통신)

  • 2D Lidar활용 장애물 인식 및 회피

  • 규칙기반 알고리즘(Rule-based Algorithm)설계 및 구현

  • SLAM 활용

  • 경로 탐색 알고리즘(A*, DFS 등) 활용


▷ 경진대회 규정

  • 트랙 도면 (실내 트랙)

  • 규정

  • 장애물 회피 알고리즘이 코어가 되고 정지조건을 주차구역으로 지정했다.
  • Lidar, 초음파 센서를 사용해 장애물 회피 기능을 구현하고, camera 를 활용한 openCV로 주차 기능을 구현하는 것이 프로젝트의 목표이다.

▷ 프로젝트 진행

  • 초기 목표
    : 지난 프로젝트에서의 아쉬움을 만회하고자 "제어"기법을 사용하는 것을 목표로 삼고 싶었다.

    • slam을 이용해 desired path정보를 취득한 뒤 stanley method를 사용해 차량을 제어하는 것을 초기 목표로 삼았다.

      (hector_slam package / move_base package / stanley method)

  • 하지만, 결국...

    • 2D-Lidar를 활용하여 hector_slam으로 map data를 얻어내는 것 까진 성공했다.

    • move_base로 desired path를 계획하는 것에서 실패했다.

    • 실패한 이유는 능력 부족인 것 같다. 패키지가 제공되어 필요한 데이터만 구축하면 되는 상황임에도 불구하고 그 환경을 설계하는것이 어려웠다.

    • 시간적 여유가 없어 픅로젝트 완료 3일 전, 규칙기반의 알고리즘을 설계하고 구현하는 것을 새로운 목표로 잡고 프로젝트를 진행했다.

  • 최종 진행

    • 4명이 팀원이 2명씩 짝지어 두가지 알고리즘을 구현했다. (장애물 회피 / 주차 알고리즘)

    • 나는 장애물 회피 알고리즘을 구현했다.

    • 두 가지 의견이 있었다.

      • 나: 장애물 위치 기반 steering angle 계산

      • 다른 팀원: DFS(depth first search) 방식의 경로생성 알고리즘

    • planning 공부를 위해서 팀원의 아이디어를 활용해 보고 싶었지만, 시간적 여유가 없었기 때문에 최종적으로 구현 시간 대비 성능이 나쁘지 않을 것으로 예상되는 내 알고리즘을 채택했다.

    • 차체 내부에 장애물이 있을 것이라고 판단되는 상황에서 steering anlge을 계산하는 수식을 아래와 같이 유도했다.

: 가장 가까운 장애물과의 거리(d), 그 장애물의 위치정보(theta)는 2D_Lidar의 토픽 /scan으로 부터 받아올 수 있다.

차체의 제원 w를 알 수 있고, 안전거리 l_sf를 임의로 설정하면 적절한 steering angle을 계산할 수 있다.

▷ 프로젝트 결과

  • "장애물 회피 알고리즘"은 정상적으로 작동했고, 결과적으로 미로 내에서 장애물 충돌은 한번도 일어나지 않았다.

    • 차체 유턴 및 선회 시 여유로운 회전 공간을 위해 장애물 감지 시 스티어링이 반대인 상태에서 한번 후진하는 알고리즘을 추가했다.

    • 초음파 센서로 직진 가능 여부의 기준을 부여해 주고 싶었지만, /ultra topic 발행이 안되는 문제로 인해 초음파 센서를 활용하지 못했다.

  • "주차 알고리즘"을 적용시키지 못해 프로젝트 미션을 완벽히 수행하지 못했다.

    • 방법1) OpenCV로 검정 네모박스 주차공간을 인식
    • 방법2) yolo를 사용하여 주차 표지판을 인식

    : 두 가지 모두 실패했다.
    yolo 패키지 사용을 위한 환경 구축에 실패했다.
    OpenCV는 공부해서 적용할 시간이 부족해 시도하지 않았다.

  • 결론
    : 장애물회피는 단순한 규칙기반 알고리즘으로 구현했지만, 주행 정지 조건인 주차 기준을 적용시키지 못해 프로젝트를 성공적으로 마무리 짓지 못했다.

▷ 프로젝트 후기

  • 매우 아쉽다.

  • 초기에 자율주행 경로계획을 통한 control 계획을 거창하게 세웠으나, planning을 학습하지 않은 상태에서 단기간의 프로젝트에 기술을 적용시키는데 한계가 있었다.

  • Simulation을 통한 planning 학습을 먼저 진행한 후 해당 프로젝트를 진행했다면, 더 만족스러운 결과를 얻을 수 있지 않았을까 하는 아쉬움이 있다.

  • 장애물 회피를 위한 단순 규칙기반 알고리즘 설계 경험은 이전에 해본적 있는 경험이었기 때문에, 새로운 지식이나 기술을 습득했다고 느껴지지 않았다.

  • 이번 프로젝트에서도 여전히 제일 중요하다고 생각했던 "제어"를 경험하지 못했다고 느껴졌다.

  • 최종적으로 해당 프로젝트를 통해 ROS 상에서 시스템 구현을 위한 통신 및 빌드 환경을 더 깊이있게 공부하는데 그쳤다고 생각한다.

profile
자율주행 TIL(Today I Learned) 기록

2개의 댓글

comment-user-thumbnail
2024년 8월 28일

안녕하세요, 포스팅 잘 읽었습니다.
혹시 조향각 계산 공식 출처를 알 수 있을까요?

답글 달기
comment-user-thumbnail
2024년 10월 1일

안녕하세요. 혹시 조향각 계산 과정에서 l_sf를 과도하게 길게 설정하면 arccos 계산과정에서 오류가 발생하는데 혹시 l_sf를 어떻게 설정하셨는지 알 수 있을 까요?

답글 달기