[45호]한국전자전
한국전자전 2017
글 | 심혜린 기자 linda@ntrex.co.kr
국내 IT 관련 행사 중 가장 큰 행사로 손꼽히는 2017 한국전자전(이하 ‘KES’)을 관람했다. 이 전시회는 1972년부터 전자산업의 발전 흐름을 알려주는 역할을 톡톡히 한 전시회로, 매년 산업통상자원부가 주최하고 한국전자정보통신산업진흥회(KEA)가 주관해왔다.
올해의 주제는 ‘융합과 혁신으로 미래를 열다’로, 10월 17일부터 20일까지 서울 삼성동 코엑스 A, B홀에서 개최되었다. 올해로 48회째를 맞는 한국전자전은 20개국 900여개 업체 1,900부스의 규모로 최신제품을 전시했다. 휴대폰, 반도체, 디스플레이, 산업융합, IT 융합, 자동차 융합, 디지털 방송, 스마트교육, e-헬스와 같은 다양한 전자 산업을 총망라해 현재 전자 산업의 전체적인 흐름을 둘러볼 수 있는 전시회로서 큰 의의가 있다.
올해도 삼성과 LG가 참여했으며, 이례적으로 메르세데스-벤츠(Mercedes-Benz)도 참가해 많은 관람객들의 주목을 받았다.
먼저 B홀에서 기자와 관람객들의 눈길을 사로잡은 부스는 ‘드림하이씨티’ 부스의 3D홀로그램 디스플레이 ‘하이퍼비전(Hypervsn)’이었다.
사진에는 현장의 느낌이 온전히 담기지 못했지만, 실제로는 크게 눈에 띄어 많은 관람객들의 ‘신기하다’ 라는 평을 들을 수 있었다. ‘하이퍼비전(Hypervsn)’은 런던의 Kinomo에서 생산하는 혁신적인 하이테크 스마트 시각 제품으로써 삼성부터 인텔, Aston Martin에 이르는 세계적인 브랜드와 협력하여 ‘올해의 영국 3대 혁신’을 비롯한 많은 상을 수상했던 경력이 있다.
지난 1월 미국 라스베이거스에서 열린 ‘CES 2017’에서 선보였었지만, 국내에서는 최초로 한국전자전에서 ‘하이퍼비전(Hypervsn)’을 선보였다. 이번 첫 공개를 기점으로 유통을 시작한다고 수입유통사인 드림아이씨티 (대표, 손창식)이 밝혔다. 회전하는 날개에 장착된 LED 프로젝터로 3D 홀로그램을 보는 듯한 효과를 내며 2.8kg의 가벼운 무게와 58cm의 장비 99개를 연결할 수 있는 호환성으로 HD급 고화질로 대형 홀로그램 영상을 구현할 수 있다. 특히 관리 소프트웨어를 통해 콘텐츠의 원격 업로드 및 관리를 수월하게 할 수 있다. 그동안 국내에서는 홀로그램이 공간의 제약때문에 한계를 느꼈었지만 이 장비가 유통됨으로써 가격도 저렴해지고 설치도 한층 더 쉬워져 한계를 뛰어넘을 것으로 전망된다.
전 세계적으로 어린이 코딩 프로그래밍에 관심도가 높아지며 관련 제품들이 인기를 끌고있다. 이에 발맞춰 로봇교육도구 기업 벨 과학교육 그룹(Bell Educational Group)은 3세 아동용 로봇 키트 ‘Mabot’, ‘Rebot’ 을 선보였다. 벨 과학교육 그룹은 현재 중국에서 선두적인 교육기관이다. 마봇은 지능로봇의 재미를 충분히 느낄 수 있는 모듈화 설계의 구형 로봇으로 서로 다른 기능을 가진 유닛을 연결하여 무궁무진한 로봇 프로젝트를 실현할 수 있다. ‘Mabot GO’ 응용 프로그램이 있어 각 로봇을 제어할 수 있다. 각 휠이 색상을 통해 연결되어 시스템이 함께 움직이는지 직접 확인할 수 있어 훌륭하다는 평가가 있는 제품이다. 최근 킥스타터에서 10월 22일까지 진행되는 펀딩은 현재 100만 홍콩달러를 돌파하기도 했다.
Rebot은 금속 로봇으로 특수 제작한 금속부품으로 구성되어 있으며 홀빔 시리즈, 커넥터 시리즈, 패스너 시리즈, 트랜스미션 시리즈와 기타 부품 세트가 포함되어 있다. 부품을 공유하며 여러 사람과 협력해 제작할 수 있고, 레고와 호환되어 창의적인 로봇을 만들 수 있다. Rebot은 특히 대형 작품 제작에도 적합해 로봇대회에서 대회용 도구로 사용할 수 있다는 장점이 있어 수요가 기대되는 제품이다.
디바이스마트 입점업체인 프로차일드는 스마트한 기저귀 알람인 아큐벨(Acubel)을 포함, 각종 개발 보드, 헬스 밴드 제품 등을 선보였다. 프로차일드는 사물인터넷(IoT) 시대를 맞이하여 웨어러블 기기 브랜드 플로거(Ploger)를 더욱 강화하고 있는 중이다. 플로거 브랜드 제품인 아큐벨은 스마트폰의 전용 앱을 통해 기저귀의 온습도를 모니터링하고 있다가 미리 설정된 민감도에 따라 습도를 인지해 알람을 울려 기저귀를 갈아주도록 알려주는 기기이다. 알람이 울린 횟수를 시간대 별로 기록하기도 해 아기의 배변활동에 대해 일별, 월별로 쉽게 확인도 가능하다. 기저귀에 쉽게 부착하기만 하면 돼서 사용하기에 매우 편리하다. 프로차일드 관계자는 “일일이 매시간 체크하지 않아도 아기의 컨디션과 건강까지 지킬 수 있는 유용한 제품”이라고 설명했다. 이 제품은 뛰어난 아이디어를 인정받아 2017 ‘하이서울 우수상품브랜드 어워드’에 선정되기도 했다.
전시장 한켠에는 ‘2017 KES 이노베이션 어워드’ 에서 수상한 혁신적인 제품이 전시되어 있었다. 올해 6회째인 이노베이션 어워드에서는 신제품, 디자인, 콘텐츠 3개 부문에서 11개 기업의 총 13개 제품을 선정했다. Design 부문 상을 받은 삼성전자 ‘더프레임 TV’는 액자형으로 사용자가 원하는 프레임을 교체할 수 있다. 꺼져 있을 때도 그림 및 사진 등의 예술 작품을 보여주는 아트모드로 일상 생활 공간을 갤러리처럼 만들어준다. Content 부문 상을 받은 소트론에서 출품한 휴대용 회의단말기(PCM-100)은 보안장치 사용으로 감청 위험이 없고 회의 외에도 동시통역, 가이드, 인터컴 등 다양한 용도로 활용이 가능하다.
B홀을 지나 A홀에 들어가니 익숙한 대기업 전시관들이 자리잡고 있었다. 메르세데스-벤츠 본사는 우리나라 스타트업 기업들이 가진 혁신적인 아이디어와 기술을 확인하고 한국 기업과의 협력 가능성을 키워나가기 위해 이번 전시회에 참가했다고 한다. 이번 전시회에서는 GLC 하이브리드, C350 하이브리드 2대와 출시 예정인 마이바흐 S650을 국내에 공개했다. 차량 내부를 직접 볼 수는 없었지만 태블릿을 이용해서 볼 수 있었다. 벤츠의 승용 부문 구매 및 공급 품질 커뮤니케이션 총괄 요헨 셰퍼스 총괄은 기조 연설에서 벤츠의 커넥티드카·자율주행차 전략을 소개하기도 하며 이를 위한 한국 업체와의 협력을 강조했다.
올해 삼성은 ‘모든 순간을 나답게’ 라는 문구를 새기며 라이프스타일의 변화를 콘셉트로 전시하였다. 갤럭시노트8, QLED TV, 더프레임 TV, 패밀리허브, 파워건, 게이밍 노트북, 하만의 오디오 제품까지 관람객들의 체험을 중점으로 해 참여하려는 관람객들로 붐볐다.
특히 삼성은 하반기 전략 스마트폰 갤럭시 노트8을 체험해볼 수 있도록 S펜 라이브 메세지, 듀얼카메라, 빅스비, 라이프스타일등으로 나눈 체험존을 꾸렸다. 갤럭시 노트8은 빅스비 보이스, 듀얼 카메라, S-pen 등 새로운 기능을 탑재했다. 특히 베젤을 최소화해 ‘인피티니 디스플레이(Infinity Display)’ 디자인으로 역대 노트 시리즈 중 가장 큰 6.3형 화면을 자랑한다. 기자가 가장 효율적이라고 생각했던 장점은 진화된 빅스비 기능이다. 이미지 검색을 활용하면 촬영된 이미지와 비슷한 이미지가 결과로 나온다. 구매하고 싶은 물품 이미지를 인식해 쇼핑할 수 있는 온라인 사이트로 바로 접속할 수 있어 유용하다. 특히 이미지를 텍스트화할 수 있으며, 변형된 텍스트를 71개 언어(영어, 일본어, 중국어, 독일어 등) 중 원하는 언어를 문장 단위로 바로 번역이 된다. 해외 제품 구매 시나 해외 여행 시에 편리한 기능이다.
삼성전자 부스 중 냉장고 ‘패밀리 허브’ 체험존이 공간을 가장 크게 차지했다. 패밀리 허브는 홈 IoT 기술을 주방가전에서 접목시킨 대표적인 제품으로 클라우드를 기반으로 냉장고 본연의 기능뿐만 아니라 가족 간의 소통, 엔터테인먼트, 쇼핑, 다른 기기의 제어까지 할 수 있다. 손이 자유롭지 못한 주방에서 음성을 활용해 구매 상품 목록에 부족한 요리 재료를 추가해 온라인 쇼핑을 할 수 있으며 음악 감상도 가능하다. 글로벌 레시피 다운로드 1위 사이트인 올레시피스(allrecipes.com)와의 협업으로 레시피를 자유롭게 불러내 타이머로 설정된 조리 시간을 확인해볼 수도 있다는 점이 특징이다. 이 날 체험해보니 단순한 UI를 탑재해서 사용하기에 간편했지만, 주방에서 요리하면서 동시에 많은 기능들을 다 사용할 수 있을지 아직은 조금 회의적이었다.
가상 현실 기반 시뮬레이터 전문 기업 이노시뮬레이션은 VR 모션 플랫폼과 자동차 시뮬레이션을 전시했다. 그동안 다른 전시회에서는 VR 시장이 게임 및 놀이기구 컨텐츠에 집중되어 있었지만 이날 행사에서 ‘VR 모션 플랫폼’은 KES에서 처음으로 공개되어 많은 관람객들의 주목을 받았다. 사용자의 움직임이나 시선에 따라 실제 환경과 거의 비슷한 속도로 움직이는 모션트래킹 기술을 탑재했고, 직진 및 회전 운동을 추가하여 더욱 생동감 있는 느낌을 구현했다. 단일 모션 시스템, 듀얼 모션 시스템의 2가지 제품이 있으며 LAN 연결로 PC에 쉽게 연결하여 VR 콘텐츠와 동기화할 수 있다는 장점이 있다. 기존의 무거운 모션 플랫폼을 합리적인 가격에 콤팩트한 제품으로 개발해 전 세계 사람 누구나 쉽게 접할 수 있다. 자동차 개발 플랫폼 자율 주행 자동차 시뮬레이터는 실제 자동차의 운전석 환경과 동일하게 제작되어 실제 도로주행이 아닌 미래형 자동차의 개발 및 시험 평가가 가능하도록 산업용으로 구축한 제품이다. 이외에도 실제와 동일하게 제작되어 운전 교육으로 활용 가능한 굴삭기, 지게차, 소방차, 고가 사다리차 등 중장비 시뮬레이터를 선보였다. 업체는 가상현실에서 일어나는 멀미 현상을 줄이기 위해서 모션 시트 등 다양한 형태의 제품을 단독으로 개발하기도 했다.
콘솔 및 아케이드 게임 전문기업 스코넥엔터테인먼트는 다양한 VR 게임 체험존을 운영했다. 최근 출시된 ‘모탈블리츠 아케이드’는 북미, 일본 유럽에서 판매 순위 1위를 기록해 전 세계적으로 큰 인기를 끌고 있는 ‘모탈블리츠 for PS VR’를 로케이션 버전으로 개발한 콘텐츠이다. 난이도와 분량을 로케이션 운영에 적합하게 재구성하였고 그래픽을 개선했다.
가상현실 기기 PS VR과 연동해서 가상 공간에서 슈팅을 즐길 수 있도록 한 게임으로 사용자의 머리와 손의 움직임이 게임 속에 그대로 재현되어 지형지물을 이용한 전투를 즐길 수 있도록 구현되었다. ‘모탈블리츠 워킹어트랙션’은 롯데월드를 통해 서비스되는 등 개인유저용이 아닌 로케이션용으로 활용되고 있으며, 단순히 제품을 판매하는데 그치는 것이 아니라 고객이 원하는 지속적인 콘텐츠 업데이트와 유지 보수를 지원한다. 1위를 기록한 모탈블리츠 외에도 캐주얼 게임인 쥬시팡팡, VR 번지점프 등 다양한 콘텐츠를 갖추고 있다.
체험하려는 대기 줄이 길게 늘어서 있던 클라우드게이트의 ‘레전드 히어로즈’는 관람객들에게 최고 인기였다. 다양한 스크린 스포츠를 즐길 수 있는 신개념 스포츠 테마파크이다. 얼마 전 TV 프로그램에서도 레전드 히어로즈가 방영되어 궁금했었는데, 레전드 야구존부터 축구, 양궁까지 직접 체험해볼 수 있었다.
클라우드게이트는 ‘2017 한국전자전 KES 이노베이션 제품상(Innovation Awards Product) 부문에서 ‘Best New Contents’에 선정되어 창의적이고 혁신적인 제품이라는 평가를 받기도 했다. 최첨단 센서 기술과 그래픽으로 실제 스포츠 환경을 그대로 재현해 생동감 넘치는 게임 환경을 제공해 날씨와 상관없이 남녀노소 누구나 각자 취향에 맞춰 즐길 수 있다. 기자 개인적으로는 특히 양궁이 실제 양궁과 비슷하게 힘이 들어가 현실감을 느낄 수 있어 꽤 정교했다. 관계자는 최근 직영점에 승마, 컬링, 볼링 등 새로운 종목을 추가했다고 전했다. 전시장에서 모든 스포츠가 관람객의 열기가 뜨거웠는데, 올해 연말쯤 핫플레이스로 떠오를 것 같다는 예감이 들었다.
임베디드 개발보드 기술력을 자랑하는 Digilent의 공식 수입 유통사 (주)이니프로는 Pmod 모듈 시리즈와 Scope 제품을 한눈에 보기 편하게 전시하였다. Pmod 모듈은 프로그래밍 로직 및 임베디드 개발 보드를 확장에 효율적인 방법을 제공하는 소형 I / O 인터페이스 보드 라인이다. Pmod 모듈은 SPI 및 기타 직렬 프로토콜을 포함한 다중 디지털 제어 신호를 전달할 수 있는 6, 8, 12핀 커넥터를 사용하여 시스템 보드와도 통신한다.
이 모듈을 사용하면 아날로그 신호 및 전원 공급 장치를 필요할 때만 사용하고 디지털 컨트롤러 보드를 사용하지 않고도 효과적인 설계가 가능하다.
주력 제품인 OpenScope MZ는 USB / WIFI 오실로스코프로 회로, 센서, 기타 전자 장치의 신호를 수집, 분석, 시각화 및 제어할 수 있는 컴퓨터에 연결하는 장치이다. 일반적인 USB 계측기와는 달리 아두이노나 라즈베리파이와 같이 독립형으로 실행되도록 프로그래밍이 가능해 효율적이다. 이 제품의 핵심은 강력한 마이크로칩 PIC32MZ 프로세서를 갖추고 있다는 점이다. 또한 무료 오픈 소스 자바 스크립트 기반 소프트웨어인 Waveforms Live가 포함되어 있다. OpenScope MZ와 Waveforms Live를 함께 사용하면 오실로스코프, 펑션 제너레이터, 로직 분석기, 파워 서플라이, 데이터 로거로 구성할 수 있다.
삼성전자와 경쟁하듯 LG전자도 라이프스타일을 주제로 체험 공간을 크게 꾸렸으며, 각 제품별로 도우미가 설명해주는 도슨트 투어도 운영했다. LG전자는 유기발광다이오드(OLED) TV ‘LG 시그니처 올레드 TV W’를 내세우고 얇은 두께와 선명한 화질을 직접 체험할 수 있는 화질 체험존을 마련했다. ‘LG 시그니처 올레드 TV W’는 미래 지향적 디자인과 우수한 사용 편의성을 인정받았으며 이번 2017 한국전자전(KES)’의 ‘최고 디자인’ 제품으로 선정되었다. 또한 LG는 주력 상품인 게이밍 모니터 체험존도 운영하여 노트북과 3대의 모니터로 연결할 수 있는 확장성을 자랑했다. 특히 LG 울트라와이드 게이밍 모니터는 지싱크 지원으로 부드럽게 화면 전환을 하며 다크맵 모드, 액션 모드, 조준점 모드 등 게임 기능 지원으로 맞춤 설정을 할 수 있다.
LG전자의 부스에서 삼성전자와 가장 차별화되는 점은 프리미엄 홈 뷰티기기인 LG Pra.L 였다. 국내 홈 뷰티 시장에 진출한 LG전자는 피부 탄력, 주름개선을 위한 시술을 집에서도 간편하게 할 수 있도록 ‘더마 LED 마스크’, ‘토탈 리프트업 케어’, ‘갈바닉 이온 부스터’, ‘듀얼 모션 클렌저’ 등을 전시하였다. LG전자가 타 전시에서 선보였던 제품과는 새로운 제품이라 그런지 남녀 구분 없이 체험하는 모습이 돋보였다. 제일 인기 많았던 제품은 TV 광고를 통해 잘 알려진 ‘더마 LED 마스크’ 이다. 미국 FDA 인가(FDA cleared)로 효능과 안정성이 입증된 제품으로 120개의 LED 광원이 탑재되어 있어 코어 탄력 케어와 동시에 피부 톤을 균일하고 화사하게 만들어준다.
2017 한국전자전(KES)는 나흘간의 일정을 성황리에 마쳤다. 독립적인 기술을 탑재한 제품보다는 산업 융합에 초점을 맞춘 제품들을 대거 선보였으며, 이외에 투자유치 상담회와 글로벌 바이어 수출전략 상담회를 비롯해 삼성의료원, 롯데월드, 현대차, 아마존 IBM 등이 참가, 49개 주제발표가 진행된 컨퍼런스도 진행되었다.
대체적으로 전자제품 체험 및 시연 위주 전시였으며 삼성과 LG는 도우미를 대거 투입하여 제품 설명에 많은 준비를 한 느낌을 받았다. 또 기술을 일상생활에 녹여 앞으로 삶의 변화까지 예측해볼 수 있었다. 다만 한국지엠 등 핵심 글로벌 기업이 올해는 참가하지 않아서 그런지 전체 규모는 예년보다 조금 줄어들어 아쉬웠다. 올해 타 전시회인 월드 IT쇼나 스마트테크쇼에서 흔하게 볼 수 있었던 드론 관련 업체는 거의 보기 힘들었다. 내년에도 올해보다 더 혁신적인 제품을 만나볼 수 있기를 기대하며 관람기를 마친다. DM
[45호]영상인식을 통한 불법중국어선 탐지 도우미
2017 ICT 융합 프로젝트 공모전 입선작
영상인식을 통한 불법중국어선 탐지 도우미
글 | 부산대학교 손유선, 오은주, 제세은
1. 심사평
칩센 실제 현실에 적용이 필요할 수도 있을 듯한 주제로 보여 아이디어 부분에 높은 점수를 주었습니다. 기본적으로 기존 라인트레이서을 주로 다룬 것으로 보이고, 보고서를 통해 구현된 내용 또한 라인트레이서에 가깝습니다. 영상을 인지하여 특정한 경로의 주행을 반복하게 하자면 기본적으로 라인트레이서의 기능을 보유하여야 하겠으나, 보고서에 언급하였듯이 부표를 통해 경로를 탐색, 이동하게 하자면 바닥면 선을 따라가는 라인트레이서 보다는 부표와 같은 특정 점을 인지하여 주행하여야 하는 부분이 추가되어야 할 듯한데, 이 부분에 대한 고려가 부족해 보입니다. 또한 불법조업어선에 해당하는 영상 처리나 전달의 부분이 제대로 언급되지 않은듯 한 점이 아쉬움이 듭니다.
뉴티씨 전체적으로 완성도가 높지만, 작품의 개념을 설명하는 듯한 장비 구성입니다. 시간이 된다면 물에 띄워보는 것도 나쁘지 않을 것이라 생각됩니다.
위드로봇 template matching 방식은 대상체의 크기, 방향이 달라지면 인식률이 크게 떨어지는 단점이 있습니다. 이 부분을 극복할 수 있는 추가 연구가 있으면 좋겠습니다. 그리고 바다에서 위치 추정은 기존 GPS 또는 DGPS만으로도 충분하기에 이 분야의 활용을 검토하면 완성도를 높일 수 있을 것으로 보입니다.
2. 작품 개요
2.1. 프로젝트의 기획 및 내용
2.1.1. 프로젝트의 기획
Ⅰ. 프로젝트 도출배경
지난 10월, 중국 불법조업에 관한 문제가 연일 뉴스에 오르내렸다. 중국의 불법조업 어선문제는 어제, 오늘만의 일이 아니라 계속해서 있어왔던 문제이고, 우리나라뿐만 아니라 전 세계적인 문제이다. 중국 어선으로부터 영해를 지키기 위해 인명피해마저 발생하고 있다. 중국 어선들의 불법조업 장소와 수위가 민감해질수록 국민들의 감정도 악화되고 있다. 다른 나라의 폭침, 포격 등이 뉴스까지 소개되며 물리적 대응을 더 강하게 하라는 여론이 생기는 상황이다. 하지만 과연 이것이 더 나은 해결책이 될까?
현재 자율주행은 모든 분야에서 주목하는 제어 시스템이다. 자율주행 자동차만 생각하기 쉽지만 사실 무인 선박에도 많은 관심이 쏠리고 있다. 자연환경이 척박한 극지대나 해적들의 위험을 피할 수 있는 무인 상선, 군사용으로 활용 가능한 정찰선 등 활용도는 무궁무진하다. 날씨, 파도 등을 고려한 최적의 운항 항로 제시 기능을 통해 연료비 등을 아낄 수도 있다. 선박 내에 있는 자동화 장비를 실시간 모니터링 할 수 있는 시스템으로 선박의 고장 여부를 진단하고 필요한 조치를 취할 수 있다. 이처럼 무인선의 개발은 해양 기술의 발전에 크게 기여할 것이라는 것에 아이디어를 얻어 개발 방향을 잡게 되었다.
Ⅱ. 프로젝트 아이디어의 기획
여러 목적을 가진 무인선 중에서도 우리는 정찰에 초점을 맞췄다. 우리나라 영해를 제집 드나들 듯 하는 중국 불법 조업 어선들이 커다란 문제점으로 사회 이슈가 된 지 오래이다. 해경의 감시에도 불구하고 수십 척에서 2백 여척이 넘는 중국 어선들이 배타 수역을 넘어 수자원을 고갈시키고 있다. 러시아와 일본의 경우 불법 어선이 발견된 즉시 해군을 출동시켜 불법 어선을 압수하거나 진압한다고 한다. 여기에서 해경의 감시에는 부족함이 있다고 판단하여 우리나라 배타 수역을 지킬 무인선을 개발하기로 하였다. 이를 개발하기에 앞서 자율주행자동차를 구현하여 자율 주행 알고리즘을 개발한 후 무인선으로 발전시켜 나가도록 한다.
자율 주행을 구현하는 여러 방법들 중 라인트레이서를 선택하였는데 이는 우리가 정찰을 목표로 하고 있기에 일정한 경로를 주기적으로 돌아다니는 것이 중요하다고 생각했기 때문이다. 만약 무인선으로 발전시킨다면 적외선을 배의 좌측에 위치 시켜 일정 거리 마다 부표를 띄운 후 그 부표를 줄로 연결시켜 따라가도록 할 것이다.
2.1.2. 프로젝트 구현 내용
Ⅰ. 자율주행 – 라인트레이서
시중에 판매되고 있는 RC카를 분해하여 우리가 원하는 구동 부분만 남기도록 한다. 이 차체에 아두이노, 적외선 센서, 모터드라이버를 연결하여 라인트레이서를 구현하도록 한다. 아두이노는 전체의 연산을 담당하는 제어부이다. 아두이노는 적외선 센서의 출력 값이 입력으로 들어가고 이 값을 연산하여 아두이노는 그에 따른 출력 값을 모터드라이버로 내보내 준다. 모터드라이버는 차체의 모터 부분과 직접 납땜하여 자동차의 움직임을 제어한다.
Ⅱ. 영상 인식
차체에 부착된 라즈베리파이에 파이 카메라와 서보모터를 연결한다. 파이 카메라로 영상을 라즈베리파이로 보내주면 라즈베리파이에서 서버로 영상을 송출한다. 라즈베리파이에 연결한 서보모터는 카메라를 회전시켜주는 역할을 한다. 불법 중국어선을 탐지하는 것이 목적이므로 주위를 넓게 살피는 것이 중요하기 때문에 카메라를 회전시켜 시야를 확보하도록 한다. 영상을 라즈베리파이에, 연결된 IP 주소의 한 포트로 실시간 전송시키고, 그 주소를 소스 코드에 입력하여 노트북에서 영상을 분석한다. 우리가 구현하는 것은 정찰기이기 때문에 사람이 모니터로 불법어선의 침입을 감지해야한다고 생각하여 노트북에서 영상분석을 하도록 하고 영상 분석 결과를 노트북 화면에서 확인할 수 있도록 한다. 미리 중국어선의 이미지를 입력 값으로 두고 임계값을 넘을 경우 불법어선으로 간주, 화면에 빨간 네모로 표시한다.
3. 작품 설명
3.1. 주요 동작 및 특징
3.1.1. 주요 동작
Ⅰ. 자율 주행
차의 앞머리에 부착된 적외선 센서 모듈을 이용하여 바닥에 깔린 라인을 인식한다. 이 모듈은 각각 4개의 발광부와 수광부로 이루어진 디지털 4ch이다. 좌측 2개(Sensor1, Sensor2), 우측 2개(Sensor3, Sensor4)의 센서로 이루어져 방향 뿐만 아니라 회전정도를 더 섬세하게 알 수 있다. 각 센서마다 달린 LED로 센서값의 변화를 육안으로 쉽게 값을 확인할 수 있다.
아두이노에서는 인식한 라인을 바탕으로 조향을 결정하고 모터의 동작을 제어한다. 직선 라인 부분에서는 속도와 방향을 일정하게 유지하고, 곡선부분에서는 라인에 맞춰, 속도와 방향을 바꾸어 좌회전 또는 우회전을 수행한다. RC카는 속도와 직진 또는 후진을 제어하는 뒷바퀴와 방향과 회전률을 제어하는 앞바퀴로 이루어져 있어, 이를 각각의 모터드라이버 채널에 연결하여 동시에 제어하도록 한다.
Ⅱ. 영상 인식
차에 부착된 라즈베리파이에서 서버로 영상 정보를 계속 전송한다. 파이카메라를 라즈베리에 연결하여 외부의 영상정보를 파이카메라가 실시간으로 받도록 한다. 파이카메라에는 서보모터를 부착하여 카메라의 시야를 넓히도록 한다. 이때, 라즈베리파이에 연결한 파이카메라는 라즈베리파이용으로 나온 카메라 모듈이다. 파이카메라는 고화질 비디오뿐만 아니라 스틸 사진을 찍는데 사용할 수 있으며, 초보자가 사용하기 쉽게 만들어 놓은 카메라 모듈이다.
라즈베리파이 카메라 모듈은 사용자 정의 설계된 추가 기능 라즈베리 파이이다. 카메라에 연결되어 있는 케이블에 따라 데이터가 전송이 되고 높은 데이터 전송률을 가진다.
라즈베리파이 내에서는 외부의 영상정보를 받아와 전송시키는 역할을 한다. 이후 전송된 영상은 노트북에 visual studio에서 c++로 opencv 헤더를 참조하는 코드를 구성하여 처리한다. 영상을 처리하는 것을 보드 내부에서 할 수도 있겠으나, 보드의 RAM이 1GB인 점을 생각할 때 영상 처리 속도가 매우 느릴 것으로 생각되어 PC에서 처리하는 것으로 결정한다.
3.1.2. 기능별 상세 기술
Ⅰ. 영상전송
라즈베리파이에 파이카메라를 연결하여 배의 전방을 촬영한다. 이 영상을 웹으로 전송하면 디바이스에 관계없이 웹 브라우저에만 접속할 수 있으면 볼 수 있다는 이점이 있어 촬영한 영상을 웹으로 전송하도록 한다. 파이카메라에서 웹으로 영상을 전송하는 데에 사용한 기술은 mjpg-streamer이다. mjpg-streamer는 jpg 촬영을 연속으로 수행해서 마치 영상처럼 보이도록 해준다. 설치한 후 특정 port로 접근할 수 있는 HTTP Server 역할을 해준다. 이 페이지를 통해 MJPG 영상을 볼 수 있기 때문에 브라우저로 접속해서 볼 수 있고 소스 코드에서 URL을 불러 영상처리 작업을 진행 할 수도 있다.
Ⅱ. 적외선 센서 AM-IRS4D
라인을 따라 주행하는 자동차를 만들기 위해 적외선 센서 모듈을 사용하였다. 이 모듈은 4개의 센서로 구성되어 있고, 각 센서에는 발광부와 수광부, 가변저항, LED로 구성되어 있다. 발광부는 적외선을 내보내고, 바닥에 반사된 적외선은 수광부에서 감지된다. 흰색은 빛을 반사하고 검은색은 빛을 흡수하는 성질을 이용하여, 바닥에 반사된 적외선의 양으로 라인을 감지한다. LED는 적외선 센서 값의 변화를 나타낸다.
적외선 센서의 출력은 그림9의 상단 그림과 같이 아날로그 신호이다. 이것을 비교기에서 적당한 값으로 잘라 0, 1로 구분 할 수 있다. 0, 1신호는 디지털 신호이기 때문에 AD 변환기없이 마이크로컨트롤러에서 입력 받아 사용할 수 있다. 0, 1로 자르는 기준은 가변저항으로 변경할 수 있다. 우리는 흰 바탕의 검은색 선을 트래킹하도록 설정해주었다. 라인을 감지해보면 검정색 라인 위에서는 LED가 꺼지고 흰색 바탕 위에서는 LED가 켜진다. (라인 감지 시 0 입력)
Ⅲ. OpenCV
OpenCV(Open Source Computer Vision)는 오픈 소스 컴퓨터 비전 C 라이브러리이다. 원래는 인텔이 개발했고, 윈도, 리눅스 등의 여러 플랫폼에서 사용할 수 있다. 실시간 이미지 프로세싱에 중점을 둔 라이브러리이다. 인텔 CPU에서 사용되는 경우 속도의 향상을 볼 수 있는 Intel Performance Primitives (IPP)를 지원한다.
우리는 이 기술을 이용하여 중국어선을 탐지하도록 한다. OpenCV에서 제공하는 Template matching을 이용하여 입력으로 넣은 이미지 파일과 유사한 부분이 영상에 포착될 경우 영상에 빨간색 Rectangle로 표시하도록 한다.
Ⅳ. 모터동작제어
모터의 동작 제어는 모터드라이버 L298N을 사용하여 제어하였다. 모터드라이버란 DC 모터의 방향, 속도를 제어하기 위해 사용하는 모듈이다. 아두이노 회로만으로는 DC 모터에 충분한 전류의 양을 공급할 수 없고, 전류의 제어가 어렵고 복잡하다. 모터드라이버를 사용하면 DC모터를 쉽게 제어할 수 있다. 하나의 모터 드라이버는 2개의 모터를 제어할 수 있다. 따라서 우리의 경우, 모터 A의 위치에는 조향 제어(앞바퀴)를, 모터 B에는 속도 제어(뒷바퀴)를 연결하였다. 모터 드라이버에는 모터를 제어하기 위한 H-bridge라는 칩이 있다. 이 칩은 발열이 심하여 검은색 방열판을 달아 전류가 많이 흘러도 화재가 발생하지 않도록 설계되어 있다. 3개의 단자를 통해 외부전원의 (+)(-)극, 라즈베리파이의 (+)(-)극을 연결한다. 아두이노가 줄 수 있는 전류는 40mA 정도지만 DC모터를 제어하기 위해서는 적어도 150mA 정도의 전류가 필요하다. 특히나 우리 자율주행 자동차의 경우 차체와 각종 보드 및 모듈의 무게가 함께 실려 속도를 내기 위해서 더 많은 전류를 필요로 했다. 이는 배터리 여러 개를 병렬로 연결함으로서 해결하였다. 대용량 모터용으로는 2A까지 제어가 가능하다.
모터드라이버(L298N)를 사용하는 데에는 9V 배터리 하나를 연결하여 구동하였지만 모터드라이버가 제공하는 힘에 비해 차체가 너무 무거워 굴러가지 않았다. 결국 문제는 전압이 아니라 전류였고, 9V 550mAh 3개와, 7.2V 3000mAh를 병렬로 연결하여 모터드라이버에 연결하였다. 모터드라이버를 통해 전압은 5V로 감압한 뒤 인가된다. 앞바퀴와 뒷바퀴 모두 원활하게 전원 공급이 가능하다. 속도 또한 모터드라이버와 아두이노를 사용해 속도를 제어할 수 있다.
Ⅴ. 자율주행 – 조향제어
위의 L298N 모터 드라이버에서 IN1, IN2에 아두이노의 디지털 핀에 연결하여 신호를 받아 ENA 부분에 핀을 연결하여 PWM 제어를 해주어 아래의 기판에 모터 부분 +, – 단자에 출력하여 속도를 조절한다. 그리고 모터 드라이버의 IN3, IN4를 아두이노의 디지털 핀에 연결하고 ENB 부분에 디지털 핀을 연결하여 ENB 부분을 조절하여 각도를 조절하고 아래의 기판에 조향 제어 부분의 +, – 단자로 출력을 하여 IN3에 HIGH 신호를 IN4에 LOW 신호를 주면 좌측으로 회전하고 반대로 LOW, HIGH 신호를 주면 우측으로 회전하게 된다.
Ⅵ. 카메라 서보모터 제어
비용절감을 위해 회전식 카메라를 사용하기보다 서보모터에 파이카메라를 부착하는 방법을 선택하였다. 서보모터(SG-90)는 0~180도 회전 가능하며 아두이노 5v 전압, GND, 출력 핀을 필요로 한다.
3.2. 전체 시스템 구성
3.2.1. 전체 구성도
정찰기의 전체 구성을 위와 같이 크게 3개로 나눌 수 있다. 조향부의 경우, 모터를 제어하는 부분이다. 제어부 중 모터에 관여하는 것은 아두이노이다. 아두이노와 조향부에 속해있는 모터드라이버, 적외선 센서를 연결하여 아두이노에서 제어 명령을 내린다. 영상부에는 서보모터와 파이카메라가 있다. 파이카메라는 제어부의 라즈베리파이에, 서보모터는 아두이노에 연결한다. 아두이노는 서보모터를 돌리면서 조향부를 계속 제어해야하므로 인터럽트를 사용하여 처리하도록 한다. 라즈베리파이는 파이카메라에서 받아온 영상을 서버로 전송하는 역할을 한다. 라즈베리파이3는 와이파이가 내장되어 있어 따로 와이파이 모듈을 연결할 필요 없이 서버로 영상을 전송할 수 있다.
3.2.2. H/W
Ⅰ. 센서부(경로 감지)
주행방향의 전면을 향하는 위치에 센서를 배치하여 앞으로 가야하는 경로를 판단하며 주행할 수 있도록 하였다.
Ⅱ. 구동부
모터보드는 시중의 RC카의 차체를 사용하여, 내장되어있는 모터를 이용해 구동하였다. 총 사용한 모터는 2개로써, 전면(앞바퀴)과 후면(뒷바퀴)에 배치하였다. 전면(앞바퀴)에 사용한 모터는 조향을 제어하고, 후면(뒷바퀴)에 있는 모터는 직진과 전진을 제어한다. 이 모터를 제어하는 데에는 L298N의 모터 드라이버를 사용하였다.
파이캠을 회전시키기 위해 서보모터 SG90을 사용하였다. 서보모터와 아두이노와 연결하여 0 ~ 180도까지 움직이도록 한다. 서보모터는 타이머 인터럽트 MStimer2 라이브러리를 이용하여 여러 가지 일을 동시에 할 수 있도록 하였다.
3.2.3. S/W
소프트웨어의 경우 위와 같은 기능이 필요하다. 라즈베리파이에서는 nano 명령어를 통해 shell script로 mjpg-streamer를 구동시켜 라즈베리파이에서 받아온 영상 정보를 서버로 보낸다.
위는 라즈베리파이에서 받아온 영상을 처리하는 코드 중 일부이다. 이 코드에서는 실시간으로 받아온 영상 정보를 계속 처리하는 과정이다. 서버 URL을 입력하여 받아온 영상을 cap에 넣고 그 영상을 origin에 넣는다. origin은 원본 영상을 의미한다. 불법 중국어선 사진을 mat 타입의 boat라는 변수에 저장해두고 template matching을 사용하여 일치 여부를 알아낸다. 이때 일치할 경우 그 주위에 사각형을 그려준다. 원본 영상에서 불법 어선이라 생각되는 곳에 사각형을 그린 영상을 img_display라는 mat 타입의 변수에 저장한다. 이 영상을 imshow로 user에게 보여주면 사용자는 실시간으로 불법 중국 어선이 탐지될 경우 사각형으로 표시되는 영상을 볼 수 있다. 위의 코드에서는 원본 영상과 사각형으로 표시한 후의 영상 둘 다 보여주도록 하였다.
위의 라즈베리파이에서 실행시킬 파일 내용이다. mjpg-streamer라는 기술을 이용하여 라즈베리파이가 파이카메라로부터 받아온 영상을 라즈베리파이가 연결된 wifi의 8222 port를 열어 전송시키는 것이다. 이 기술을 사용하기 위해서는 라즈베리파이에 mjpg-streamer를 설치하고 설치한 곳의 link를 위와 같이 library path로 설정해 주어야한다. 만약 이후에 보드 내부에서 영상을 처리해야하는 순간이 온다면 파이카메라로부터 받아온 영상을 라즈베리파이 내부에 사진파일로 저장하고 이 사진파일을 opencv에서 받아와 처리한 다음 처리한 사진을 아까와 같은 이름, 경로로 저장시킨다. 이렇게 할 경우 받아온 즉시 opencv로 처리하므로 실시간 처리라 할 수 있다. 실시간 처리가 된 사진을 mjpg-streamer 기술을 이용하여 위와 같이 일정 포트로 전송시키면 우리는 영상처리가 완료된 영상을 서버로 받아볼 수 있을 것이다. 아래부터는 아두이노에서 실행시킬 코드이다.
#include<Servo.h>
#include <MsTimer2.h>
Servo servo;
int left_1 = 4; //라인트레이서 센서1
int left_2 = 3; //라인트레이서 센서2
int right_3 = 6; //라인트레이서 센서3
int right_4 = 7; //라인트레이서 센서4
int servoPin = 5; //카메라 서보모터
int angle = 0 ; //카메라 서보모터 각도
int IN1 = 8; //DC모터1
int IN2 = 9; //DC모터2
int ENA1 = 10; //DC모터 속도
int ENA2 = 11; //서브모터 속도
int IN3 = 12; //서브모터1
int IN4 = 13; //서브모터2
그림 24 아두이노 핀 설정
void setup(){
Serial.begin(9600);
pinMode(left_1,INPUT);
pinMode(left_2,INPUT);
pinMode(right_3,INPUT);
pinMode(right_4,INPUT);
MsTimer2::set(500, curl);
MsTimer2::start();
servo.attach(servoPin);
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(ENA1,OUTPUT);
pinMode(ENA2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
}
그림 25 아두이노 핀 모드 설정
아두이노의 핀 중 3, 4, 6, 7번은 적외선센서 모듈에 연결하고 5번 핀은 파이카메라와 연결할 서보모터에 연결한다. 핀 8~13번은 모터 드라이버의 ENA, ENB, IN1,2,3,4에 연결한다. 적외선센서와 연결된 핀은 INPUT으로 설정하고 모터드라이버에 연결된 핀은 OUTPUT으로 설정한다. 서보모터에 연결된 핀도 설정해준다.
카메라를 부착시킬 서보모터는 메인 루프문과 병렬적으로 실행되어야 한다. 그렇지 않으면 서보모터가 동작하는 동안 차체는 아무 동작도 할 수 없기 때문이다. 따라서 MsTimer2라는 라이브러리를 추가하여 병렬 실행을 가능하게 한다.
void curl(){
int servoPin = 5;
int angle = 0;
for(angle = 0; angle <180; angle++)
{
servo.write(angle);
delay(20);
}
for(angle = 180; angle > 0 ; angle –)
{
servo.write(angle);
delay(20);
}
}
그림 28 파이카메라 서보모터 동작 코드
파이카메라를 부착할 서보모터는 주기적으로 180도를 회전하며 카메라가 다양한 각도를 촬영하도록 한다. curl() 함수는 메인 루프문과 별개로 500ms마다 타이머 인터럽트로 인해 호출되기 때문에 어떤 delay로 없이 서보모터를 동작시킬 수 있다.
void forward(){
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
analogWrite(ENA1,150);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
analogWrite(ENA2,255);
}
void Stop(){
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
analogWrite(ENA1,0);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
}
그림 29 아두이노 조향 제어1
void turn_left(){
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
analogWrite(ENA1,180);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
analogWrite(ENA2,255);
}
void turn_right(){
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
analogWrite(ENA1,180);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENA2,255);
}
그림 30 아두이노 조향 제어2
그림 33, 그림 34는 자동차의 모터 제어를 위한 부분이다. IN1이 HIGH, IN2가 LOW이면 정방향으로 주행을 하고 0~255까지 PWM 제어를 통해 속도를 조절할 수 있다. 그리고 IN3, IN4에 HIGH, LOW를 주게 되면 좌회전, LOW,HIGH를 주게 되면 우회전을 하게 되고 이 때 ENA2에 255 값을 주게 되면 45도 회전하게 된다.
적외선 센서의 값은 검은색 라인을 인식하면 0이고, 흰색 바탕을 인식하면 1이다. 흰색 바탕을 인식하거나 센서 값이 적절하지 않은 경우(예를 들면 1-0-0-1) 라인을 인식하지 못했으므로 정지하도록 한다. 센서 값에 따른 방향을 정리하면 위의 표와 같이 나타난다. 이를 이용하여 방향을 판단하는 함수를 작성하면 다음과 같다.
char DIRECTION(){
char Direction=’S';
if(digitalRead(left_1)==0 && digitalRead(left_2)==0 && digitalRead(right_3)==0 && digitalRead(right_4)==0) Direction = ‘G’;
else if(digitalRead(left_1)==1 && digitalRead(left_2)==0 && digitalRead(right_3)==0 && digitalRead(right_4)==0) Direction = ‘R’;
else if(digitalRead(left_1)==1 && digitalRead(left_2)==1 && digitalRead(right_3)==0 && digitalRead(right_4)==0) Direction = ‘R’;
else if(digitalRead(left_1)==1 && digitalRead(left_2)==1 && digitalRead(right_3)==1 && digitalRead(right_4)==0) Direction = ‘R’;
else if(digitalRead(left_1)==0 && digitalRead(left_2)==0 && digitalRead(right_3)==0 && digitalRead(right_4)==1) Direction = ‘L’;
else if(digitalRead(left_1)==0 && digitalRead(left_2)==0 && digitalRead(right_3)==1 && digitalRead(right_4)==1) Direction = ‘L’;
else if(digitalRead(left_1)==0 && digitalRead(left_2)==1 && digitalRead(right_3)==1 && digitalRead(right_4)==1) Direction = ‘L’;
else Direction = ‘S’;
return Direction;
}
그림 31 센서 값으로 방향을 판단하는 함수
char Direction = DIRECTION();
switch(Direction){
case ‘S’:
Stop();
Serial.println(Direction);
break;
case ‘L’:
turn_left();
Serial.println(Direction);
break;
case ‘R’:
turn_right();
Serial.println(Direction);
break;
case ‘G’:
forward();
Serial.println(Direction);
break;
defalt:
break;
}
delay(50);
그림 32 방향에 따른 모터 제어
방향을 판단하는 함수 DIRECTION() 값에 따라 모터를 제어하는 메인 코드이다. 직진으로 판단한 경우 변수 Direction은 ‘G’이므로 forward() 함수가 실행된다. Direction은 좌회전으로 판단한 경우 ’L’로 우회전으로 판단한 경우는 ‘R로 나타나며 각각 turn_left() 함수와 turn _right() 함수를 실행한다.
3.3. 개발 환경
3.3.1. 하드웨어
라즈베리파이3, L298N 모터 드라이버, SG-90 서보 모터, 적외선 센서 AM-IRS4D, 아두이노(UNO) 등
3.3.2. 운영체제
Window 10, raspbian-jessie
3.3.3. 개발 언어
C, C++, 쉘 스크립트(Shell Script)
4. 단계별 제작 과정
4.1. 아두이노
4.3. 적외선센서
4.4. 주행
[45호]한국기계전 2017
KOREA MACHINERY FAIR 2017
한국기계전 2017
글 | 최희 기자(choihee427@ntrex.co.kr)
최첨단 공구 및 관련기기 등을 한눈에 볼 수 있는 국내 최대 기계 산업인전시회 ‘제21회 한국기계전(Korea Machinery Fair 2017, 이하 KOMF 2017)’ 이 10월 24일부터 27일까지 나흘간 경기도 킨텍스에서 성황리에 개최됐다.
한국기계전은 1977년 한국 최초의 자본재 전시회로 시작해 한국 기계산업 발전과 함께 지속 성장하며 국내·외 기계류의 제품홍보·구매·상담 및 기술교류를 위한 마케팅 플레이스로 자리매김하고 있다. 이번 전시는 22개국이 참가 600개사, 2,400여부스의 국제 기계류 무역전시회로 개최되어 우수한 국산 기계류의 국내외 신인도 제고 및 기계류 마케팅의 첨병 역할을 더욱 공고히했다.
산업통상자원부가 주최하고 한국기계산업진흥회가 주관한 올해 전시회는 40년 전통의 ‘한국기계전’을 중심으로 ‘서울국제공구전시회’, ‘금속산업대전’이 동시에 개막했으며, 서울국제공구전과 한국기계전을 전시홀 간 구분없이 전시해 상호 관람에 따른 시너지 효과가 컸던 것으로 평가되고 있다. 전시분야로는 금속가공 및 공작기계, 부품·소재, 뿌리산업, FA·모션컨트롤, 에너지 및 발전기자재, IT·융합 디지털, 스마트테크, 제어계측기기 특별전으로 나뉘며, 모션콘트롤·FA시스템, 금속가공기계, 운반하역/물류기기, 부품/소재, IT융합, 3D프린팅 등 다양한 품목들을 전시해 최신 기술을 선보였다.
철강, 조선, 자동차, 항공, 가공분야 등에 사용되는 연마석 전문업체 제일연마공업 주식회사(대표 오유인, http://www.grinding.co.kr)는 국내 업체 최초로 기업자체 부설 연구소를 갖추어 초정밀 가공분야의 CBN, DIFFUSER, 연마용 페파, 각종 연삭숫돌 등을 생산하는 60년 전통의 국내 대표 브랜드이다.
이번 전시에서는 신제품 ‘PS COLD’를 출시했다. PS GOLD는 기존 세라믹 원료와는 다른 특수 세라믹 원료를 적용해 빠르게 절단이 가능하고, 열 발생량이 적어 마모가 적고 절단면이 깨끗하다. 분진 발생량이 적기때문에 보다 나은 작업환경을 유지할 수 있어 어떠한 소재에도 최적의 성능을 발휘한다.
특히 다른 재질에 비해 열에 의한 제품 변형을 최소화하므로 열 발생 최소화를 요구하는 인테리어 작업에 아주 적합하다. 또, 타사 제품에 비해 높은 탄성을 구현함으로 안전성을 극대화시켜 직선, 곡면 절단 등 어떠한 작업조건에도 뛰어난 생산성을 자랑한다. 이외에도 난삭재 가공에 특화된 ‘CZ 옵셋트’, 환봉 절단에 적합한 ‘FAST CUT’ 등 다양한 시리즈의 연마석을 함께 선보였다.
티앤씨샤크(주)(대표 조성강,www.tncshark.com)는 브로치터, 오링커터, 원터치콘넥터, 테이퍼드릴 등 금속절삭공구 제조업체로 이번 전시에서는 천공용 커터, 카운터 싱크, 센터드릴, 금형관련 제품 등 다양한 시리즈의 제조품들을 소개했다. 그 중 모든 피삭재의 홀가공이 가능한 천공용 커터 시리즈는 애뉼러커터(Annular Cutter), 샤크컷(Shark Cut), 홀커터(Hole Cutter) 그리고 바이메탈 홀쏘(Bi-Metal Hole Saw)가 있다.
애뉼러커터는 Co-HSS 와 초경 크게 2종류로 분류되며 두꺼운 철판을 마그네틱 드릴 기계 및 기타 공작기계에 부착하여 천공작업을 하는 공구로서 드릴대비 3~4배의 짧은 시간안에 천공작업이 가능하다. 특히 Co-HSS는 나노-다이아몬드 코팅이 되어있는 티앤씨샤크의 특허 제품으로 스텐레스, 구리 등 비철, 난삭재 가공에 우수한 성능을 발휘한다.
샤크컷은 타 제품에 비해 일반강, 스텐레스에도 강력한 절삭성을 발휘하며, 알루미늄, 동, 플라스틱, FRP, 목재 등 다양한 종류의 소재를 천공할 수 있다. 홀커터는 HSS와 초경으로 분류되며, HSS홀쏘는 두께 1.6mm 미만, 초경 홀커터는 두께 4mm 미만의 얇은 철판을 드릴링머신 또는 핸드드릴에 부착하여 천공작업을 하는 공구이다. 샤크컷에 비해 가격이 저렴하지만 정밀도와 내구성이 다소 떨어진다. 마지막으로 바이메탈 홀쏘는 날끝은 Co-HSS 톱날, 몸체는 특수강을 사용하여 용접한 열팽창률이 서로 다른 2종류의 원자재로 형성된 Hole Saw이다. 파손률이 적어 비전문가도 천공이 용이하며 일반철 외에도 알루미늄, 플라스틱, 목재 등 광범위하게 사용할 수 있다.
한국스타빌라(www.starbila.co.kr)는 핸디 디스크 ’OSH-D100A’를 출시했다. OSH-D100A는 어디서나 한 손으로 운반이 가능한 컴팩트형으로 제작되어 판금(샤링,레이저) 기계 가공품의 버 제거, 부품의 녹 제거 및 윤내기, 버프가공에 사용된다. 2차 버가 나오지 않고 버 제거부터 연마까지 할 수 있는 이 제품은 외주에서 좁은 홈까지 사용이 가능하고, 각도를 자유롭게 바꿀 수 있어 무리없이 작업할 수 있다. 초소형으로 제작되었지만 양손으로도 잡을 수 있어 작은 작업에서부터 큰 작업까지 작업 조건에 제약이 없다. 특히, 고무 숫돌을 사용해 여성도 안심하고 안전하게 작업할 수 있으며, 내구성도 뛰어나 경제성, 작업 효율 향상에 도움을 준다. 주로 스테인레스, 알루미늄, 철, 담금질 강, 동, 유리, 아크릴 등 다양한 소재를 이용해 작업이 가능하다.
산업 공구 전문기업 크레텍(주)(대표 최영수,www.cretec.kr)은 세련된 디자인의 ‘UDT power’ 충전식 유압공구 시리즈를 선보여 눈길을 끌었다. 크레텍은 국내최대 산업공구 전문기업으로 작업공구, 절삭측정, 전동공작기계, 용접 등 다양한 분야의 방대한 공구·산업용품을 공급하고있으며, 엄격한 품질관리를 거쳐 UDT, SMATO, HANSHIN 등 7개의 자사브랜드를 갖추고있다.
이번에 선보인 ‘UDT power’ 유압공구 시리즈는 압착공구, 절단공구, 천공기, 그리고 세가지 기능 모두 사용이 가능한 겸용 공구가 있다. 제품의 외형은 전체적으로 무광 블루 컬러를 채택해 세련되면서도 한손으로도 작업이 가능하도록 인체공학적으로 설계해 고효율을 자랑한다.
그 중, ‘UD-300BZ’는 권총형 충전식 유압 압착공구로 한손으로 용이하게 작업이 가능하며, 작업의 효율성을 높이기위해 360° 회전 헤드로 제작됐다. 리튬 이온 배터리 장착으로 손쉽게 충전할 수 있고, 니켈수소 배터리에 비해 작업능력을 50% 향상시킬 수 있다. 또, 자동 복귀 기능이 탑재되어 압착이 완료되면 자동으로 원위치로 복귀되며, 복귀 과정중 모터는 자동 정지된다. 복귀 중 재압착도 가능하다. 이 외에도 듀얼 피스톤 펌프, 온도과승 방지장치 등 다양한 장치들이 장착되어있다. 사용자의 편의와 안전을 고려해 탑재한 다양한 기술력과 배려가 돋보이는 제품이다.
1952년 이탈리아에서 설립된 정밀 측정 장비 전문기업 마르포스(주)(www.marposs.com)는 이번 전시에 참가해 금형 표면 온도 모니터링 ‘Total Thermal Vision(TTV)’을 선보였다.
금형 온도의 표면 분포는 고품질의 효율적이고 결함없는 공정을 위해 매우 중요하다. 수축, 다공성, 크랙, 기포와 같은 다이 캐스팅 결함의 대부분은 제어 불능의 금형 온도로 인해 발생된다. 금형 표면 온도 모니터링은 생산 사이클을 중단하지 않고 실시간으로 금형 표면 온도를 측정함으로써 주조 문제를 예방 또는 방지한다. 금형 온도가 너무 높거나 낮으면 부품의 품질, 공구 수명, 사이클 타임에 악영향을 끼치며 온도 조절, 압축 공기, 수성 윤활제, 이형제의 불필요한 사용으로 인해 에너지 소비 및 유지 비용 측면에서도 악영향을 받게된다.
마르포스의 TTV는 가벼운 합금의 고압 다이 캐스팅 공정에서 금형의 열 지도를 실시간으로 모니터링할 수 있는 혁신적이고 검증된 기술이다. 다년간의 경험 및 전 세계에 여러 UNIT가 운영되고 있는 TTV는 다이 캐스팅의 품질과 설비 종합 효율(OEE)을 높이기 위한 가장 인기있는 시스템이며 효율적인 부품 품질 관리 및 공정 최적화의 핵심 요소이다.
이 시스템을 사용하는 작업자들은 비용 절감 효과와, 기계효율을 향상 시킬 수 있으며, 돌발 공정정지를 최소화할 수 있다. 또, 최적의 공정 모니터링 솔루션과 함께 주조 공정에서 최고 품질 수준에 도달할 수 있을 것이라고 업체 관계자는 설명했다.
디씨에스이엔지(주)(대표 최인성,www.dcseng.co.kr)는 오비탈 절단 장비 ‘S-Cutter’ 시리즈를 선보였다. S-Cutter는 카본 스틸에서 초청정 배관에 사용되는 UHP Tube, 쎄니타리관, 스테인레스관, 크롬몰리브덴관, 티타늄관, 슈퍼듀플렉스관, 알루미늄관, PP관, PE관 등 다양한 종류의 관을 절단하고 베베링 할 수 있는 효율적인 장비이다.
S-Cutter 시리즈는 Pipe O.D 6㎜ ~ 220㎜까지 한번에 클램핑이 가능해 작업시간 단축에 효과적이며, 사용자의 편의성을 극대화 시키기 위해 커팅날 교체를 편리하게 작업할 수 있도록 제작했다. 짧은 관재 가공에 유리하며 주축 오일레스베어링을 적용해 장비의 내구성 향상과 함께 장비 유격을 최소화 시켰다. 또, 원터치식 조절 장치를 탑재해 가공 깊이를 미세하게 조절 할 수 있어 절단 및 면취 품질 향상에 도움을 준다.
S-150은 세계 최대의 편의성과 작업속도를 자랑하는 제품으로 두께에 관계없이 O.D 6mm ~ 170mm까지 한번에 클램핑할 수 있다. 자동 회전 방식을 도입해 두꺼운 관재는 정방향으로 커팅하고, 얇은 관재는 역방향으로 커팅해 사용자의 편의를 극대화 시켰다. 특히, S-Cutter에 장착되어있는 모든 커팅날은 GF 및 AXXAIR Cutter와 상호 호환되며, 직접 개발한 제품으로 최고의 품질과 저렴한 가격으로 제공된다.
디씨에스이엔지의 S-Cutter는 주로 청정배관 공사, IT, 바이오, 식품, GMP 등의 공장뿐만 아니라 조선해양, 석유화학 플랜트, 발전, 우주항공 등 다양한 현장에서 사용되고 있다.
CNC 스프링 기계, 와이어 벤딩 기계 전문업체 대하기전(주)(대표 하인석, www.dhtec.co.kr)은 대만 SIMCO(XINDA)사의 다기능 스프링 포밍 기계를 출시했다.
이번에 출시한 제품 중 가장 눈에 띈 ‘CMM-12-680R’은 최고 품질의 CNC 무 캠 스프링 포밍 기계이다. 표준 12축, 최대 13축의 서보 제어 시스템으로 구성되어 있으며, CNC 무 캠 스프링 기계를 탑재하여 PC 기반의 전용 프로그램을 통해 매우 쉽게 조작 할 수 있다. 특히, 간편한 프로그램 화면 구성으로 편리함을 강조했으며, 모든 축을 TEACH EDIT 방식(수동 조작에서 자동 입력 방식)을 도입해 초보자도 쉽게 조작 및 셋업이 가능하다. 가공 가능 선경은 2.5mm ~ 8.0mm이며, 옵션으로 인장 고리 스프링을 생산할 수 있는 후크 스테이션 축과 벤딩 전용의 서보스피너, 서보 커터를 장착 할 수 있다. 이 외에도 대하기전은 다양한 종류의 연삭기계와 측정기기도 함께 판매하고 있다.
하스오토메이션코리아(Haas Automation,www.haaskorea.com)는 하스 터닝 센터를 출품했다. 높은 정밀도 유지와 열변위에 매우 안정된 이제품은 견고한 구조를 기본으로 설계되었다. 기존 제품에서 주물 구조의 강성을 증대시키고 칩제거의 용이함과 절삭유의 원활한 순환이 되도록 흐름을 개선하고, 컴팩트한 대칭구조의 스핀들로 열변형의 안정성을 향싱시켰다. 모든 주물은 45° 경사면의 공구대를 통해 공구 설치 공간을 확대하고 칩배출이 용이하도록 제작했다.
또, 절삭유 순환이 윤활하여, 유지보수의 간편성과 신속한 서비스를 위해 다각적인 문제에 곧바로 대응할 수 있도록 부품 설계가 최적화됐다. 선반작업의 생산성 향상과 자동화를 위해 벨트 타입의 칩 컨베이어와 프로그래머블 심압대, 자동공구 세팅장치, C축 라이브 툴링, 자동파트 채처, 고압 절삭유 시스템 등 옵션으로 추가가 가능하며, 기본 구현 장치로는 Live Tool 동기 탭핑과 15인치 칼라 모니터, USB포트가 장착되어있다.
하스오토메이션코리아는 북미 최대의 공작 기계 제조업체인 하스오토메이션의 대리점(HFO)으로, 하스 오토메이션은 수직/수평 머시닝 센터, CNC 선반, 5출 머시닝 센터, 로터리 테이블 및 트러니언 테이블등 공장기계 풀 라인업을 생산하고 있으며, 높은 정밀도와 반복 정밀도 및 뛰어난 내구성을 자랑한다.
그 밖에 두산중공업의 발전, 워터 사업 분야의 통합 솔루션을 포함해 다쏘시스템, 슈나이더일렉트릭, 지멘스 등 국내외를 대표하는 글로벌 기업들이 대거 참가해 최신 기술과 제조혁신의 해법들을 제시했다. 이번 전시를 통해 세계 우수제품들을 한자리에서 볼 수 있었으며, 국내 제조 제품들의 수출이 대폭 증대되는 기회가 되길 기원한다. ‘2017한국기계전’은 나흘간의 일정을 마치고 10월27일 성황리에 폐막했다.
[45호]은정-Go(인공지능 체스로봇)
2017 ICT 융합 프로젝트 공모전 입선작
은정-Go(인공지능 체스로봇)
글 | 단국대학교 김은정, 김건희, 곽영우
1. 심사평
칩센 얼핏 보기에 구성 방법이 쉬워 보이지만, 기본 회로부 하드웨어의 구성, 모터 및 전자석을 이용한 말의 이동 등을 고려하면 machanic 부분뿐만 아니라 일부 머신 러닝까지 고려가 된 복잡한 작품으로 판단됩니다. 나름대로 고민하여 구성했을 알고리즘을 문서로 표현하기 위해 어려운 부분은 충분히 이해하지만, 알고리즘에 대한 설명이 너무 단편적이고 부족해 보이는 것도 사실입니다. 하지만 다시 말하지만 기술적으로 많은 부분에 대해 충분한 고려를 하고, 이를 융합하고자 시도한 기술 구성적 난이도 부분은 충분히 잘 했다고 생각됩니다.
뉴티씨 체스 인공지능을 실제 눈으로 보이게 해서 꽤나 흥미로웠습니다. 이 기술을 이용하면, 알파고 같은 인공지능 체스 기사가 나올 수도 있을 것 같습니다. 파이팅입니다.
위드로봇 재미있는 아이디어로 완성도 있는 결과까지 잘 도달한 것 같습니다. 전시회에서 많은 인기를 끌 것 같습니다.
2. 작품 개요
세계가 주목하고 있는 제4차 산업혁명의 주요 의제 중 하나일 만큼 인공지능 로봇은 이슈가 되고 있습니다. 실제로도 인공지능을 이용한 자율 주행 자동차도 도로에 나오고, 인공지능 바둑 알고리즘 알파고와 사람의 대결도 많은 이슈를 받았습니다. 은정-고는 인공지능 체스 알고리즘을 이용한 체스 로봇입니다. 현재 알까기 로봇이나, 장기 로봇 등 여러 대국 게임 작품들을 살펴보면, MFC만을 사용하여 하드웨어적인 요소가 없거나 영상 처리 등을 이용하여 프레임이나 집게 손이 장기 말을 이동하는 방식이 대부분을 차지합니다.
은정-고는 거기에 보다 사람들의 흥미를 유발할 수 있게 업그레이드하여 프레임을 감췄습니다. 겉으로 보기에는 체스 판위에 웹캠도 없이, 프레임도 없이 체스 말만 올라와 있지만 Computer와 User의 대국이 시작되면 User가 말을 움직이면, 그에 따라 Computer의 말이 저절로 움직여 대응을 하기 시작합니다.
3. 작품 설명
3.1. 주요 동작 및 특징
은정-Go는 인공지능 알고리즘을 이용한 지능형 체스 로봇으로 대국 게임이라는 것이 꼭 컴퓨터 상의 소프트웨어만으로 동작 되는 것이 아닌, 하드웨어를 포함한, 즉 로봇과 소프트웨어를 접목시킴을 제시하고 있습니다.
대부분의 인공지능 알고리즘과 하드웨어를 접목시킨 대국 로봇을 보자면, 대부분 영상처리를 이용하여 말을 파악하고, 집게 팔 같은 외관상 보이는 프레임으로 말을 움직이는 형태를 갖추고 있습니다. 그러나 은정-Go는 웹캠이 필요한 영상처리 대신 마그네틱 센서와 자석을 이용하여 말의 위치를 파악했습니다. 또한 외관상 보이는 집게 팔 대신 전자석과 스텝 모터 제어를 통해 프레임을 체스판 밑으로 감췄습니다. 따라서 오락적인 요소를 더욱 높였습니다. 또한 몇 수 앞을 내다볼 수 있는 Min-Max Algorithm을 개선한 Alpha-Beta Algorithm을 사용하여 Computer의 말들에게 이점이 되는 node만 선택하여 효율적으로 탐색하는 알고리즘을 사용하였습니다. 추가적으로 평가 함수를 사용하여 보다 지능적인 판단을 하여 더욱 유리한 대국을 이끌 수 있게 하였습니다.
전체적인 과정은 다음과 같습니다. User가 말을 이동하였으면, 그 좌표 값을 CPU의 gpio 핀에 연결된 마그네틱 센서가 인식을 한 후 말의 위치를 파악합니다. 센서로 파악된 말의 위치를 판별한 후 유리한 대국인지 먼저 평가를 합니다. 그 후 몇 수 앞을 내다봐서 가장 유리한 node를 찾는 알고리즘을 돌린 후 Computer의 말이 움직여야할 좌표 값을 찾습니다. 좌표 값을 찾은 후 진동이 적고 저속에서 토크가 쎈 바이폴라 스텝 모터 2개를 사용하여 x축, y축으로 이동합니다. 이때 User의 말을 먹게 되는 경우 User의 말은 밖으로 먼저 나온 뒤 모터가 움직이게 됩니다.
3.1.1. H / W
Ⅰ. 센서부
센서는 자석의 성질을 이용한 magnetic reed switch를 사용하였습니다. reed switch는 접점 부분이 비활성 가스를 충전한 유리관 속에 봉인되어 있는 스위치로, 자성이 가해지면 양쪽의 reed에 N극과 S극이 유도되어 자기 흡인력에 의해 reed가 붙게 됩니다. 따라서 전류가 흐르게 되고 자계가 소거되면 reed의 탄성에 의해 접점이 복귀됩니다. 따라서 각각의 말에 자석을 부착한 후 그 자성에 의해 좌표 값을 알게 됩니다. 그림 3에서 볼 수 있듯이 자석이 reed switch 중앙에 위치할 경우는 OFF가 되고 그 외에는 ON이 되므로 ON의 범위를 더 높이기 위해 체스 칸의 사이드에 센서를 부착하였습니다.
8*8로 이루어진 나무판 위에 센서를 64개 부착한 뒤 가로 세로를 각각 한 줄에 이어 CPU의 GPIO pin에 연결하였습니다. 이 때 reed switch만 연결 할 경우 다른 GPIO out pin으로 역류하는 ghost activations이 발생하므로 그것을 막기 위해 다이오드 1N4148을 부착하였습니다. 또한 구조상으로 센서를 빨간색 원안에 놓으면 ON이 되기 때문에 체스 칸의 길이인 55mm와 reed switch의 길이인 12mm를 고려하여 OFF되지 않는 범위 내에 말이 존재하도록 자석은 6mm인 네오디움 자석을 부착하였습니다.
Ⅱ. 모터부
스텝 모터에는 크게 유니폴라 스텝 모터와 바이폴라 스텝 모터가 있습니다. 유니폴라 스텝 모터는 각각의 코일에 1개의 권선만 지나기 때문에 1방향 밖에 전류가 흐르지 않습니다. 바이폴라 스텝 모터는 각각의 코일에 2개의 권선이 지나기 때문에 방향성이 존재하게 됩니다. 유니폴라 스텝 모터는 회로가 간단하며 고속 회전시 토크가 높습니다. 반대로 바이폴라 스텝 모터는 회로가 복잡하나 저속 회전시 토크가 높습니다. 따라서 저속 구동시 토크가 높고, 진동이 덜한 바이폴라 스텝 모터를 사용하기로 하였습니다. 모터 드라이버는 L298N을 사용하여 제어를 하였고, 2상 4선식 42BYGH2673A-C 바이폴라 스텝 모터 두 개를 사용하여 각각 x축과 y축을 이동하였습니다. 스텝 모터의 제어는 1상 여자 방식, 2상 여자 방식, 1-2상 여자 방식이 있는데, 선택에 따라 입력 pulse와 step의 특성이 달라집니다. 1상은 출력토크가 낮다는 단점이 있었고, 2상은 1상에 비해 배의 전원 용량이 필요하나 토크가 높아 난조가 일어날 확률이 낮습니다. 따라서 1상과 2상을 반씩 합쳐놓은 부드러우면서 토크가 적당히 쎈 1-2상 방식을 사용했습니다.
Ⅲ. 하드웨어 설계
하드웨어를 체스 판 아래에 감추기 위해서 보통의 대국 로봇과 다르게 하드웨어 설계를 했습니다. 우선, 모터 제어에 정확도를 높이기 위해 톱니를 내었고, 그에 맞는 레일을 깔았습니다. 그 후 모터가 바닥과 수평이 되게끔 철봉으로 수평을 맞췄습니다. 모터에 철봉을 관통하는 지지대를 고정시킨 후 모터를 작동시키면 수평으로 나아가게 하였습니다. Solid Works로 작업한 사진 속 그림 10번은 모터가 움직이는 한 세트이고, 그 세트가 총 두 개가 존재합니다. 밑에 있는 y축 모터 위에는 x축 모터를 부착하였고, x축 모터 위에는 전자석을 장착하여 알고리즘을 돌리고 난 후 나온 좌표 값에 의해 밑에 자석이 붙어 있는 말이 움직이게 됩니다.
3.1.2. Algorithm
Ⅰ. 센서부
우선, 자석이 붙은 말의 위치를 reed switch 센서로 알아내야 합니다. 첫째로 switch-case 문을 사용하여 LOW0번부터 LOW7번까지 순서대로 ON 시킨 후 OFF 시키는 것을 반복하였습니다. LOW0가 ON이 되어 있을 때 COL0번부터 COL7번까지 탐색한 후 OFF 시키고, 다음에 LOW1이 ON이 되어 있을 때 또 COL0번부터 COL7번까지 탐색한 후 OFF 시키고 그 다음을 반복하였습니다. 자석이 체스 칸 위에 있을 경우 reed switch 센서의 접점이 물려 전류가 흐르게 되고, LOW는 0부터 7까지 ON, OFF를 반복하므로 COL의 GPIO pin에 신호가 오게 되면, x축의 좌표 값은 LOW의 GPIO pin, y축의 좌표 값은 COL의 GPIO pin임을 알 수 있습니다.
둘째로, 밑에 자석이 붙은 말이 움직임에 따라 0과 1로만 나타내는 것이 아니라 User가 말을 들어 올린 말이 User의 말인지 Computer의 말인지의 정보도 있어야 합니다. 또한 어떠한 말인지의 정보도 있어야 합니다. 우선 말이 들어 올린 경우를 구분하기 위해 position을 pre와 next로 나눴습니다. 말이 들어 올려진 경우는 위치 정보가 1이었다가 0이 됩니다. 또한 말이 내려진 경우는 위치 정보가 0이었다가 1이 됩니다. pre_position은 말이 움직이기 전 상태를 말합니다. 만약 pre_position이 1인 말의 next_position이 0이 될 경우 들어올려진 경우로 파악합니다. 또한 pre_position이 0인 말의 next_position이 1이 될 경우는 들어 올려진 말이 내려진 경우라고 파악합니다.
셋째로, 들어 올려진 말이 User의 말인지 Computer의 말인지 구분하기 위해 체스의 처음 정보, 즉 처음 세팅 값은 룰로써 정해져 있기 때문에 User은 -의 점수 Computer은 +의 점수로 구분하였습니다. 또한 말들마다 점수의 차이를 주어 말마다의 가치를 나눴습니다. 그 정보들을 User가 말을 들어 올릴 때 다른 변수에 저장을 해놓고 User가 말을 내려놓을 때 그 정보들을 입력 받는 알고리즘을 짰습니다. 이 때 말을 들어 올리는 행위는 User만 하는 행위이므로 만약 검은색 말, 즉 +의 점수가 들어 올려 졌을 경우는 User가 Computer의 말을 먹는 상황이라고 파악합니다.
Ⅱ. 모터부
우선, 스텝 모터의 기본 원리는 상을 순서대로 ON 시키면서 회전을 하는 것입니다. 사용한 모터는 2상 4선식 바이폴라 모터이므로 A, B, A’, B’의 순서로 GPIO pin에 연결하였고, CPU의 Timer Interrupt를 사용하여 차례대로 GPIO pin을 ON시켜 모터를 구동 하였습니다. Timer Interrupt 주기는 10로 설정하였고 모터의 속도와 가속도를 설정하기 위해 가속도 공식을 사용하여 수식을 세워 함수로 만들었습니다.
말을 움직이기 위해서는 x축의 모터가 -x방향과 +x방향 둘다 자유자재로 움직일 수 있어야 합니다. 이때 스텝 모터는, 구동을 하던 방향을 바꾸기 위해서는 ON 시켜주는 GPIO pin의 순서를 반대로 해주면 되므로, Timer Interrupt를 멈춘 뒤 순서를 반대로 해주었습니다. y축 모터도 마찬가지 이므로 모터를 움직이는 함수는 총 4개로 모터의 마지막 위치에서 가야할 위치에 따라 +x+y, -x+y, +x-y, -x-y 를 판별한 후 모터를 구동하였습니다.
Ⅲ. AI Algorithm
체스 알고리즘은 몇 수 앞을 내다볼 수 있는 Min-Max 알고리즘을 바탕으로 구현하였습니다. Min-Max 알고리즘이란 Computer가 유리한 값은 크고, User가 유리한 값은 작게 가치를 두어 노드를 뻗어나가는 알고리즘입니다.
즉, Max는 Computer, Min은 User입니다. 노드의 깊이를 3이라고 두면, 마지막 노드에서부터 위로 올라가면서 Max, Min을 판별하여 가장 가치 있는 노드를 선택합니다. 어미가 Min인 경우 뻗어나간 자식들 중 제일 작은 가치를 고릅니다.
이것은 User가 경우의 수 들 중 가장 User에게 유리한 경우를 선택한다고 가정한 선택입니다. 그리고 그 위에 올라가면 어미가 Max가 되는데, Max는 Computer가 둘 수 있는 가장 좋은 경우이기 때문에 똑같이 Max는 Computer가 둘 수 있는 수 중 가장 가치가 높은 노드를 선택할 것입니다. 이렇게 다른 경우의 수, 다른 노드까지 탐색을 하면 Computer가 선택할 수 있는 수 중 가장 가치 있는 노드가 나옵니다. 이것만으로 해서도 게임이 이루어질 수 있지만 깊이가 깊어질수록, 엄청난 노드의 수로 게임이 처질 수 있습니다. 따라서 Alpha-Beta 가지치기를 이용하여 Min-Max 알고리즘에서 탐색시간과 탐색 효율을 높여주는 알고리즘을 이용하였습니다. Alpha-Beta 가지치기란, 예를들면 Min에서는 가장 작은 가치를 선택하지만, Max에서는 가장 큰 가치를 선택하기 때문에 만약 Min의 가치가 300이면 다음 Max는 300보다 작은 200을 선택하지 않을 것이고, 또한 다른 자식노드의 자식노드가 200보다 작은 값이 나와도 Max로는 선택을 하지 않을것이 때문입니다. 따라서 효율이 떨어지는 가지는 Cut off되어 더 이상 탐색하지 않게 됩니다.
알고리즘 구현에 필요한 것들은 여러 가지가 있습니다. 알고리즘의 효율을 높여주는 Cut off함수(노드를 뻗어나가다가 가지 않아도 되는 경우에 가지를 쳐서 더 이상 뻗어 나가지 않도록 하는 함수)와 각 말들이 움직일 수 있는 경로를 만든 함수, 게임의 종료 여부를 결정하는 종단함수 등이 있습니다. 그러나 이 모든 것을 훌륭히 구현했다고 해도 지능 수준이 낮다면 게임이 이루어지지 않습니다. 따라서 이 문제를 해결하기 위해 정석 함수와 평가 함수에 대한 고찰이 이루어 졌습니다. 정석 함수란 정석적으로 기능을 부여하기 위한 함수이며 평가 함수에서는 우선적인 상대적 우열을 가린 후 동일한 가치를 가지는 국면들을 정석 함수를 이용하여 2차적 우열을 가리는 방식을 사용하여 지능적인 요소를 더욱 높였습니다.
우선, 알고리즘을 돌리기에 앞서 지금 대국이 Computer에게 유리한 대국인지를 평가 함수를 이용하여 판단합니다. 만약 User에게 먹힐 위험이 있는 말이 있는 경우의 가치를 더 크게 판단합니다. 그 다음 정석 함수를 이용하여 노드를 뻗어나가고, 그 가치를 밑에서부터 평가하면서 올라오게 됩니다. 또한 Computer의 말이 먹히더라도 만약 가치를 교환할만한 국면이면 그 노드에 가치를 더하는 함수도 추가하여 지능을 높였습니다.
다음은 예시입니다.
Computer의 각각 말이 갈 수 있는 좌표 값과 그 좌표 값에서 인공지능으로 갈 수 있는 모든 경우의 수를 우선 저장시킵니다. 그리고 Cut off 함수와 Alpha-Beta알고리즘을 적용시켜 가장 유리한 움직임을 저장시킵니다. 그리고 앞서 처음에 했던 평가 함수와 적용시킵니다.
다음은 평가 함수 내에서도 평가를 하는 경우입니다. 그림21의 초록색 화살표는 처음의 먹힐 가능성이 있는 Computer의 말이 먹을 수 있는, 또는 피할 수 있는 경우가 나타납니다. 파란색 화살표는 AI알고리즘을 통해 말이 이동한 경우 먹힐 가능성이 있는 것을 나타내었습니다.
말이 죽지 않는 경우를 더 큰 가치로 둔다면 (1,3)의 비숍이 (4,0)의 룩을 먹는 것이 가장 큰 가치이겠지만 만약 User의 말을 먹는 경우, User의 가치가 높은 말을 먹는 가치를 중점으로 둔다면 Computer의 비숍이 User의 나이트에게 먹힐 위험이 있더라도 User의 퀸을 먹을 것입니다. 저는 우선적으로 후자에 더 큰 비중을 두어 결과는 다음과 같습니다.
3.2. 전체 시스템 구성
3.3. 개발 환경(개발 언어, Tool, 사용 시스템 등)
저는 많은 개발툴 중에서 ti사의 tms320f2809pza를 제어하기 위해 source insight를 이용하였습니다. source insight는 언어로 개발 시 수천개에서 수만개의 소스코드를 포함하여 코드를 분석하고 디버깅 및 개발할때 이만한 툴이 없기 때문에 source insight를 사용하였습니다.
또한 teraterm이라는 프로그램을 이용하여 pc와 ti 사의 tms320f2809보드 간에 sci 통신을 하여 ti사의 보드에 접근할 수 있었습니다.
이로 인해 Printf를 이용하여 에러처리나 알고리즘 확인 및 디버깅을 할수 있었습니다.
4. 단계별 제작 과정
전자전기공학부 학부생으로써 자료구조 공부나 AI 공부를 하는 동안 하드웨어를 먼저 완성하였습니다.
5. 기타(회로도, 소스코드, 참고문헌 등)
5.1.1. 소스코드
Ⅰ. 센서
(1) reed switch로 말의 위치 알아낸 후 정보 저장
센서의 위치를 알아내는 소스
void Position_check()
{
Uint16 i,j = 0;
switch(COL)
{
case 0 : GpioDataRegs.GPASET.bit.GPIO20 = 1; break;
case 1 : Check_0ROW(); GpioDataRegs.GPACLEAR.bit.GPIO20 = 1; break;
case 2 : GpioDataRegs.GPASET.bit.GPIO21 = 1; break;
case 3 : Check_1ROW(); GpioDataRegs.GPACLEAR.bit.GPIO21 = 1; break;
case 4 : GpioDataRegs.GPASET.bit.GPIO22 = 1; break;
case 5 : Check_2ROW(); GpioDataRegs.GPACLEAR.bit.GPIO22 = 1; break;
case 6 : GpioDataRegs.GPASET.bit.GPIO23 = 1; break;
case 7 : Check_3ROW(); GpioDataRegs.GPACLEAR.bit.GPIO23 = 1; break;
case 8 : GpioDataRegs.GPASET.bit.GPIO24 = 1; break;
case 9 : Check_4ROW(); GpioDataRegs.GPACLEAR.bit.GPIO24 = 1; break;
case 10 : GpioDataRegs.GPASET.bit.GPIO25 = 1; break;
case 11 : Check_5ROW(); GpioDataRegs.GPACLEAR.bit.GPIO25 = 1; break;
case 12 : GpioDataRegs.GPASET.bit.GPIO26 = 1; break;
case 13 : Check_6ROW(); GpioDataRegs.GPACLEAR.bit.GPIO26 = 1; break;
case 14 : GpioDataRegs.GPASET.bit.GPIO27 = 1; break;
case 15 : Check_7ROW(); GpioDataRegs.GPACLEAR.bit.GPIO27 = 1; break;
case 16 : Data_change(); break;
default : break;
}
COL++;
DELAY_US(10000);
if(COL > 16)
COL = 0;
void Check_0ROW()
{
if( ROW_0 ) next_position[0][0] = 1;
else next_position[0][0] = 0;
if( ROW_1 ) next_position[0][1] = 1;
else next_position[0][1] = 0;
if( ROW_2 next_position[0][2] = 1;
else next_position[0][2] = 0;
if( ROW_3 ) next_position[0][3] = 1;
else next_position[0][3] = 0;
if( ROW_4 ) next_position[0][4] = 1;
else next_position[0][4] = 0;
if( ROW_5 ) next_position[0][5] = 1;
else next_position[0][5] = 0;
if( ROW_6 ) next_position[0][6] = 1;
else next_position[0][6] = 0;
if( ROW_7 ) next_position[0][7] = 1;
else next_position[0][7] = 0;
}
void Data_change()
{
int16 i,j = 0;
for(i = 0 ; i < 8 ; i++)
{
for(j = 0 ; j < 8 ; j++)
{
if( (pre_position[i][j] – next_position[i][j]) > 0 ) //들어올렷을ㄷ대
{
if(chess_position[i][j] > W_MIN)
{
pre_position[i][j] = 0;
chess_position[i][j] = 0;
chess_score[i][j] = 0;
continue;
}
prei = i;
prej = j;
data_change = chess_position[i][j];
score_change = chess_score[i][j];
chess_position[i][j] = 0;
chess_score[i][j] = 0;
TxPrintf(“pre : [%d][%d] >> “,i,j);
pre_position[i][j] = next_position[i][j]; //000
g_u16_position_cnt++;
}
else if( (pre_position[i][j] – next_position[i][j]) < 0 ) //내렷을ㄷ대
{
nexti = i;
nextj = j;
chess_position[i][j] = data_change;
chess_score[i][j] = score_change;
TxPrintf(“next : [%d][%d]\n”,i,j);
pre_position[i][j] = next_position[i][j]; //111
g_u16_position_cnt++;
first_cnt++;
Evaluate();
for(i = 0 ; i < 8 ; i++)
{
for(j = 0 ; j < 8 ; j++)
{
TxPrintf(“%d “, chess_score[7-i][7-j]);
}
TxPrintf(“\n\n”);
}
TxPrintf(“\n”);
}
else;
}
}
}
(2) 모터
motor의 속도, 가속도를 제어하기 위한 함수
void Motor_CalBaseMotionValue(mot_str*pM )
{
if(pM->iqNextV < pM->iqTargetV)
{
pM->iqVelo = pM->iqNextV;
pM->iqAmpyS = _IQmpy(STEP_2D, pM->iqTargetA);//2as
pM->iqNextV = _IQ6toIQ( _IQ6sqrt( _IQtoIQ6(pM->iqAmpyS) + _IQ6mpy(_IQtoIQ6(pM->iqVelo),_IQtoIQ6(pM->iqVelo))));//2as=v^2-v0^2
pM->iq24TargetA_1 = ( _IQmpy(pM->iqTargetA, _IQ(0.01)) << 7);
pM->iq24TargetA_1 = _IQ24div(_IQ24(1.0), pM->iq24TargetA_1);
pM->iq24TargetA_1 = _IQ24mpy(pM->iq24TargetA_1, _IQ24(0.01));
pM->iq24TimeValue = _IQ24mpy( _IQtoIQ24((pM->iqNextV – pM->iqVelo)), pM->iq24TargetA_1);
pM->u32_Period = (Uint32)( _IQmpy( _IQ17mpyIQX( _IQ1(100000), 1, pM->iq24TimeValue, 24), _IQ(1.0) ) >> 17); //pM->iqHandle
pM->u32_Period_Cnt = 0;
if( pM->iqTargetV <= pM->iqNextV )
pM->iqNextV = pM->iqTargetV;
}
else // pM->iqNextV > pM->iqTargetV
{
pM->iqVelo = pM->iqNextV;
pM->iqAmpyS = _IQmpy(STEP_2D, pM->iqTargetA);
pM->iqNextV = _IQ6toIQ( _IQ6sqrt( _IQ6mpy(_IQtoIQ6(pM->iqVelo),_IQtoIQ6(pM->iqVelo)) – _IQtoIQ6(pM->iqAmpyS)));
pM->iq24TargetA_1 = ( _IQmpy(pM->iqTargetA, _IQ(0.01)) << 7);
pM->iq24TargetA_1 = _IQ24div(_IQ24(1.0), pM->iq24TargetA_1);
pM->iq24TargetA_1 = _IQ24mpy(pM->iq24TargetA_1, _IQ24(0.01));
pM->iq24TimeValue = _IQ24mpy( _IQtoIQ24((pM->iqVelo – pM->iqNextV)), pM->iq24TargetA_1);
pM->u32_Period = (Uint32)( _IQmpy( _IQmpyIQX( _IQ1(100000), 1, pM->iq24TimeValue, 24), _IQ(1.0) ) >> 17);
pM->u32_Period_Cnt = 0;
if( pM->iqTargetV >= pM->iqNextV )
pM->iqNextV = pM->iqTargetV;}
}
interrupt void ISR()
{
if(g_u16_Xmotor_flag == ON)
{
if( ++XMotor.u32_Period_Cnt >= XMotor.u32_Period)
{
Motor_CalBaseMotionValue( &XMotor );
X_MOTOR;
}
}
else if(g_u16_XBmotor_flag == ON)
{
if( ++XMotor.u32_Period_Cnt >= XMotor.u32_Period)
{
Motor_CalBaseMotionValue( &XMotor );
X_BMOTOR;
}
}
else if(g_u16_Ymotor_flag == ON)
{
if( ++YMotor.u32_Period_Cnt >= YMotor.u32_Period)
{
Motor_CalBaseMotionValue( &YMotor );
Y_MOTOR;
}
}
else if(g_u16_YBmotor_flag == ON)
{
if( ++YMotor.u32_Period_Cnt >= YMotor.u32_Period)
{
Motor_CalBaseMotionValue( &YMotor );
Y_BMOTOR;
}
}
else
{
MOTOR_OFF;
}
}
void MoveXY(int16 x, int16 y)
{
int16 X = (int16)(_IQ17mpy(_IQ17(abs(x)),_IQ17(167))>>17) – 83;
int16 Y = (int16)(_IQ17mpy(_IQ17(abs(y)),_IQ17(167))>>17) – 83;
DELAY_US(1000);
StartCpuTimer2();
while(1)
{
g_u16_Xmotor_flag = ON;
DELAY_US(1);
if(g_u16_Xstep > X)
{
XMotor.iqTargetV = _IQ(0.0);
XMotor.iqTargetA = _IQ(1200.0);
g_u16_Xmotor_flag = OFF;
MOTOR_OFF;
StopCpuTimer2();
motor_vari_init();
DELAY_US(100000);
break;
}
}
DELAY_US(1000);
StartCpuTimer2();
while(1)
{
g_u16_Ymotor_flag = ON;
DELAY_US(1);
if(g_u16_Ystep > Y)
{
YMotor.iqTargetV = _IQ(0.0);
YMotor.iqTargetA = _IQ(1200.0);
g_u16_Ymotor_flag = OFF;
MOTOR_OFF;
StopCpuTimer2();
motor_vari_init();
DELAY_US(100000);
break;
}
}
}
(3) Algorithm
Min-Max 알고리즘을 기반으로 한 Alpha-Beta Algorithm
void MAX_min()
{
int16 i,j,k = 0;
Value.Alpha = 0;
Value.To_x = 0;
Value.To_y = 0;
Value.From_x = 0;
Value.From_y = 0;
for(i = 0 ; i < Chess_cnt_1st ; i++)
{
if(Cnt_2nd[i].dont == 1) //먹힐때
continue;
TxPrintf(“\n1>> Cnt : %d (%d,%d) > (%d,%d) Value : %d\n”,Node_1st[i].Cnt,Node_1st[i].From_x,Node_1st[i].From_y,Node_1st[i].To_x,
Node_1st[i].To_y,Node_1st[i].Chess_value);
min(i);
if(Node_1st[i].Chess_value > Value.Alpha)
{
Value.Alpha = Node_1st[i].Chess_value;
Value.cnt = i;
Value.To_x = Node_1st[i].To_x;
Value.To_y = Node_1st[i].To_y;
Value.From_x = Node_1st[i].From_x;
Value.From_y = Node_1st[i].From_y;
//TxPrintf(“\n\nFINAL cnt : %d (%d,%d) -> (%d,%d) score : %d\n\n”,Value.cnt,Value.From_x,Value.From_y,Value.To_x,Value.To_y,Value.Alpha);
}
}
if(Value.Alpha < 1000)
{
//점수가 같을경우 2노드에가서 가치평가를 다시함
Value.Beta = Node_2nd[Cnt_2nd[0].First].Chess_value;
for(i = 0 ; i < Chess_cnt_1st ; i++)
{
for(j = Cnt_2nd[i].First ; j <= Cnt_2nd[i].Last ; j++)
{
if(Cnt_2nd[i].dont == 1) //먹힐때
continue;
if(Node_2nd[j].Chess_value > Value.Beta)
{
Value.Alpha = Node_1st[i].Chess_value;
Value.cnt = i;
Value.To_x = Node_1st[i].To_x;
Value.To_y = Node_1st[i].To_y;
Value.From_x = Node_1st[i].From_x;
Value.From_y = Node_1st[i].From_y;
Value.Beta = Node_2nd[j].Chess_value;
Beta_cnt = Node_2nd[j].Cnt;
}
}
}
}
Ⅱ. 회로도
[44호]IoT용 무선랜 시리얼 WiFi모듈, 테스트 보드, 외장안테나 출시
이지네트
IoT용 무선랜 시리얼 WiFi 모듈, 테스트 보드,
외장안테나 출시
네트워크 분야 및 전기 전자 부품 전문기업 이지네트에서는 와이파이모듈 2종, 테스트 보드, 외장 안테나까지 총 4종의 신제품을 출시했다. 와이파이모듈은 07S, 12S 2종류가 있으며 IoT용 무선랜 WiFi모듈(802.11 b/g/n 지원)로, 저전력 32비트 MCU를 내장하고 있다. 또한 AT Command를 지원하며, ESP8266과 소프트웨어 100% 호환되는 모듈로써 KC, CE, FCC 인증을 획득해 믿을 수 있는 제품이다.
ESP-12S WiFi모듈의 테스트를 위한 ‘ESP8266 ESP-12S 시리얼 와이파이 모듈 테스트 보드 EVB’ ESP-12S WiFi 모듈, USB 케이블과 함께 구성되어 판매되고 있다. USB케이블을 이용해 보드를 컴퓨터에 연결하며, ‘User manual’의 링크에서 테스트용 직렬 단자를 다운받고 테스트를 해볼 수 있다.
마지막으로 IPEX 외장 안테나는 사진처럼 ESP-07S모듈과 결합하여 사용하는 안테나이다.
자세한 사항은 디바이스마트 홈페이지에서 만나 볼 수 있다.
[정품] ESP8266 ESP-12S 시리얼 와이파이 모듈 KC인증
|
||||||
[정품] ESP8266 ESP-12S 시리얼 와이파이 모듈 KC인증 제품 구매하러 가기