Dji Robomaster(机甲大师)S1主要Python API汇总

发布时间 2024-01-05 01:04:05作者: soliang

https://bbs.dji.com/thread-227127-1-1.html

 

为方便各位小伙伴python编程,提高效率,花了些时间把官方的api整理了一下,贴出来供大家参考。

一、系统 1.设置整机运动 Function: robot_ctrl.set_mode(mode_enum) Parameters: ● mode_enum(enum) ■ rm_define.robot_mode_gimbal_follow ■ rm_define.robot_mode_chassis_follow ■ rm_define.robot_mode_free 2.控制计时器开始、暂停或结束计时 Function: tools.timer_ctrl(ehavior_enum) Parameters: ● behavior_enum(enum): ■ rm_define.timer_start ■ rm_define.timer_stop ■ rm_define.timer_reset 3.放大相机倍镜,局部图像更清晰 Function: media_ctrl.zoom_value_update(value) Parameters: ● value (int): [1, 4] 4.信息类(变量型数据)获取计时器从开始到当前时刻的用时,返回秒数 Function: tools.timer_current() Return value: ● time_stamp(float) 5.信息类(变量型数据)获取程序运行用时,返回秒数 Function: tools.run_time_of_program() Return value: ● time (float) 6.信息类(变量型数据)获取当前的时间信息,如年/月/日/时/分/秒等。 Function: tools.get_localtime(time_enum) Parameters: ● time_enum (enum): ■rm_define.localtime_year ■rm_define.localtime_month ■rm_define.localtime_day ■rm_define.localtime_hour ■rm_define.localtime_minute ■rm_define.localtime_second Return value ● time (int) 7.信息类(变量型数据)机器人启动时刻至今的时间间隔,返回累计的秒数,1)机器人的启动时刻是指上电时刻。2)如果机器人在断电后重启,会重新累计时间戳。 Function: tools.get_unixtime() Return value: ● time (float) 二、灯效 1.设置指定位置LED灯的闪烁频率,2Hz 即每秒闪烁 2 次 Function: led_ctrl.set_flash(armor_enum, frequency) Parameters: ●armor_enum(enum): ■rm_define.armor_all ■rm_define.armor_bottom_front ■rm_define.armor_bottom_back ■rm_define.armor_bottom_left ■rm_define.armor_bottom_right ■rm_define.armor_top_left ■rm_define.armor_top_right ● frequency(int): [1, 10] 2.控制底盘指定位置LED灯的颜色和灯效: ● 常亮,LED 灯保持点亮状态 ● 熄灭,LED 灯关闭 ● 呼吸,LED 灯明暗变化(由暗变亮再变暗) ● 闪烁,LED 灯以一定频率闪烁 Function: led_ctrl.set_bottom_led(armor_enum, r, g, b, led_effect_enum) Parameters: ● armor_enum(enum): ■ rm_define.armor_bottom_all ■ rm_define.armor_bottom_front ■ rm_define.armor_bottom_back ■ rm_define.armor_bottom_left ■ rm_define.armor_bottom_right ● r(int): [0, 255] ● g(int): [0, 255] ● b(int): [0, 255] ● led_effect_enum(enum): ■ rm_define.effect_always_on ■ rm_define.effect_always_off ■ rm_define.effect_breath ■ rm_define.effect_flash 3.设置云台指定位置 LED 灯的颜色和灯效: ● 常亮,LED 灯保持点亮状态 ● 熄灭,LED 灯关闭 ● 呼吸,LED 灯明暗变化(由暗变亮再变暗) ● 闪烁,LED 灯以一定频率闪烁 ● 跑马灯,呈圆形排布的 8 颗 LED 灯顺时针滚动点亮 Function: led_ctrl.set_top_led(armor_enum, r, g, b, led_effect_enum) Parameters: ● armor_enum(enum): ■ rm_define.armor_top_all ■ rm_define.armor_top_left ■ rm_define.armor_top_right ● r(int): [0, 255] ● g(int): [0, 255] ● b(int): [0, 255] ● led_effect_enum(enum): ■ rm_define.effect_always_on ■ rm_define.effect_always_off ■ rm_define.effect_breath ■ rm_define.effect_flash ■ rm_define.effect_marquee 4.设置云台指定序号 LED 灯的亮灭,序号 1~8 分别对应云台两侧可独立控制的 8 颗 LED 灯 Function: led_ctrl.set_signle_led(armor_enum, led_index, led_effect_enum) Parameters: ● armor_enum(enum): ■ rm_define.armor_top_all ■ rm_define.armor_top_left ■ rm_define.armor_top_right ● index(int/list): [1, 8] ● led_effect_enum(enum): ■ rm_define.effect_always_on ■ rm_define.effect_always_off 5.关闭指定位置的LED灯 Function: led_ctrl.turn_off(armor_enum) Parameters: ● armor_enum(enum) ■ rm_define.armor_all ■ rm_define.armor_bottom_front ■ rm_define.armor_bottom_back ■ rm_define.armor_bottom_left ■ rm_define.armor_bottom_right ■ rm_define.armor_top_left ■ rm_define.armor_top_right 6.控制发射器弹道灯的亮灭 Function: led_ctrl.gun_led_on() led_ctrl.gun_led_off() 三、底盘 1.设置 PWM 输出百分比,数值越大,在某一周期内高电平的持续时间越长。该 PWM 基础频率为50Hz(灯的亮灭、舵机转动) 注意: 1)PWM 口位于底盘控制模块上,拿开底盘后侧的透明盖板即可看到。从上至下共6个 PWM 口。 2)PWM 又称脉冲宽度调制,控制的是某一周期内高电平的持续时间,现广泛应用于LED 灯、舵机等的控制上。 3)上电后,PWM 接口默认输出7.5%占空比的信号,每次程序运行结束后,也会恢复默认的输出信号。 4)对灯条来说,PWM 输出百分比范围为0%~100%,0意味着灯最暗,100意味着灯最亮。 5)对舵机来说,PWM 输出百分比范围为2.5% ~ 12.5%。因为大部分舵机的控制脉冲频率为50 Hz,控制周期为20 ms,可调节角度-90 °~ 90°对应的高电平脉宽为0.5 ms ~ 2.5 ms, 因此舵机占空比的控制范围便是0.5/20~2.5/20,即2.5% ~ 12.5%。 玩家们可以根据自己想要控制的旋转角度设置舵机 PWM 的输出百分比。 Function: chassis_ctrl.set_pwm_value(pwm_port_enum, output_percent) Parameters: ● pwm_port_enum(enum) ■ rm_define.pwm_all ■ rm_define.pwm1 ■ rm_define.pwm2 ■ rm_define.pwm3 ■ rm_define.pwm4 ■ rm_define.pwm5 ■ rm_define.pwm6 ● output_percent(int): [0, 100] 2.开启或关闭底盘速度杆量叠加 注意: 1)如果不添加“开启底盘速度杆量叠加”模块,在运行程序时我们无法手控底盘;而添加此模块后,我们就可以对运行中的机器人进行移动控制,并且控制量会叠加。 2)杆量是指摇杆幅值的推动大小。杆量范围为 -1 ~ 1。 3)速度杆量叠加是将底盘在程序中的速度与摇杆速度相加。 在程序中设置底盘以 0.5m/s 向前平移,同时我们将杆量推满, 开启底盘速度杆量叠加后,机器人就会将两种控制数据“叠加”, 最终机器人将以(0.5+1*当前最大向前速度)m/s的速率向前平移。 Function: chassis_ctrl.enable_stick_overlay() chassis_ctrl.disable_stick_overlay() 3. 在“底盘跟随云台模式”下,当云台左右旋转时,底盘始终与云台保持指定夹角 Function: chassis_ctrl. set_follow_gimbal_offset(degree) Parameters: ● degree(int): [-180, 180]° 4.设置底盘平移速率,默认平移速率是 0.5 米/秒。数值越大,移动越快。 Function: chassis_ctrl.set_trans_speed(speed) Parameters: ● speed(float): [0, 3.5] m/s 5.设置底盘旋转速率,默认旋转速率是 30 度/秒。数值越大,旋转越快。 Function: chassis_ctrl.set_rotate_speed(speed) Parameters: ● speed(int): [0, 600] °/s 6.独立控制四个麦轮的转速,符合麦轮转动方向和速度的有效组合才会生效。 Function: chassis_ctrl.set_wheel_speed(lf_speed, rf_speed, lr_speed, rr_speed) Parameters: ● lf_speed(int): [-1000, 1000] rpm ● rf_speed(int): [-1000, 1000] rpm ● lr_speed(int): [-1000, 1000] rpm ● rr_speed(int): [-1000, 1000] rpm 7.控制底盘向指定方向平移 Function: chassis_ctrl.move(degree) Parameters: ● degree (int): [-180, 180] ° 8.控制底盘向指定方向平移指定时长 Function: chassis_ctrl.move_with_time(degree, time) Parameters: ● degree(int): [-180, 180] ° ● time(float): [0, 20] s 注:此方法比控制底盘向某方向平移并等待几秒、以及控制底盘向某方向平移多少米的精度都要高,且走的要平顺一些 9.控制底盘向指定方向平移指定距离 Function: chassis_ctrl.move_with_distance(degree, distance) Parameters: ● degree(int): [-180, 180] ° ● distance(float): [0, 5] m 10.控制底盘以指定的平移速率向指定方向平移 Function: chassis_ctrl.move_degree_with_speed(speed, degree) Parameters: ● speed(float): [0, 3.5] m/s ● degree(int): [-180, 180] ° 11.控制底盘向指定方向旋转 Function: chassis_ctrl.rotate(direction_enum) Parameters: ● direction_enum(enum): ■ rm_define.clockwise ■ rm_define.anticlockwise 12. 控制底盘向指定方向旋转指定时长 Function: chassis_ctrl.rotate_with_time(direction_enum, time) Parameters: ● direction_enum(enum): ■ rm_define.clockwise ■ rm_define.anticlockwise ● time(float): [0, 20] s 13.控制底盘向指定方向旋转指定角度 Function: chassis_ctrl.rotate_with_degree(direction_enum, degree) Parameters: ● direction_enum(enum): ■ rm_define.clockwise #常数:6 ■ rm_define.anticlockwise #常数:5 ● degree(int): [0, 1800] ° 注释:顺时针正60不等于逆时针负60,参数只能是负数,不会将负值自动转换方向的正值 14.控制底盘向指定方向平移的同时做旋转运动 Function: chassis_ctrl.move_and_rotate(degree, direction) Parameters: ● degree(int): [-180, 180] ° ● direction_enum(enum): ■ rm_define.clockwise ■ rm_define.anticlockwise 15.控制底盘以指定速度在指定方向运动 Function: chassis_ctrl.move_with_speed(speed_x, speed_y, speed_rotation) Parameters: ● speed_x(float): [0, 3.5] m/s ● speed_y(float): [0, 3.5] m/s ● speed_rotation(int): [-600, 600] °/s 16.停止底盘的所有运动 Function: chassis_ctrl.stop() 17.信息类(变量型数据) 以上电时刻底盘位置为基准,获取底盘当前在航向轴、俯仰轴或翻滚轴上的姿态角值 Function: chassis_ctrl.get_attitude(attitude_enum) Parameters: ● attitude_enum(enum): ■rm_define.chassis_yaw ■rm_define.chassis_pitch ■rm_define.chassis_roll Return value: ● degree(float) 18. 信息类(变量型数据) 获取底盘当前位置的坐标和朝向数据,x、y的方向以上电时枪管方向为基准(故如果上电时枪管方向和程序运行时的方向垂直的话,得出的结果就是正好颠倒的,应该加以注意),但(0,0)点是以程序开始运行时的底盘中心点为基准的。s1测得的坐标、朝向信息和实测基本相等,精度较高。 Function: chassis_ctrl.get_position_based_power_on(action_enum) Parameters: ● action_enum(enum): ■ rm_define.chassis_forward #x向,上电时枪管的方向 ■ rm_define.chassis_translation #y向,上电时右侧板方向 ■ rm_define.chassis_rotate #朝向,以程序开始运行时的枪管方向为基准 Return value: ● position(float) 19. 事件类(中断处理程序) 在行驶过程中,当底盘撞击到人、桌腿等障碍物时,运行本模块内程序 Function: def chassis_impact_detection(msg) Type: Event callback 20.布尔型(真伪判别) 在行驶过程中,检测到底盘撞击到人、桌腿等障碍物时会返回“真”,否则返回“假” Function:chassis_ctrl.is_impact() Return value: ● impact_status(bool) 四、云台 1.开启或关闭云台速度杆量叠加 Function: gimbal_ctrl.enable_stick_overlay() gimbal_ctrl.disable_stick_overlay() 2.在“云台跟随底盘模式”下,当底盘左右旋转时,云台始终与底盘保持指定夹角 Function: gimbal_ctrl.set_follow_chassis_offset(degree) Parameters: ● degree(int): [-180, 180] ° 3.设置云台旋转速率,默认速率是 30 度/秒。数值越大,旋转越快。 Function: gimbal_ctrl.set_rotate_speed(speed) Parameters: ● speed(float): [0, 540] °/s 4.控制云台动作: ● 回中:云台回到航向轴和俯仰轴的初始位置 ● 停止运动:云台停止运动,但仍处于受控状态 ● 休眠:云台断电 ● 唤醒:云台重新通电 休眠时云台疲软,电机无力矩输出,可以被随意推动;唤醒后云台恢复控制,自动回中 Function: gimbal_ctrl.recenter() gimbal_ctrl.stop() gimbal_ctrl.suspend() gimbal_ctrl.resume() 5.控制云台向指定方向旋转(注:非阻塞型,可以继续后面的动作,相当于同步运行的) 此模块会控制云台向指定方向持续旋转,直到收到“控制云台停止运动”、“等待(x)秒”或其它控制云台运动的指令 Function: gimbal_ctrl.rotate(direction_enum) Parameters: ● direction_enum(enum): ■ rm_define.gimbal_up ■ rm_define.gimbal_down ■ rm_define.gimbal_left ■ rm_define.gimbal_right 6.控制云台向指定方向旋转指定角度(注:阻塞型,故后面不用跟休眠时间以给其运行时间) Function: gimbal_ctrl.rotate_with_degree(direction_enum, degree) Parameters: ● direction_enum(enum): ■ rm_define.gimbal_up ■ rm_define.gimbal_down ■ rm_define.gimbal_left ■ rm_define.gimbal_right ● degree(int): [0, 55]° 注释:试验证明,向上旋转正20度与向下旋转负20度的效果一样,可以自动识别正负和方向。向左旋转正60度与向右旋转负60度的效果一样 7.控制云台绕航向轴旋转到指定位置 Function: gimbal_ctrl.yaw_ctrl(degree) Parameters: ● degree(int): [-250, 250]° 8.控制云台绕俯仰轴旋转到指定位置 Function: gimbal_ctrl.pitch_ctrl(degree) Parameters: ● degree(int): [-20, 35]° 9.控制云台旋转到指定角度位置 注意: 1)在“云台跟随底盘模式”下,“控制云台旋转到航向轴(x)度”部分不生效,“旋转到俯仰轴(x)度”部分不受影响。 2)“控制云台(向上/下/左/右)旋转(x)度”是相对位置,基于云台当前方位。 3)“控制云台绕航向轴旋转到(x)度”、“控制云台绕俯仰轴旋转到(x)度” 、 “控制云台旋转到航向轴(x)度 俯仰轴(x)度”是绝对位置,基于底盘当前方位。 Function: gimbal_ctrl.angle_ctrl(yaw_degree, pitch_degree) Parameters: ● yaw_degree (int): [-250, 250]° ● pitch_degree (int): [-20, 35]° 10.控制云台以指定旋转速度同时绕航向轴、俯仰轴旋转 注意: 速度输入值的正负号代表着云台转动方向。 对航向轴而言:正值意味着向右转动,负值意味着向左转动。 对俯仰轴而言:正值意味着向上转动,负值意味着向下转动。 Function: gimbal_ctrl.rotate_with_speed(yaw_speed, pitch_speed) Parameters: ● yaw_speed(float): [-360, 360]°/s ● pitch_speed(float): [-360, 360]°/s 11.信息类(变量型数据) 获取云台当前在航向轴或俯仰轴上的姿态角值,以当前底盘朝向为基准 Function: gimbal_ctrl.get_axis_angle(axis_enum) Parameters: ● axis_enum (enum): ■ rm_define.gimbal_axis_yaw #航向角 ■ rm_define.gimbal_axis_pitch #俯仰角 Return value: ● degree(int) 五、发射器 1.设置发弹数,即每次射出的水弹颗数 Function: gun_ctrl.set_fire_count(count) Parameters: ● count(int): [1, 8] 2.控制发射器只发射一次水弹(执行类、阻塞型) Function: gun_ctrl.fire_once() 3.控制发射器持续发射水弹(执行类、非阻塞型) 注意: 1)默认频率是每秒发射一次,每次发弹一颗。 2)连续发射水弹是非阻塞型模块,也就是它会持续发射,直到遇到“停止发射”指令或例程结束的情况。 Function: gun_ctrl.fire_continuous() 4.停止发射水弹 注意: 1)因为“单次发射水弹”模块是阻塞型的,所以“停止发射水弹”指令对它不起作用。 2)“停止发射水弹”模块只对“连续发射水弹”有限制。 Function: gun_ctrl.stop() 六、智能 1.开启或关闭 RoboMaster S1 对视觉标签、姿势、同类S1机器人、行人、线的视觉识别功能 注意: 1)RoboMaster S1 的智能识别功能默认处于关闭状态。所以如果未先开启识别功能,机器人对相应的可识别信息就不会有反应。 2)机器人默认能够识别的线颜色是蓝色。 Function: vision_ctrl.enable_detection(function_enum) vision_ctrl.disable_detection(function_enum) Parameters: ● function_enum(enum): ■ rm_define.vision_detection_marker ■ rm_define.vision_detection_pose ■ rm_define.vision_detection_car ■ rm_define.vision_detection_people ■ rm_define.vision_detection_line 2.开启或关闭掌声识别功能 Function: media_ctrl.enable_sound_recognition(function_enum) media_ctrl.disable_sound_recognition(function_enum) Parameters: ● function_enum(enum): ■ rm_define.sound_detection_applause 3.设置视觉标签的有效识别距离,超出限制则不会识别 Function: vision_ctrl.set_marker_detection_distance(distance) Parameters: ● distance(float): [0.5, 3] 4.设置机器人能够识别的线颜色 Function: vision_ctrl.line_follow_color_set(color_enum) Parameters: ● color_enum(enum): ■ rm_define.line_follow_color_blue ■ rm_define.line_follow_color_red ■ rm_define.line_follow_color_green 5.在巡线时减小曝光值,可以缓解快速转向造成的视野模糊,让识别更稳定。 Function: media_ctrl.exposure_value_update(exposure_value_enum) Parameters: ● exposure_value_enum(enum): ■ rm_define.exposure_value_large ■ rm_define.exposure_value_medium ■ rm_define.exposure_value_small 6.机器人识别并瞄准对应视觉标签的中心位置 注意: 1)请先“开启视觉标签识别”功能,否则不会识别。 2)使用此模块时,当视野中有红心出现就会瞄准,5秒内没有识别到红心的话会超时退出,运行后面的程序。 Function: vision_ctrl.detect_marker_and_aim(marker_enum) Parameters: ● rm_define.marker_trans_red_heart #红心 ● rm_define.marker_trans_target #靶子 ● rm_define.marker_trans_dice #骰子 ● rm_define.marker_number_[zero,..., nine] 注:rm_define.marker_number_zero为常数10,one-nine对应常数11-19 ● rm_define.marker_letter_[A,..., Z] 7.事件类(中断处理程序) 当识别到物体、视觉标签、姿势等对应信息时运行本模块内的程序 注意: 1)事件触发模块优先级高,也就是说无论主线程运行到哪一步,只要满足事件触发条件,就会立刻跳出主线程,开始运行事件类模块内的程序。 2)需识别行人时,请控制云台适度向上旋转,让行人站在机器人前 1 米处,不要蹲着,确保行人完整出现在机器人视野中。 3)V 字、倒 V 字的姿势指令需要用手臂完成,而非手指。 Function: def vision_recognized_people(msg) def vision_recognized_car(msg) #S1 def vision_recognized_pose_all(msg) #任一姿势 def vision_recognized_pose_victory(msg)# V型 def vision_recognized_pose_give_in(msg)#倒V型 def vision_recognized_pose_capture(msg)#拍照手势 def vision_recognized_marker_trans_all(msg)#任一方向 def vision_recognized_marker_trans_left(msg) def vision_recognized_marker_trans_right(msg) def vision_recognized_marker_trans_stop(msg) def vision_recognized_marker_trans_forward(msg) def vision_recognized_marker_trans_red_heart(msg) def vision_recognized_marker_trans_target(msg)#靶子 def vision_recognized_marker_trans_dice(msg)#骰子 def vision_recognized_marker_number_all(msg)#任一数字 def vision_recognized_marker_number_[one, …, nine](msg) def vision_recognized_marker_letter_all(msg)#任一字母 def vision_recognized_marker_letter_[A, …, Z](msg) Type: Event callback 8.事件类(中断处理程序) 当识别到对应的拍手指令时将运行本模块内的程序 Function: def sound_recognized_applause_twice(msg) def sound_recognized_applause_thrice(msg) Type: Event callback 9.布尔型(多和条件类模块连用) 识别到物体、视觉标签、姿势、拍手指令等对应信息时返回“真”,否则将返回“假” Function: vision_ctrl.check_condition(condition_enum) Parameters: ● condition_enum(enum): ■ rm_define.cond_recognized_people ■ rm_define.cond_recognized_car ■ rm_define.cond_recognized_marker_trans_all ■ rm_define.cond_recognized_marker_trans_left ■ rm_define.cond_recognized_marker_trans_right ■ rm_define.cond_recognized_marker_trans_forward ■ rm_define.cond_recognized_marker_trans_stop ■ rm_define.cond_recognized_marker_trans_red_heart ■ rm_define.cond_recognized_marker_trans_target ■ rm_define.cond_recognized_marker_trans_dice ■ rm_define.cond_recognized_marker_number_all ■ rm_define.cond_recognized_marker_number_[zero,..., nine] ■ rm_define.cond_recognized_marker_letter_all ■ rm_define.cond_recognized_marker_letter_[A,..., Z] ■ rm_define.cond_recognized_pose_all ■ rm_define.cond_recognized_pose_victory ■ rm_define.cond_recognized_give_in ■ rm_define.cond_recognized_capture ■ rm_define.cond_sound_recognized_applause_twice #两次拍手 ■ rm_define.cond_sound_recognized_applause_thrice #三次 10.待机器人识别到物体、视觉标签、姿势等对应信息时将继续执行,否则将持续等待(执行类、阻塞型) Function: vision_ctrl.cond_wait(condition_enum) Parameters: ● condition_enum(enum): ■ rm_define.cond_recognized_people ■ rm_define.cond_recognized_car ■ rm_define.cond_recognized_marker_trans_all ■ rm_define.cond_recognized_marker_trans_left ■ rm_define.cond_recognized_marker_trans_right ■ rm_define.cond_recognized_marker_trans_forward ■ rm_define.cond_recognized_marker_trans_stop ■ rm_define.cond_recognized_marker_trans_red_heart ■ rm_define.cond_recognized_marker_trans_target ■ rm_define.cond_recognized_marker_trans_dice ■ rm_define.cond_recognized_marker_number_all ■ rm_define.cond_recognized_marker_number_[zero,..., nine] ■ rm_define.cond_recognized_marker_letter_all ■ rm_define.cond_recognized_marker_letter_[A,..., Z] ■ rm_define.cond_recognized_pose_all ■ rm_define.cond_recognized_pose_victory ■ rm_define.cond_recognized_give_in ■ rm_define.cond_recognized_capture ■ rm_define.cond_sound_recognized_applause_twice ■ rm_define.cond_sound_recognized_applause_thrice 11.信息类(列表型数据)注:是python的列表,下标从零开始 获取识别到的视觉标签信息,参数为N , ID , X , Y , W, H 注意: 1)视觉标签信息的格式为: 第1项为识别到的视觉标签数量N,后续项以 5 个数据为一组,分别是第一个视觉标签的 ID,标签中心点在机器人视野中位置的横坐标 X、纵坐标 Y、宽度 W和高度 H;第二个视觉标签的 ID、标签中心点在机器人视野中位置的横坐标、纵坐标、宽度和高度;第三个… 2)返回的ID值释义: ID值为1代表识别到的是:停止 ID值为2代表识别到的是:骰子 ID值为3代表识别到的是:靶 ID值为4代表识别到的是:左箭头 ID值为5代表识别到的是:右箭头 ID值为6代表识别到的是:前进箭头 ID值为8代表识别到的是:红心 ID值为10-19代表识别到的是:数字0-9 ID值为20-45代表识别到的是:字母A-Z Function: vision_ctrl.get_marker_detection_info() Return value: ● detection_info(list) 12.信息类(列表型数据) 获取识别到的行人或 S1 机器人信息,参数为N,X,Y,W,H 注意: 物体信息的格式为: 第1项为识别到的物体数量N,后续项以 4 个数据为一组,分别是第一个物体中心点在机器人视野中位置的横坐标 X、纵坐标 Y、宽度 W和高度 H;第二个物体中心在机器人视野中位置的横坐标、纵坐标、宽度和高度;第三个…… Function: vision_ctrl.get_people_detection_info() vision_ctrl.get_car_detection_info() Return value: ● detection_info(list) 13.信息类(列表型数据) 获取识别到的姿势信息,参数为 N,ID,X,Y,W,H 注意: 1)姿势信息的格式为: 第1项为识别到的姿势数量 N,后续项以 5 个数据为一组,分别是第一个姿势的 ID 值,姿势中心点在机器人视野中的横坐标 X、纵坐标 Y,宽度 W和高度 H;第二个姿势返回的 ID 值,中心点在机器人视野中的横坐标、纵坐标,宽度和高度;第三个…… 2)ID 值释义: ID值为 4 对应姿势:正 V ID 值为 5 对应姿势:倒 V 字 ID 值为 6 对应姿势:拍照手势 Function: vision_ctrl.get_pose_detection_info() Return value: ● detection_info(list) 14.信息类(列表型数据) 获取识别到的线信息,参数为 N,Info,X,Y,θ,C 注意: 线信息的格式为: 第 1 项 N 为识别到的线上点的数量10(固定值),第 2 项 Info 为返回的线类型(0 表示无线,1 表示一条线,2 表示 Y 字路口,3 表示十字路口),后续项以 4 个数据为一组:分别是线上由近及远的十个点的横坐标 X,纵坐标 Y,实际切线角 θ,曲率 C(取值范围 0-10,0 表示纯直线),一共 42 个数据。 Function: vision_ctrl.get_line_detection_info() Return value: ● detection_info(list) 15.信息类(变量型数据) 获取当前场景的亮度信息,返回数值0-10。数值越大,代表当前场景越亮。 Function: vision_ctrl.get_env_brightness() Return value: ● brightness_value(int) 16.信息类(列表型数据) 获取准星位置信息,参数为 X,Y(准星跟随标签移动示例很好) Function: media_ctrl.get_sight_bead_position() Return value: ● sight_bead_position(list)

七、装甲板 1.设置装甲板灵敏度。数值越大,装甲板感应灵敏度越高。硬物敲击时建议灵敏度设为6,指关节叩击时设为 8。灵敏度设置只在实验室环境中生效,对战中装甲板的灵敏度都会恢复为默认值。 Function: armor_ctrl.set_hit_sensitivity(value) Parameters: ● value(int): [0, 10] 2.事件类(中断处理程序) 当检测到指定位置的装甲板受到攻击时,运行本模块内的程序 Function: def armor_hit_detection_all(msg) def armor_hit_detection_bottom_right(msg) def armor_hit_detection_bottom_left(msg) def armor_hit_detection_bottom_front(msg) def armor_hit_detection_bottom_back(msg) def armor_hit_detection_top_right(msg) def armor_hit_detection_top_left(msg) Type: Event callback 3.信息类(变量型数据) 获取最近受到攻击的装甲板信息,ID值反馈出装甲板位置,通过时间戳计算可以获知受攻击的时间点 注意: 返回的ID值释义: ID 值为 1 对应受到攻击的装甲板在:底盘后侧 ID 值为 2 对应受到攻击的装甲板在:底盘前侧 ID 值为 3 对应受到攻击的装甲板在:底盘左侧 ID 值为 4 对应受到攻击的装甲板在:底盘右侧 ID 值为 5 对应受到攻击的装甲板在:云台左侧 ID 值为 6 对应受到攻击的装甲板在:云台右侧 Python API: Function: armor_ctrl.get_last_hit_index() Return value: ● index(int) Function: armor_ctrl.get_last_hit_time() Return value: ● time(float) 4.布尔型 持续检测指定装甲板是否受到攻击,被攻击会返回“真”,否则返回“假” Function: armor_ctrl.check_condition(condition_enum) Parameters: ● condition_enum(enum): ■ rm_define.cond_armor_hit ■ rm_define.cond_armor_bottom_front_hit ■ rm_define.cond_armor_bottom_back_hit ■ rm_define.cond_armor_bottom_left_hit ■ rm_define.cond_armor_bottom_right_hit ■ rm_define.cond_armor_top_left_hit ■ rm_define.cond_armor_top_right_hit 5.待指定位置的装甲板受到攻击后才会执行下一条指令,否则持续等待(执行类、阻塞型) Function: armor_ctrl.cond_wait(condition_enum) Parameters: ● condition_enum(enum): ■ rm_define.cond_armor_hit ■ rm_define.cond_armor_bottom_front_hit ■ rm_define.cond_armor_bottom_back_hit ■ rm_define.cond_armor_bottom_left_hit ■ rm_define.cond_armor_bottom_right_hit ■ rm_define.cond_armor_top_left_hit ■ rm_define.cond_armor_top_right_hit 八、移动设备 1.获取移动设备当前角度值 注意: 1)RoboMaster S1 的默认运动模式是“云台跟随底盘模式”,所以如果想单独控制云台绕航向轴旋转,需要设置为“自由模式”。 2)移动设备是指手机、平板等。 3)移动设备姿态角范围是 -180~180°, 对航向轴来说:向右为正(0-180) 对俯仰轴来说:向上为正(0-180) 对翻滚轴来说:右下为正(0-180) Python API: Function: mobile_ctrl.get_attitude(attitude_enum) Parameters: ● attitude_enum(enum): ■ rm_define.mobile_atti_pitch ■ rm_define.mobile_atti_roll ■ rm_define.mobile_atti_yaw 2.获取移动设备加速度单元的测量值 注意: (1)速度变化越快,获取到的加速度测量值越大。 (2)移动设备是指手机、平板等。 Python API: Function: mobile_ctrl.get_accel(axis_enum) Parameters: ● axis_enum(enum): ■ rm_define.mobile_accel_x ■ rm_define.mobile_accel_y ■ rm_define.mobile_accel_z 九、多媒体 1.播放音效的同时,立刻执行下一条指令(执行类、非阻塞型) Function: media_ctrl.play_sound(sound_enum, wait_complete_flag=False) Parameters: ● sound_enum(enum): ■ rm_define.media_sound_attacked #被击中 ■ rm_define.media_sound_shoot #射击 ■ rm_define.media_sound_scanning#扫描中 ■ rm_define.media_recognize_success#识别成功 ■ rm_define.media_gimbal_rotate#云台旋转 ■ rm_define.media_sound_count_down#倒计时 2.音效播放完毕后才会执行下一条指令(执行类、阻塞型) Function: media_ctrl.play_sound(sound_enum, wait_complete_flag=True) Parameters: ● sound_enum(enum): ■ rm_define.media_sound_attacked ■ rm_define.media_sound_shoot ■ rm_define.media_sound_scanning ■ rm_define.media_recognize_success ■ rm_define.media_gimbal_rotate ■ rm_define.media_count_down 3.拍照。响起快门声的同时拍摄一张照片,照片会在相册中出现。 注意: 请提前在机器人中插入一张剩余用量在 2GB 以上的SD卡,无 SD 卡时拍照指令不生效。 Python API: Function: media_ctrl.capture() 4.开始或结束视频录制,结束后会在APP相册和 SD 卡中生成一段视频。 Function: media_ctrl.record(enable_enum) Parameters: ● enable_enum(enum): ■ 1 ■ 0 十、控制语句 1.等待指定秒数,然后再执行下一条指令 Function: time.sleep(t) Parameters: ● t(float): [0, 3600]s 2.重复10次,重复 Python基本语法:for count in range(10):、while True: 3.如果/否则也是Python基本语法 if……: pass else: pass 4.停止正在运行的所有程序 Function: rmexit() 十一、运算符 加减乘除、取余(%)以及逻辑运算(==/!=/>=/and/or/not)为python基本语法 利用了math等模块的一些函数和常数,如下: 0.math定义的两个常数:math.pi;math.e 1.random.randint(1,10) #随机取1到10之间的整数,包括1和10 注:需要import random 2.rmround(3.5) #将3.5四舍五入 3.abs() #取绝对值 4.math.floor()、math.ceil() #向下、上取整 5.math.sin();math.cos();math.tan() #要求输入弧度值,如用度需换算为 math.sin(x/180*math.pi) 6.math.asin();math.acos();math.atan() #要求输入弧度值,如用度需换算为 math.asin(x)/math.pi*180 7.math.sqtr() #平方根 8.math.exp() #e^ 9.math.pow(10,2) #10^2 10.math.log(2,math.e) #ln2 11.math.log(3,10) #log3 十二、数据对象 1.基本变量和列表 变量的使用同python语法,列表为大疆自定义的类(下标从1开始,而不是从0),但用法基本同原列表 示例: variable_i = 0 #定义变量 list_list01 = RmList() #定义一个空列表 def start(): global variable_i #声明使用全局变量 global list_list01 global pid_pid01 variable_i = 3 #基本变量赋值 variable_i = variable_i + 1 #基本变量自增减 list_list01=RmList() #将list_list01列表设为空列表 list_list01.append(1) #将1添加到列表末尾 list_list01.pop(2) #删除列表第2项 list_list01.clear() #删除列表全部项 list_list01.pop() #删除列表末尾项 list_list01.insert(1, 2) #在第一项前插入2 list_list01[1] #列表的第一项 list_list01.index(2) #列表中第一个2的索引 list_list01[1] = 9 #将列表第一项替换为9 len(list_list01) #列表的长度 if (2 in (list_list01)): # “in”成员判定 pass 2.PID对象 示例: variable_i = 0 pid_pid01 = rm_ctrl.PIDCtrl() #定义一个PID控制器pid_pid01 def start(): global variable_i global pid_pid01 pid_pid01.set_error(5) #设置PID控制器pid_pid01的误差为5 #设置PID控制器pid_pid01的比例、积分、微分参数Kp、Ki、Kd为1、2、3 pid_pid01.set_ctrl_params(1,2,3) #参数为float类型 #将变量variable_i设为PID控制器的输出 variable_i = pid_pid01.get_output()