산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial Internet of Things >> 사물 인터넷 기술

ETSIIT 기술 과제 | 대학생에서 기업가로

1년 전, 우리는 IV ETSIIT Technical Challenge(비디오)를 위한 작업을 시작했습니다. 우리는 누구인가? 음, 우리는 스페인 그라나다 대학교에서 전기 공학 및 컴퓨터 과학을 공부하는 4명의 학생입니다.

저희 팀인 Prometheus는 RTI가 후원하는 Tech Challenge에서 우승했습니다. 이 챌린지를 위해 4~5명의 학생으로 구성된 팀이 외부 회사에서 제안한 챌린지를 해결하기 위해 제품을 만들어야 했습니다. 올해 챌린지의 주제는 "다중 에이전트 비디오 분산 시스템"이었습니다.

실무 경험을 위해 이 챌린지에 참여했습니다. 테크 챌린지 1년 후, 우리는 모두 아직 학생이지만, 이제 우리는 비즈니스 기회를 조사하고 경쟁력 있는 제품인 Locaviewer를 설계하고 시장에서 판매하기 위한 전략을 개발하고 작업에 필요한 과정 작업 외에 작동하는 프로토타입을 만들었습니다. 우리 학위.

로카 뷰어

보육원에 자녀가 있는 대부분의 부모는 자녀의 건강과 발전에 대해 걱정합니다. 우리의 제품인 Locaviewer는 부모가 실시간으로 자녀를 추적하고 볼 수 있도록 합니다. 마케팅 계획의 일환으로 홍보 동영상을 만들었습니다. 우리 코드는 GitHub의 MIT 라이선스에 따라 릴리스되었습니다.

팀 구성 및 일정

프로젝트를 완료하는 데 약 250시간이 걸렸습니다. 프로젝트에 일주일에 20시간을 보낸 지난 달을 제외하고 매주 우리는 최소 4시간 동안 만났습니다. 보다 효율적인 작업을 위해 두 팀으로 나눴습니다. 두 사람이 실내 블루투스 위치 알고리즘을 작업했습니다. 다른 2개는 비디오 스트림을 캡처, 인코딩/디코딩하고 RTI Connext DDS를 사용하여 공유하는 애플리케이션에 중점을 둡니다.

위치 알고리즘

해결책의 첫 번째이자 가장 중요한 단계는 보육원 내 어린이의 위치를 ​​파악하는 것이었습니다. 각 어린이는 방 벽에 배치된 블루투스 장치 -동글-을 수신한 신호 전력을 지속적으로 보고하는 블루투스 장치 -센서-가 있는 팔찌를 착용해야 했습니다. 이 RSSI(수신 신호 강도 표시) 값은 일반적으로 데시벨(dB)로 측정됩니다. RSSI와 거리의 관계를 알아냈습니다.

그림 2. 각도와 거리로 블루투스 신호를 실증적으로 측정합니다.
그림 3. 웨어러블 로카뷰어

삼각 측량 알고리즘을 실행하고 아동의 위치를 ​​식별하기 위해 RSSI 값이 미니컴퓨터(Raspberry Pi 또는 MK802 III)로 전송되었습니다. 우리는 카메라 위치를 알고 있었기 때문에 아이의 위치를 ​​파악한 후 어떤 카메라가 아이를 녹화하는지 알고 가장 좋은 카메라를 선택했습니다.

그림 4. 실내 삼각측량.

비디오 녹화 애플리케이션

비디오를 녹화, 인코딩, 디코딩 및 시각화하기 위해 Java용 GStreamer를 사용했습니다. vlcj와 같은 다른 라이브러리를 시도했지만 Raspberry Pi를 지원하지 않거나 시스템의 실시간 제약 조건을 충족하지 않습니다. 약간의 연구 끝에 우리는 Raspberry Pi와 함께 작동하는 GStreamer를 발견했고 인코딩된 비디오 버퍼를 실시간으로 쉽게 얻을 수 있었습니다(AppSink 사용 및 AppSource 집단). 이를 통해 우리는 그것을 캡슐화하여 DDS 주제로 보낼 수 있습니다. 우리는 최종 접근 방식이 결정될 때까지 vlcj를 사용하여 HTTP 스트리밍으로 임시 해결 방법을 구현하면서 몇 달 동안 이 작업을 수행했습니다.

VP8(WebM) 비디오 인코더를 사용했습니다. 자바용 래퍼는 GStreamer 버전 0.10에서만 작동하기 때문에 최적화할 수 없었고 비디오 크기를 줄여야 했습니다. 테스트에서는 Raspberry Pi를 사용했지만 가격은 같지만 처리 능력이 더 뛰어나기 때문에 최종 구현에서는 MK802 III 장치를 사용할 계획입니다. 최종 인코딩 구성은 다음과 같습니다.

그림 5. 비디오를 녹화, 인코딩 및 가져오기 위한 GStreamer 파이프라인.

다음 Java 코드를 사용하여 VP8 인코더 요소를 생성했습니다.

요소 코덱 =ElementFactory.make("vp8enc", null);codec.set("threads", 5);codec.set("max-keyframe-distance", 20);codec.set("속도", 5);요소 capsDst =ElementFactory.make("capsfilter", null);capsDst.setCaps(Caps.fromString("비디오/x-vp8 프로필=(문자열)2"));  

클라이언트 측에서는 다음 구성을 사용했습니다.

그림 6. 비디오를 설정, 디코딩 및 재생하는 GStreamer 파이프라인.

다음 Java 코드를 사용하여 VP8 디코더 요소를 생성했습니다.

문자열 caps ="video/x-vp8, width=(int)320, height=(int)240, framerate=15/1";요소 capsSrc =ElementFactory.make(" capsfilter", null);capsSrc.setCaps(Caps.fromString(caps));요소 대기열 =ElementFactory.make("queue2", null)요소 코덱 =ElementFactory.make("vp8dec", null);요소 변환 =ElementFactory. make("ffmpegcolorspace", null); 

저희도 JPEG 인코딩을 시도했지만 더 큰 크기와 더 많은 패킷 수로 인해 실시간 사용이 불가능했습니다.

DDS 아키텍처

게시-구독 접근 방식은 우리 솔루션의 핵심이었습니다. 네트워크 소켓이나 연결에 대해 걱정하지 않고 많은 클라이언트 간에 데이터를 공유할 수 있었습니다. 어떤 종류의 데이터를 보내고 받을지 지정하기만 하면 됩니다. 시스템에서 DDS 사용을 추상화하기 위해 래퍼 라이브러리인 DDStheus를 만들었습니다.

그림 7. 시스템의 일반 DDS 아키텍처.

최종 솔루션은 세 가지 주제를 공유하는 여섯 개의 프로그램으로 구성되었습니다. 우리는 다른 프로그래밍 언어를 사용했습니다:

  1. Python은 Bluetooth 장치와 함께 낮은 수준(HCI)에서 작동합니다.
  2. MATLAB/Octave를 통한 삼각측량 스크립트
  3. RTI Connext DDS 및 그래픽 사용자 인터페이스와 함께 작동하는 Java

방의 모든 RSSI 값을 알아야 했습니다. Bluetooth 동글을 구성하고 RSSI 정보를 가져오는 스크립트를 만들었습니다. 이러한 값은 동일한 시스템에서 간단한 소켓 연결을 사용하여 Java 프로그램으로 전송되었습니다. Java 애플리케이션이 센서 데이터에 데이터를 게시했습니다. 주제. 차일드 ID(센서 블루투스 MAC), 블루투스 동글 ID 및 위치, 현재 방(으로 방으로 필터링), RSSI 값 및 만료 시간.

그림 8. 센서 프로그램 순서도.

카메라가 비디오를 녹화하고 인코딩한 후 Java 프로그램 Gava는 비디오 데이터 주제. ContentFilteredTopic을 사용하여 스트림을 필터링하기 위해 카메라 ID를 키 값으로 보냈습니다. 카메라 위치, 공간, 인코딩된 프레임 및 코덱 정보 포함

또한 애플리케이션은 카메라 ID, 방 및 카메라 위치를 각 비디오 게시자의 USER_DATA QoS 값에 넣습니다. 그러면 삼각측량 미니컴퓨터는 출판사를 찾는 것만으로 방의 모든 카메라 정보를 얻을 수 있습니다. 또한 실시간으로 새 카메라와 고장난 카메라를 감지하고 위치 스크립트를 업데이트하여 카메라 선택 알고리즘을 개선할 수 있습니다.

그림 9. 비디오 프로그램 순서도.

마지막 단계에서 데이터를 처리하고 결과를 Child Data로 작성했습니다. 주제. 이것은 자식 위치를 삼각 측량하고 적절한 카메라를 선택하는 룸 서버(Raspberry Pi 또는 MK802 III로 구현)에 의해 수행되었습니다. 현재 방의 센서만 필터링하고 해당 방의 모든 비디오 게시자 정보를 수집했습니다. 데이터는 Octave 스크립트로 전송되어 아동의 위치와 최고의 카메라 ID를 반환했습니다. Child Data 주제로 클라우드로 전송된 정보 , 어린이 ID, 비디오 품질, 카메라 ID, 어린이 위치 및 방 ID가 포함됩니다. 효율성을 위해 하위 ID와 품질이 키로 전송되어 필터링하거나 동영상을 정렬하는 데 사용할 수 있습니다.

응용 프로그램을 최적화하기 위해 룸 서버는 자녀를 요청하는 가입자가 있는 경우에만 삼각측량 스크립트를 호출했습니다. 구독자 검색을 사용하고 ContentFilteredTopic을 보고 이를 확인했습니다. 필터 매개변수.

마지막으로 룸 서버 오류를 처리하기 위해 중복 메커니즘을 구현했습니다. 방의 각 미니컴퓨터는 게시자를 만들고 USER_DATA 값을 방과 기본(고유한) 우선순위 ID로 설정했습니다. 미니 컴퓨터 중 하나가 방에서 가장 낮은 ID를 가지고 있음을 감지하면 서버 응용 프로그램을 시작하고 더 낮은 ID를 가진 새 미니 컴퓨터가 나타날 때까지 서버 역할을 합니다.

그림 10:룸 서버 프로그램 순서도.

사용자 애플리케이션

우리는 두 가지 최종 사용자 애플리케이션을 개발했습니다. 첫 번째 것은 부모가 보육원에서 자녀를 볼 때 사용합니다. 두 번째 프로그램은 보육원 직원이 실시간으로 모든 카메라를 보고, 부모 액세스(추가 및 제거)를 관리하고, 출석 제어를 자동으로 처리하는 데 사용됩니다.

그림 11. 상위 클라이언트 애플리케이션.
그림 12. 어린이집용 보안 카메라 프로그램.

최종 생각

우리는 두 가지 큰 문제에 대처해야 했습니다.

  1. RSSI 값 얻기:우리는 매우 낮은 품질의 저렴한 Bluetooth 장치(약 $5)를 구입했습니다. 신호에는 많은 오류와 노이즈가 있었습니다. 값을 최적화하는 알고리즘을 개발하여 해당 오류를 3미터에서 0.5미터로 줄여야 했습니다. Java에서 Bluetooth 장치에 대한 저수준 작업을 위한 라이브러리를 찾을 수 없습니다(최종적으로 pybluez를 사용함). Python과 Java 프로그램을 사용하여 통신해야 했습니다.
  2. 비디오 인코딩:인코딩된 비디오 버퍼를 얻을 수 있는 라이브러리를 찾기가 쉽지 않았습니다. Raspberry Pi에서 최대 성능으로 작동하도록 GStreamer 0.10 파이프라인의 요소를 최적화하는 것은 훨씬 더 어려웠습니다. 최종 구성에서 이미지 지연은 약 3-5초입니다. 더 나은 성능을 위해 Wi-Fi 및 듀얼 코어 Cortex A9 프로세서를 포함하는 비슷한 가격의 MK802 III 기기로 Raspberry Pi를 교체할 계획입니다.

RTI Connext DDS는 네트워킹, 데이터 직렬화 및 서비스 품질 메커니즘을 구현하여 많은 작업을 절약했습니다. 이 비즈니스 문제를 성공적으로 해결할 수 있는 기회와 리소스를 제공한 엔지니어링 학교와 RTI에 감사드립니다.

자세히 알아보기:

자율주행 차량 생산 »

자율 시스템의 연결성 »

IIoT란 무엇입니까? »

DDS란 무엇입니까? »


사물 인터넷 기술

  1. 원격 액세스 웹 세미나에서 자주 묻는 질문(FAQ)
  2. 커뮤니티 칼리지, 고급 복합 재료 제조 학생을 위한 유연성 추가
  3. 레바논의 클라이언트가 cnc 기계 작동 방법을 배웁니다
  4. Jordan에서 우리의 고객이 우리 공장을 방문했습니다
  5. 캐나다에서 고객이 우리 공장을 방문했습니다.
  6. 우리 엔지니어는 해외 기술 지원을 제공하기 위해 두바이에 갔다
  7. 2017년 4월 카타르 고객이 당사 공장을 방문했습니다.
  8. 벵골에서 우리의 클라이언트가 새로 지어진 목공 기계를 검사합니다.
  9. 인도에서 고객이 기계를 검사하기 위해 우리 공장에 왔습니다.
  10. CNC 라우터 기계를 위해 한국에서 온 방문객