요새 인공지능이 유행이라던데...

바둑 잘 두는 알파고가 그래 인기가 좋다는 구만.
딥러닝이 유행이라는 구만.

한 10여년전에 ANN (Artificial Neural Network)을 구현해서 써본적이 있었는데 그 때는 '딥러닝'이라는 용어가 없었던 걸로 기억한다.
로봇 구동부의 백레시를 보상해 주기 위해 BPANN (Back Propagation ANN)을 구현하고 Rigid Body 물리엔진과 연동해서 시뮬레이션 해봤었는데 기가 막히게 학습도 되고 결과도 잘 나왔었다. 문제는 학습이 진행되는 동안 로봇에 무리가 가는 동작이 많아 시뮬레이션만 하고 직접 로봇에 적용 하지는 못했었다.
사람처럼 자빠지고 깨지고 하면서 에러가 역전파되어 학습이 되지만, 로봇은 사람처럼 자가치유 능력이 없어 학습 될 때까지 깨지고 부서지는거 고치느라 일 다본다.
실제 로봇 제어에는 못쓰겠네... 하고는 딱히 쓸 일이 없어서 그냥 잊고 지냈었다.

그렇게 잊고 지내다 최근 PID제어기로 쿵짝쿵짝 뭐 할게 있었는데, 처음에는 잘 되던게 시간이 갈 수록 시스템의 동역학 파라미터가 변하면서 (시변 시스템 이라고 하죠? 아마?) 제어 게인을 다시 튜닝해 줘야 하는 문제가 있어, 제어 게인을 자동으로 학습하면서 튜닝해 주기위해 오래전에 만들었던 BPANN 소스를 다시보게 되었다. 근 10년전에 내가 짜놓은 소스를 다시 보니 내가 왜 그렇게 짜놨는지 이해가 안된다. 인공지능을 다시 공부 해야 겠다.

우선 PID제어기의 제어 게인 (Kp, Ki, Kd)을 자동으로 학습 할 수있게 되는지 테스트를 해봤다. 인터넷에 돌아댕기는 ANN의 학습기능을 이용한 자동 PID 게인 튜닝, On-Line PID 튜닝등 논문 몇 개 뒤져보고, 옛날에 만들어 놓은거 다시 손좀 보고해서 간단하게 전기식 모터의 위치 서보제어 시뮬레이션에 BPANN을 적용 시켜 돌려 봤다.
전기모터의 동역학 파라미터 (직류저항, 코일 인덕턴스, 회전자모멘트 등등)와 기어의 동역학 파라미터들을 이용해 시뮬레이션 물리엔진 만들고, 거기에 PID 제어기 물리고, 학습을 위해 BPANN 연동 시키고 등등...


위 그래프가 간이 형태로 되는지 확인해본 결과다.
300W정도 되는 BLDC모터에 200:1기어를 달고 있는 시스템을 시뮬레이션 하고 거기에 PID제어기를 물린다음, BPANN을 연동 시켜 On-Line형태로 제어 게인을 스스로 학습하도록 만들었다. 빨간색이 10도와 0도 스텝 위치 명령이고 녹색이 모터가 추종한 위치 응답 곡선이다. 최초 스텝 명령에 대해 큰 오버슈트, 언더슈트가 있으나 계속 학습되면서 나아진다.
명령 추종이 될까 했는데 신기하게 위치제어가 가능한 게인 값들로 학습되었다.
BPANN적용하기 전 손으로 튜닝해 봤는데 시간도 많이 걸리고 상당히 지루한 작업이었다.