New CubeSat: QARMAN

Short update:

4 Likes

Less than 10 days before deployment, some fresh news about QARMAN!

  • Deployment is scheduled for 12 February, 10:05 GMT. We are working on making the live video feed available for everyone.
  • Some correction were implemented in the beacon specs document (170.8 KB) The latest versions are available from our website.
  • Please be aware: we have a frequency buddy! Coincidentally, Phoenix CubeSat will use the same frequency as QARMAN, and be released from the ISS 90 minutes earlier. QARMAN and Phoenix CubeSat will have very similar orbits and might be very close from each other in the beginning. More info about Phoenix CubeSat and related amateur operations can be found here. If you received signals from Phoenix CubeSat, please let @sarah_srogers know! If you have any doubt, please tag both of us :slight_smile:
2 Likes

Do you probably have some sample frames? The raw frames in ax.25 would be sufficient.

Sure! Please see below. Is there anything else that could be useful?

An audio sample: Beacon recording (IQ file from SDR#) (password: QarmanBCN)

A few raw AX.25 frames: BCNcapture.txt (1.1 KB) (as they come from the flatsat, OBC temperature will not be realistic as calibration is different)

3 Likes

I‘ll have a look, thanks a lot!

Oh, I see: they seem to be in KISS format. Pretty good to work on, just need a confirmation!

Indeed, QARMAN is using KISS format.

Hm, just to be precise: the exchange format of the frames after demodulating is KISS format - the satellite itself (hopefully!) does not use KISS format.

Thanks for the precision! Of course you are right!

2 Likes

From current observations the data seems to be totally correct!
I am finishing the decoder in the next hours and will try to build a simple dashboard for QARMAN.

While reading your instructions in the decoder spread sheet I am concerned if you properly interpret the beacons correctly. If you are just copy and pasting the data from OnlineKISS: you will see “corrupted” beacons caused by the KISS escape sequences. If a value inside your beacon reaches 0xC0 the KISS protocol expects this data to be escaped, otherwise this would indicate the frameend. So you might get “larger” beacons than expected and corrupted data.

2 Likes

Thank you very much for the dashboard!

Your remark about 0xC0 is very interesting, I didn’t know that and it explains a few strange things I have seen during the tests! How would the TNC (we use SCS tracker / DSP TNC) behave if receiving 0xC? And if asked to transmit some?

1 Like

It uses an escape sequence to surround that value. This enlarges the frame each time a value contains one of the escape symbols. I can paste some code in here later to show how to KISSify and de-KISSIfy a byte-stream…

As a first reference I would suggest you read this:

To easily convert from KISS frames for my work with satnogs-decoders I built a small snippet in python:

kiss_to_bin.py:

"""
KISS parser to remove the KISS escape sequences and get binary frames
"""
from __future__ import absolute_import, division, print_function

import binascii
import sys
import getopt

FEND = 0xc0
FESC = 0xdb
TFEND = 0xdc
TFESC = 0xdd

class kiss_to_bin(object):  # pylint: disable=too-few-public-methods
    def __init__(self):
        self.out = bytearray(b'')
        self.transposed = False
        pass

    def decode(self, in_bindata):  # pylint: disable=no-self-use
        self.out = bytearray(b'')
        bindata = bytearray(in_bindata)
        
        i = 0
        binlen = len(bindata)
        while i < binlen:
            char = bindata[i]
            if char == FEND:
                i += 1
            elif self.transposed:
                if char == TFEND:
                    self.out.append(FEND)
                elif char == TFESC:
                    self.out.append(FESC)
                self.transposed = False
            elif char == FESC:
                self.transposed = True
            else:
                self.out.append(bindata[i])
            i += 1
        return self.out

if __name__ == "__main__":
    # some examples
    DEC = kiss_to_bin()
    print("decode: " + str(binascii.hexlify(binascii.unhexlify('C000DBDC11272722C0'))))
    print("decoded: " + str(binascii.hexlify(DEC.decode(binascii.unhexlify('C000DBDC11272722C0')))))
    
    print(binascii.hexlify(binascii.unhexlify('C000001122DBDD0011a2727220C0')))
    print(binascii.hexlify(DEC.decode(binascii.unhexlify('C000001122DBDD0011a2727220C0'))))

    print("unKISSing array...")
    kiss = [
        "c0008898608aa6826088a0609ea0a66103f035efcedbdc9ae0705171cd93caa7b717cc5a977d8532e16f130a10e60095dfdfb1fe901c38ca9c4286875d275adcdc8d9c218edcacbc6b7e10705f64a7b4f57ebcb9f77e5e8c0c8eda33f683d64974f780f30784905016045047ce06ea159ec0",
        "c0008898608aa6826088a0609ea0a66103f035efcedbdc9ae0705271cd93caa7b717cd5a977d8532e16fb50a10e60095dfdfb1fe901c38ca9c4286875d275adcdd8d9c218edcacbcc97e10705fde064226e45824b2b84147d2c5fec164dbdc3b35d69f1662d1d9f129486ca940d0e890af7ac0",
        "c0008898608aa6826088a0609ea0a66103f035efcedbdc9ae0705271cd93caa7b716315a977d8532e1702d0a10e60095dfdfb1fe901c38ca9c4286875d275adcc18d9c218edcacbd517e10705f36d30af06ee69f4fe1cd59ab0cae5529bdb03235bf7e428cb457268b3de8149dd4ebf5c4c0",
        "c0008898608aa6826088a0609ea0a66103f035efcedbdc9ae0705271cd93caa7b717ce5a977d8532e1704f0a10e60095dfdfb1fe901c38ca9c4286865d275adcde8d9c218edcacbd377e10705fe58dfb0164a6426921f58f76caeaf3d5dbddca65dda4dbdcff6e23e8fedf0cc9c8c5fe8559bec0",
        "c0008898608aa6826088a0609ea0a66103f035efcedbdc9ae0705271cd93caa7b717cf5a977d8532e170f10a10e60095dfdfb1fe901c38ca9c4286865d275adcdf8d9c218edcacbd957e10705f083d0a63af7b93de123340142fbe7865713a1dab7a53fd786230bc7421b9fa9345a96cabc0",
        "c0008898608aa6826088a0609ea0a66103f035efcedbdc9ae0705171cd93caa7b717cc5a977d8532e16f130a10e60095dfdfb1fe901c38ca9c4286875d275adcdc8d9c218edcacbc6b7e10705f64a7b4f57ebcb9f77e5e8c0c8eda33f683d64974f780f30784905016045047ce06ea159ec0",
    ]

    for kiss_frame in kiss:    
        print(binascii.hexlify(DEC.decode(binascii.unhexlify(kiss_frame))))

    print("done...")

Hope that helps…

1 Like

First of all, many thanks to all of you for your support! SatNOGS has been an incredible source of data for us so far, extremely useful over the first month of the mission!

A few words about QARMAN: the CubeSat is doing fine, very stable and nominal parameters, batteries always fully charged, comfortable temperatures, a few unexpected reboots but not that much. Only issue is that we cannot reach it with our commands. We are working on it, but no success so far. (we are extremely interested by feedback about Astrodev Li-1 radio!)

Then, the news of the day: today is Mission Day 33. We expect QARMAN to have transitioned to Phase 2 and to have deployed its solar panels. It should be visible in the beacon data: OBCmode=Phase 2, Current should now be generated by +/- Xo, +/- Yo panels, AeroSDS 3.3V & IMU should be enabled. Please let us know if you decode such a beacon!

Thanks again, and take care!

1 Like

Hm, I cannot see any data for QARMAN from the last 7 days. Could you probably push the frames you are receiving into db.satnogs.org?

What about the NORAD-ID Lottery?

Ok, thanks to @fredy this is now fixed in the dashboard!

Aaaaaaand: we have covered that case! @vk5qi captured a frame after the mode change, see: https://dashboard.satnogs.org/d/98UPKYQWk/qarman?orgId=1&from=1584979017618&to=1584979511506

And there are several more after this one:

1 Like

Thank you very much!
QARMAN transitioned to Phase 2, and panels have been released. We have good signs that they are deployed! We also now have a confirmation that antennas deployed correctly in the beginning of the mission.
Regarding TLEs, we are pretty sure QARMAN is 1998-067-RG (still labelled as SOCRATES, but should change in the coming days according to Space-Track).

2 Likes

Btw: are you interested in modifying that dashboard to fit your needs?

Hi all,

Jimmy speaking here, I am technical support at VKI’s ON4VKI’s Ground Station working with @amandine_on4eya
Just to warn you that we have lost communication with QARMAN since the 13/07/2020 20:43 (UTC), this was the time of the last beacon.
The temperatures were rising tremendously on the last beacon we received.
I have checked with our engineering model, and made sure it was nothing to do with our Ground Station.
No beacon yesterday either

2 Likes

Can you share what temperatures you were seeing in the last telemetry?