이제 대회가 얼마 안남았기 때문에 경기대에서 테스트 주행을 해봐야 한다!! 테스트 주행을 하기위해서는 경기대 waypoint 뿐만 아니라  시뮬레이터에서 전해주는 센서값이 아닌 실제 플랫폼의 센서값을 erp42_planner.py로 보내줘야 한다.

이 코드를 짜기 전까지는 "시뮬레이터에서 오는 값은 뭐고, 플랫폼에서 오는 값은 뭐지!??" , "파일 구조들이 대체 어떻게 되먹은거지!!"

싶었는데 선배랑 같이 그림을 그린 후 체계가 잘 잡혔다ㅎㅅㅎ

 

열띤 토의 끝의 계획도...

초기 계획도는 저게 아니었는데, 코딩을 하다보니 파일 구조가 많이 개편됐다.

원래는 serial_node.py에 gps, encoder, imu 정보를 한번에 publish하려고 했는데, 하나의 쓰레드 안에서 시리얼 통신을 하고 Publish 하는것은 불가능했다..

센서마다 데이터를 전하는 주기가 다른데, 세개를 하나의 쓰레드 안에서 Publish 하면 가장 느린 센서를 기준으로 Publish 하게돼서 세 파일로 나누기로 결정했다.

 

세개를 각각 Publish 해서 바로 erp42_planner.py에 전해주면 되지 왜 또 serial_node.py가 있나 싶을거다.

erp42_planner.py가 구독하는 토픽들

erp42_planner.py에서는 /Ego_topic 을 EgoVehicleStatus 자료형으로 받고 statusCB함수로 넘겨준다.

이 /Ego_topic에 gps, encoder, imu값이 들어가야 한다.

statusCB에 들어가보면 status_msg를 EgoVehicleStatus 형으로 만들어준 후 바로 data를 넣어준다.

그러나 gps.py , imu.py에서 publish되는 토픽은 Float32MultiArray이고,

encoder.py에서 publish되는 토픽은 Int16()이기 때문에 세개의 토픽을 erp42_planner.py에서 바로 합쳐주는 것이 많이 번거로웠다.

(선배가 뼈대가 되는 코드는 많은 사람들이 여러곳에서 접근하고, 수정할 수도 있기 때문에 왠만하면 바꾸지 않는것이 좋다고 하셨다.)

(그림에 Int16인데 Int36으로 적었네ㅋㅋㅋ)

 

그래서 gps, encoder, imu 정보를 serial_node.py에서 받아서 EgoVehicleStatus 형태로 합쳐준 다음에 다시 Publish해서 erp42_planner.py에서 sub 하기로 했다.

 

코드 짜고, 형태를 수정하고 하면서 진짜 이부분은 완전히 잘 알게된것같다ㅏ....ㄷㄷ

 

erp42_GPS.py

다행히 gps 정보를 받아오는 코드는 K-city에 가서 gps 값을 얻어올때 사용한 코드가 있었다. 이 코드를 가져와서 USB시리얼포트를 열어서 정보를 읽고 보정해서 publish 하는 코드를 만들었다. 

 

이 코드를 짜면서 처음으로 Float32MultiArray형의 토픽을 만들어봤다. GPS 값이 x, y가 나오는데 두개나 publish 하기 귀찮아서 배열에 담아서 publish 했다.

 

+ Recent posts