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
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
服务进行水平调整,注意切勿在飞行中和不平的平面上进行水平调整。
调用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)
|