Khepera III Toolbox/Examples/plot battery voltage

This example shows how to record the battery voltage over time and plot it in Matlab afterwards.

Setup
Boot a Khepera III robot and make sure it is connected to your computer via WLAN or USB. In the following text, we assume that your robot is connected via USB. If you are using WLAN, simply replace the +usb by +RobotID (e.g. +203).

Copy the battery program onto the robot cd Programs k3put +usb battery You are basically ready now. But to test if everything is fine, log in to your Khepera III robot k3go +usb and type cd your_username ./battery This should print something like this: $BATTERY,0,7.8372,-0.4445,-0.4453,0.0000,76.0000,26.0000 The second number (7.8372) in this NMEA message reports the battery voltage in volts (V), which is usually somewhere between 8.2 V (fully charged battery) and 6.6 V (nearly empty battery).

Recording the Battery Voltage
We will now measure the battery voltage once every second and record the messages on the computer. Note that your robot needs to stay connected to the computer during the whole experiment.

On your computer, type the following: k3run +usb -o battery_measures "/root/your_username/battery -r -w 1000000" Note that this script will launch the program in the background and return immediately. The samples will be stored in the file k3-192.168.1.2/battery_measures instead of being printed in the terminal. (The folder k3-192.168.1.2 is automatically created by the k3run script.)

To see what is currently being stored, you can "tail" that file: tail k3-192.168.1.2/battery_measures This will print the last 10 lines of the output file. You can even follow the measurements with the -f option: tail -f k3-192.168.1.2/battery_measures

On the robot, you can check if the battery program is running by typing ps which lists all running processes.

Stopping the Measurement
If your robot is running on battery, the battery voltage will decrease until it drops below about 6.6 V, at which point the KoreBot board running Linux crashes. At this point, the recording will stop automatically.

If you want to stop recording before the robot crashes, you can do this manually by killing the battery process on the robot: killall battery If you type ps now, the battery process should have disappeared.

Alternative 1
In case your robot is not connected to the computer during the experiment, you can store the samples on the robot by typing (on the robot): ./battery -r -w 1000000 > battery_measures or if you want to print the samples at the same time ./battery -r -w 1000000 | tee battery_measures To terminate the measurements, just press Ctrl-C.

To download the measurements from the robot, type (on your computer): k3get +usb battery_measures

Note that the disk space on robot is very limited (only about 1 MB is free). Make sure you always download the measurements after the experiment and delete the file on the robot (rm battery_measures). The available disk space can be queried with df -h.

Alternative 2
Instead of running the battery program with the -r option (continuous measurements), you can launch the battery program each time you want to measure the voltage and just take one measurement at a time. This can be useful if the time span between measurement is much longer (e.g. once every 10 minutes) or if you want to take a measurement before/after your experiment.

To achieve that, it is best to write a short script which launches the battery program every now and then by executing the following line ssh root@192.168.1.2 "/root/your_username/battery" >> battery_measures A sample script (measure_alternative2.pl) can be found in the folder of this example.

Parsing the Result File
The file battery_measures contains NMEA 0183 records, from which we need to extract the voltage now. This can be done using one of the provided scripts parse_battery_voltage.pl (Perl) or parse_battery_voltage.py (Python). Both script are equivalent - choose whichever you prefer. We will stick to the Perl version here.

Launch the script as follows ./parse_battery_voltage.pl < battery_measures > matlab_battery_voltage The file matlab_battery_voltage now contains one number per line, which indicates the voltage of the corresponding measurement.

Plotting the Result
Now, launch Matlab and type plot_battery_voltage This is a very simple Matlab script (m-file) which loads the matlab_battery_voltage file and plots the curve.