大疆机甲大师编程体验:如何Coding一个会跟踪的小机甲
off999 2024-10-21 06:54 30 浏览 0 评论
机器之心原创
作者:思源
如果给你一台机甲大师 S1,那么你能会拿它来做什么?是开着它巡视领地,还是编个程赋予它智能?
早一段时间,机器之心拿到了一台机甲大师 S1,在畅快地控制与游戏之余,我们不禁想看看它的编程模块到底是什么样的。看看除了手动控制外,我们都能通过编程实现些什么,机甲大师 S1 又能自动化做些什么。带着这些疑问,机器之心实际操作了一波,看看机甲大师 S1 的大脑到底能有多强。
「战斗」体验
在刚拿到机甲大师 S1 的时候,当然是先体验一番它的操作与战斗乐趣了。我们可以通过云台上的摄像头以第一人称的视角操作机器,当然也包括开火啦。因为我们是通过 WIFI 连接并控制机甲大师,所以控制距离依 WIFI 信号而定,当然你也可以尝试其它的连接方式。
即使是单人模式,机甲大师 S1 也能实现很多功能,例如录制视频或拍照、识别物体或射击水弹等等。如下是机器之心已经在办公室中开玩了。
真实场景版第一人称射击游戏。
在刚玩机甲大师 S1 时,可能会感到非常新奇、非常有意思。但了解它的操作和各种功能后,它的操作乐趣会逐渐消退,毕竟没有其它机甲大师能一起对战。
不过值得庆幸的是,机甲大师 S1 还有「实验室」模式,我们可以根据编程模块实现各种炫酷的玩法。
机甲大师 S1 编程模块
机甲大师 S1 的编程主要分为 Python 和 Scratch 两种,它们两者之间是可以直接转换的。总体而言,机甲大师提供了大量预定义的模块,我们要做的就是调用不同的模块,并构造完整的流程。
机甲大师 S1 的功能模块大致能分为几大类,首先是控制机身行为的模块,包括灯光、移动和射击等等;其次是各种识别模块,例如识别到人、标志等等;最后是一些编程的标准模块,例如控制流或数据结构等等。
因为基本的能力与特性都是确定的,剩下的重点就是构建系统的逻辑。所以说,如果我们了解了各种模块或 API 的定义,那么机甲大师 S1 的编程并不困难。
举个栗子
下面列举一个简单的案例,我们需要机甲大师 S1 开始旋转机身、云台来找人。如果检测到行人,那么就令机身的所有灯光都变成红色,并抬头「看着」人。这样简单的一个逻辑可以快速通过 Scratch 完成,直接拖拽不同的模块就行了。其中不同类的模块颜色还不一样,例如 while、if 等控制语句都是蓝色;视觉识别模块都是浅黄色。
如下展示了用 Scratch 编写上面逻辑的结果:
即使不太了解编程的读者,看看上面的模块差不多也能知道机甲大师 S1 会做些什么。基本上各种复杂的任务或流程都能通过 Scratch 搭建,各种功能也都能实现。对于一般的开发者而言,我认为直接使用 Scratch 编程更便捷一些,因为 Python 编程其实逻辑上也差不多,不过要熟悉各种 API。
如下是上面程序的 Python 代码,它的复杂之处在于 API 的选择与配置,其它程序控制流或过程并不会太复杂。
def start(): vision_ctrl.enable_detection(rm_define.vision_detection_people) robot_ctrl.set_mode(rm_define.robot_mode_chassis_follow) while True: gimbal_ctrl.recenter() if vision_ctrl.check_condition(rm_define.cond_recognized_people): gimbal_ctrl.rotate_with_degree(rm_define.gimbal_up,44) led_ctrl.set_bottom_led(rm_define.armor_bottom_all, 255, 0, 0, rm_define.effect_flash) led_ctrl.set_top_led(rm_define.armor_top_all, 255, 0, 0, rm_define.effect_marquee) time.sleep(7) else: gimbal_ctrl.rotate_with_degree(rm_define.gimbal_up,24) led_ctrl.set_bottom_led(rm_define.armor_bottom_all, 69, 215, 255, rm_define.effect_always_on) led_ctrl.set_top_led(rm_define.armor_top_all, 69, 215, 255, rm_define.effect_always_on) gimbal_ctrl.rotate(rm_define.gimbal_right) gimbal_ctrl.set_rotate_speed(40) time.sleep(2)
虽然说是用 Python 编写的程序和 Scratch 是等价的,但这么多 API 还是需要花一定功夫来理解的。如上所示,我们并不需要导入各种模块,直接可以调用 vision_ctrl、led_ctrl 和 gimbal_ctrl 等接口,各 API 的参数也与 Scratch 中的差不多。
如果我们用 Python 写机甲大师 S1 的程序,那么我们这样的初学者会遇到一些问题。首先机甲大师 S1 似乎暂时没有提供完善的 Python API 文档,只在每一个 Scratch 模块下介绍了对应的 API,但该 API 的行为与用法并没有展示。其次,每一次查找 API 时,不能通过搜索直接定位,我们先要理解 Scratch 模块,才能找到对应的 API。
编程指南中的 Python API 示例。
最后,至少在机器之心尝试用 Python 编程时,没感觉到它的定制化优势。所有高层 API 的接口都是封装好的,我们只能利用现有的功能模块实现一些流程。比如说机甲大师 S1 的识别功能,它支持行人、特定标记、特定姿势和其它机器人的检测,它们都有非常完善的 API。但是如果需要识别新的目标,例如「猫」,那么它是做不到的,我们也无法给它加上我们自己训练的 ML 模型。
当然,机甲大师的底层开发肯定非常复杂,要给它加上新的特性一定很麻烦,但是机器之心还是希望机甲大师能提供一系列教程,让机器学习开发者也能将自己的模型加载到上面。
总体而言,通过这个简单的案例,我们发现对于一般的用户,使用 Scratch 写程序要比用 Python 写高效得多。它非常适合作为青少年的编程启蒙玩具,用 Scratch 编写出炫酷的应用。
Scratch 编程模块
最后我们重点介绍一下机甲大师该怎样使用 Scratch 进行编程。机甲大师 S1 的编程都在应用程序内完成,不同的语言都有自己的编辑窗口。如下所示为 Scratch 的编程界面,其中图形化的编程模块有一百多个。为了便于查找模块,机甲大师按照不同的功能以不同颜色的模块进行分类,这样搭建起来会比较简单。
编程指南地址:https://www.dji.com/cn/robomaster-s1/programming-guide
我们简单搭建了一个识别人的流程,机甲大师可以旋转车身找人,找到了就向行人前进。如下所示为程序的调试窗口,执行后可以同时看到摄像头的画面与车身的状态,这样就能快速尝试刚刚编写程序的效果。
在下面的动图中,我们可以看到程序运行的动态过程。这里因为场地有限,我们将向前平移距离设定为了 0 米,如果不为 0,那么机甲大师在检测到人的同时会抬起「炮筒」向人前进。如下所示当检测到人时,机甲大师会抬头。
其实更好的一种方式是先用 Scratch 搭建整个架构,然后再在 Python 开发环境下修改细节。比如说,拉拽的 Scratch 模块只有少数几种条件语句,但是如果在 Python 环境下就能利用 elif 等更合理的语句。
同时,很多 API 的参数也是不太一样的,在 Scratch 环境下,灯光只能配置几种常见的颜色,但是在 Python 环境下,可以通过 RGB 的值来配置灯光颜色。如下是上述程序的 Python 代码,我们可以进一步调整细节。
def start(): vision_ctrl.enable_detection(rm_define.vision_detection_people) robot_ctrl.set_mode(rm_define.robot_mode_chassis_follow) armor_ctrl.set_hit_sensitivity(8) while True: if vision_ctrl.check_condition(rm_define.cond_recognized_people): gimbal_ctrl.rotate_with_degree(rm_define.gimbal_up,44) led_ctrl.set_bottom_led(rm_define.armor_bottom_all, 255, 0, 0, rm_define.effect_breath) led_ctrl.set_top_led(rm_define.armor_top_all, 255, 0, 0, rm_define.effect_marquee) if armor_ctrl.check_condition(rm_define.cond_armor_hit): chassis_ctrl.stop() else: chassis_ctrl.move_with_distance(0,0.3) else: gimbal_ctrl.pitch_ctrl(14) led_ctrl.set_bottom_led(rm_define.armor_bottom_all, 69, 215, 255, rm_define.effect_always_on) led_ctrl.set_top_led(rm_define.armor_top_all, 69, 215, 255, rm_define.effect_always_on) gimbal_ctrl.rotate(rm_define.gimbal_right) gimbal_ctrl.set_rotate_speed(80) time.sleep(0.3)
如上只是简要介绍机甲大师 S1 该怎样编程,我们通过简单的操作就实现一个「智能」的机器人。总体来说,使用已有的高层 API 做个智能机器人就已经非常足够了,我们不能期望能使用更加复杂的底层接口。带小朋友做个炫酷的机甲大师,这也是非常有意思的挑战啊。
相关推荐
- 系统驱动怎么安装(系统驱动的安装)
-
首先进入系统的设备管理器,检查一下是否存在有没有正确安装或者找不到的驱动程序的设备,然后进入硬件生产厂商官网去下载对应的操作系统的驱动程序,进行安装。如果嫌麻烦,可下载第三方软件进行辅助安装。1、如果...
-
- 设置bios密码(银河麒麟怎么设置bios密码)
-
想电脑BIOS开机密码,其实很简单,只要进入BIOS设置界面,然后选择“security”选项卡,在“security”内设置好开机密码即可。下面就跟随小编一起来学习一下具体提设置步骤吧!1、首先开机,然后快速按“F2”或者“F12”进入B...
-
2025-12-27 07:51 off999
- 华硕售后服务中心查询(华硕售后维修服务网点查询)
-
首先查看包装盒、保修卡、机器底部。三个地方的SN码及机器的序列号是不是一致。如果不一致那一定是有问题的。2然后,如果一致,我们可以拨打华硕的客服,通过机器的序列号,查询机器的基本情况,然后与说明书上的...
- 如何更改硬盘分区(硬盘怎么更改分区)
-
要修改磁盘分区,首先需要使用磁盘管理工具,如DiskManagement(Windows)或DiskUtility(Mac)。在工具中,选择要修改的磁盘并右键点击,然后选择“修改分区”选项。接着,...
- 无线路由器当交换机使用(路由器当交换机用无线wifi还可以上网吗)
-
若您想将无线路由器用作交换机,您可以按照以下步骤操作:1.确保您的无线路由器具有交换器功能。不是所有的无线路由器都具备此功能,请先确保您的设备支持。2.将您的无线路由器与网络中的其他设备连接。通常...
- computer(computer lab)
-
"电脑"这个名称实际上是人们对具有计算功能电子设备的俗称。而计算机(Computer)则是这个设备的正式名称,因为"计算"是其核心功能。在英文中,Computer是指可...
- 电脑重置20多个小时了(重置电脑一直12%)
-
重置电脑时间太长了解决办法如下1、将电脑关机然后开机或者直接点击重启,然后按住DELETE键,电脑会自动进入到BIOS;2、电脑屏幕上会显示两个选项,两个选项一般都在电脑屏幕的右方;3、其中一个选项是...
- 电脑虚拟机是什么(电脑虚拟机有啥用)
-
电脑虚拟机(VirtualMachine,VM),也称为虚拟计算机,是一种软件模拟的计算机,它在现有的计算机硬件上创建一个虚拟的计算机环境。这个虚拟环境可以用来运行操作系统、应用程序等软件,就像是在...
- 键盘图片大图(键盘图片大图清晰)
-
这个是仿苹果机上的无线键盘(妙控一代)的,属于山寨产品。1、在手机的微信或者短信或者其他可以打开键盘的应用中打开键盘,点击键盘左上角的输入法设置图标,页面显示输入法的各种设置功能;2、在输入法的设置...
- win11系统可以更新吗(w11系统可以用了吗)
-
可以1.点击“开始”,打开“设置”。2.找到“更新和安全”,选择“预览体验计划”。3.点击“开始”,需要登录微软账户。4.登录完成后弹出一个升级的渠道,选择dev进行下载win11即可。方法二:首...
- winxp安装系统镜像iso下载(xp的镜像系统怎么安装)
-
要安装一个ISO镜像文件,首先需要将ISO文件挂载到计算机上。在Windows系统中,可以右键点击ISO文件,并选择“挂载”选项,然后打开文件资源管理器就能看到ISO文件被挂载的虚拟驱动器。在Linu...
-
- 海尔电脑系统一键还原(海尔电脑怎么重置系统)
-
第一步:安装驱动程序保障计算机内至少有一个呵呵作系统且保证系统完好,如果有多个呵呵作系统,在呵呵作系统完好的情况下需要在各呵呵作系统内安装驱动程序,如果呵呵作系统为Windows98/ME,则需要安装haier98.exe;如果呵呵作系统为...
-
2025-12-27 01:51 off999
- 拼多多下载安装(拼多多下载安装免费2025版本)
-
一般有人问你有没有拼多多,都是想请你帮忙拼多多平台活动助力。 ...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
系统u盘安装(win11系统u盘安装)
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
