Hi,
Is there a way to modify the basiclogSync.py example to let the quadcopter log more data (12 states variables)
Thanks
[SOLVED] Data Logging
-
- Bitcraze
- Posts: 630
- Joined: Tue Jun 30, 2015 7:47 am
Re: Data Logging
Hi!
There is a limitation on the number of log variables in one log block (due to the radio packet size), but you can define multiple log blocks and pass an array of log blocks to the SyncLogger in one go
There is a limitation on the number of log variables in one log block (due to the radio packet size), but you can define multiple log blocks and pass an array of log blocks to the SyncLogger in one go
Code: Select all
lg_1 = LogConfig(name='first', period_in_ms=50)
# ... more code to define the log block
lg_2 = LogConfig(name='second', period_in_ms=50)
# ... more code to define the log block
with SyncCrazyflie('usb://0') as scf:
with SyncLogger(scf, [lg_1, lg_2]) as logger:
# Do stuff with the log data
-
- Member
- Posts: 33
- Joined: Sun Mar 01, 2020 1:28 am
Re: Data Logging
Hi Kris,
I tried your code but it shows error of list object has no attribute of 'default_fetch_as'. Can you show me what I might have done wrongly please?
I tried your code but it shows error of list object has no attribute of 'default_fetch_as'. Can you show me what I might have done wrongly please?
Code: Select all
import logging
import time
import cflib.crtp
from cflib.crazyflie import Crazyflie
from cflib.crazyflie.log import LogConfig
from cflib.crazyflie.syncCrazyflie import SyncCrazyflie
from cflib.crazyflie.syncLogger import SyncLogger
import numpy as np
# Only output errors from the logging framework
logging.basicConfig(level=logging.ERROR)
URI = 'radio://0/80/2M'
if __name__ == '__main__':
# Initialize the low-level drivers (don't list the debug drivers)
cflib.crtp.init_drivers(enable_debug_driver=False)
lg1 = LogConfig(name='Stabilizer', period_in_ms=10)
#lg1.add_variable('stabilizer.roll', 'float')
#lg1.add_variable('stabilizer.pitch', 'float')
#lg1.add_variable('stabilizer.yaw', 'float')
#lg1.add_variable('stabilizer.thrust','float')
lg1.add_variable('stateEstimate.z','float')
lg1.add_variable('stateEstimate.vz','float')
lg1.add_variable('stateEstimate.roll', 'float')
lg1.add_variable('stateEstimate.pitch', 'float')
lg1.add_variable('stateEstimate.yaw', 'float')
lg2 = LogConfig(name='Stabilizer', period_in_ms=10)
lg2.add_variable('stateEstimate.x','float')
lg2.add_variable('stateEstimate.vx','float')
lg2.add_variable('stateEstimate.y', 'float')
lg2.add_variable('stateEstimate.vy', 'float')
lg2.add_variable('stateEstimateZ.quat', 'uint32_t')
cf = Crazyflie(rw_cache='./cache')
with SyncCrazyflie(URI, cf=cf) as scf:
# Note: it is possible to add more than one log config using an
# array.
# with SyncLogger(scf, [lg_stab, other_conf]) as logger:
with SyncLogger(scf,[lg1, lg2]) as logger1:
endTime = time.time() + 3
for log_entry1 in logger1:
#for log_entry2 in logger2:
timestamp1 = log_entry1[0]
data1 = log_entry1[1]
logconf_name1 = log_entry1[2]
#print(data['stabilizer.roll'])
print('[%d][%s]: %s' % (timestamp1, logconf_name1, data1))
#timestamp1 = log_entry2[0]
#data1 = log_entry2[1]
#logconf_name1 = log_entry2[2]
#print(data['stabilizer.roll'])
#print('[%d][%s]: %s' % (timestamp1, logconf_name1, data1))
if time.time() > endTime:
break
-
- Bitcraze
- Posts: 630
- Joined: Tue Jun 30, 2015 7:47 am
Re: Data Logging
Your code works on my machine
Maybe you have to update crazyflie-lib-python?
Maybe you have to update crazyflie-lib-python?
-
- Member
- Posts: 33
- Joined: Sun Mar 01, 2020 1:28 am
Re: Data Logging
Just update to cflib 0.12.1 Its now working. Thanks