We made the roadrunner usable as a sensor for Robotics purpose for further filtering using the main Kalman filter with the correct model. (cra-ros-pkg/robot_localization).
The system includes:
- Custom MAVLink messages layer for the roadrunner at umdlife/roadrunner_mavlink
- Roadrunner firmware using the MAVLink layer at umdlife/crazyflie-firmware#u2_feature_custom_kalman
- TDoA algorithm to compute position (expressed as an optimization algorithm) at AlexisTM/MultilaterationTDOA
- MAVLink receiver that reads data from the roadrunner and apply the localization engine: umdlife/roadrunner_mavlink/scripts/roadrunner_receiver.py *ROS ONLY FOR NOW* but the dependency can be easily removed.
- Uses the complementary filter instead of the kalman filter to have a more (much more) stable IMU (see: bitcraze/crazyflie-firmware/issues/426
- Disables the controller (using NO_CONTROLLER)
- Enables the UART2 at 1000000 baudrate by default
- Sends the TDOA measurement over UART2 (TDOA_MEASUREMENT message), by default max frequency (max 400Hz, typical 200Hz)
- Sends the IMU raw measurements over UART2 (GYRO_ACC message), by default 100Hz
- Sends the IMU quaternion computed over UART2 (QUATERNION message), by default 20Hz
Flash the following firmware using the following custom firmware using this implmenetation available at:
umdlife/crazyflie-firmware#u2_feature_custom_kalman, install the TDoA engine, and connect the system via UART to your computer.
Code: Select all
mkdir -p ~/Tools
cd ~/Tools
git clone https://github.com/umdlife/crazyflie-firmware --recursive -b u2_feature_custom_kalman
cd crazyflie-firmware
make PLATFORM=tag clean
make PLATFORM=tag -j
# Put the board in DFU flash mode before this action, by holding the ON-OFF-BOOT button for 5 seconds while booting and once it starts blinking fast, press the button once more.
make PLATFORM=tag flash_dfu
# the PLATFORM=tag option is defaulted to your value after one call.
You can then reboot the roadrunner and use the roadrunner_receiver.py.
Code: Select all
mkdir -p ~/Tools
cd ~/Tools
git clone https://github.com/AlexisTM/MultilaterationTDOA
cd MultilaterationTDOA
sudo python2 setup.py install
cd ~/Tools
git clone https://github.com/umdlife/roadrunner_mavlink
cd roadrunner_mavlink/scripts
python2 roadrunner_receiver.py
We wanted to use the roadrunner as the localization and IMU node of our AGVs with TDoAv3 localization.
Yet, as it is a early release product we faced many issues:
- Overshoot of the position due to high acceleration and kinematics of a copter for the Kalman and not an AGV
- USB disconnections due to an old USB driver (fixed in master)
- Calibration of the IMU on boot was not working due to vibrations of the Lidar on the AGV (custom fix: if calibration fails, read it from the EEPROM)
- Unreliability of the Quaternion due to the TDoA fusing: https://github.com/bitcraze/crazyflie-f ... issues/426