Interfacing with the IMU
Contents
Interfacing with the IMU#
Your drone is equipped with a Skyline32 Flight Controller which has a built in IMU. In this part of the project, you will learn how to interface with the flight controller board to extract the attitude, accelerations, angular rates of the drone from the built-in IMU. In addition, you will extract the battery levels from the flight controller so that you’ll be able to tell when you’re battery is too low.
Setup
Change directories into ~/ws/src/pidrone_pkg
and modify pi.screenrc
to start up with your flight controller node by changing python flight_controller_node.py\n
to rosrun project-sensors-yourGithubName student_flight_controller_node.py\n
(or, alternatively, python \path\to\student_flight_controller_node.py\n
).
Problem 1: Extracting the Battery Data#
The flight controller is capable of reading the voltage and current of the power source plugged into the drone. This is possible because of the red and brown wire pair (i.e. battery monitor wire pair) plugged into the FC. The power information is useful because it allows us to programmatically shut down the drone if the voltage is too low (e.g. LiPo batteries are quickly ruined if discharged too low).
TODO:
Take a look at Battery.msg in the ~/ws/src/pidrone_pkg/msg directory on your drone. This is a custom message we’ve created to communicate the battery values.
In
student_flight_controller_node.py
, do the following:Fill in each
TODO
regarding thebattery_message
in the__init__
method.Fill in each
TODO
in theupdate_battery_message
method.
Problem 2: Extracting IMU data#
Linear accelerations and attitude (i.e. roll, pitch, yaw) can also be extracted from the FC, thanks to the accelerometer and gyroscope. In addition, the angular rates (e.g. change in roll over change in time) can be calculated by using the attitude measurements.
TODO:
Take a look at the Imu ROS message type to get an understanding of the data you’ll be collecting.
In
student_flight_controller_node.py
, do the following:Fill in each
TODO
regarding theimu_message
in the__init__
method.Fill in each
TODO
in theupdate_imu_message
method.