/HEVEN_Hackathon

2022 HEVEN 자율주행 해커톤

Primary LanguagePython

HEVEN Hackathon

2022 HEVEN 자율주행 해커톤

  • 일정 : 2022-11-11(금) 17:00 ~ 2022-11-12(토) 10:00
  • 장소 : 성균관대학교 산학협력관 러닝팩토리 (85133호)
  • 인원 : 약 30명 내외 (4인 1팀 구성)
  • 내용 : 4인 1팀이 되어 주어진 map 상에서 자율주행 및 주차, 정지선 알고리즘 구현

설치

1. Docker를 이용한 개발 환경 구성 (Recommended)

Windows 환경에서도 다음의 링크를 참고하여 편하게 개발할 수 있습니다. Docker 환경 설치하기

2. Ubuntu에 패키지 직접 설치

  • Ubuntu 18.04 멀티부팅 설치

https://jimnong.tistory.com/676

  • ROS 설치 (상단의 "melodic" 클릭 후 진행)

http://wiki.ros.org/Installation/Ubuntu

  • Dependencies 설치

    sudo apt-get install ros-melodic-tf2-geometry-msgs ros-melodic-ackermann-msgs ros-melodic-joy ros-melodic-map-server
    
  • ROS용 워크스페이스 생성

    mkdir catkin_ws && cd catkin_ws
    mkdir src && cd src
    
  • 레포지토리 복제

    git clone https://github.com/jhforstudy/HEVEN_Hackathon.git
    
  • 패키지 빌드

    cd ~/catkin_ws
    catkin_make
    source devel/setup.bash
    

최신 버전 업데이트

  • 아래 명령어를 실행하여, "Already up to date." 라는 문구가 떠야 최신 버전임
    cd ~/catkin_ws/src/HEVEN_Hackathon/
    git pull
    

실행

  • 시뮬레이터 실행

    roslaunch racecar_simulator simulate.launch map_number:=1
    
  • 자율주행 main node 실행

    rosrun racecar_simulator main.py
    
  • 수동 조작 노드 실행 (시뮬레이터 실행 후)

    rosrun racecar_simulator teleop_keyboard.py
    

센서 값 호출 방법

  • Brain.py에서 다음과 같이 호출하여 사용할 수 있음

    lidar_data = self.db.lidar_data
    pose_data = self.db.pose_data
    traffic_light = self.db.traffic_light
    remaining_time = self.db.traffic_remaining_time
    park_x_1 = self.parking_x_1
    park_y_1 = self.parking_y_1
    park_yaw_1 = self.parking_yaw_1
  • LiDAR

    변수명 : self.db.lidar_data
    형태 : list[360]
    값 설명 : 차량 후방을 기준으로 반시계방향으로 측정된 값
    

라이다정보

  • GPS + IMU (현재 차량의 global position)
    변수명 : self.db.pose_data
    형태 : list[3]
    값 설명 : [map frame으로부터 차량의 x좌표, map frame으로부터 차량의 y좌표, x축 방향 기준 yaw 각도 (degree)]
    

포즈정보

  • 신호등 정보

    변수명 : self.db.traffic_light
    형태 : "STOP", "LEFT", "RIGHT", "GO"
    값 설명 : 정지 시 "STOP"
              이후 도로 정보에 따라 "LEFT", "RIGHT" (Map 2) "GO" (Map 3)
    
  • 신호등 남은 시간

    변수명 : self.db.traffic_remaining_time
    형태 : float
    값 설명 : 신호등 정보가 "STOP"일 때 남은 시간 (5.0 sec ~ 0.0 sec)
    
  • 주차 공간의 위치

    변수명 : self.parking_x_1, self.parking_y_1, self.parking_yaw_1, self.parking_x_2, self.parking_y_2, self.parking_yaw_2
    형태 : float
    값 설명 : 해당하는 주차 공간의 x, y 좌표 및 방향 (degree)
    

맵 번호

  • self.map_number 변수를 통해 현재 맵의 번호를 획득할 수 있음. (1, 2, 3)

  • 개발 시에는 원하는 맵의 번호를 직접 할당하여 테스트하면 되고, 코드 제출 시 삭제할 것.

map_number

시뮬레이터 사용 방법

1. 시뮬레이터 실행

  • 실행해야 할 맵에 따라 Map1.sh, Map2.sh, Map3.sh을 더블 클릭하고,
    Execute in terminal 클릭
    캡처3

  • 시뮬레이터 기능
    ① 충돌 횟수, 경과 시간 측정
    ② 충돌 횟수, 경과 시간, 차량 위치 초기화
    ③ 시뮬레이터 화면
        좌클릭 - 화면 회전
        우클릭 - 화면 확대
        스크롤 클릭 - 화면 이동
    ④ 시점 설정
        기본은 2D view이며 Orbit(rviz) 으로 변경 시 3D view 가능 캡처4

2. 알고리즘 테스트

  • Brain.sh을 더블 클릭하고,
    Execute in terminal 클릭
    아래의 문구와 함께 Brain.py가 실행됨 5

3. 차량 수동 조작

  • Joystick.sh을 더블 클릭하고,
    Execute in terminal 클릭
    아래의 문구와 함께 조이스틱이 실행됨
    열린 터미널을 클릭한 후,
        좌/우 화살표 - 차량 조향각 왼쪽/오른쪽 증가
        상/하 화살표 - 차량 속도 높임/낮춤
        스페이스 바 - 차량 정지
        탭 키 - 조향각 초기화
    주의 : Brain.sh 와 따로 사용할 것 캡처

4. 신호등 방향 및 주차 공간 위치 변경

  • 대회 진행 시, 신호등 방향과 주차 공간을 랜덤하게 선택하여 진행할 예정 (모든 팀이 동일한 방향으로)

  • parameter_list.py 의 윗 부분을 수정하면 Map의 정보를 변경하여 테스트할 수 있음.

from visualization_msgs.msg import Marker, MarkerArray

# (Map 2) You can change the direction of traffic
TRAFFIC_DIR = "LEFT"       # "LEFT", "RIGHT"
# (Map 3) You can change the position of parking lot
PARK_NUM_1 = 3      # 1, 2, 3, 4
PARK_NUM_2 = 5      # 5, 6, 7, 8
...
  • 변경사항 저장 후, Map1.sh, Map2.sh, Map3.sh를 다시 실행할 것!

5. 차량 자율주행 제어 방법

  • Brain.py 의 main 함수에서 angle, speed 를 결정하여 return하면 그에 맞게 차량이 움직임

  • angle, speed는 다음과 같이 결정하면 됨

angle = 0   # 20(LEFT) ~ -20(RIGHT), degree
speed = 1   # 0 ~ 4, m/s