Home » Jetbot-AI机器人教程 » Jetbot-AI机器人教程-自主避障

Jetbot-AI机器人教程-自主避障

Jetbot-AI机器人教程-自主避障

说明:

  • 介绍如何实现自主避障
  • 在这个例子中,我们将收集一个图像分类数据集,用于帮助保持JetBot安全!
  • 我们将教JetBot检测两个自由和阻挡的场景。
  • 我们将使用此AI分类器来防止JetBot进入危险区域。

第1步:在JetBot上收集数据

  • 我们提供预先训练的模型,如果已有,您可以跳到第3步。
  • 使用具有广角附件的Raspberry Pi V2相机,在有限的数据集上训练该模型。

请输入图片描述

  • 通过导航到http://<jetbot_ip_address>:8888连接到您的机器人

  • 使用默认密码jetbot登录

  • 通过选择Kernel -> Shutdown All Kernels...来关闭所有其他正在运行的笔记本...

  • 导航到~/Notebooks/collision_avoidance/

  • 打开并跟随data_collection.ipynb笔记操作

  • 运行程序后出现如图所示界面,将小车放到不同的位置,如果前方没有障碍则点击add free. 如果小车前方有障碍就点击add blocked

  • 拍摄到的图片会保存在dataset文件夹中,尽可能多的拍摄各种情况的图片。可以尝试不同的方向,不同的亮度,不同的对象/碰撞类型(墙、壁架等),可以尝试不纹理的地板/物体(有图案的、光滑的、玻璃等)

display(image)
display(widgets.HBox([free_count, free_button]))
display(widgets.HBox([blocked_count, blocked_button]))
  • 小车搜集到场景数据越多,避障的效果也就越好。所以尽可能多的获取不同的数据对避障效果非常重要。一般需要每种情况至少拍摄100张图片

  • 最后运行程序打包图片,打包之后,在当前的目录下会出现一个dataset.zip压缩文件

!zip -r -q dataset.zip dataset

第2步:在云上训练神经网络

请输入图片描述

  • 在Web浏览器中导航到https://courses.nvidia.com/dli-event

  • 输入事件代码DLI_Jet_Demo

  • 如果您尚未登录,请登录您的NVIDIA开发者帐户

  • 选择查看View Course -> Course -> Click here to begin -> Start

  • 等待几分钟,以便云培训机器进行设置

  • 选择Launch Task启动Jupyter Lab

  • 在Jupyter Lab选项卡中,导航到~/collision_avoidance

  • 打开并跟随train_model.ipynb笔记操作

  • 此处如果已经有了刚刚压缩的dataset.zip文件,则不需要再运行此语句进行解压,否则会提示是否覆盖已存在的文件

!unzip -q dataset.zip
  • 程序运行到此处会下载alexnet模型,下载时间有点长。下载程序后/home/ubuntu/.torch/models目录下会出现一个alexnet-owt-4df8aa71.pth文件
model = models.alexnet(pretrained=True)
  • 最后运行程序训练神经网络,运行时间比较长。训练完成后,当前目录下会出现一个best_mode.pth文件
NUM_EPOCHS = 30
BEST_MODEL_PATH = 'best_model.pth'
best_accuracy = 0.0

optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9)

for epoch in range(NUM_EPOCHS):
    
    for images, labels in iter(train_loader):
        images = images.to(device)
        labels = labels.to(device)
        optimizer.zero_grad()
        outputs = model(images)
        loss = F.cross_entropy(outputs, labels)
        loss.backward()
        optimizer.step()

    test_error_count = 0.0
    for images, labels in iter(test_loader):
        images = images.to(device)
        labels = labels.to(device)
        outputs = model(images)
        test_error_count += float(torch.sum(torch.abs(labels - outputs.argmax(1))))
    
    test_accuracy = 1.0 - float(test_error_count) / float(len(test_dataset))
    print('%d: %f' % (epoch, test_accuracy))
    if test_accuracy > best_accuracy:
        torch.save(model.state_dict(), BEST_MODEL_PATH)
        best_accuracy = test_accuracy

第3步:在JetBot上运行实时演示

请输入图片描述

  • 通过导航到http://<jetbot_ip_address>:8888连接回机器人

  • 使用默认密码jetbot登录

  • 通过选择Kernel -> Shutdown All Kernels...来关闭所有其他正在运行的笔记本...

  • 导航到~/Notebooks/collision_avoidance

  • 打开并跟随live_demo.ipynb笔记操作

  • 开始谨慎,给JetBot足够的空间来移动

  • 运行程序后会显示摄像头实时图像和一条滑条。互调表示遇到障碍物的概率,0.00表示前方没有障碍物,1.00表示前方哟障碍物需要转向避让

  • 此处适当调小一点速度,避免速度太快直接撞上障碍物。如果部分地方不能实现避障,建议采集更多的数据

if prob_blocked < 0.5:
    robot.forward(0.4)
else:
    robot.left(0.4)
  • 部分语句运行时间可能比较长,JupyterLab右上角Python3旁边的圆圈标志,有程序运行提示标志。当小圆点为黑色时表示程序正在运行,白色表示空闲状态

视频:

  • http://www.youtube.com/watch?v=6cLk9TSgFSw

演示视频

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: jetbot-ai机器人教程