pathfinder-for-autonomous-navigation / flightsoftware Goto Github PK
View Code? Open in Web Editor NEWFlight software, test software, ground software, and mission control.
Home Page: http://pan-software.readthedocs.io
License: MIT License
Flight software, test software, ground software, and mission control.
Home Page: http://pan-software.readthedocs.io
License: MIT License
Currently uplink producer/consumer only has the ability to edit integer state fields. We need to expand this ability to all kinds of state fields.
We might need to rethink (or at least think more) about docking approach angles (and also issues with magnets not pulling us together).
adcs_vec1_current_f.set(r_hat_body_arr);
adcs_vec1_desired_f.set({1,0,0});
These two lines within attitude computer ask BOTH satellites to have their +X face Zenith. Since both satellites are physically identical, it's impossible for both Satellites to be docked and have both +X faces facing Zenith.
EDIT: If the satellites are docked, the +X faces will only be 90 degrees apart from one another.
Helpful link to images with axes:
Concerns:
Approaching with both +X facing Zenith will ensure optimal iridium comms for both satellites, but the docking faces will be 90 degrees apart. This also means the magnets will exert NO attractive pull. ISL patches will also have 90 degrees of separation.
Approaching with 90 degrees of separation will allow the dimples of the docking face to contact perfectly, and also allow magnets to pull satellites together. ISL patches will be perfectly aligned with 0 degrees of separation. But Iridium patches will be 90 degrees offset, meaning both will be suboptimal, or one will be good and the other poor.
Ideas:
LMK if I messed anything up lol
Originally posted by @shihaocao in https://github.com/pathfinder-for-autonomous-navigation/FlightSoftware/pull/120/files/ca4f9a623ba9f69455e6baa041bb9333143844c7
This will require significant refactoring of the current safe hold state, which is pretty vegetative.
see above
A part of ground software. See also #21
If Quake radio fails to initiate a successful SBDIX in 24 hours:
This should probably be implemented as a separate state machine on top of the Quake manager, and should be a subset of the mission manager.
We really have more than 30% coverage, I'm sure...
Right now the max_config_cycles, max_wait_cycles, etc (in QuakeManager.h) have placeholder values.
In hardware tests, SBDWB, SBDRB, CONFIG do not take any longer than one control cycle.
SBDIX takes anywhere from 70 to 210 control cycles (but averages ~120).
For after Gomspace device testing is done. Subtasks:
temp
@shihaocao Can you get a draft PR in by Sunday? There are a few things to take care of:
Writing a mock Piksi driver that doesn't do any IO calls. Put this driver in the lib
folder and call it FakePiksi
; have it be a derived class from Piksi
. Have the choice of driver be selected by the compiler based on a build flag. (e.g. when building for flight Teensy environments, it should select the real driver, but when building for HOOTL Teensy environments or the native platform, it should select the fake one.)
Here are the state fields you'll need:
piksi.power_cycling
: The mission manager may decide to power-cycle the Piksi if it's not responding, so Piksi should be aware of this and not collect data when this flag is true.quake.transceiving
: When the Quake radio is doing SBDIX, the large power draw of its antenna makes GPS measurements unreliable. These measurements shouldn't be made when this flag is true.I'll update the above inputs list if I think of more input items.
StateFieldRegistryMock
.Instead, rely on ground data until the RTK data becomes fixed.
This is so that the GNC algorithm works correctly.
This is because, semantically, state is a part of data and is not an actuation. An uplink command should be easily discernible as an actuation.
The limited mode only uses magnetorquers.
According to meeting notes, "DCDC takes up both pins 24 and 25. Spike and Hold does not have separate pins." This needs to be addressed in software.
Offshoot work of #57
If we happen to frequently have comms, then QuakeManager will not stop sending, which might drain the battery.
When comms fails, we want to know about it. It would be great if we can design some statistics for comms (e.g. # of SBDIXs that have failed, # that have succeeded, the types of error codes that have been received, etc.) This is good science for the satellite.
Not an issue but a documentation note.
We want to standardize naming conventions of the many different objects that'll be floating around. Here's what I've been using so far and what I want to propose we use from this point onward:
_sr
suffix indicates an object is a serializer_f
suffix indicates that an object is a StateField
_fp
suffix indicates that an object is a shared_ptr
to a StateField
We should keep updating this page as we develop more conventions. @athena255
Originally posted by @tanishqaggarwal in #126
What are the units of the magnetorquer and wheel commands in the ADCS driver?
Also, how should the exponential filters coefficients be set to ignore all history?
Issue detected by trying to run Piksi process in isolation. When Piksi device is nonfunctional, the Piksi controller attempts to power cycle the Piksi. However, the power cycler thread never runs or displays any output.
Issue mitigated by preventing power cycling if the Piksi is a fake Piksi. However, the underlying issue still needs to be addressed.
Just to note to add heartbeat_flags to a state field, and possibly future logic that changes the piksi_mode to a heartbeat_error state if there is an error.
I think the Fault class should have a writeable boolean state field, say unsignal_f,
that will trigger the unsignal()
command, then automatically reset back to false. I'm worried about the following cases:
Or slightly differently:
Further, in regard to num_consecutive_faults
being able to still increment when a suppression or override is active, I think the release of a suppression or override should not modify num_consecutive_faults
. If we do want num_consecutive_faults
to be reset, merely follow the release with an unsignal_f = true
.
Cases where I think this behavior is useful:
unsignal()
, we want the fault to immediately flag if the condition was met during the suppression periodCreating this issue to track the new integration of the new orbit controller that will eventually be coded up in PSim.
This shit is nasty
This issue is a place to discuss what compiler flags relating to floating point math we want to use for flight software. Default compiler flags for the Arduino framework on PIO.
When checking if we need to enter initialization hold we should also run the error checking that we run during the "standby needed" check. Right now there are errors that could crash the satellite that don't get caught by the initialization hold check because they're contained in the "standby needed" check.
Due to power distribution issues, GPS values are not guaranteed to be usable when the radio is running.
FlightSoftware/src/FCCode/GomspaceController.cpp
Lines 14 to 25 in 26e79d9
A part of ground software. See also #22
Right now I am calibrating the magnetometer after eclipse, and after detumbling.
Originally posted by @nhz2 in pathfinder-for-autonomous-navigation/psim#92
This needs to get implemented into FSW.
Instead of 5 times like it currently is. Gomspace reads take a lot of time.
We/Shihao need/needs to figure out where (which control task) to create/define the Pan Epoch Internal State Field because the state field is necessary for gnc/attitude estimation calculations. The Pan Epoch Internal Statefield should be a gps_time_t.
To reduce the chances of memory wear causing mission failure, constant values in drivers should be broken out to be fully programmable. This includes things like pin #'s, I2C bus addresses. Everything should be configurable.
Note the "far in the future" tag. This is an enhancement only for post-core Flight Software development, in 2020.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.