You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Ground stations expose uplink and downlink functionality through API based on ZeroMQ messages (https://zeromq.org/) through TCP transport. The TCP endpoints are not exposed to public network, so in order to work with them, the Client must be connected to the same network.
2
+
3
+
All data exchanged between ground and PW-Sat2 are AX.25 KISS-encoded frames. Consult AX.25 (http://www.ax25.net/AX25.2.2-Jul\%2098-2.pdf) and APRS (http://www.aprs.org/doc/APRS101.PDF) documentation.
PW-Sat2 maintains an open-source repository, containing among others, a Python code used to decode and encode PW-Sat2 data. The relevant parts are located in GitHub repository: https://github.com/PW-Sat2/PWSat2OBC/tree/master/integration_tests.
All frames received and decoded by ground station are pushed as ZeroMQ message. In order to to receive it, client must subscribe to endpoint \texttt{tcp://<host>:7001}.
4
+
5
+
The incoming frames are AX.25 frames, without synchronization sequence and end flags.
6
+
7
+
\begin{longtable}{l|l}
8
+
\toprule
9
+
\textbf{Bytes} & \textbf{Meaning} \\
10
+
\midrule
11
+
\endhead
12
+
7 bytes & Destination call sign \\
13
+
7 bytes & Source call sign \\
14
+
1 byte & Frame type (constant 0x03) \\
15
+
1 byte & Protocol Id (constant 0xF0) \\
16
+
6 bits & Frame APID \\
17
+
18 bits & Sequence number \\
18
+
227 bytes & Frame Payload \\
19
+
last 2 bytes & FCS \\
20
+
\bottomrule
21
+
\end{longtable}
22
+
23
+
The payload data depends on the frame APID. The PW-Sat2 OBC repository contains code to parse it.
24
+
Below is an example (simplified) python code to connect, receive and decode frame.
25
+
26
+
\begin{verbatim}
27
+
import response_frames # from PWSat2OBC/integration_tests
Similarly to downlink, the uplink uses AX.25 frames (APRS) encoded as ZeroMQ messages, sent to ground station's endpoint (\texttt{tcp://<host>:7000}).
4
+
5
+
The message follows AX.25 format:
6
+
7
+
8
+
\begin{longtable}{l|l}
9
+
\toprule
10
+
\textbf{Bytes} & \textbf{Meaning} \\
11
+
\midrule
12
+
\endhead
13
+
7 bytes & Destination call sign \\
14
+
7 bytes & Source call sign \\
15
+
1 byte & Frame type (constant 0x03) \\
16
+
1 byte & Protocol Id (constant 0xF0) \\
17
+
4 bytes & Security Code (verified na OBC) \\
18
+
1 byte & Frame APID \\
19
+
195 bytes & Frame Payload \\
20
+
\bottomrule
21
+
\end{longtable}
22
+
23
+
PW-Sat2 OBC repository contains Python code for all available Telecommands to generate payload for AX.25 frames. Below is an example (simplified) python code to connect to ground station, encode telecommand and transmit it.
Occurs every other day. It's manual: the task list is constant, but operator controls transmission manually using \toolref{UplinkConsole}.
33
33
34
34
\subsection{Session type: Full-mode sessions}
35
-
Occurs every 2 weeks. It's manual and requires most work. They're planned at least couple days in advance. Plans for experiments and photos are prepared by OPER members responsible for each experiments. All task lists are prepared (with help of \toolref{TasklistGenerator}) and executed (using \toolref{UplinkConsole}) by operators manually.
35
+
Occurs every 2 weeks. It's manual and requires most work. They're planned at least couple days in advance. Plans for experiments and photos are prepared by OPER members responsible for each experiments. All task lists are prepared (with help of Tasklist Generator) and executed (using \toolref{UplinkConsole}) by operators manually.
36
36
37
37
\subsection{Steps for each session}
38
38
39
39
\begin{enumerate}
40
40
\item Operator prepares pull request in \toolref{MissionRepository} with data.json, tasklist.py and summary.py. In case of Deep-sleep refresh session, only data.json change is needed.
41
41
\item Other team members review and approve the pull request.
42
42
\item Operator merges the pull request at least 10 minutes before session.
43
-
\item\toolref{Autosession} monitors the repository every minute to check for update. It should automatically pull the changes (and output "New session" in console).
44
-
\item\toolref{GnuRadio} is launched by \toolref{Autosession} automatically 2 minutes before session start (taken from data.json).
43
+
\item Autosession monitors the repository every minute to check for update. It should automatically pull the changes (and output "New session" in console).
44
+
\item\toolref{GnuRadio} is launched by Autosession automatically 2 minutes before session start (taken from data.json).
45
45
\item At ths point is possible to launch \toolref{UplinkConsole}.
46
-
\item After session ends, \toolref{Autosession} closes \toolref{GnuRadio}.
47
-
\item Instance of \toolref{Autosession} that's running on primary GS will now summarize the session: download all frames from radio.pw-sat.pl, extract beacons, file lists, and run summary.py if available (which is used to decode experiment data and photos automatically). After that all artifacts are pushed to \toolref{MissionRepository} and telemetry is uploaded to \toolref{Grafana}.
46
+
\item After session ends, Autosession closes \toolref{GnuRadio}.
47
+
\item Instance of Autosession that's running on primary GS will now summarize the session: download all frames from radio.pw-sat.pl, extract beacons, file lists, and run summary.py if available (which is used to decode experiment data and photos automatically). After that all artifacts are pushed to \toolref{MissionRepository} and telemetry is uploaded to \toolref{Grafana}.
Grafana contains all telemetry information gathered throughout the mission, accessible through visual dashboards. Access it via http://grafana.pw-sat.pl:3000/.
This section discusses tools available on ground stations. To use them, connect to ground station either by SSH (if console is enough) or VNC (if access to UI is needed).
0 commit comments