ardrone_autonomy驱动相关

ardrone_autonomy要点清单

刚学完《视觉SLAM十四讲》,想搭建一个平台用来测试一些开源SLAM库。

正好寒假买了个二手AR.Drone2,性价比超高,有720P摄像头,又实现了飞控,还可以依靠ardrone_autonomy连接ROS,用来作为研究环境感知的平台超级合适,虽然旧了点。DJI的M100,M200根本买不动啊,Parrot还有Bepop2倒是可以指望。

AR.Drone2上集成了很多传感器,ardrone_autonomy是一个ROS包,可以通过WiFi连接Drone,他的节点drone_driver可以作为一个驱动,供其他ROS包使用,包括传感器数据读取和飞行控制指令的发送。

我把关于驱动这部分整理了一下,方便查看。

文档

ardrone_autonomy 文档地址

安装步骤

备注,ardrone_autonomy只能用于ROS Indigo/Hydro/Groovy版本。

用法

驱动只有一个可执行节点就是ardrone_driver。

运行 rosrun ardrone_autonomy ardrone_driver 进行启动,

也可以通过写在launch文件中进行启动。

从AR-Drone读取

更新频率设定

导航数据参数

IMU数据

磁力计数据

测距数据

视觉测距,是根据向下的摄像头用光流法估计的。

两个相机数据

ardrone/image_raw,通过调用服务toggle camera进行切换。

发送命令到AR-Drone

发送空命令(std_msgs/Empty)到以下topic,进行起降操作

  • ardrone/takeoff :起飞
  • ardrone/land : 降落
  • ardrone/reset :紧急状况

发送(geometry_msgs::Twist )类型消息到cmd_vel的topic,进行飞行状态控制,消息格式:

1
2
3
4
5
6
7
8
9
-linear.x: move backward
+linear.x: move forward
-linear.y: move right
+linear.y: move left
-linear.z: move down
+linear.z: move up

-angular.z: turn right
+angular.z: turn left

服务

切换相机

rosservice call /ardrone/togglecam

LED动作

rosservice call /ardrone/setledanimation type freq duration

  • uint8 type: The type of animation which is a number in range [0..13]
  • float32 freq: The frequency of the animation in Hz
  • uint8 duration: The duration of the animation in Seconds.
1
2
# 举例
$ rosservice call /ardrone/setledanimation 1 4 5

飞行动作

1
rosservice call /ardrone/setflightanimation type duration
  • uint8 type: The type of flight animation, a number in range [0..19]
  • uint16 duration: The duration of the animation. Use 0 for default duration (recommended)
1
2
# 举例
$ rosservice call /ardrone/setflightanimation 1 0

水平调整

调用ardrone/flattrim 服务进行水平调整,注意切勿在飞行中和不平的平面上进行水平调整。

保存至USB存储设备

调用ardrone/setrecord 服务进行启用和禁用保存到USB存储设备这个功能。1 启用,0 禁用。

启动参数

启动参数,在写launch文件的时候比较重要。具体的参数设定可以参考ardrone_autonomy的launch文件示例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
altitude (Default = 0)
altitude_max (Default = 3000)
altitude_min (Default = 50)
ardrone_name (Default = My ARDrone)
autonomous_flight (Default = 0)
bitrate (Default = 1000)
bitrate_ctrl_mode (Default = 0)
bitrate_storage (Default = 4000)
codec_fps (Default = 0)
com_watchdog (Default = 2)
control_iphone_tilt (Default = (20000.0f * (MDEG_TO_RAD)) = 0.349066)
control_level (Default = 0)
control_vz_max (Default = 700)
control_yaw (Default = (100000.0f * (MDEG_TO_RAD)) = 1.745329)
detect_type (Default = CAD_TYPE_NONE = 3)
detections_select_h (Default = 0)
detections_select_v (Default = 0)
detections_select_v_hsync (Default = 0)
enemy_colors (Default = (ARDRONE_DETECTION_COLOR_ORANGE_GREEN) = 1)
enemy_without_shell (Default = 0)
euler_angle_max (Default = (12000.0f * (MDEG_TO_RAD)) = 0.209440)
flight_anim (Default = 0,0)
flight_without_shell (Default = 0)
flying_mode (Default = 0)
groundstripe_colors (Default = (ARDRONE_DETECTION_COLOR_ARRACE_FINISH_LINE) = 16)
hovering_range (Default = 1000)
indoor_control_vz_max (Default = 700)
indoor_control_yaw (Default = (100000.0f * (MDEG_TO_RAD)) = 1.745329)
indoor_euler_angle_max (Default = (12000.0f * (MDEG_TO_RAD)) = 0.209440)
latitude (Default = 500)
leds_anim (Default = 0,0,0)
longitude (Default = 500)
manual_trim (Default = 0)
max_bitrate (Default = 1000)
max_size (Default = 102400)
navdata_demo (Default = 0)
navdata_options (Default = ( ( 1 << (NAVDATA_DEMO_TAG) )|( 1 << (NAVDATA_VISION_DETECT_TAG) ) ) = 65537)
nb_files (Default = 5)
outdoor (Default = 0)
outdoor_control_vz_max (Default = (1000.0f) = 1000)
outdoor_control_yaw (Default = (200000.0f * (MDEG_TO_RAD)) = 3.490659)
outdoor_euler_angle_max (Default = (20000.0f * (MDEG_TO_RAD)) = 0.349066)
output (Default = (UART_PRINT|WIFI_PRINT|FLASH_PRINT) = 7)
owner_mac (Default = 00:00:00:00:00:00)
ssid_multi_player (Default = ardronenetwork)
ssid_single_player (Default = ardronenetwork)
travelling_enable (Default = 0)
travelling_mode (Default = 0,10,1500,0,1000)
ultrasound_freq (Default = ADC_CMD_SELECT_ULTRASOUND_25Hz = 8)
ultrasound_watchdog (Default = 3)
userbox_cmd (Default = 0)
video_channel (Default = 0)
video_codec (Default = (UVLC_CODEC) = 32)
video_enable (Default = 1)
video_file_index (Default = 1)
video_live_socket (Default = 0)
video_on_usb (Default = 1)
video_slices (Default = 0)
vision_enable (Default = 1)
wifi_mode (Default = WIFI_MODE_INFRA = 0)
wifi_rate (Default = 0)