UAV::Pilot::ARDrone::Driver
my $sender = UAV::Pilot::ARDrone::Driver->new({ host => '192.168.1.1', }); $sender->connect; $sender->at_ref( 1, 0 ); # Takeoff $sender->at_pcmd( 1, 1, 1.0, 0, 0, 0 ); # Progressive movement, roll $sender->at_ref( 0, 0 ); # Land
Low-level interface for controlling the Parrot AR.Drone. If you want to write an external program or library controlling this UAV, look at UAV::Pilot::Control::ARDrone instead.
If true, navdata will use a multicast IP connection. Mac OSX seems to be tricky to use with multicast. Default is false.
Initiate the connection to the UAV.
at_ref( $takeoff, $emergency );
Controls takeoff/landing, and also the emergency toggle. If the AR.Drone shows all red lights and won't respond to commands, send this with the emergency flag to reset it. This can also toggle emergency mode on in case the UAV flys out of control.
at_pcmd( $do_progressive, $do_combined_yaw, $roll, $pitch, $vert_speed, $yaw );
Controls the roll/pitch/vertical speed/yaw. Sending this once will make the AR.Drone go briefly in that direction and then return to normal. For constant motion, the AR.Drone developer documents suggest sending the command every 30ms.
The roll/pitch/vert_speed/yaw parameters are numbers between -1.0 and 1.0. Note that they will be treated as single-precision (16 bit) floats, as per the developer docs.
at_pcmd_mag( $do_progressive, $do_combined_yaw, $roll, $pitch, $vert_speed, $angular_speed, $magneto, $magneto_accuracy );
Same as at_pcmd, but with additional argument for setting the current magneto heading.
at_pcmd
For $magneto an angle of 0 means facing north, positive value is facing east, and negative is facing west. 1 and -1 are the same orientation.
$magneto
The $magneto_accuracy sets the maximum deviation of where the magnetic heading differs from geomagnetic heading in degrees. Negative values indicate an invalid heading.
$magneto_accuracy
Tells the AR.Drone that it's lying horizontally. It must be called after each startup. This command MUST NOT be sent when the drone is flying.
This is automatically called by connect().
connect()
at_calib( $device )
Calibrates the magnetometer. This command MUST be sent when the AR.Drone is flying.
The $device parameter should be one of the ARDRONE_CALIBRATION_DEVICE_* constants.
$device
ARDRONE_CALIBRATION_DEVICE_*
This will cause the AR.Drone to spin around.
at_config( $name, $value );
Set a config option. See the list of config constants.
at_config_ids( $session_id, $user_id, $app_id );
When using multiconfiguration, send this before every at_config() call.
at_config()
Reset the communication watchdog.
A useful but rather under-documented command for initing things like navigation data.
add_nav_collector( $nav_collector )
Add an object that does the UAV::Pilot::NavCollector role. It will be passed a fresh nav packet each time it comes in.
UAV::Pilot::NavCollector
$driver->multi_cmds( sub { $driver->at_config_ids( 1234, 5678, 9012 ); $driver->at_config( 'foo' => 1 ); $driver->at_config( 'bar' => 2 ); });
Sends multiple commands in a single packet.
float_convert( 2.0 )
Takes a 32-bit, single-precision floating point number. The binary form is then directly converted into an integer. For example, 0.5 converts into 1056964608.
The protocol requires floating point numbers to be transferred this way in some cases. The API will take care of most of these cases for you, but there are some configuration settings that you'll have to convert yourself (like LED animations).
Fetch and parse the latest nav packet off the nav socket. Returns true if there was a new nav packet to read, false otherwise. You can get the last available nav packet by calling last_nav_packet().
last_nav_packet()
This is a non-blocking IO operation.
ARDRONE_CALIBRATION_DEVICE_MAGNETOMETER ARDRONE_CALIBRATION_DEVICE_NUMBER
ARDRONE_CTRL_GET_CONFIG
ARDRONE_PORT_COMMAND ARDRONE_PORT_COMMAND_TYPE ARDRONE_PORT_NAV_DATA ARDRONE_PORT_NAV_DATA_TYPE ARDRONE_PORT_VIDEO_P264_V1 ARDRONE_PORT_VIDEO_P264_V2 ARDRONE_PORT_VIDEO_P264_V1_TYPE ARDRONE_PORT_VIDEO_P264_V2_TYPE ARDRONE_PORT_VIDEO_H264 ARDRONE_PORT_VIDEO_H264_TYPE ARDRONE_PORT_CTRL ARDRONE_PORT_CTRL_TYPE
ARDRONE_CONFIG_GENERAL_NUM_VERSION_CONFIG ARDRONE_CONFIG_GENERAL_NUM_VERSION_MB ARDRONE_CONFIG_GENERAL_NUM_VERSION_SOFT ARDRONE_CONFIG_GENERAL_DRONE_SERIAL ARDRONE_CONFIG_GENERAL_SOFT_BUILD_DATE ARDRONE_CONFIG_GENERAL_MOTOR1_SOFT ARDRONE_CONFIG_GENERAL_MOTOR1_HARD ARDRONE_CONFIG_GENERAL_MOTOR1_SUPPLIER ARDRONE_CONFIG_GENERAL_ARDRONE_NAME ARDRONE_CONFIG_GENERAL_FLYING_TIME ARDRONE_CONFIG_GENERAL_NAVDATA_DEMO ARDRONE_CONFIG_GENERAL_NAVDATA_OPTIONS ARDRONE_CONFIG_GENERAL_COM_WATCHDOG ARDRONE_CONFIG_GENERAL_VIDEO_ENABLE ARDRONE_CONFIG_GENERAL_VBAT_MIN
ARDRONE_CONFIG_CONTROL_ACCS_OFFSET => 'control:accs_offset', ARDRONE_CONFIG_CONTROL_ACCS_GAINS => 'control:accs_gains', ARDRONE_CONFIG_CONTROL_GYROS_OFFSET => 'control:gyros_offset', ARDRONE_CONFIG_CONTROL_GYROS_GAINS => 'control:gyros_gains', ARDRONE_CONFIG_CONTROL_GYROS110_OFFSET => 'control:gyros110_offset', ARDRONE_CONFIG_CONTROL_GYROS110_GAINS => 'control:gyros110_gains', ARDRONE_CONFIG_CONTROL_MAGNETO_OFFSET => 'control:magneto_offset', ARDRONE_CONFIG_CONTROL_MAGNETO_RADIUS => 'control:magneto_radius', ARDRONE_CONFIG_CONTROL_GYRO_OFFSET_THR_X => 'control:gyro_offset_thr_x', ARDRONE_CONFIG_CONTROL_PWM_REF_GYROS => 'control:pwm_ref_gyros', ARDRONE_CONFIG_CONTROL_OSCTUN_VALUE => 'control:osctun_value', ARDRONE_CONFIG_CONTROL_OSCTUN_TEST => 'control:osctun_test', ARDRONE_CONFIG_CONTROL_CONTROL_LEVEL => 'control:control_level', ARDRONE_CONFIG_CONTROL_EULER_ANGLE_MAX => 'control:euler_angle_max', ARDRONE_CONFIG_CONTROL_ALTITUDE_MAX => 'control:altitude_max', ARDRONE_CONFIG_CONTROL_ALTITUDE_MIN => 'control:altitude_min', ARDRONE_CONFIG_CONTROL_CONTROL_IPHONE_TILT => 'control:control_iphone_tilt', ARDRONE_CONFIG_CONTROL_CONTROL_VZ_MAX => 'control:control_vz_max', ARDRONE_CONFIG_CONTROL_CONTROL_YAW => 'control:control_yaw', ARDRONE_CONFIG_CONTROL_OUTDOOR => 'control:outdoor', ARDRONE_CONFIG_CONTROL_FLIGHT_WITHOUT_SHELL => 'control:flight_without_shell', ARDRONE_CONFIG_CONTROL_AUTONOMOUS_FLIGHT => 'control:autonomous_flight', ARDRONE_CONFIG_CONTROL_MANUAL_TRIM => 'control:manual_trim', ARDRONE_CONFIG_CONTROL_INDOOR_EULER_ANGLE_MAX => 'control:indoor_euler_angle_max', ARDRONE_CONFIG_CONTROL_INDOOR_CONTROL_VZ_MAX => 'control:indoor_control_vz_max', ARDRONE_CONFIG_CONTROL_INDOOR_CONTROL_YAW => 'control:indoor_control_yaw', ARDRONE_CONFIG_CONTROL_OUTDOOR_EULER_ANGLE_MAX => 'control:outdoor_euler_angle_max', ARDRONE_CONFIG_CONTROL_OUTDOOR_CONTROL_VZ_MAX => 'control:outdoor_control_vz_max', ARDRONE_CONFIG_CONTROL_OUTDOOR_CONTROL_YAW => 'control:outdoor_control_yaw', ARDRONE_CONFIG_CONTROL_FLYING_MODE => 'control:flying_mode', ARDRONE_CONFIG_CONTROL_HOVERING_RANGE => 'control:hovering_range', ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM => 'control:flight_anim',
ARDRONE_CONFIG_NETWORK_SSID_SINGLE_PLAYER ARDRONE_CONFIG_NETWORK_WIFI_MODE ARDRONE_CONFIG_NETWORK_WIFI_MODE_AP ARDRONE_CONFIG_NETWORK_WIFI_MODE_JOIN ARDRONE_CONFIG_NETWORK_WIFI_MODE_STATION ARDRONE_CONFIG_NETWORK_OWNER_MAC
ARDRONE_CONFIG_PIC_ULTRASOUND_FREQ ARDRONE_CONFIG_PIC_ULTRASOUND_WATCHDOG ARDRONE_CONFIG_PIC_PIC_VERSION
ARDRONE_CONFIG_VIDEO_CAMIF_FPS ARDRONE_CONFIG_VIDEO_CODEC_FPS ARDRONE_CONFIG_VIDEO_CAMIF_BUFFERS ARDRONE_CONFIG_VIDEO_NUM_TRACKERS ARDRONE_CONFIG_VIDEO_CODEC ARDRONE_CONFIG_VIDEO_VIDEO_SLICES ARDRONE_CONFIG_VIDEO_VIDEO_LIVE_SOCKET ARDRONE_CONFIG_VIDEO_VIDEO_STORAGE_SPACE ARDRONE_CONFIG_VIDEO_BITRATE ARDRONE_CONFIG_VIDEO_MAX_BITRATE ARDRONE_CONFIG_VIDEO_BITRATE_CONTROL_MODE ARDRONE_CONFIG_VIDEO_BITRATE_STORAGE ARDRONE_CONFIG_VIDEO_VIDEO_CHANNEL ARDRONE_CONFIG_VIDEO_VIDEO_ON_USB ARDRONE_CONFIG_VIDEO_VIDEO_FILE_INDEX
ARDRONE_CONFIG_LEDS_LEDS_ANIM
ARDRONE_CONFIG_DETECT_ENEMY_COLORS ARDRONE_CONFIG_DETECT_GROUNDSTRIPE_COLORS ARDRONE_CONFIG_DETECT_ENEMY_WITHOUT_SHELL ARDRONE_CONFIG_DETECT_TYPE ARDRONE_CONFIG_DETECT_DETECTIONS_SELECT_H ARDRONE_CONFIG_DETECT_DETECTIONS_SELECT_V_HSYNC ARDRONE_CONFIG_DETECT_DETECTIONS_SELECT_V
ARDRONE_CONFIG_USERBOX_USERBOX_CMD
ARDRONE_CONFIG_GPS_LATITUDE ARDRONE_CONFIG_GPS_LONGITUDE ARDRONE_CONFIG_GPS_ALTITUDE
ARDRONE_CONFIG_CUSTOM_APPLICATION_ID ARDRONE_CONFIG_CUSTOM_APPLICATION_DESC ARDRONE_CONFIG_CUSTOM_PROFILE_ID ARDRONE_CONFIG_CUSTOM_PROFILE_DESC ARDRONE_CONFIG_CUSTOM_SESSION_ID ARDRONE_CONFIG_CUSTOM_SESSION_DESC
ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_PHI_M30_DEG ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_PHI_30_DEG ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_THETA_M30_DEG ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_THETA_30_DEG ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_THETA_20DEG_YAW_200DEG ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_THETA_20DEG_YAW_M200DEG ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_TURNAROUND ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_TURNAROUND_GODOWN ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_YAW_SHAKE ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_YAW_DANCE ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_PHI_DANCE ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_THETA_DANCE ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_VZ_DANCE ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_WAVE ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_PHI_THETA_MIXED ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_DOUBLE_PHI_THETA_MIXED ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_FLIP_AHEAD ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_FLIP_BEHIND ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_FLIP_LEFT ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_FLIP_RIGHT ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_PHI_M30_DEG_MAYDAY ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_PHI_30_DEG_MAYDAY ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_THETA_M30_DEG_MAYDAY ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_THETA_30_DEG_MAYDAY ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_THETA_20DEG_YAW_200DEG_MAYDAY ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_THETA_20DEG_YAW_M200DEG_MAYDAY ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_TURNAROUND_MAYDAY ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_TURNAROUND_GODOWN_MAYDAY ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_YAW_SHAKE_MAYDAY ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_YAW_DANCE_MAYDAY ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_PHI_DANCE_MAYDAY ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_THETA_DANCE_MAYDAY ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_VZ_DANCE_MAYDAY ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_WAVE_MAYDAY ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_PHI_THETA_MIXED_MAYDAY ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_DOUBLE_PHI_THETA_MIXED_MAYDAY ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_FLIP_AHEAD_MAYDAY ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_FLIP_BEHIND_MAYDAY ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_FLIP_LEFT_MAYDAY ARDRONE_CONFIG_CONTROL_FLIGHT_ANIM_FLIP_RIGHT_MAYDAY
To install UAV::Pilot::ARDrone, copy and paste the appropriate command in to your terminal.
cpanm
cpanm UAV::Pilot::ARDrone
CPAN shell
perl -MCPAN -e shell install UAV::Pilot::ARDrone
For more information on module installation, please visit the detailed CPAN module installation guide.