0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用键盘与摇杆控制Jetbot智能小车行动

NVIDIA英伟达企业解决方案 来源:NVIDIA英伟达企业解决方案 作者:NVIDIA英伟达企业解 2022-01-21 10:09 次阅读

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

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

关于这部分的设置,请参考“NVIDIA Jetson Nano 2GB 系列文章(42):无线WIFI的安装与调试”文章,有详细的说明。

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

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 的行进:

fromjetbotimportRobotrobot = 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) 创建两个垂直滑块小部件,再用一个水平框部件将两个滑块放在一起:

importipywidgets.widgetsaswidgetsfrom 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 函数将左右滑块的值分别与左右轮的值进行连接,这样就能看到两个滑块的值会跟着两个轮的值而改变。

importtraitletsleft_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 个方向的动作指令:

defstop(change):defstep_forward(change):defstep_backward(change):defstep_left(change):def step_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 元左右的也可以执行这些测试,并且以后做些这类相关的应用。

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

ls /dev/input/js*

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

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

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

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

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

原文标题:NVIDIA Jetson Nano 2GB 系列文章(48):用键盘与摇杆控制行动

文章出处:【微信公众号:NVIDIA英伟达企业解决方案】欢迎添加关注!文章转载请注明出处。
审核编辑:汤梓红


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

    关注

    14

    文章

    4588

    浏览量

    101694
  • 键盘
    +关注

    关注

    4

    文章

    843

    浏览量

    38997
  • 控制
    +关注

    关注

    4

    文章

    997

    浏览量

    122138

原文标题:NVIDIA Jetson Nano 2GB 系列文章(48):用键盘与摇杆控制行动

文章出处:【微信号:NVIDIA-Enterprise,微信公众号:NVIDIA英伟达企业解决方案】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    [下载]4功能智能小车设计论文(电路+程序+论文)

    的工作模式不同也可控制小车顺着S形铁片行驶;采用霍尔元件A44E检测小车行驶速度;采用1602LCD实时显示小车行驶的时间,小车停止行驶后,
    发表于 08-07 13:03

    简单解码PS2键盘

    简单的解码PS2键盘的W/A/S/D四个按键,用来控制H桥,从而控制小车行进的方向
    发表于 07-08 19:02

    智能语音控制小车

    正在做智能小车,想在加点语音功能,不知道什么芯片比较好,用语音控制的,求指教
    发表于 10-16 10:26

    触屏寻迹智能车使用“安芯一号”SLH89F5162

    推算出小车运行的速度以及方向,然后通过无线发送的方式送给小车,从而控制智能小车的行走路线和速度、路程,实现
    发表于 10-15 12:46

    智能小车

    HC-06作为服务端。客户端采用Eclipse开发环境,JAVA编程,服务端采用单片机控制。双方通过串口进行通信,单片机驱动直流电机控制小车行动小车实现接收手机遥控信号并灵活地进行前
    发表于 10-29 16:35

    蓝牙控制小车行

    有谁能帮忙写一个蓝牙控制小车行进的程序啊!谢谢大神了!
    发表于 04-17 19:09

    智能小车地面控制端的设置

    `要求设计地面控制端,接收按键信息,并将控制信号注入跑道表面的细导线中,以非接触的方式控制智能小车的行进。不允许
    发表于 05-19 16:33

    【HC-02V1.1蓝牙串口模块申请】智能蓝牙寻迹小车

    项目名称:智能蓝牙寻迹小车试用计划:蓝牙控制小车行动,包括下载程序
    发表于 04-17 12:00

    智能循迹小车简介

    简介智能循迹小车是基于自动引导机器人系统,用以实现小车自动识别路线,以及选择正确的路线。智能循迹小车是一个运用传感器、单片机、电机驱动及自动
    发表于 07-21 07:29

    读取PS2无线手柄的左摇杆信号并驱动小车运动

    使用Arduino mega 2560读取PS2无线手柄信号并控制小车运动文章目录使用Arduino mega 2560读取PS2无线手柄信号并控制小车运动1 前言2 硬件连接2.1
    发表于 09-01 08:13

    轮式智能小车行驶距离和速度的检测

    轮式智能小车行驶距离和速度的检测
    发表于 05-22 10:24 17次下载

    使用键盘控制智能小车的资料合集免费下载

    本文档的主要内容详细介绍的是使用键盘控制智能小车的资料合集免费下载。
    发表于 06-11 17:20 12次下载
    使用<b class='flag-5'>键盘</b><b class='flag-5'>控制</b><b class='flag-5'>智能</b><b class='flag-5'>小车</b>的资料合集免费下载

    Jetbot智能车如何识别与周边物体的距离

      避撞功能是 Jetbot 一开始最令人瞩目的功能,因为这是所有小车都必须具备的最基本“自我保护”的能力,而 Jetbot 没有任何距离传感,只凭着一个 CSI 摄像头就能完成这项任务,对很多人来说是一件蛮神奇的事情,
    的头像 发表于 02-07 11:35 1562次阅读

    从ROS控制jetbot机器人

    电子发烧友网站提供《从ROS控制jetbot机器人.zip》资料免费下载
    发表于 06-27 10:22 0次下载
    从ROS<b class='flag-5'>控制</b><b class='flag-5'>jetbot</b>机器人

    霍尔摇杆与电阻摇杆的区别与联系

    目前市场上有霍尔摇杆和电位器摇杆,可用于游戏手柄,无人机,智能控制等各类设备中,这两种摇杆的利弊是什么呢?
    的头像 发表于 10-10 12:06 870次阅读