flightdb – Flight Controller Database, logging and param system¶
Flight Controller Database Interface
Access to the parameter and logging systems on CodeAIR’s Crazyflie flight controller.
See also Crazyflie Client Library
- 
class codeair.flightdb.LogManager[source]¶
- Interface to query the CF logging framework: - Retrieve the list of available logging items (TOC) : [(id, type, group, name), …] 
- Register new logging configs (log blocks) 
- Start/Stop logging 
- Also handle fetching of Param TOC, since logic is identical. 
 - This class uses crtp – Crazy Real Time Protocol to implement the log interface - 
check_catalog_crcs()[source]¶
- Read CRCs from flight controller, return True if they match catalog import 
 - 
decode_log(blk_id, timestamp_ms, data)[source]¶
- Decode received log values for this block, updating self.cache. 
 - 
enable(do_enable)[source]¶
- Resume / pause logging. NOTE: Must register_items() FIRST, before enable! 
 - 
fetch_toc(port, info_only=False)[source]¶
- Request TOC info, either PARAM or LOG based on port (CRTP_PORT_LOG or CRTP_PORT_PARAM) 
 - 
generate_catalog(filename='new_flight_catalog.py')[source]¶
- Create Python file with log/param TOCs to bake into new CodeAIR builds 
 - 
register_items(item_list, rate=0.1)[source]¶
- Register and start logging the given list of items. Removes all prior logging. Rate is seconds. item_list contains strings of form ‘group.variable’. - Internals: - The Crazyflie allows up to 16 “log blocks” to be registered. 
- You register a log block by supplying a list of [TYPE8:ID16] tuples referring to TOC items. 
- The resulting LOG_CH reports for a block must fit within a 30 byte packet, where 4 bytes are consumed with [BLK_ID_8, TIMESTAMP_24], leaving 26 bytes cumulative payload for log values. This means the max number of IDs you can register in a block depends on the size of the items (8/16/32 bits). 
- Ex: you could register up to 6 32-bit items in a log block. 
 - Our Python API exposes a single function to register an id_list, hiding the underlying “log block” system. - We don’t support dynamically appending/deleting discrete blocks. All are created/removed at once. 
- Currently we don’t support different rates for different params. The underlying system has a rate for each block. 
- Currently supports only a single log block. - TODO: Extend to create up to max (16) blocks to support more log items. 
 
 - Protocol: - CRTP(CRTP_PORT_LOG, CONTROL_CH) 
- Create block: ( CONTROL_CREATE_BLOCK_V2_8, BLK_ID_8, [TYPE_8, ID_16]*n ) 
- Delete all: (CONTROL_RESET) 
 - Notes: Successful registration will initialize - - self.cache # {'name': None,...} # Dict keyed by names from all blocks self.log_blocks = [ [name0, name1,...], # list of names in this block decode_fmt_str, # struct format str for decoding this log block val_sz, # = struct.calcsize(decode_fmt_str) reg_fields, # registration fields (packet payload) ] - Returns
- True if id_list can be registered, False if it would exceed logging payload limits or if list contains an invalid ID. 
- Return type
 
 
- 
class codeair.flightdb.ParamManager(log_mgr)[source]¶
- Interface to query the CF parameter framework. Unlike logging, we don’t register for events in the param system.