2021년 9월 21일 화요일

Cesium 기반 Iridium 위성 시그널 모니터링

 이 글은 Cesium 기반 Iridium 위성 시그널 모니터링 사례에 대한 간략한 소개이다. 


머리말
이 내용은 IoT 기반 Iridium 위성 통신 개발 사례에 이어, 이 과정을 어떻게 가시화하는 지를 보여준다. 

이 서비스는 ESP8266, IoT, MQTT를 이용해 센서의 데이터를 서버에 전달하여, Cesium 을 통해 데이터를 가시화한다. MQTT와 같은 발행-구동 메시지는 이를 보관할 메시징 서버가 필요하다. 데이터는 winsocket, PubNub, 모스키토와 같은 API 및 메시징 서버를 이용해 처리할 수 있다. 

개발 보드의 Arduino 코드는 Iridium SBD 라이브러리를 사용하여 현재 "신호 강도"를 질의한다. 이 값은 0 ~ 5의 값을 제공한다. 이 정보를 ESP8266  MQTT로 전달한다. GPS 모듈을 사용하면 정확한 타임 스탬프를 판독 값에 첨부하여 위성 위치 정보와 데이터를 일치시킬 수 있다.

소프트웨어 측면에서 CesiumJS 를 사용하여 모든 이리듐 위성의 궤도를 표시하는 웹 도구를 작성 했다. Celestrak 이리듐 궤도를 계산한다 . CesiumJS는 궤도를 시각화하고 위성의 위치를 ​​실시간으로 보여주는 좋은 방법이다.

웹 도구는 실시간 위성 위치 및 예측 궤도를 보여줄뿐 아니라 다음과 같은 기능도 제공한다.

전화기와 마찬가지로 현재 신호 강도를 5 막대로 표시
지상국과 가장 가까운 위성을 계산하고 녹색 선을 렌더링
각 위성의 발자국을 표시

이제 이 시스템의 구조를 분석해 본다.

Iridium 위성 신호 강도 모니터링 프로그램 구조 분석
이 프로그램은 github에서 다운로드 받을 수 있다. MQTT는 다음과 같이 설정되어 있다.
ESP8266 MQTTWiFiGateway.ino

const char * mqtt_server = "your_mqtt_server";
const char * mqtt_username = "mqtt_user";
const char * mqtt_password = "mqtt_password";

MapBox 이미지를 사용하려면 MapBox 액세스 토큰을 가져와야 한다. 이는 app.js 에서 설정한다.

imageryProvider : 새로운 Cesium.MapboxImageryProvider ({
    mapId : 'mapbox.dark',
    accessToken : 'YOUR_MAPBOX_ACCESS_TOKEN'
})
wx-ground-station

기상 위성 지상국
이 프로젝트는 NOAA 기상 위성 이미지를 수신 및 디코딩하여 Amazon AWS S3 웹 사이트에 업로드하는 지상국 개발 방법을 보여준다. 

사용된 장비 및 컴포넌트는 다음과 같다. 
최신 라즈베리 파이 
RTL-SDR 동글
Amazon S3 AWS 계정
길이 21 인치 (53.4cm),  각도 120 도인 간단한 다이폴 안테나(www.rtl-sdr.com 에서 구매 가능)
Raspberry Pi + RTL-SDR 동글로 연결하는 동축 케이블

기상 위성 및 RTL-SDR
날씨 위성으로부터 직접 이미지를 수신할 수 있다. 이 부분은 인스트럭터블을 참고하였다.

아키텍처는 다음과 같다.

아마존 AWS 설정
AWS JavaScript SDK를 사용하여 S3에 대한 API 호출을 수행한다. Raspberry Pi에서 실행되는 스크립트는 일부 Node.js 스크립트를 사용하여 S3에 업로드된다.

AWS SDK 자격 증명
Raspberry Pi에서 실행되는 스크립트는 일부 Node.js 스크립트와 AWS JavaScript SDK를 사용하여 S3에 업로드된다. 이를 위해, 자격 증명이 필요하다. 

Raspberry Pi ~ / .aws / credentials 의 자격 증명 파일은 다음과 같다.

[default]
aws_access_key_id = YOUR_ACCESS_KEY_ID
aws_secret_access_key = YOUR_SECRET_ACCESS_KEY

[default]
output = json
region = us-west-2

S3 버킷 생성
웹 사이트 호스팅을 위한 S3 버킷을 만든다. 버킷 이름은 nootropicdesign.wx 를 사용했다. 

간단한 index.html 파일을 업로드하고 http://BUCKETNAME.s3-website-REGION.amazonaws.com/ 을 브라우저에 입력한다.

<! doctype html>
<html>
  <head> <title> S3 test </ title> </ head>
  <body> Hello from S3 </ body>
</ html>

Cognito에서 자격 증명 풀 만들기
사용자가 AWS SDK를 사용하여 S3 버킷에 액세스 할 수 있게 하려면 자격 증명 풀을 설정하고 버킷에 대한 읽기 액세스를 허용하는 정책을 만들어야 한다. 이것은 Amazon Cognito를 사용하여 수행된다. .

1 단계: “wx image users” 라는 Amazon Cognito 자격 증명 풀을 생성하고 인증되지 않은 자격 증명에 액세스 할 수 있도록 한다. 

2 단계: 샘플 코드 페이지의 플랫폼 목록에서 JavaScript를 선택한다. 
// Amazon Cognito 자격 증명 공급자 
AWS.config.region = 'us-west-2'; // region
AWS.config.credentials = new AWS.CognitoIdentityCredentials ({
  IdentityPoolId : 'us-west-2 : 1d02ae39-3a06-497e-b63c-799a070dd09d',
});

3 단계: 생성된 IAM 역할에 정책 추가

{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Effect": "Allow",
         "Action": [
            "s3 : ListBucket"
         ],
         "Resource": [
            "arn : aws : s3 ::: BUCKET_NAME"
         ]
      }
   ]
}

단계 4. S3 버킷에서 CORS 구성을 설정한다. 

<? xml version = "1.0"encoding = "UTF-8"?>
<CORSConfiguration xmlns = "http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin> * </AllowedOrigin>
        <AllowedMethod> GET </AllowedMethod>
        <AllowedMethod> HEAD </AllowedMethod>
        <AllowedHeader> * </AllowedHeader>
    </CORSRule>
</CORSConfiguration>

라즈베리 파이 설정
필수 패키지를 설치한다.
sudo apt-get update
sudo apt-get upgrade
sudo reboot
sudo apt-get install libusb-1.0
sudo apt-get install cmake
sudo apt-get install sox
sudo apt-get install at
sudo apt-get install predict
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt-get install -y nodejs

/etc/modprobe.d/no-rtl.conf 파일을 만들고 다음 내용을 추가한다.
blacklist dvb_usb_rtl28xxu
blacklist rtl2832
blacklist rtl2830

RTL-SDR 구축
GitHub repo keenerd/rtl-sdr 버전을 사용한다.

cd ~
git clone https://github.com/keenerd/rtl-sdr.git
cd rtl-sdr/
mkdir build
cd build
cmake ../ -DINSTALL_UDEV_RULES=ON
make
sudo make install
sudo ldconfig
cd ~
sudo cp ./rtl-sdr/rtl-sdr.rules /etc/udev/rules.d/
sudo reboot

wxtoimg 설치 및 구성
wxtoimg 프로그램은 RTL-SDR 수신기가 수신한 오디오 파일을 디코딩하고 데이터를 이미지로 변환한다. 

wget https://wxtoimgrestored.xyz/beta/wxtoimg-armhf-2.11.2-beta.deb
sudo dpkg -i wxtoimg-armhf-2.11.2-beta.deb

이제 다음과 같이 실행한다.
wxtoimg

~/.wxtoimgrc 파일을 다음과 같이 작성한다.
Latitude: 45.0468
Longitude: -93.4747
Altitude: 315

자동화 스크립트 가져 오기 및 구성
다음과 같이 프로그램 실행을 자동화한다.
git clone https://github.com/nootropicdesign/wx-ground-station.git
cd wx-ground-station
sh configure.sh
cd aws-s3
npm install

S3에 웹 컨텐츠 업로드
S3 콘솔을 사용하여 웹 사이트 디렉토리의 내용을 S3 버킷에 업로드한다. 
index.html
wx-ground-station.js
tle.js
logo.png

테스트
이제 모든 것이 구성되었으므로 스크립트를 실행하여 위성 패스 기록을 예약한다.
cd wx-ground-station
./schedule_all.sh

다음 웹 사이트를 방문해 확인한다.
http://BUCKETNAME.s3-website-REGION.amazonaws.com/

요약
Rock Seven Iridium 모뎀을 사용하는 것은 IoT 솔루션의 중요한 부분이 될 수 있다. 세슘을 이용해 위성을 추적하고 가시화할 수 있는 방법은 크게 어렵지 않다. 다만, 몇몇 상용 장치 및 클라우드를 사용하는 비용은 약간 부담이 될 수 있다. 

레퍼런스

댓글 없음:

댓글 쓰기

생성 AI 건설 기술 트랜드

이 글은 생성 AI 건설 기술 트랜드를 간략히 정리한다. 레퍼런스 AI is hard (to do well) - AEC Magazine AI Copilot for architects launches in beta - AEC Magazine How to...