Skip to content

Mobile Platform ↔ Ground Station

Dahye Park edited this page Jul 4, 2021 · 14 revisions

Mobile Platform ↔ Ground Station

📝 Mobile Platform과 Ground Station(s) 모두 VPN server에 접속해 VPN에서 사용할 IP주소를 받는다. Ground Station에서 Mobile Platform의 vpn 주소로 connect하면 Mobile Platform에서 취득된 센서 데이터로 Mobile Platform과 동시에 실시간 시각화가 가능하다.


VPN Setting

서로 다른 네트워크 망에 있는 Mobile Platform과 Ground Station을 연결하기 위해 OpenVPN을 사용하여 가상 사설망(Virtual Private Network)를 만들었다.

OpenVPN : OpenVPN Technologies, Inc. 에서 제작하여 배포하는오픈소스 VPN

OpenVPN설치방법과 서버, 클라이언트 생성은 아래 링크를 참고한다.

...
push "route 10.8.0.0 255.255.255.0"
...

⇒ VPN server에 접속할 때 password를 입력하게 하는 등 간단한 설치방법보다 다양하게 설정할 수 있다.


OpenVPN server 실행 및 종료

  • 실행
$ sudo systemctl start openvpn-server@server.service

or

$ sudo systemctl start openvpn@server
  • 동작여부 확인
sudo systemctl status openvpn-server@server.service

or

sudo systemctl status openvpn@server
  • 종료
$ sudo systemctl stop openvpn-server@server.service

or

$ sudo systemctl stop openvpn@server

.ovpn 전송

sftp등을 이용하여 서버에서 만든 key를 다운받는다.


OpenVPN client 접속

.ovpn을 다운받은 폴더로 이동 후 아래 명령어를 실행하여 VPN서버에 접속한다.

not permitted ... ⇒ sudo로 실행한다.

$ openvpn --config (your_file_name_here).ovpn

Initialization Sequence Completed가 뜨면 연결이 완료된 것으로 새로운 터미널을 열어서 사용한다.


VPN연결 확인

  1. ifconfig 로 tun0 ip 확인한다. ex) 10.8.0.x
  2. ping 을 10.8.0.1(server)로 보내 VPN서버와 연결이 잘 되었는지 확인한다.
  3. 인터넷이 되는지 확인한다.

client-to-client 연결확인

  1. ping 을 Ground Station혹은 Mobile Platform에 해당하는 IP주소(10.8.0.x)로 보내 패킷을 받는지 확인한다.
  2. netcat 으로 클라이언트 간 채팅을 통해 확인할 수도 있다. 이 방법은 VPN서버와도 가능하다.

netcat 서버로 사용할 유저는 아래와 같은 명령어를 실행한다. (1194=port 번호)

$ nc -l 1194

netcat 클라이언트로 사용할 유저는 netcat서버의 IP를 입력하고 실행한다.

$ nc 10.8.0.6 1194

연결이 완료되면 터미널창에서 메세지를 주고받을 수 있다.


Ground Station address setting

Mobile Platform에서 Publish하고있는 센서 데이터를 받아 Ground Station에서 실시간으로 시각화하기 위해서는 Mobile Platform과 연결이 필요하다.


✔️ GroundStation / Visualization 의 다음 5가지 파일에서 connect()의 주소를 VPN서버로 부터 부여된 Mobile Platform의 IP로 수정한 뒤 실행한다.

camthread.cpp

canthread.cpp

gpsthread.cpp

imuthread.cpp

lidarthread.cpp

//gpsthread.cpp
void gpsThread::run() {

zmq::context_t ctx(1);
zmq::socket_t gps_sub(ctx, ZMQ_SUB);
gps_sub.connect("tcp://Mobile_Platform's_IP(VPN)_here:5563"); //ex) 10.8.0.8

...
}