AutonomyLab / bebop_autonomy

ROS driver for Parrot Bebop Drones 1.0 & 2.0
http://wiki.ros.org/bebop_autonomy
BSD 3-Clause "New" or "Revised" License
152 stars 120 forks source link

Parrot Bebop 2 System ID #160

Open air4ce opened 6 years ago

air4ce commented 6 years ago

I'm trying to model the Parrot Bebop 2 and I was wondering if a mathematical model already exists.

If not, I want to model the Bebop 2 through solving a parameter optimization. To do this, I need some way to record the inputs to the Bebop itself during a commanded maneuver (e.g. rotor RPM or commanded motor voltage). My question is whether not there's an existing way of measuring and recording this information for a standard Bebop 2? Finally, this information doesn't need to be transmitted in real time and can be collected after the fact.

Voidminded commented 6 years ago

Hi @air4ce

AFAIK Parrot refused to share their mathematical model with us. @mani-monaj approximated a first-order non-linear model for converting Forward/Lateral linear velocities to Pitch/Roll of the drone using another method which is used in AutonomyLab/bebop_vel_ctrl: Velocity controller for Parrot Bebop Drone (ROS package). For more information about this dynamic model and how we have calculated it, you can refer to our paper or more detailed in Mani's Ph.D. thesis.

If you prefer to record the motor's RPM to calculate the dynamic model, you have several options:

Anyway you need to equip the drone with 4 sensors and a separate processor for this task.

Voidminded commented 6 years ago

Hi @davidvar

I am sorry for the confusion we may have caused in the documentation. The geometry_msgs/Twist message in ROS has two components, linear and angular. The equations you mentioned from our documents are only for mapping the Twist message to Roll and Pich. For instance linear.x multiplied by the constant coefficient max_tilt_angle provides the Pitch value for the drone, but it does not mean the drone will move at the linear rate you have set for linear.x in the forward direction. In the aforementioned paper, we explained how to calculate the Roll/Pitch based on desired Lateral/Forward velocities considering the dynamic model of the UAV (the input for the Twist message).

As for why Roll and Pith are sent over the linear component of Twist message, not the angular one, I believe it's because the Twist message is supposed to provide the speed values, Yaw value sent on angular.z provide angular rotation velocity, but the Pitch and Roll values are the angular position of the body frame which transform to the linear velocity of body frame thus are published on linear component of Twist message. (angular.x and angular.y are reserved for Acro mode).