对于青少年来说,操控自己的机器人打擂台是非常有成就感的活动。如今,索尼toio™就能让他们梦想成真。我们可以在布置好的场地中使用键盘或操作杆操控两个Q宝机器人互相攻击,先被挤出场地的一方判负。下面我会分享如何使用toio™机器人来实现一场精彩刺激的机器人擂台赛。

toio™机器人擂台赛准备:

在准备阶段,我们需要准备两个toio™Q宝机器人、一台PC以及一个自制的擂台;在软件方面,由于我们将使用Python语言进行控制,因此需要安装相关的软件包,包括setuptools、toio、bleak、ipykernel和asyncio等。

toio™机器人擂台赛实现:

使用toio™Q宝进行机器人擂台赛的关键在于如何通过编程控制它的运动。Q宝的编程控制有两种方式:一种是在索尼toio™的官方网站上进行可视化编程,另外就是我们可以选择自己熟悉的开发语言,并利用官方为我们提供的代码库来进行自主编程(我们选择使用Python语言)。下面会对两种控制方式都进行简单的介绍。

可视化编程控制Q宝

可视化编程网站是索尼toio™的官方所提供的,网站地址为:https://toio.github.io/toio-visual-programming/c/

进入该网站,我们可以在这个位置来对我们的Q宝进行蓝牙连接,连接成功就会显示绿色的对号提示。

然后我们就可以进行可视化编程啦,通过从左边拖拽相关组件,最后形成我们的程序,当然,要想控制Q宝的前进,后退移动以及左右旋转,官网也已经为我们提供好了现成的示例代码(https://www.sonystyle.com.cn/minisite/intelligent/toio/visual_programming/vp3/keyboard_controller.sb3),下载完成后,我们只需要选择“文件”选项进行导入就可以啦。下面的这块代码就是用来控制Q宝的移动的:

通过以上程序,我们就可以使用我们键盘的上下左右键对Q宝的前进,后退,左旋,右旋进行随心所欲的控制,我们还可以对宝的速度的进行设置,另外,还可以将Q宝的行动轨迹在画布上进行绘制。

Python编程控制Q宝

以下是我们使用Python语言对Q宝进行编码控制的步骤,包括下载相关软件包,连接Q宝与电脑,以及编写代码来控制Q宝的移动。

1.下载相关软件包

首先我们要确保我们的电脑安装了Python3.11或更高版本(https://www.python.org/),然后就可以安装相关的软件包了,安装命令如下:

# 安装setuptools软件包python -m pip install setuptools --upgrade# 安装toio.py软件包python -m pip install toio-py --upgrade# 安装bleak软件包python -m pip install bleak --upgrade# 安装ipykernel软件包python -m pip install ipykernel --upgrade# 安装toio包python -m pip install toio-py --upgrade

2.将toio™核心Q宝连接到电脑

在编写代码之前,需要将toio™核心Q宝连接到电脑,可以使用USB线或蓝牙来实现连接,需要扫描并连接到方块设备,可以通过以下代码实现:

import asynciofrom toio import *# 定义一个异步函数来连接toio™ Q宝async def cube_connect():device_list = await BLEScanner.scan(1)assert len(device_list) > 0cube = ToioCoreCube(device_list[0].interface)await cube.connect()return cube# 定义一个异步函数来断开toio™ Q宝的连接async def cube_disconnect(cube):await cube.disconnect()await asyncio.sleep(2)

asyncio和toio模块提供了异步编程和与方块通信的功能,我们定义一个cube_connect函数,用来扫描并连接到方块设备,返回一个cube对象,另外定义一个cube_disconnect函数,用来断开与方块的连接,并等待2秒。

3.用Python代码控制Q宝的移动

要使用索尼toio™进行机器人擂台赛,最好的方式就是使用键盘来对Q包的移动进行控制,以下是使用Python代码控制Q宝移动的核心代码,包括控制Q宝的前进、后退、左转和右转。

# 导入所需的库import asyncioimport keyboardimport timefrom toio import ( BLEScanner,Motor,ToioCoreCube,)# 定义一个异步函数来连接toio™ Q宝async def cube_connect():# 扫描并连接最近的toio™ Q宝device_list = await BLEScanner.scan(1)assert len(device_list) > 0cube = ToioCoreCube(device_list[0].interface)await cube.connect()return cube# 定义一个异步函数来断开toio™ Q宝的连接async def cube_disconnect(cube):await cube.disconnect()await asyncio.sleep(2)# 连接toio™ Q宝cube = await cube_connect()# 定义键盘监听事件# 上键往前移动,参数分别为左电机速度、右电机速度和持续时间keyboard.on_press_key("up", lambda _: cube.api.motor.motor_control(100, 100, 1000))# 下键往后移动,参数分别为左电机速度、右电机速度和持续时间keyboard.on_press_key("down", lambda _: cube.api.motor.motor_control(-100, -100, 1000))# 左键逆时针旋转,参数分别为左电机速度、右电机速度和持续时间keyboard.on_press_key("left", lambda _: cube.api.motor.motor_control(-100, 100, 1000))# 右键顺时针旋转,参数分别为左电机速度、右电机速度和持续时间keyboard.on_press_key("right", lambda _: cube.api.motor.motor_control(100, -100, 1000))# 使程序持续运行,以便持续监听键盘输入while True:time.sleep(1)

一切准备就绪,运行Python代码,就可以观察到toio™核心Q宝做出的相应反应和表现啦:

Q宝机器人擂台赛

我们也可以为机器人制作个性化的装扮:

再开始擂台赛,体验就更好了:

Q宝机器人擂台赛

利用场地变化,我们也可以开发更多的擂台赛规则。例如,我们可以操控机器人在圆形的跑道上赛跑,比赛过程中机器人超出跑道范围者判负,先到达终点胜利;我们也可以操控机器人将小玩具从擂台的一个位置推到另一个位置,过程中机器人和己方的小玩具都不能被对方挤出擂台;我们还可以将这些玩法组合起来,通过多局对决来比出最终的胜负。总之,基于简单的擂台赛机制,小孩子可以使用Q宝机器人开发出很多玩法,增添更多乐趣。