Jetbot基础教程-用键盘与摇杆控制行动

如果已经将 Jetbot 智能小车组装好的话,现在就可以开始执行 Jetbot 智能小车实验,接下来的操作都在以下环境中执行:

1. 无线的方式连接 Jetbot 与 PC:

关于这部分的设置,请参考“无线WIFI的安装与调试”文章,有详细的说明。

我们采用如下图的“Jetbot 热点”方式连接,就是将 Jetbot 无线网卡设置为“热点”模式,将 PC 的 WIFI 连上 Jetbot 设置的热点,如此 Jetbot 的 IP 固定为 “10.42.0.1”,操作起来方便。


Jetbot基础教程-用键盘与摇杆控制行动 

2. 所有实验的界面都在 PC 上的浏览器操作:确定好连线之后,在 PC 的浏览器(推荐使用 Google Chrome)输入“ https://10.42.0.1:8888 ” 就可以进入,第一次连上去需要输入 “jetbot” 这个预设的密码,只要第一次选择保存密码,以后进入就不需要再输入密码。

3. 关于 Jupyter 的使用技巧请自行在网上学习,这里只对 Jetbot 各个项目的代码进行探索与调试建议。

4. 所有实验都需要为 Jetbot 提供足够的运动空间:最好直接在空旷而且平坦的地面上运行,避免在桌子之类与地面有高度落差的地方,以及凹凸不平、阻力较大(例如地毯)、泥沙淤积的地面上,以免对 Jetbot 造成伤害。

5. 最后提醒一点,Jetbot 的重点是在于“学习”而非“竞技”,因此避免将电机马达转速调到太快,如果感觉车速太快时,请自行将实验代码里的速度调低。

现在就开始两个基础的 Jetbot “手动”运行实验,这两个实验最重要的目的是让大家熟悉代码的运作。第一个实验是以键盘的“上下左右”去控制 Jetbot 的行进,第二个实验是使用游戏用的摇杆设备来进行控制,前提是您得采购一个最简单的摇杆设备,我们测试了几种包括有线以及无线的摇杆设备,都能正确使用。

现在就开始 Jetbot 的基础项目,请自行登陆 Jupyter 并进入 jetbot/notebooks 目录下,总共有 5 个实验目录。


  • 基本动作(Basci Motion)


在 Jupyter 进入 basic_motion 目录,里面有 basic_motion.ipynb 这个实验内容,点选后就能打开,这里的代码主要分为四大段:

1. 基本操作:

这部分的代码非常直观,并且有很详尽的英文解说,最主要是让大家了解如何导入关于电机控制的模块,并且创建 robot 对象来控制 Jetbot 的行进:

from jetbot import Robotrobot = Robot()

我们只要分别对 robot 对象的左右轮设定速度,就能实现让 Jetbot 移动的任务。这里“设定速度”的方法,是以“全速”为基准给定[-1, +1]之间的相对值,但给定“负值”表示“反向”旋转,这是不建议的做法。

下面有三种设置左右轮的方法,如下:

(1) 用 robot.left (速度)与 robot.right (速度)分别设置左右轮速度:

robot.left(speed=0.3)robot.stop()import timerobot.left(0.3)time.sleep(0.5)robot.stop()

(2) 用 robot.set_motor (左轮速, 右轮速) 同时设置左右轮速度:

robot.set_motors(0.3, 0.6)time.sleep(1.0)robot.stop()

(3) 对 robot.left_motor.value 与 robot.right_motor.value 这两个变量进行设置:

robot.left_motor.value = 0.3robot.right_motor.value = 0.6time.sleep(1.0)robot.left_motor.value = 0.0robot.right_motor.value = 0.0

上面的这些数值您可以在要求的范围内自由设置,最好能试着将两个值调成一样,并且让延续时间稍微长一点,例如 3~5 秒,可以先检查一下左右轮的转速是否一致!

2. 使用 traitlets 库将 robot 左右轮与小部件进行连接:

在“Jetbot 实战系列 04:CSI 摄像头安装与测试”里已经使用过 traitlets 这个非常强大的库,将摄像头捕获的画面与 widgets.image 小部件连接,再透过 display(image) 显示动态的图像。

这里也用相同的方法,创建两个“滑块(slider)”小部件与 robot 左右轮的数值进行捆绑,可以单向地在两个滑块上显示轮的速度值,还可以进一步透过两个滑块去控制个别轮的速度。下面是这个用途的执行步骤:

(1) 创建两个垂直滑块小部件,再用一个水平框部件将两个滑块放在一起:

import ipywidgets.widgets as widgetsfrom IPython.display import display
# 创建”left”与”right”两个垂直滑块小部件,数值范围在 [-1.0, 1.0] 之间left_slider = widgets.FloatSlider(description= 'left', min=-1.0, max=1.0, step=0.01, orientation='vertical')right_slider= widgets.FloatSlider(description='right', min=-1.0, max=1.0, step=0.01, orientation='vertical')
# 创建一个水平框,放置前面生成的两个垂直滑块slider_container = widgets.HBox([left_slider, right_slider])
# 在下面这个滑块容器display(slider_container)

(2) 单向显示:使用 traitlets.link 函数将左右滑块的值分别与左右轮的值进行连接,这样就能看到两个滑块的值会跟着两个轮的值而改变。

import traitletsleft_link = traitlets.link((left_slider,  'value'), (robot.left_motor,  'value'))right_link=traitlets.link((right_slider, 'value'),(robot.right_motor, 'value'))robot.forward(0.3)time.sleep(1.0)robot.stop()left_link.unlink()right_link.unlink()

(3) 双向控制:使用 traitlets.dlink 函数将左右滑块的值分别与左右轮的值进行连接,这时候可以试试看调整两个滑块的值(上下拖),就能改变两个轮的转速。

left_link = traitlets.dlink((robot.left_motor, 'value'), (left_slider, 'value'))right_link = traitlets.dlink((robot.right_motor, 'value'), (right_slider, 'value'))

3. 将控制函数附加到事件:

使用 traitlets 的另一种方法是将函数(如 forward)附加到事件。每当对象发生更改时,这些函数都会被调用,并且会被传递一些有关该更改的信息,如旧值和新值。让我们创建并显示一些用于控制 机器人 的按钮。

(1)创建并显示 4 个方向按钮与中间的“停止”按钮:

# 创建5个按钮stop_button = widgets.Button(省略)forward_button = widgets.Button(省略)backward_button = widgets.Button(省略)left_button = widgets.Button(省略)right_button = widgets.Button(省略)# 显示按钮middle_box = widgets.HBox([left_button, stop_button, right_button], layout=widgets.Layout(align_self='center'))controls_box = widgets.VBox([forward_button, middle_box, backward_button])display(controls_box)

(2) 定义 5 个方向的动作指令:

def stop(change):def step_forward(change):def step_backward(change):def step_left(change):defstep_right(change):

在这里可以看到 robot 对象还提供 stop/forword/backword/left/right 等五个预定义的动作,可以直接使用。这里的 left 与 right 所定义的方式是“原地旋转”的动作,如果要让小车往“左前方”或“右前方”行进的话,则需要自行对左右轮设置不同速度比的方式来处理。

(3) 将按钮与动作定义进行捆绑:

# 捆绑方式:按钮.on_click(动作)stop_button.on_click(stop)forward_button.on_click(step_forward)backward_button.on_click(step_backward)left_button.on_click(step_left)right_button.on_click(step_right)

完成这个捆绑的步骤之后,按下按钮才会向 Jetbot 发送控制指令,现在试试看能不能用这个方向键来控制 Jetbot 小车!

4. 心跳停止开关:

这是个预防 Jetbot 与 PC 直接因为距离过远而失去控制能力状况下,提供的一种安全管理措施,这部分的内容请自行测试即可,没什么难度,这里不做说明。

以上就完成这个智能小车的最基本运动功能,大家可以多尝试调整转速、方向、持续时间等参数,感受一下这个基本运动的处理方式。


  • 摇杆操作(Teleoperation)


项目代码在 notebooks/teleoperation 目录的 teleoperation.ipynb,在 Jupyter 里打开这个文件就能执行。这是在 PC 控制机上,用游戏摇杆(gamepad)来控制 Jetbot 小车的左右轮,基本逻辑与上面的“滑块控制轮速”的原理是一致的,只不过将设备从鼠标变成摇杆而已。

我们将手边的四种游戏摇杆(如下图)都做过测试,不过有线无线、单价高低的都能使用,如果手上没有这类摇杆的,可以简单选个 30 元左右的也可以执行这些测试,并且以后做些这类相关的应用。


Jetbot基础教程-用键盘与摇杆控制行动 

将摇杆接上 PC 之后,如果是 Linux 操作系统请执行以下指令,检查是否已经安装:

ls /dev/input/js*

至于 Windows 或 MacOS 请自行在设备列表中检查。

如果确认设备已将连上控制 PC 之后,就可以开始执行 teleoperation.ipynb 这个项目,不过有个对初学者很重要的地方,却放在不起眼的注释里面,在这里我们特别将它提出来,在执行项目之前必须先点进去注释里的“1.Visit  http://html5gamepad.com .”,点进这个连接之后,就能确认您手上的这个摇杆是否能够正常工作。


Jetbot基础教程-用键盘与摇杆控制行动 

最左上角的 “INDEX” 编号就是接下来代码中 “widgets.Controller(index=N)” 的实际编号,当然在前面 “ls /dev/input/js*” 所显示的编号,也能作为这个编号的依据,不过在这个网页上可以动一动游戏摇杆上的两个控制杆与其他按钮,看看在 B0~B16 以及 AXIS0~AXIS3 这些钮上面是不是有对应的回馈?

执行第一步骤之后,如果出现以下画面,就表示驱动的加载也都正确。


Jetbot基础教程-用键盘与摇杆控制行动 

这个实验只要把游戏摇杆设备的部分捋顺了,后面的实验步骤就非常直观,包括将摄像头“拍照”功能与游戏摇杆的某个键进行绑定的部分,在执行步骤都有非常详细说明,大家只要顺着去执行并且阅读说明,就能轻松完成整个任务。
- 本文内容来自网络,如有侵权,请联系本站处理。

2022-04   阅读(13)   评论(0)
 标签: 人工智能

涨知识
寄存器

寄存器的功能是存储二进制代码,它是由具有存储功能的触发器组合起来构成的。一个触发器可以存储1位二进制代码,故存放n位二进制代码的寄存器,需用n个触发器来构成。

评论:
相关文章
用树莓派4b构建深度学习应用(5) Tersorflow篇

这篇我们建立一下 tensorflow 和 keras 的开发环境。



K210 上手(避坑)指南

这篇文档以 SIPEED MaixDuino 的使用为示例说明,并且大部分内容通用于 K210 系列开发板,可供购入 K210 系列顾客参考使用。


艾伦·图灵 –人工智能之父

Sometimes it is the people who no one imagines anything of who do the things that no one can imagine.


Jetbot基础教程-图像分类法实现找路功能

跟着指定路线去前进,才是真正进入有实用价值的应用。


《中小学生成式人工智能使用指南(2025年版)》全文发布 | 附解读!

近日,教育部基础教育教学指导委员会发布《中小学生成式人工智能使用指南(2025年版)》。


一项新研究显示:ChatGPT 正在削弱我们的脑力

麻省理工最新发布的一项开创性研究表明,过度依赖像 ChatGPT 这样的工具,会导致认知功能大幅下降。


Sora冲击下的中国教育优势荡然无存?脑科学研究:不想和AI抢工作,就要让大脑赢在起跑线

2024年2月16日,OpenAI公司发布了首个文本生成视频的模型Sora。


Jetbot基础教程-I2C总线与PiOLED

深入地了解一下 I2C 引脚与开发库的使用,以及调整 PiOLED 显示内容的方法。


用树莓派4b构建深度学习应用(8) Openvino篇

这一篇我们介绍一下在树莓派上部署 OpenVINO 神经棒,进一步提升AI的推理速度。