购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2 Python和JupyterLab入门

JupyterLab是Python社区中非常广泛的工具,因为它可以让你编写程序,就好像在上课时正在解决数学问题一样。也就是说,先写标题,然后写问题说明和初始数据。声明之后,写要执行的操作的一段解释,然后在 代码单元 中编写执行该操作的Python代码。对于每个操作,重复相同的步骤:

1)人类可读的段落解释下一个操作,格式为大家都知道的markdown 语法 (https://commonmark.org/help/)。

2)一个代码单元,其中包含执行操作的Python代码行。

3)对执行单个操作的每个代码段重复步骤1和2。最后将提供解决问题的方法。

这是一个读取GoPiGo3距离传感器的通俗易懂的示例,见图2-1。

026-01

图 2-1

接下来,解释如何为GoPiGo3启动JupyterLab。

2.2.1 为GoPiGo3启动JupyterLab

在DexterOS中,有两小节说明了Jupyter笔记本和使用Python控制机器人的方法:

1)可以通过导航到网址http://mygopigo.com或http://10.10.10.10访问它们,然后单击LEARN,然后单击Lessons in Python,见图2-2。

027-01

图 2-2

然后启动JupyterLab环境,在窗口的左侧,将看到两个文件:

2)现在,尝试 1_Moving_Around.ipynb 。如下命令使机器人前进10 cm:

027-02

3)如果以in(1 in=0.0254 m)为单位,请使用以下命令:

027-03

4)如果在同一个代码单元中执行这两个命令,则在执行第二个命令之前,会注意到一个小的间隙:

027-04

现在,用机器人进行物理测试:

1)在起点处的地板上标记一个标志,向前行驶10 cm,向后行驶10 cm,并找出运动的精度:

027-05

应该发现它完全返回到起点。用千分尺测量的误差(三次)为+1.29 mm、-0.76 mm和+2.16 mm。正值意味着它在驶回时经过起点,而负值意味着它没有到达起点。

2)如果将一个距离(10 cm+10 in=35.4 cm)添加到一个向前命令中,然后再执行另一个命令以向后移动相同的距离,则我们测得的误差为(再次做了三次)-0.01 mm、-1.40 mm和-0.72 mm:

028-01

可以看到由两个命令间隙引起的暂停会引入大约1 mm的误差。仅将一个命令用于向前,将一个命令用于向后,可大大减少误差。

3)可以对车体转向执行类似的测试:

028-02

4)其他有用的命令如下:

028-03

5)要停止机器人,使用以下命令:

028-04

6)请务必注意,软件流程可能与机器人物理不兼容。

尝试以下顺序,观察GoPiGo3的运动效果:

028-05

似乎只执行了最后一行,即 my_gopigo.left() 。实际上发生的是,命令执行得如此之快(每个命令几毫秒),以至于机器人的惯性没有足够的时间让GoPiGo向前、向后或向右移动。删除最后一行再次进行检查:现在看到的唯一实际执行的命令是 my_gopigo.right()

009-04 对机器人进行编程时,最具挑战性的问题之一就是了解其动态性能,因为看似软件错误的某件事可能是机器人物理行为的意外响应所导致的。因此,在开发软件之前,必须确保了解问题的物理原理,包括其质量(惯性)、摩擦力、电动机的最大负载、电源限制和电池电量。来自物理世界的变量列表可能是无穷无尽的,应该运用自己的机械和电气知识尽可能使功能软件开发成功。

这种简单问题最可能的解决方案是按顺序指定要移动的距离或角度:

029-03

将工作保存在DexterOS中,必须在 ~/.lessons_python 文件夹中进行。这是 pi:users 拥有权限的,而DexterOS的用户是 jupyter (在终端中输入 $ whoami 命令,或仅在提示符下看到它)。转到文件树的上一层,并在其中创建一个想要的文件夹名称。然后使用File | Save Notebook As....将更改保存在该位置。

2.2.2 硬件测试

访问这些在LEARN环境以外的DexterOS中的笔记本,导航到http://mygopigo.com或http://10.10.10.10,并点击Code on Python按钮。JupyterLab启动如图2-3所示。

029-01

图 2-3

在屏幕左侧的文件管理器视图中,将找到以下两个笔记本:

029-02

图 2-4

测试电池、LED和电动机/编码器

打开笔记本,浏览每个单元大致了解其功能。

(1)电池电量

以下命令读取并显示当前电池电压。GoPiGo3的电压应大于9 V。当电池充电不足时,将失去与机器人的Wi-Fi连接,必须为电池充电或更换新电池:

030-01

接下来,看一下硬件信息和电压水平。

(2)硬件信息和当前电压水平

下一个命令模块将显示制造商、硬件和固件版本以及电池电量的信息。以下与输出有关:

030-02

接下来,我们将检查LED和指示灯。

(3)LED和闪烁

板子顶部有两个LED,它们可以仿真GoPiGo3的眼睛。通过运行以下代码,更改其颜色:

030-03

信号灯是前面红色板下方的两个红色小LED。以下代码使它们闪烁5次:

031-01

目测检查即可,并注意控制台中有没有消息提示。

(4)电动机和编码器测试

以下单元模块将运行约5秒钟,并将报告编码器读数:

031-02

结果如下所示:

031-03

最后将看到一条消息,它告诉我们测试是否通过。此刻,不必担心数字的含义:它是一种内部测试,GoPiGo3进行自我检查并报告其通过还是未通过。

如果成功,则可以进行以下测试。GoPiGo3将向前行驶10 cm,最后的输出值应约为10。如果此测试失败,则可以通过单击顶部的红色Stop按钮来停止机器人:

032-01

如果一切顺利,将获得以下消息:

032-02

同样,如果测试失败,则可以通过按下顶部的红色Stop按钮停止机器人。在完成这些基本测试之后,我们对GoPiGo3的硬件和软件有了足够的了解,可以执行组件测试,这是本章的主要目标。 zC5xckc38cHzzRA1O2ReJFA7tvi1AQbzCOeFU35UqbjnuO3+aK0ey2CmCOpleQaj

点击中间区域
呼出菜单
上一章
目录
下一章
×