일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- ros #rviz #onedayproject #Lane Keeping #Lane Changing #차선 변경
- Slam
- MORAI
- morai #자율주행 #데브코스 #planning&control #ros #ubuntu
- ROS2
- Raspberry Pi
- 자윯주행
- 운영체제 #working set #working set algorithm #file system
- 데브코스
- pathplanning
- 자율주행
- python
- rviz
- 디지털시스템설계 #verilog #module #port #구조문
- ubuntu
- control
- planning
- 데이터베이스 #정규화 #이상현상 #함수종속
- turtlebot4
- Gazebo
- create3
- 인턴
- 프로그래머스
- TOF
- ROS
- 프로그래머스 #데브코스 #자율주행
- 자율주행 #opencv #perception #control #제어 #인지
- 운영체제 #page replacement algorithm
- turtlebot
- Linux
쓰레기 개발자
240507 ~ 240614 최종프로젝트 본문
https://www.notion.so/prgrms/2-_team1-6cd008d1e81f44a88dc0c0081e18dac9
https://github.com/orgs/DevCoursePlanningContorl2FINALTEAM1/repositories
5월 7일부터 6월 14일까지 데브코스 자율주행 최종 프로젝트를 진행했다. 주제는 MORAI 시뮬레이터 상에 있는 K-City map에서 크게 세가지를 수행하는것이다.
1. Highway Driving : 고속도로를 주행하되, spawn 되는 다른 차량의 경로를 예측하고 충돌없이 주행하는것
2. City Driving : 고속도로의 톨게이트를 통과한 후, 회전 교차로에서 돌고 있는 차량과의 충돌없이 주행하는것
3. Parking : 주차장에서 주차 point까지 경로를 생성한 후, 세워져있는 차들(object)과의 충돌 없이 주차를 완료하는것
크게 위와 같이 세가지 mission이 있었다. 내가 맡은 부분은 path planning & control이다.
rviz상에서 map을 띄우고, 초기 설정이 다 끝난다음 바로 시작 지점 ~ 주차장 진입 전까지 dijkstra 알고리즘을 사용하여 global path를 생성했다. 근데 여기서 문제가 dijkstra 알고리즘이 morai상에 있는 노드와 링크에만 연결이 된다는 것이다.
위와 같이 노드까지만 연결되었다. 뒤에 주차장 입구까지 우선 path를 만들기로 했다.
1. 주차장 path 생성
팀원은 dubins 알고리즘을 사용하였고, 난 rrt* 알고리즘을 사용하여 만들었는데, dubins path 알고리즘이 더 경로가 자연스럽게 생성돼서 팀원의 방법을 쓰기로 했다. 이때 생각으로 rrt* 알고리즘은 근처에 노드를 선정 후 노드와 노드를 잇는 방식으로 경로가 만들어지다 보니 삐뚤빼뚤하게 경로가 생성되니까 고속주행에는 적합하지 않다고 깨달았다.
그 다음엔 주차장 내에서 경로를 생성하기로 하였다. 이번엔 팀원은 rrt/dubins 알고리즘을 써서 만들어본다 하였고, 난 dubins/CCRS 알고리즘을 써서 만들어보기로 하였다.
goal point까지는 잘 찍혔는데... 계산 과정에서 뭔가 문제가 있었나보다. 찾아보니 처음 생성되었던 global path를 고정하고 그 위치를 따라가는게 아니라, 차량이 이동함에 따라 계산과정이 계속 업데이트 되다보니 경로가 꼬였던 것이다. path를 업데이트 하는 함수를 주석처리 하니 경로가 처음 생성되었던 최적 경로로 고정되고, 그 위치까지 잘 가는걸 확인할 수 있었다.
2. CPP 변환
우리는 파이썬으로 소스코드를 만들었다. 그런데 다른 팀원이 만든 prediction까지 추가하고 나니 40-50프레임이 나오던 시뮬레이터가 한자릿수까지 떨어졌었다... 터미널에 htop으로 cpu 사용량을 보니
암울했다... 결국 우리는 최적화를 위해 prediction 파트와 control 파트의 파이썬 파일들을 CPP 파일로 변환하기로 했다. prediction 파트를 만들었던 팀원이 prediction 변환을 했고, 나는 control 변환을 하기로 했다.
우선 control pkg의 소스파일은 횡방향 제어를 위한 pure_pursuit.py, 그리고 종방향 제어를 위한 pid_control.py, logitudinal_vel_control.py 세 파일로 구성 되어있었다. 위 파이썬 코드들을 HPP와 CPP로 변환하고, CMAKE 파일에 의존성을 추가해줬다. 그 결과 CPU 사용량이 30퍼센트 감소하고, 프레임도 30프레임은 꾸준히 나오는 등 유의미한 변화가 있었다.
개인적으로 CPP 변환은 매우 유의미한 시도였다고 생각한다. 파이썬 같은 인터프리터 언어가 연산 처리가 느리고, 데브코스를 하면서 처음 배운 CPP에 좀 더 익숙해졌기 때문이다. 번외로 왜 회사에서 파이썬을 잘 안쓰는지도... 알았다
3. 최종
최종 결과물 동영상이다. 참고로 1분 6초쯤에 제어가 잘 안되는건 톨게이트를 지나고 나서 주차장과 원형교차로에 있는 object들의 정보가 들어오면서 약간에 렉이 발생해서 그런거다.
프로젝트를 진행하면서 팀원들간에 사소한 이슈나 어려움은 없었다. 다들 오히려 너무 소통도 잘하고 개발도 잘해서 내가 별거 안하고 있다는 생각이 들었지만, 그래도 내가 할 수 있는 최선을 다해서 열심히 한거 같다. 최종 프로젝트 하면서 팀원들에게 많이 배우고, 여러 path planning 알고리즘도 써보고(rrt, rrt*, rrt/dubins, dubins/ccrs 등등), CPP에도 좀 더 익숙해지고.. 너무너무 의미있는 시간이었던거 같다. 정훈님 환수님 수고 많으셨고 감사합니다!!!
'데브코스 자율주행 planning & control 2기' 카테고리의 다른 글
데브코스 자율주행 planning&control 2기를 마치며 (0) | 2024.06.17 |
---|---|
20240426 One Week Project (0) | 2024.05.02 |
20240422 one day & one week project (0) | 2024.04.22 |
20240417 데브코스 자율주행 one day project (0) | 2024.04.17 |
20240415 데브코스 자율주행 one day project (0) | 2024.04.15 |