[Arduino/Python]Arduino로 무선조종기 값을 읽어 UART로 주고 받기

#Arduino #Python #UART #Taranis #X8R​Jetson tx2로 자율주행차를 만드는 프로젝트를 진행 중이었다그런데 jetson tx2에는 PWM을 받아들일 수가 없어, 무선조종기(Taranis -plus)와 수신기(X8R)에서 보내주는 값을 읽을 수가 없다.​그러므로 대안을 찾던 중에 Arduino Uno에 있는 PWM핀을 이용해서 조종기의 값을 받기로 했읍니다.​그렇게 받은 신호는 UART통신으로 Jetson tx2로 보내주게 된다.​수신기와 Arduino는 사진과 같이 연결.

>

이리하여 아래는 무선조종기 Taranis모델이었다 원래는 드론용으로 많이 사용합니다.

>

Arduino의 PWM핀에서 총 3개의 채널 값을 받아온다. Sketch로 작성한 코드는 차후과 같다.​

굉장히 쉽다. 이게 다 Arduino Uno보드에 PWM핀이 있어주셨기 때문.송신하는 데이터는 json의 형식으로 보내준다. 그래야 수신하는 쪽에서도 그렇고 보내는 쪽에서도 그렇고 깔끔(?)할 것이기 때문임.​다소음은 Jetson tx2에서 UART를 통해 json 데이터를 받아오는 코드다. python을 이용해 작성했는데 추후에 자율주행차의 모터 구동을 python으로 할 의도이기 때문임. ​개인적으로는 python보다 c++을 더 괜찮아하지만(둘 다 아직 어설프다는 게 함정;;) dc 모터 구동을 위해 쓰게 될 motor hat의 라이브러리가 다 python으로 되어 있어 json 데이터 수신도 python 코드로 작성하는 게 좋을 것 같았기 때문임.

>

아무튼 uart로 json 데이터를 받기 위해 코드를 짰는데…json.loads()가 계속 안 먹히는 일이 생겼다. 이렇게도 해보고 저렇게도 해보고 해도 뾰족한 비법이 없다.한 숨만 쉬다가 클래스메이트가 준 힌트!! 쓰레기값!!​그렇다. 쓰레기가 문제였다. 수신 측에서 serial통신을 시작하자 마자 그 값을 읽어 json 변환을 할려던 게 문제였다. 초기에 읽어오는 값은 스토리 댁로 더러운 값들이 있어 특히과인 정확한 형식을 요구하는 json 데이터의 성미에 맞추기가 힘들었던 것이 었다.​그래서 생각해낸 묘수(?)는 첨 20개 정도의 값은 읽지만 쓰지 않는 것.아래 코드에서 첨에 등장하는 for 문이 바로 그것이 었다.​결국 해결해냈다. 바른 길은 아닐지 몰라도 어찌됐건 앞으로 과인아갈 순 있게 되었다!!​

​우여곡절 끝에 기기간 통신을 무사히 해결했읍니다. 하지만 이제 시작입니다니다. 받아온 값들을 이용해 차를 움직여야 하니 예기입니다니다. 특히 위에 사진에서도 보이지만 움직일 차량이 옴니휠 구조라, steering과 throttle만으로 작동하는 rc차량과는 약간 달리 접근해야 합니다. 그리하여 json 데이터에도 LR로 된 좌우 이동을 위한 값도 넣었다.​아무튼 앞으로의 작업도 순탄하길, 아니 적당히 가시밭길이길 바란다.