JetBot路径跟随项目:使用游戏手柄进行数据采集的技术解析

JetBot路径跟随项目:使用游戏手柄进行数据采集的技术解析

jetbot An educational AI robot based on NVIDIA Jetson Nano. jetbot 项目地址: https://gitcode.com/gh_mirrors/je/jetbot

项目概述

JetBot路径跟随项目是一个基于NVIDIA Jetson平台的智能机器人开发项目,旨在实现机器人自主跟随预设路径的功能。与传统的碰撞避免项目不同,路径跟随采用了回归技术而非分类技术,这使得机器人能够更精确地控制行进方向和角度。

技术原理

路径跟随的核心思想是通过深度学习模型预测目标点的X、Y坐标值,然后根据这些预测值计算近似转向值。虽然这不是精确的角度计算(需要图像校准才能实现),但其与角度大致成比例的关系足以实现良好的控制效果。

数据采集流程

  1. 机器人定位:将JetBot放置在路径的不同位置(偏离中心、不同角度等)
  2. 实时图像显示:显示机器人摄像头的实时画面
  3. 目标点标注:使用游戏手柄控制器在图像上放置"绿色圆点",表示我们希望机器人行进的目标方向
  4. 数据存储:保存这个绿色圆点的X、Y值以及机器人摄像头的图像

数据采集实践指南

1. 准备工作

首先需要导入必要的Python库:

# IPython显示和小部件库
import traitlets
import ipywidgets.widgets as widgets
from IPython.display import display

# JetBot的摄像头和电机接口
from jetbot import Robot, Camera, bgr8_to_jpeg

# 图像标注基础包
from uuid import uuid1
import os
import json
import glob
import datetime
import numpy as np
import cv2
import time

2. 摄像头初始化与显示

我们使用JetBot的Camera类来启用CSI MIPI摄像头。神经网络输入为224x224像素的图像,因此我们将摄像头设置为该尺寸以最小化数据集文件大小:

camera = Camera()

widget_width = camera.width
widget_height = camera.height

image_widget = widgets.Image(format='jpeg', width=widget_width, height=widget_height)
target_widget = widgets.Image(format='jpeg', width=widget_width, height=widget_height)

x_slider = widgets.FloatSlider(min=-1.0, max=1.0, step=0.001, description='x')
y_slider = widgets.FloatSlider(min=-1.0, max=1.0, step=0.001, description='y')

3. 游戏手柄控制器设置

创建控制器小部件实例,用于标注图像的X和Y值:

controller = widgets.Controller(index=0)
display(controller)

将游戏手柄控制器连接到标注功能:

widgets.jsdlink((controller.axes[2], 'value'), (x_slider, 'value'))
widgets.jsdlink((controller.axes[3], 'value'), (y_slider, 'value'))

4. 数据采集过程

执行以下代码块将显示实时图像以及已保存图像的数量。通过以下步骤存储目标X、Y值:

  1. 将绿色圆点放在目标位置
  2. 按下方向键"下"保存
DATASET_DIR = 'dataset_xy'

try:
    os.makedirs(DATASET_DIR)
except FileExistsError:
    print('目录已存在,无需创建')

for b in controller.buttons:
    b.unobserve_all()

count_widget = widgets.IntText(description='count', value=len(glob.glob(os.path.join(DATASET_DIR, '*.jpg')))

5. 数据标注技巧

在标注过程中,以下指南可以帮助提高模型性能:

  1. 观察摄像头的实时画面
  2. 想象机器人应该遵循的路径(估算避免偏离路径所需的距离)
  3. 将目标点放在路径上尽可能远的位置,使机器人可以直接朝向目标行进而不会偏离路径

例如:

  • 在非常直的道路上,可以将目标点放在远处
  • 在急转弯处,可能需要将目标点放在离机器人较近的位置,以避免超出边界

数据处理与准备

完成数据采集后,需要将数据压缩以便传输到GPU桌面或云机器进行训练:

def timestr():
    return str(datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S'))

!zip -r -q road_following_{DATASET_DIR}_{timestr()}.zip {DATASET_DIR}

技术要点总结

  1. 数据多样性:与碰撞避免项目一样,数据的变化性是关键。确保采集不同位置、不同角度的图像数据。

  2. 目标点放置原则

    • 机器人可以安全地直接朝向目标行进(不会越界等)
    • 目标点将沿着我们想象的路径持续前进
  3. 实现效果:最终实现的是一个沿着期望轨迹移动的"胡萝卜"效果。深度学习决定胡萝卜的位置,JetBot只需跟随它。

  4. 文件命名规范:保存的文件名格式为xy_<x值>_<y值>_<uuid>.jpg,其中x和y值是像素坐标(从左上角开始计数)。

通过遵循这些步骤和原则,即使是少量数据(如示例中的123张图像)也能训练出有效的路径跟随模型。

jetbot An educational AI robot based on NVIDIA Jetson Nano. jetbot 项目地址: https://gitcode.com/gh_mirrors/je/jetbot

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姬忆慈Loveable

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值