使用适用于 Raspberry Pi Pico 的 Kitronik 迷你控制器控制您的 XRP 机器人

描述

作者:Travis Foss

一个反复提出的有趣问题是控制 XRP 的不同方法是什么。我碰巧发现了适用于 Raspberry Pi Pico 的 Kitronik 迷你控制器,Kitronik 有一篇关于将此控制器与他们的 Pico 自主机器人平台一起使用的精彩文章,该平台也是一个基于 Raspberry Pi Pico 的机器人。我认为由于这两个平台相似,因此使用 XRP 会更容易过渡。

我开始深入研究他们的 GitHub 存储库[KitronikLtd/Kitronik-Pico-Mini-Controller-MicroPython (github.com)] ,我在 GitHub 页面的自述文件部分注意到的第一件事是控制器和机器人都需要一份KitronikPicoWBluetooth.py 来自此页面[,Kitronik-Pico-W-Bluetooth-MicroPython/KitronikPicoWBluetooth.py 位于 main · Kitronik Ltd/Kitronik-Pico-W-Bluetooth-MicroPython (github.com)] 。我将此文件的副本下载到我的计算机上以供将来使用。

浏览 Pico Controller.py 后,我发现该文件无需更改即可与 XRP 配合使用。由于控制器上需要 Kitronik 蓝牙和 Pico 控制器文件,因此我将 Kitronik_Pico_W_Bluetooth 和 Pico 控制器文件安装到我要在控制器中使用的 Pico W 上

接下来,我开始深入研究机器人的代码。在 Pico ARP.py 文件的顶部,我注意到他们导入了 PicoAutonomousRobotics 文件。因此,我决定深入研究该文件,该文件位于此处,[Kitronik-Pico-Autonomous-Robotics-Platform-MicroPython/PicoAutonomousRobotics.py at main · KitronikLtd/Kitronik-Pico-Autonomous-Robotics-Platform-MicroPython (github .com)] 。在查看此文件时,我注意到他们正在使用的许多功能已经在 XRP 上设置的库中调用。这让我很好奇是否可以在不使用这个库的情况下让 XRP 工作。然后我再次研究 Pico ARP.py 文件。我知道我将尝试在不使用前面提到的库的情况下运行 XRP,因此我首先注释掉它调用该库及其使用的函数的行。我首先删除了设置越野车的开始部分。

Pico

然后我查看了下一部分,其中 LED 灯亮起以显示机器人已开启。知道它使用了我不会使用的库,然后我决定编写一个名为 test_leds 的新函数。然后立即调用该函数,以便机器人准备好后 LED 就会闪烁。目前,代码设置为在关闭前闪烁 3 次,但是,通过更改代码中第 20 行括号中的数字,可以轻松将其更改为闪烁更多次。

Pico

代码中的下一系列行定义了与控制器连接相关的函数,因此我将这些行保持原样,而不进行任何更改。

Pico

然后代码调用将 LED 设置为绿色,以表明机器人已准备好进行控制。我决定对此代码发表评论,因为我认为此时不需要它。Pico

代码的下一部分控制机器人的运动。在这一部分,我意识到我可以使用 XRP 库控制机器人。

我决定让其中一个按钮起作用来测试代码更改。我从第 74 行开始,该行指出如果按下控制器上的向上按钮,就会导致机器人向前移动。我决定尝试使用我根据 XRP 上的原始驱动器示例设置的命令,而不是使用 Kitronik 示例中使用的 buggy.motorOn 命令。我将文件命名为 Driving_for_controller,并设置了几个不同的函数:drive_straight、drive_backwards、point_turn_left 和 point_turn_right。这些功能的设置方式与机器人的设置方式类似,机器人会施加一定的力并移动一小段时间,在本例中为 1/2 秒。

Pico

我还必须在代码开头调用库才能使其正常工作。我在顶部添加了这些行。添加后,我在代码的前部部分输入了 Drive Straight 命令。Pico

在 XRP 上进行测试后,它确实有效,但是,机器人会结结巴巴,因为这会导致机器人向前行驶,然后在继续执行下一个前进命令之前停止。这不是我希望机器人执行的方式。因此,我开始思考想法,并想为什么不按下按钮来设置电机的力度级别,直到释放按钮?为了实现这一点,我将代码更改为按下按钮时的drivetrain.set_effort命令。

Pico

然后我转到 else 语句,当按钮被释放时,并将左右轮的作用力设置为 0。检查之间的睡眠时间已经设置,所以我想我会像示例中那样尝试一下。

Pico

令我惊讶的是,这段代码运行得非常好。它运行得非常好,我决定保持原样,然后继续设置其他方向按钮。您会注意到,在第 76、80、84 和 88 行,我注释掉了我在代码中设置的先前驱动方法,并注释了我调用控制器库驱动的行。

Pico

最后,我留下了 A 和 B 按钮,没有为它们添加任何代码,除了添加的打印语句以便我可以确认这些按钮是否正常工作。

Pico

根据我正在从事的项目,我可以设置这些按钮来完成特定任务,但是为了测试,我不确定我会使用什么,所以我只是给它们留下了打印语句。在稍后考虑这一点时,我可以使用它们将力度设置为一半或使用它们来控制伺服器拾取物体,但是,在编写本指南之前我从未深入研究过这一点。这可能是未来项目的一部分。

现在编码部分已在 XRP 上完成,最后一步是对其进行测试。首先,我将为控制器编程的 Pico W 插入控制器。接下来,我打开 XRP,一旦板载 Pico 上的灯开始闪烁,我就打开控制器。使用此代码,如果控制器和 XRP 之间的配对绑定成功,控制器上 Pico 上的 LED 将亮起并保持亮起状态。如果由于某种原因第一次没有发生这种情况,它似乎有助于重新启动控制器,然后它似乎会立即绑定。一旦控制器上的灯亮起,程序就应该启动并运行。将 XRP 放在有空间行驶的表面上并尝试一下。我在页面底部链接了完整的代码供您参考。

该控制器的一个奇妙之处在于,它具有通过模拟输入引脚添加操纵杆的引脚分配,以及带有其他断开的 IO 的额外按钮。我计划在未来的项目中尝试使用额外的按钮,但是目前还不需要。如果您想查看这方面的教程,请告诉我们,我可以将其放在一起。

以下是 XRP 的完整代码:

复制代码

从蓝牙导入BLE
从时间导入sleep_ms
#from PicoAutonomousRobotics ‎导入 KitronikPicoRobotBuggy
从KitronikPicoWBluetooth导入‎BLEPeripheral
#from Driving_for_controller import * from XRPLib.defaults import *
 ‎ 导入时间

#设置 Pico 自主机器人 ‎平台越野车#buggy = KitronikPicoRobotBuggy() 
‎ ‎ #将越野车速度设置为 50% 
‎ ‎ #speed = 50

#将 LED 设置为红色以显示其已打开#for i in range(4): 
‎ ‎ # buggy.setLED(i, (100, 0, 0)) 
‎ ‎ # buggy.show()

def  test_leds () :
board.led_blink( 3 )
时间.睡眠( 1 )
‎board.led_off()‎
‎ ‎
test_leds()‎

#设置蓝牙外设
外设 = BLEPeripheral(BLE())‎

#等待连接...

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分