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
演示视频
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号