User Tools

Site Tools


projects:crazyflie:pc_utils:pylib

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
projects:crazyflie:pc_utils:pylib [2013-02-10 23:57]
macke
projects:crazyflie:pc_utils:pylib [2021-06-24 16:58] (current)
kimberly
Line 1: Line 1:
-====== The Crazyflie Python API ====== +<WRAP center round important 60%
- +This page has deprecated and will be archivedPlease go to [[https://www.bitcraze.io/]]
- +</WRAP
-====== Examples ====== +This topic has been moved [[doc:crazyflie:api:python:index|here]].
-Below are the two examples described in the video <insert link herethat shows the parameter and logging framework. +
- +
-===== Adding a parameter ===== +
-In this example we will add a parameter that will be used to "freeze" the LED update function. This isn't very useful but it shows how to use parameters :-) +
- +
-First of all we need to add the parameter to the firmware, this is done by using the macros PARAM_GROUP_START, PARAM_ADD and PARAM_GROUP_STOP. In //crazyflie-firmware/drivers/src/led.c// we insert the following to add a parameter: +
-<code c> +
-#include "param.h" +
- +
-bool ledFreeze = false; +
- +
-PARAM_GROUP_START(led) +
-PARAM_ADD(PARAM_UINT8, freeze, &ledFreeze) +
-PARAM_GROUP_STOP(led) +
-</code> +
- +
-This will add a parameter in the TOC named //led.freeze// of the type uint8_t. +
- +
-Now we should use this parameter on the client side. This can either be done by reading or writing the parameter. First we add the code to write the parameter: +
-<code python> +
-# crazyflie is an instance of the Crazyflie class that has been instantiated and connected +
-crazyflie.param.setParamValue("led.freeze", True) +
-</code> +
- +
-The parameter-framework relies on the fact that the parameters are changed from the client or that the client polls the value of parameters. If you are interested in logging changes that the Crazyflie does itself then the logging-framework is better. If you are interested in reading a parameter this should be done using a callback that will be called from the framework when the value for the parameter is updatedThis happens in two cases: +
-  * When the Crazyflie has connected values for all the parameters in the TOC are fetched +
-  * When the client changes a value for a parameter the new value will be sent back from the Crazyflie +
- +
-To register for a callback and to implement the callback the following is used: +
-<code python> +
-    crazyflie = Crazyflie() +
-    crazyflie.param.addParamUpdateCallback("led.freeze", paramUpdateCallback) +
- +
-    def paramUpdateCallback(name, value): +
-        print "%s has value %s" % (name, value) # This will in our example print: led.freeze has value True +
-</code> +
- +
-===== Adding loggable variables ===== +
-In this example we will add logging for the raw gyro values read from the sensor. +
- +
-First of all we add the variables to the logging TOC by using the macros LOG_GROUP_START, LOG_ADD and LOG_GROUP_STOP. In our example we edit the file //crazyflie-firmware/modules/src/stabalizer.c//: +
-<code c> +
-#include "log.h" +
-// The raw gyro values are stored in the gyro struct +
-LOG_GROUP_START(gyro) +
-LOG_ADD(LOG_FLOAT, x, &gyro.x) +
-LOG_ADD(LOG_FLOAT, y, &gyro.y) +
-LOG_ADD(LOG_FLOAT, z, &gyro.z) +
-LOG_GROUP_STOP(gyro) +
-</code> +
- +
-This will add the variables //gyro.x//, //gyro.y// and //gyro.z// to the logging TOC as floats. +
- +
-On the client side we now add the log configuration, start the logging and then a callback will be called every 10 ms when data arrives from the Crazyflie: +
-<code python> +
-    # Callback called when the connection is established to the Crazyflie +
-    def connected(linkURI): +
-        gyroconf = LogConfig("Gyro", 10) +
-        gyroconf.addVariable(LogVariable("gyro.x", "float")) +
-        gyroconf.addVariable(LogVariable("gyro.y", "float")) +
-        gyroconf.addVariable(LogVariable("gyro.z", "float")) +
- +
-        # crazyflie is an instance of the Crazyflie class that has been instantiated and connected +
-        gyrolog = crazyflie.log.newLogPacket(gyroconf) +
- +
-        if (gyrolog != None): +
-            gyrolog.dataReceived.addCallback(self.gyroData) +
-            gyrolog.startLogging() +
-        else: +
-            print "gyro.x/y/z not found in log TOC" +
- +
-    def gyroData(data): +
-        print "Gyrodata: x=%.2f, y=%.2f, z=%.2f" % (data["gyro.x"], data["gyro.y"], data["gyro.z"]) +
- +
-</code>+
projects/crazyflie/pc_utils/pylib.1360537038.txt.gz · Last modified: 2015-07-15 16:30 (external edit)