Donkey 图形界面

在命令行中输入"donkey ui"来启动Donkey的图形化训练界面。这适用于Linux、Mac和Windows系统,不过如果您使用的是Windows系统,建议您使用运行Ubuntu 20的WSL(Windows Subsystem for Linux)以获得完整的功能。

Donkey UI目前包含四个屏幕,支持以下工作流程:

  1. Tub管理器 - 用于替代通过donkey tubclean启动的基于Web的应用程序。

  2. 训练器 - 基于UI的替代方案,用于训练驾驶员。请注意,对于包含较大的数据集或批次的较长训练,建议使用命令行中的donkey train命令执行。基于UI的训练适用于实验和快速分析周期,包括:

    • 数据操作/选择
    • 训练
    • 驾驶员性能评估
  3. 驾驶员竞技场 - 在这里,您可以测试两个驾驶员之间的性能对比。

  4. 车辆连接器 - 可以从车辆中获取tub数据,并推送训练好的驾驶员,甚至启动/停止车辆。该屏幕在Windows系统下不可用。

注意: 在Linux系统中,该应用程序依赖于xclip,如果未安装,请运行以下命令进行安装:

sudo apt-get install xclip

在Tub管理器屏幕中,首先使用"Load car directory"按钮选择包含配置文件myconfig.py的汽车目录。然后使用"Load tub"按钮选择要使用的Tub,该Tub需要位于汽车目录中。应用程序会记住最后加载的配置和Tub。

左侧图像旁边的数据面板中的"Add/remove"下拉菜单允许选择记录字段,例如"user/angle"、"user/throttle"等。

注意: 如果您的Tub包含比标准的"user/angle"、"user/throttle"更多的数据,并且您希望进度条正确显示这些字段的值,您需要在家目录中的.donkeyrc文件中添加一个条目。该文件是Donkey UI应用程序自动创建的。以下是一个示例:

field_mapping:
- centered: true
  field: car/accel
  max_value_id: IMU_ACCEL_NORM

field_mapping列表中的数据条目包含Tub字段的名称、一个开关(如果数据以0为中心)以及该数据字段的最大值名称,该名称必须在myconfig.py文件中提供。例如,上面的数据表示IMU6050的IMU加速度,范围在+/- 2g之间,即约+/-20 m/s2。使用IMU_ACCEL_NORM为20,进度条可以显示这些值。因此,myconfig.py应包含以下内容:

IMU_ACCEL_NORM = 20

注意: UI会自动将向量(列表/数组)分解为其组成部分。

这是一个Tub的示例,其中包含保存IMU数据的car/accelcar/gyro数组,以及car/distancecar/m_in_lap。前两个字段显示进度条,因为如上所述,在field_mapping列表中有相应的条目。 Tub_manager UI_more_data

控制面板允许使用"<"、">"单步向前和向后移动,使用"<<"、">>"连续滚动。这些按钮也与键盘上的"< left >"、"< right >"、"< space >"键相关联。

要删除不需要的记录,请使用"Set left" / "Set right"按钮确定范围,然后点击"Delete"按钮将这些记录从训练中删除。要查看对当前Tub的影响,请点击"Reload tub"。如果您想恢复意外删除的记录,只需选择已删除范围之外的左/右值,然后点击"Restore"。

注意: 左/右值是可逆的,即left > right操作适用于[left, right)之外的所有记录。

在过滤器部分,您可以屏蔽记录。例如,如果您只想限制下一次训练仅针对右转弯,那么添加user/angle > 0来选择这些记录。 注意: 过滤器仅适用于Tub管理器中的显示。如果要在训练中应用此过滤器,您需要按照utility中所述编写谓词。

下方面板包含一个图表,显示来自数据面板的当前选定数据。如果没有选择任何内容,将显示记录的所有字段。显示将数据在每个记录字段的最小值和最大值之间进行缩放,因此无法进行绝对测量。要获取更高级的数据图形功能,请点击"Browser Graph",将在Web浏览器中打开一个Plotly历史图形。

训练器

Trainer UI

训练器屏幕允许将模型训练到Tub数据上。在"Overwrite config"部分,您可以通过在右侧的文本字段中输入更新后的值并按回车键来设置任何配置参数。

要训练一个驾驶员,请使用模型类型下拉菜单,输入注释并点击"Train"。训练完成后,驾驶员将显示在下方的驾驶员数据库中。如果您不想从头开始训练,还可以选择一个迁移模型。请注意,TensorFlow会保存具有优化器状态的模型,因此训练将从保存的状态停止的地方继续进行。

驾驶员可能在多个Tub上进行训练,但当前训练器不支持此功能。但是,如果在donkey train中传递了多个Tub,则这些Tub也会显示在数据库中。为了不混乱视图并对不同的Tub进行分组,您可以使用"Group multiple tubs"按钮将所有包含两个或更多Tub的组进行分组,并显示组别别名。组别别名映射显示在窗口的下部区域。

驾驶员竞技场

Pilot Arena UI

在这里,您可以将两个驾驶员进行对比测试。使用此面板测试训练中的优化器参数、模型类型的更改,或通过删除某些记录或对图像进行增强来观察驾驶员的表现是否有所改善或恶化。应用程序将记住最后选择的驾驶员。

通过选择"Model type"并使用文件选择器加载Keras模型(按下"Choose pilot"按钮),选择一个驾驶员。控制面板与Tub管理器中的相同。右下方的数据面板显示Tub记录的数据。您可以选择油门字段,因为有些人根据车速进行训练,而不是使用油门值。在这种情况下,必须将相应的字段名称添加到家目录中的.donkeyrc文件的user_pilot_map部分,示例如下:

user_pilot_map:
  car/speed: pilot/speed
  user/angle: pilot/angle
  user/throttle: pilot/throttle

应用程序会自动加载"user/angle"和"user/throttle"映射。为了显示变量car/speed并将其与AI生成的pilot/speed进行比较,映射必须包含相应的条目。

在两个驾驶员下方,有预定义的图像增强滑块,例如"Brightness"和"Blur"。您可以将亮度和模糊值混合到图像中,并比较驾驶员对测试数据修改的反应情况。按下按钮以激活滑块,启用此功能。

应用程序将记住最后选择的两个驾驶员。

车辆连接

Car_Connector_UI

注意: 此屏幕仅适用于Linux/OSX,因为它在后台使用了sshrsync。需要配置SSH以允许从PC无密码登录到车辆。您可以在PC上执行以下命令来完成配置:

ssh-keygen

当要求输入密码短语时,只需按下回车键即可。这将在./ssh目录中创建一对公钥和私钥。然后,使用以下命令将公钥复制到车辆上。这里我们假设您的车辆主机名为donkeypi - 如果不是,请将其替换为相应的主机名。

ssh-copy-id -i ~/.ssh/id_rsa.pub pi@donkeypi.local

使用以下命令登录到您的车辆:

ssh pi@donkeypi.local

如果SSH询问是否将该主机添加到已知主机列表中,请按回车键,然后完成配置。从现在开始,您可以无需再次输入密码即可SSH登录到车辆。无密码登录设置对于此屏幕的正常工作是必需的。

  • 您还需要编辑myconfig.py文件,确保PI_USERNAMEPI_HOSTNAME字段设置为您的车辆用户名和车辆的主机名。

使用车辆连接器,您可以将Tub数据从车辆传输到您的PC,并将驾驶员传输回车辆。

  • 在"Car directory"下输入车辆文件夹并按回车键。这将填充"Select tub"下拉菜单。您可能需要选择data/目录,但您可能还有子文件夹中的Tub。在这种情况下,在"Car directory"中使用~/mycar/data,选择要拉取的Tub,并在按钮上启用"Create new folder"。这将在车辆上复制一个Tub,例如~/mycar/data/tub_21-04-09_11,并将其复制到您PC上的相同位置。如果不使用"Create new folder",它将把车辆Tub文件夹的内容复制到您PC上的~/mycar/data,可能会覆盖可能存在的其他Tub数据。

  • 点击"Pull tub data/"来从车辆复制Tub。

  • 点击"Send pilots"来将本地的models/文件夹与车辆上的models/文件夹同步。此命令将同步所有本地存储的驾驶员。
  • 在"Drive car"部分,您可以启动车辆并选择自动驾驶的模型。启动后,您必须使用控制器,即Web或游戏手柄。

未来计划

  1. 将车辆连接屏幕移至Web界面,支持所有操作系统。
  2. 处理多个Tub的情况。
  3. 在训练中使用过滤器而无需编辑myconfig.py文件。
  4. ~/.donkeyrc文件迁移到Kivy的内部设置中。
  5. 在驾驶员竞技场中支持仅使用单个驾驶员(或多个驾驶员)。

视频教程

您可以在下方找到UI的视频教程。

Video tutorial