首页 > 最新资讯 > 为了孩子的健康成长,他用 NVIDIA Jetson 做了一个象棋机器人
为了孩子的健康成长,他用 NVIDIA Jetson 做了一个象棋机器人

为了孩子的健康成长,他用 NVIDIA Jetson 做了一个象棋机器人

2023-03-30 15:23

#人工智能 #深度学习


文科生是否也可以成为人工智能领域里的创客?答案是肯定的!

素为是一名在司法系统里工作的法律工作者,本科就读于法律专业。同时,他还是一名计算机爱好者,作为智能硬件的创客,平时他喜欢用电子硬件做一些有趣的项目。

 

 

几年前,Alpha Go 对战围棋大师李世石的画面令世界赞美人工智能的发展速度,但是素为却觉得“这还不够酷”!Alpha Go 是通过它的研发者黄士杰来执棋的,直播画面看起来还是两个人在对弈,怎么能说是人机大战呢?

“加个机械臂执棋,很难吗?”从那时起,素为就决定要做一个真正的象棋机器人,还向朋友夸下了海口。为了让正在一天天长大的孩子少看电子屏幕,通过下象棋锻炼思维能力,素为觉得必须加快制作出真正的象棋机器人。

硬件的选择和系统框架的搭建

之前素为准备用 PC 电脑来实现这个想法,后来发现 NVIDIA Jetson Nano 开发套件可为全桌面 Linux 给予开箱即用支持,并且与许多常见的外部设备和配件兼容,相关的开发教程也很丰富。

“这个小小的板子功耗不高,而且树莓派能做的它基本都能实现,关键是还具备 AI 功能,这可以满足我的需要,”素为表示。

很快,素为就规划出了一个系统框架:

 

素为的目标就是要做一款名副其实的“人机对战”中国象棋机器人。在制作过程中,他以 Jetson Nano 为中控主机,利用其边缘计算能力,无需联网即可实现对棋盘的视觉识别和棋步策略计算,再运用一部 XYZ 三轴滑台加气泵吸盘即可挪动棋子,实现真正的“人机对战”。

使用这个系统进行人机对弈的流程如下:

人类下一步棋;

人类点击 GPIO 按钮,Jetson Nano 启动指令;

棋盘上方的摄像头对着棋盘拍摄 1 张照片;

运用 OpenCV 对照片进行四角对齐、裁切边缘等处理;

将棋盘部分裁切为 9×10 个小图片;

运用事先训练好的图片分类模型在 Jetson Nano 上进行推理,该模型可分辨 15 种情况(7 种红方棋子、7 种黑方棋子、无棋子);

将识别结果拼接为棋盘状态,以 FEN 规范格式进行表达;

将 FEN 文本传递给开源中国象棋引擎 elephantfish,在 Nano 上进行计算,获取机器决定走的下一步棋;

生成并执行 gcode 指令控制滑台模组和气泵,将某个棋子在棋盘上挪动;

机器执行完毕,进入等候状态,等待人类发出下一步棋及按钮指令

从以上流程中,我们可以看到 Nano 作为主控机,除了指挥全过程运转,在第 4 至第 8 步骤为图片预处理、棋盘识别和计算下棋策略均提供了必不可少的算力。

图1:步骤4(a)

 

图2:步骤4(b)

 

 

克服深度学习的挑战

作为一名专业学习法律的文科生,素为表示对深度学习其实是一知半解的,“就是能够把开源代码 debug 跑起来那种水平。”为了把象棋机器人做出来,素为在 Jetson Nano 上先后用 TensorFlow 尝试了 VGG、ResNet 和 Inception。

“要么调参数总是调不好,要么准确度不高,”素为说,“曾经一度很沮丧。”

然而,功夫不负有心人,一个偶然的机会,素为看到 NVIDIA 与百度合作的 EasyDL 平台,在该平台上,可以零代码训练,并将模型一键部署在 NVIDIA Jetson 设备上。于是素为手工准备和标注了 4000 张训练素材图片,这些图片有的清晰,有的模糊,有的用光照亮、有的故意制造阴影,还有不同的旋转角度。之后在此基础上,对素材图片进行批量加噪点处理,一共生成了 5 万张图片数据用于深度学习训练。经过 EasyDL 的训练,生成了“图像分类”模型(因为运用场景有限可控,因此该模型不怕过拟合,准确率 100%),之后一键部署在 Jetson Nano 上,再配合素为写的主代码(https://gitee.com/lawup/chess-robot.git),象棋机器人终于运转起来了!

 

成为 Jetson 百万开发者一员

开心地看着自己的孩子和老父亲与机器鏖战几盘,欢声笑语无疑是这一路艰辛的最好补偿!

2022 年年底,素为带着这个项目,参加了 NVIDIA 举办的 Jetson Edge AI 开发者大赛,荣获特别奖。

 
 

很高兴能成为 NVIDIA Jetson 百万开发者的一员。最关键的是,我是用 NVIDIA Jetson Nano 套件做出来的,而且充分发挥了 Nano 的性能和效用。不得不说,人生就是这么神奇,虽然我一度都绝望了,但自己夸下的海口就自己去实现!”素为谈到这个项目,依旧一脸自豪。

素为用自己的开发经历对广大 NVIDIA Jetson 开发者提出建议:“定下了目标就一定要去实现。因为是嵌入式环境,很多东西需要编译,这是一个比较漫长的过程,一定要有耐心。在经历反复的尝试和漫长的等待后,终于成功的那一刻就会有一种‘山穷水尽疑无路,柳暗花明又一村’的欣喜感,让你觉得’人间值得’  。”

 

相关新闻