이 프로젝트는 인공지능 커뮤니티 Gurugail(http://gurugail.com )에서의 개인프로젝트로 진행하는 것입니다.
========================================================================================================
예전부터 생각해왔던 거고, 예전에 한번 하드웨어적으로 구현해보려했다가 실패했던 주제입니다만..
책 '이머전스'(스티븐 존스, 김영사), '집단 정신의 진화'(하워드 블룸, 파스칼북스) 등의 복잡성과학, 네트워크공학 등의 이름으로 불리는 분야의 책들의 예로 많이 쓰이는 박테리아 이야기입니다.
#박테리아 군집
박테리아는 비가 오거나 해서 수분과 영양이 충분할 때, 급속도로 번식하면서 사방으로 퍼져나갑니다.
그러다가, 비가 그치고, 땅이 마르면서 점점 수분도 영양분도 부족해지게 되죠.
넓은 땅에서 영양분이 충분한 곳을 찾아내기 위해서, 박테리아 한 개체가 탐색해야 할 공간은 너무나 넓고 황량해서 그 생존확률은 극히 낮아지겠죠.
여기서 등장하는 것이 박테리아 군집의 '사회성'입니다.
각각의 박테리아는 먹이를 찾아 헤메면서, 자신이 먹이를 찾지 못했다면 그에 해당되는 화학물질을, 먹이를 찾았다면 그에 해당되는 화학물질을 배출하고,
다른 박테리아들은 그 화학물질의 농도에 따라 먹이가 없는 곳에서 멀어지고 먹이가 있는 곳을 향하게 됩니다.
아주 단순한 커뮤니케이션과 기초적인 사회성이 이들이 살아남게 하는 핵심적인 요소가 되는 거죠.
#응용
제가 처음 이 이야기를 봤을 때 부터 생각했던 것은 이러한 박테리아의 특성을 청소로봇등의 로봇에 응용하는 것이었습니다.
수많은 작은 로봇들이 사방팔방으로 퍼져나가며 먼지, 혹은 화상이나 달에서의 물이나 금속을 찾아 흩어지고, 어느 로봇이 목표를 발견하면 주변의 로봇들이 모여서 함께 목표물을 채취하는 것이죠.
이와 비슷한 개념은 '인공생명'(스티븐 레비, 사민서각)에서 소개된 MIT의 이동로봇연구소의 로드니 A.브룩스 교수에 의하여 제안된 적도 있습니다.
#구현
간단하게 구현할 수 있는 방법은, 각각의 로봇이 자신의 상태에 대한 신호를 발신하고, 다른 로봇들은 그 신호들의 방향과 크기를 벡터의 형태로 취해 여러 로봇들로부터 받은 벡터신호를 합하여 자신이 나아갈 방향을 결정하고 동작하는 것입니다.
그런데, 이게 하드웨어적으로 구현하려니 좀 어렵더군요 ㅡ,.ㅡ;;
2004년도에 나름 이 아이디어가 마음에 들어서 휴학까지 하고 매달려봤는데..
처음에는 초음파를 쓰고, 나중에는 적외선을 써봤습니다만.. 양쪽 모두 센서의 시야각의 한계나 통신방법의 한계등으로 인해서 실패하고 말았습니다. (이때까지는 Zigbee등의 다대다통신 프로토콜을 잘 몰랐죠..)
그래서 생각한 것이 일단 하드웨어는 언젠간 될거라고 믿고 (ㅡ,.ㅡ;;) 소프트웨어적으로 시뮬레이션이나 해보자는 것이었습니다만, 3년이나 미루고 있었습니다 ;;
#학습
문제는 로봇이 얼마나 사회적이고, 얼마나 개인적일 것인가입니다.
너무 지나치게 사회적인 로봇은 똘똘 뭉치거나 너무 사방으로 흩어져서 다시 모이기 힘들어질 수 있고, 지나치게 개인적인 로봇은 제맘대로 돌아다니다 알 수 없는 곳으로 가버릴 수 있겠죠.
제가 생각하는 이 시스템에서의 학습의 필요성은, 상황과 처해진 환경에 따라서 최적의 사회성 정도를 찾아나갈 수 있어야 한다는 점입니다.
박테리아의 영양분의 경우처럼 목표물들이 덩어리져서 몇군데밖에 없다면 사회적일 수록 좋을 것이고, 그냥 사방에 흩어져있을 뿐이라면 개인적인 편이 차라리 효율적일 수 있겠죠.
저는 이러한 부분을 각각의 신호의 종류에 대한 가중치를 유전자로 가지는 유전자알고리즘을 이용하여, 세대를 거듭하며 나아져가는 것이 적합할 것이라고 생각했습니다.
#확장가능성
위의 예에서 제시한 박테리아는 2가지의 화학물질을 통해서 커뮤니케이션을 형성합니다. 그리고 개미는 17가지의 페르몬을 이용해서 대화를 한다고 하죠.
시스템의 기반을 확장가능하게 잘 만들 수 있다면 박테리아의 모방은 개미의 모방으로, 그리고 '언어'의 방식과 확장성을 개선함으로 인해 점점 더 복잡한 구조의 사회성을 구현할 수 있는 가능성을 가질 수 있다고 생각합니다.
#계획
1.GUI
-일단 로봇들이 움직일 수 있는 공간을 만듭니다. 일단은 MFC로 해볼까 싶습니다.(맨날 펌웨어만 짜다보니 GUI랍시고 만들 수 있는 것 이것뿐이라 ㅡ,.ㅡ;)
2.박테리아 움직임
-각각의 박테리아들이 서로 상호작용하며 만들 수 있게 만듭니다.
3.학습
-일단은 GA(유전자알고리즘)을 생각하고 있으며, 이를 이용하여 로봇이 주어진 환경에서 최적의 사회성정도를 갖도록 학습하게 만듭니다.
일단은 다음주부터 개강이기도 하니 ^^;;
천천히, 한단계에 한달씩 해서 세달정도 잡고 진행해볼까 합니다.
(1번까지는 전에 해놨었는데 소스를 잃어버렸어요.. ㅠㅠ)
프로젝트를 진행하면서 최소한 2주에 한번 정도의 주기로 진행상황에 대한 이야기를 올려볼 생각이며,
프로그램 소스나 실행파일은 공개하지 않고 스크린샷과 알고리즘의 개념만 공개하겠습니다.
많은 관심 바라며, 부족한 부분에 대한 의견이나 관련될만한 자료 소개 해주시면 정말 감사하겠습니다. ^^
===================================================================================================
1년만에 끝내려고 했던 걸 3년이나 붙잡고 있었다..
혹여 너무 떠들고 다니면 남이 흉내내지나 않을까, 내가 생각한 것이라는 것을 인정받지 못하지는 않을까;; 따위의 기우나 생각하고 있기에는 너무 오래 제자리에 머물렀다.
이제 이건 그냥 적당히 허공에 던져버리고 다음 단계를 밟아야겠다.



덧글
狂工크랜 2007/08/27 21:27 # 답글
예전에 비슷한 주제의 사이트들 몇개를 찾아놨었는 데 다들 홈페이지가 사라졌심 ㅡ,.ㅡ;;남은 것 중 그나마 비슷한 거 ->http://www.irobot.com/sp.cfm?pageid=149
목표는 타치코마!! 어예~~
동용 2007/08/31 00:06 # 삭제 답글
난 딴 거는 두고 그냥 BVH파일스크립트 만들어 주는 장치 만들 수 있는 능력만 있었으면...