Please Help With The Process Of Integrating A New Satellite

Hello SatNOGS Community!

Apologies in advance if this exact topic has already been posted. I also apologize because I am fairly new to Linux and radio communications. Lastly, this is a long one. To summarize, I am so sorry…

My university is currently working on our first Earth-orbiting satellite, and I am heading the project (actually, I am the only one working on it right now…) I have included current info on our satellite radio at the bottom. Please let me know if you need more.

I came across SatNOGS by chance when figuring out how we will receive data from our satellite and thought your system would be perfect for us. We are on an ultra-low budget and already planning on transmitting on amateur frequency (we have a general-class license, and I have used APRS in the past for weather balloon experiments). However, I seem to be lost in the process of how to implement our satellite as I have no experience in radio modulation/demodulation or encoding/decoding. I found the topic by @killic1 here: SatNOGS Satellite Model Testing. I, unfortunately, am not as well versed as @killick1 and still do not understand the process of creating a custom flowgraph (if I need to) and demodulator, testing theses offline, then implementing them into the network. I am a humble newbie whose degree is in physics and not engineering or CS.

I’ve read the “Satellite Operator Guide” wiki here: Satellite Operator Guide - SatNOGS Wiki. To keep my questions organized, I will ask them in step order under 2.2 – “Add a new mission”:

  1. No question here. I just need to figure out what we’re calling our orbiting friend.
  2. Here’s potentially the dumbest question of mine. What’s the best way to figure out what flowgraph will work or if I need to make my own?
    a. Should I install gr-satnogs and gr-flowgraphs on a non-RPI distro and then test the examples? I’ve tried installing these packages manually on several distros (UB 16,18,20, and openSUSE Leap 15) but always have some kind of problem and can’t get them to work. I just found this topic, though: Best way to set up/change SatNogs on Ubuntu machine and haven’t yet tried the Ansible script yet.
    b. Can I use the RPI image to test the flowgraphs with data I collected manually? In other words, can I record the waterfall of my satellite transmission using whatever SDR program and then feed them into the flowgraphs manually so that I can test the output?
    c. If a. and b. aren’t good options then is my only option to make my station operating in “test” mode and then schedule observations of my satellite using the flowgraph I think will work? What about the demodulation?
  3. I should be able to do this if needed.
  4. I’ve never used Kaitai, but I found the forum topics here Starting with satnogs-decoders and here Small example to write a frame decoder using kaitai structs and will follow them. I’ll probably have more questions when I get to this step.
  5. I haven’t looked too much into this stem yet, so I don’t currently have questions.

I really appreciate any help you can give me or directions on where I can go to find more information. As stated, I’m probably in way over my head, but I’m excited to learn more and be a part/support this community any way I can!

Information on our satellite:

Formfactor: 1U TubeSat
Brains: Controlled by an Arduino Mega operating at a 3.3v logic level
Radio: Our radio is the si4464 chip from Silicon Labs (PDF on its packet handling here if it’s of any help: It’s currently set up to transmit at 434 MHz with a 30 MHz crystal frequency and FSK modulation.
Coding: Done in C/C++ because of the Arduino controller. To control the radio chip, we are using this library: Radio - Arduino Reference
Goal: To transmit basic satellite data like battery levels and other sensor data. If possible, be used as an amateur radio beacon. This satellite is mostly a proof of concept to get my university started in the small satellite community for future missions. We have a launch paid for but have not yet scheduled it.


Cool stuff!

Perhaps one thing to think about is an SSTV transmitter such as PSAT2 That one originally had an uplink to command SSTV transmission, but the payload failed during launch. In fact, probably no extra hardware is required as SSTV images can be generated on board (university logo, satellite mission logo, etc.). It can also include the telemetry in the image itself (the telemetry is the little code on the bottom)!

Good luck with your satellite!

Looking at the handle used, @Kevin can you support “bobcat”

The fact that you choose bobcat, if very funny because BOBCAT-1 was a very successful cubesat.

1 Like

Thanks! I haven’t taken a look at this yet, but I will. The only initial problem I see is that the PSAT-2 was a 2U and ours is a TubeSat. We may not have room for the necessary hardware, but I’ll take a look!

@PE0SAT, sorry, I hadn’t seen bobcat-1. My naming choice had nothing to do with that satellite. If you need me to change my name, please let me know.

No it is fine, @Kevin told me he will respond to your questions.

1 Like

Hello, I’m just following up to see if I could still get some help integrating my satellite into your network. We have set up our radio to transmit with FSK modulation. Is it safe to assume that your general FSK demod flowgraph will successfully demodulate our signal, or am I being too hopeful? If the latter, then what’s the best way to test your flowgraph?

When testing settings and sdr I usually run my script
It runs with the satnogs-client config variables so you should have a station ready to go for this.
Change the BIN variable to or what flowgraph you are aiming for. It will spit out the usual demodulated data as files when it detects them. It also produces waterfall and audio so you can watch the results.
Do remember that flowgraphs requires a running rigctld for doppler control, even if it’s not changing. For this, run rigctld -T -m 1
The available flowgraphs is here:

$ ls /usr/bin/satnogs_*.py
/usr/bin/          /usr/bin/  /usr/bin/
/usr/bin/  /usr/bin/                 /usr/bin/
/usr/bin/         /usr/bin/                /usr/bin/
/usr/bin/                   /usr/bin/
/usr/bin/             /usr/bin/

If it uses AX.25 or AX.100 framing it should work.

The easiest way to go, as @SA2KNG suggests, is to setup a raspberry pi station and perform there any tests. You will only need to flash the raspberry pi image which install any dependencies and then manually run the FSK flowgraph and see if it works.

Alternatively you can install satnogs-flowgraphs and its dependencies as described in the file in the repository also if you go that way you may want to read how flowgraphs work.

Unfortunately the documentation needs improvement and it may missing some details, feel free to ask here if you stuck in any point.

Share a recording and details from the radio, then we can have a look and better judge if it will decode.

1 Like

Have you gotten IARU coordination yet? It’s never too early! :slight_smile:

Thank you for the reply and your shell script!

When I run the script, however, I get the following error:

File “/usr/lib/python3/dist-packages/gnuradio/”, line 75, in str_to_num
suffix = value[-1]
IndexError: string index out of range
Generating waterfall…
./ line 22: command not found

Is a python script that you created and not already included in the station’s image file?

I’m going to modify the radio chip’s configuration to make sure it’s using AX.25 framing then upload a recording using @SA2KNG shell script when I get it working. Thank you.

Thank you for the response.

As far as the packet structure goes, are there any recommendations for including a preamble, how long that preamble should be, whether or not to include Manchester encoding, etc.?

Are there any examples of packet structures from past successful satellites?

No, I’ll make sure to get on that this month. Thank you for reminding me!

yes, located in the same place as the script, a bunch of those is copied into my docker image. so if you do not need to generate waterfall image then it’s simple to just remove those. otherwise copy that script as well… it uses the satnogs python libs so it’s not standalone.

Hello. My apologies, as I haven’t used docker before. I followed your " Guide for dockerized satnogs-client" and set up a container with your image. Running ‘docker ps’ shows:

e558b23f1e3d knegge/satnogs-client:addons “bash /…” 10 minutes ago Up 10 minutes satnogs-client

So, I believe everything is working. How do I then use/edit your script to test my satellite transmission?

There’s two ways to run stuff manually in the container, if you have a running container you can start a shell in it with docker exec -it satnogs-client bash.
When developing and messing around, I usually launch just a shell in a temporary container and letting it be removed when exiting, this is done similar to the script. You really have to think of what is needed thou, the basic version is docker run --tmpfs /tmp -v ~/satnogs-config:/.env --rm -it knegge/satnogs-client:addons bash or similar.
There’s a lot to read up on, docker is very powerful but quite different from running programs installed on a regular linux system, so be patient and read/ask a lot, most things can be solved (: