From abfae5278ccf0426c12e2d85fb3db37b93b57ae8 Mon Sep 17 00:00:00 2001 From: thias15 Date: Sat, 1 Jun 2024 22:33:05 -0700 Subject: [PATCH] add chinese readme files in subfolders (#426) * add chinese README files --- android/README.de-DE.md | 2 +- android/README.md | 2 +- android/README.zh-CN.md | 66 ++ android/README_CN.md | 95 --- android/controller/README.zh-CN.md | 80 ++ android/robot/README.zh-CN.md | 396 ++++++++++ body/README.zh-CN.md | 59 ++ body/diy/README.de-DE.md | 4 +- body/diy/README.zh-CN.md | 236 ++++++ body/diy/README_CN.md | 174 ----- body/diy/cad/block_body/README.zh-CN.md | 44 ++ body/diy/cad/glue_body/README.de-DE.md | 2 +- body/diy/cad/glue_body/README.zh-CN.md | 30 + body/diy/cad/glue_body/README_CN.md | 30 - body/diy/cad/regular_body/README.md | 2 +- body/diy/cad/regular_body/README.zh-CN.md | 31 + body/diy/cad/slim_body/README.de-DE.md | 2 +- body/diy/cad/slim_body/README.md | 2 +- body/diy/cad/slim_body/README.zh-CN.md | 26 + body/diy/cad/slim_body/README_CN.md | 25 - body/diy/pcb/README.de-DE.md | 2 +- body/diy/pcb/README.zh-CN.md | 34 + body/diy/pcb/README_CN.md | 34 - body/lite/README.zh-CN.md | 71 ++ body/mtv/README.zh-CN.md | 697 ++++++++++++++++++ body/mtv/pcb/README.zh-CN.md | 50 ++ body/rc_truck/README.de-DE.md | 4 +- body/rc_truck/README.zh-CN.md | 211 ++++++ body/rtr/README.zh-CN.md | 73 ++ controller/README.zh-CN.md | 25 + controller/flutter/README.zh-CN.md | 104 +++ .../LaunchImage.imageset/README.zh-CN.md | 11 + controller/node-js/README.zh-CN.md | 92 +++ controller/python/README.zh-CN.md | 94 +++ firmware/README.zh-CN.md | 204 +++++ firmware/README_CN.md | 107 --- ios/OpenBot/README.zh-CN.md | 161 ++++ ios/README.zh-CN.md | 40 + policy/README.zh-CN.md | 296 ++++++++ policy/README_CN.md | 81 -- policy/frontend/README.zh-CN.md | 36 + python/README.zh-CN.md | 130 ++++ 42 files changed, 3308 insertions(+), 557 deletions(-) create mode 100644 android/README.zh-CN.md delete mode 100644 android/README_CN.md create mode 100644 android/controller/README.zh-CN.md create mode 100644 android/robot/README.zh-CN.md create mode 100644 body/README.zh-CN.md create mode 100644 body/diy/README.zh-CN.md delete mode 100644 body/diy/README_CN.md create mode 100644 body/diy/cad/block_body/README.zh-CN.md create mode 100644 body/diy/cad/glue_body/README.zh-CN.md delete mode 100644 body/diy/cad/glue_body/README_CN.md create mode 100644 body/diy/cad/regular_body/README.zh-CN.md create mode 100644 body/diy/cad/slim_body/README.zh-CN.md delete mode 100644 body/diy/cad/slim_body/README_CN.md create mode 100644 body/diy/pcb/README.zh-CN.md delete mode 100644 body/diy/pcb/README_CN.md create mode 100644 body/lite/README.zh-CN.md create mode 100644 body/mtv/README.zh-CN.md create mode 100644 body/mtv/pcb/README.zh-CN.md create mode 100644 body/rc_truck/README.zh-CN.md create mode 100644 body/rtr/README.zh-CN.md create mode 100644 controller/README.zh-CN.md create mode 100644 controller/flutter/README.zh-CN.md create mode 100644 controller/flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.zh-CN.md create mode 100644 controller/node-js/README.zh-CN.md create mode 100644 controller/python/README.zh-CN.md create mode 100644 firmware/README.zh-CN.md delete mode 100644 firmware/README_CN.md create mode 100644 ios/OpenBot/README.zh-CN.md create mode 100644 ios/README.zh-CN.md create mode 100644 policy/README.zh-CN.md delete mode 100644 policy/README_CN.md create mode 100644 policy/frontend/README.zh-CN.md create mode 100644 python/README.zh-CN.md diff --git a/android/README.de-DE.md b/android/README.de-DE.md index 58d39a6ea..fe11478b0 100644 --- a/android/README.de-DE.md +++ b/android/README.de-DE.md @@ -2,7 +2,7 @@

English | - 简体中文 | + 简体中文 | Deutsch

diff --git a/android/README.md b/android/README.md index 153ad2dd1..75d4dccc3 100755 --- a/android/README.md +++ b/android/README.md @@ -2,7 +2,7 @@

English | - 简体中文 | + 简体中文 | Deutsch

diff --git a/android/README.zh-CN.md b/android/README.zh-CN.md new file mode 100644 index 000000000..6e5762e86 --- /dev/null +++ b/android/README.zh-CN.md @@ -0,0 +1,66 @@ +# Android Apps + +

+ English | + 简体中文 | + Deutsch +

+ +## 功能 + +点击下面的链接阅读应用程序的功能。 + +- [机器人应用](robot/README.md) +- [控制器应用](controller/README.md) + +## 安装应用程序 + +获取应用程序的最简单方法是使用相应的二维码直接下载到手机上。如果你在手机浏览器上,也可以直接点击二维码。然后你可以在手机上打开apk并[安装](https://www.lifewire.com/install-apk-on-android-4177185)它。请注意,apk仅使用调试密钥签名。 + + + + + + + + + + +
+ 🤖 App + + + + 🎮 App + +
🤖 App🎮 App
+ +或者,你可以从任何[发布](https://github.com/intel-isl/OpenBot/releases)的资产中下载apk。如果你想要来自主分支的最新应用程序,你也可以从构建工件[这里](https://github.com/intel-isl/OpenBot/actions?query=workflow%3A%22Java+CI+with+Gradle%22)下载。请注意,它可能不稳定。如果你以后想对应用程序进行更改,请按照以下步骤编译应用程序并将其部署到手机上。 + +## 构建应用程序 + +### 先决条件 + +- [Android Studio Electric Eel | 2022.1.1或更高版本](https://developer.android.com/studio/index.html)用于构建和安装apk。 +- Android设备和最低API 21的Android开发环境。 +- 目前,我们使用API 33作为编译SDK和API 32作为目标SDK。它应该会自动安装,但如果没有,你可以手动安装SDK。进入Android Studio -> Preferences -> Appearance & Behaviour -> System Settings -> Android SDK。确保API 33已选中并点击应用。 + +![Android SDK](../docs/images/android_studio_sdk.jpg) + +### 构建过程 + +1. 打开Android Studio并选择*打开现有的Android Studio项目*。 +2. 选择OpenBot/android目录并点击确定。 +3. 如果你想安装[OpenBot应用](app/README.md),请确保选择*app*配置。如果你想安装[控制器应用](controller/README.md),请选择*controller*配置。如有必要,确认Gradle同步。要手动执行Gradle同步,请点击gradle图标。 + ![Gradle Sync](../docs/images/android_studio_bar_gradle.jpg) +4. 连接你的Android设备,并确保在[开发者选项](https://developer.android.com/studio/debug/dev-options)中启用USB调试。根据你的开发环境,可能需要[进一步的步骤](https://developer.android.com/studio/run/device)。现在你应该可以在顶部的导航栏中看到你的设备。 + ![Phone](../docs/images/android_studio_bar_phone.jpg) +5. 点击运行按钮(绿色箭头)或从顶部菜单中选择运行 > 运行'android'。你可能需要使用构建 > 重建项目来重新构建项目。 + ![Run](../docs/images/android_studio_bar_run.jpg) +6. 如果它要求你使用即时运行,请点击*继续不使用即时运行*。 + +### 故障排除 + +#### 版本 + +如果你收到类似`项目正在使用不兼容版本(AGP 7.4.0)的Android Gradle插件。最新支持的版本是AGP 7.3.0`的消息,你需要升级Android Studio或降级你的gradle插件。你可以在[这里](https://developer.android.com/studio/releases/gradle-plugin#android_gradle_plugin_and_android_studio_compatibility)阅读更多关于Android Studio和gradle插件之间版本兼容性的信息。 \ No newline at end of file diff --git a/android/README_CN.md b/android/README_CN.md deleted file mode 100644 index 1c18357df..000000000 --- a/android/README_CN.md +++ /dev/null @@ -1,95 +0,0 @@ -# 安卓 App - -

- English | - 简体中文 -

- -我们的应用程序派生自[TensorFlow Lite object Detection Android Demo](https://github.com/tensorflow/examples/tree/master/lite/examples/object_detection/android)。我们增加了一个数据记录器,并支持游戏控制器与机器人一起收集数据集。目前,我们记录以下传感器的读数:相机、陀螺仪、加速计、磁力计、环境光传感器和气压计。使用Android API,我们可以获得以下传感器读数:RGB图像、角速度、线加速度、重力、磁场强度、光强、大气压力、纬度、经度、海拔、方位和速度。除了手机传感器,我们还记录车身传感器读数(车轮里程计、障碍物距离和电池电压),这些读数通过串口传输。最后,我们记录从连接的游戏控制器接收道德命令(如果存在)。我们还集成了多个神经网络用于人员跟踪和自主导航。 - -## 免责声明 - -1. **安全性:** 一定要确保在安全的环境下操作。请记住,您的手机可能会在碰撞中受损! **安全:** 一定要确保在安全的环境中操作。在使用自动控制时(如人员跟随或驾驶策略),必须特别小心。确保您始终连接着一个游戏手柄控制器,并熟悉按键映射,以便您可以在任何时候停止车辆。使用时风险自负 -2. **应用程序正在开发中:** 应用程序正在开发中,根据您的手机型号和操作系统的版本,可能会崩溃或表现出意外行为。请务必在不连接车轮的情况下测试所有功能。使用时请自行承担风险! - -## 开始 - -### 先决条件 - -- [Android Studio 3.2或更高版本](https://developer.android.com/studio/index.html),用于构建和安装apk,否则从[最新版本](https://github.com/intel-isl/OpenBot/releases/latest)的静态资源中下载apk。 -- 安卓设备和安卓开发环境,最低API 21。 - -### 构建 -- 如果你使用的是[最新版本](https://github.com/intel-isl/OpenBot/releases/latest)的静态资源中的apk,你可以跳过下面的步骤,直接在手机上[安装](https://www.lifewire.com/install-apk-on-android-4177185)即可。注意,该apk是用调试密钥签名的。 -- 打开Android Studio,选择*打开一个现有的Android Studio项目*。 -- 选择OpenBot/android目录,点击确定。 -- 如果需要的话,确认Gradle Sync。 -- 连接你的Android设备,并确保在[开发者选项](https://developer.android.com/studio/debug/dev-options)中启用USB调试。根据你的开发环境,[进一步的步骤](https://developer.android.com/studio/run/device)可能是必要的。 -- 单击"运行"按钮(绿色箭头)或从顶部菜单中选择 "运行">"运行'安卓'"。你可能需要使用Build > Rebuild Project来重建项目。 -- 如果它要求你使用Instant Run,点击*Proceed Without Instant Run*。 - -### 代码结构 -Tensorlfow Lite目标检测示例程序 [TensorFlow Lite Object Detection Android Demo](https://github.com/tensorflow/examples/tree/master/lite/examples/object_detection/android) 作为集成TFLite模型并获取相机源的起点。 Main activity 是运行主线程的[NetworkActivity](app/src/main/java/org/openbot/NetworkActivity.java)。它继承自管理摄像机和UI的[CameraActivity](app/src/main/java/org/openbot/CameraActivity.java)。[SensorService](app/src/main/java/org/openbot/SensorService.java)读取所有其他电话传感器并记录它们。[env](app/src/main/java/org/openbot/env)文件夹包含实用程序类,如[GameController](app/src/main/java/org/openbot/env/GameController.java)接口和用于声音反馈的[AudioPlayer](app/src/main/java/org/openbot/env/AudioPlayer.java)。[tflite](app/src/main/java/org/openbot/tflite)文件夹包含[Autopilot](app/src/main/java/org/openbot/tflite/Autopilot.java)和[Detector](app/src/main/java/org/openbot/tflite/Detector.java)网络的模型定义。 - -## 如何使用应用程序 - -

- App GUI - App GUI -

- -### USB连接 - -下拉菜单用于设置波特率。默认值是115200,你应该不需要改变这个值,除非你把Arduino固件搞乱。该应用程序将尝试自动连接,但如果你遇到问题,你可以使用这个开关来断开/连接。 - -### 数据记录器 - -有四种不同的记录模式。 - -- **only_sensors**。所有传感器数据,但不保存图像 -- **crop_img**: 保存所有传感器数据和具有网络输入尺寸的裁剪图像。这是默认设置,是数据收集时应该使用的设置。 -- **preview_img**: 保存所有传感器数据和全尺寸图像。这将需要大量的内存,而且速度会很慢。然而,它对于编译FPV视频是很好的。 -- **all_imgs**: 所有的传感器数据和裁剪和全尺寸的图像被保存。这将需要大量的内存,而且可能很慢。 - -右边的开关是用来切换登录和关闭的。在游戏控制器上,这个开关可以用X按钮来切换。 - -### 驱动模式 - -在使用游戏控制器(如PS4)时,有三种不同的驱动模式。 - -- **游戏模式**。使用左右肩部触发器(R2,L2)进行前进和后退油门,任一操纵杆进行转向。该模式模仿赛车电子游戏的控制模式。 -- **操纵杆模式**。使用任一操纵杆控制机器人。 -- **左右模式**:使用左右操纵杆控制机器人。用左右两根操纵杆分别控制汽车的左右两边 这是原始的差速转向。 - -右侧的开关用于在游戏控制器和网络之间切换控制。在游戏控制器上,可以使用R1触发按钮切换此开关。 - -### 车辆控制 - -有三种不同的速度。 - -- **慢速**:电机所承受的电压被限制在输入电压的50%(约6V)。 -- **正常**:电机所承受的电压被限制在输入电压的75%以内(约9V)。 -- **快速**:没有限制。全输入电压将应用于电机 (~12V)。*这是运行神经网络的默认设置*。 - -以更高的速度运行会降低电机的寿命,但更有乐趣。从连接的游戏控制器接收到的控制或网络预测的控制显示在右侧。 - -### 模型 - -该应用程序随附三种模型: - -- **DETECTOR_V1_1_0_Q**。此模式用于人员跟踪。它使用MobileNet V1模型的SSD对象检测器。为了在嵌入式设备上获得更好的性能,该模型进行了量化。 -- **DETECTOR_V3_S_Q**。该模型用于人员跟踪。它使用MobileNet V3模型的SSD对象检测器。为了提高嵌入式设备的性能,该模型进行了量化。 -此模型用于自主导航。它将直接从摄像机输入预测控件。很有可能它在您的环境中不起作用。您应该按照我们的说明来训练自己的[驾驶策略](../ policy)并予以替换。 -如果一个模型处于活动状态,它的右侧将显示以[ms]为单位的推理速度。 - -### 设备 - -使用下拉菜单选择运行神经网络的设备。您有以下选择。 - -- **CPU**:使用CPU可以在大多数手机上使用,是默认选择。您可以调整线程数量以优化性能。 -- **GPU**:大多数智能手机都具有GPU。具有大量输入(例如图像)的网络通常在GPU上运行得更快。 -- **NNAPI**:这将使用[TensorFlow Lite NNAPI delegate](https://www.tensorflow.org/lite/performance/nnapi)。现代智能手机通常会配备专用的AI加速器。[神经网络API](https://developer.android.com/ndk/guides/neuralnetworks)(NNAPI)为Android设备上的TensorFlow Lite模型提供加速,这些设备具有图形处理单元(GPU)、数字信号处理器(DSP)和神经处理单元(NPU)。请注意,在一些较旧的手机上,这可能会非常慢! - -## 下一步(可选) - -训练自己的[驾驶策略](../policy/README_CN.md) diff --git a/android/controller/README.zh-CN.md b/android/controller/README.zh-CN.md new file mode 100644 index 000000000..bbeb71862 --- /dev/null +++ b/android/controller/README.zh-CN.md @@ -0,0 +1,80 @@ +# 控制器应用 + +

+ English | + 简体中文 | + Deutsch +

+ +这款安卓应用程序作为 [OpenBot](https://www.openbot.org) 车辆的 `远程控制器`。基本上,它的功能类似于PS3/4或Xbox的遥控器,但运行在另一台安卓设备上。 + +## 连接 + +当控制器应用启动时,它会立即尝试连接到机器人。我们会看到以下屏幕: + +

+ +

+ +要将控制器连接到机器人,请将机器人的应用控制设置置于 **Phone** 模式。 + +

+ + +

+ +你也可以通过在 `FreeRoamFragment` 中选择手机作为控制器来连接控制器: + +

+ +

+ +几秒钟后,你会听到一声哔声,控制器的屏幕会变成: + +

+ +

+ +在这里,你可以选择通过倾斜手机或使用屏幕上的控制来驾驶机器人。 + +***注意:*** 这应该足以连接,但如果在30秒后仍无法建立连接,请将机器人应用的 `Control` 设置切换到 `Gamepad`,然后再切换回 `Phone` 以重新启动连接。如果仍然失败,请退出控制器应用并重新启动。再次切换机器人应用上的控制模式。 + +## 操作 + +### 屏幕控制 +这种模式允许用户通过 `双驱动` 模式下的两个滑块来控制机器人车。你可以通过在每一侧上下移动滑块的滑块拇指来左转/右转。当滑块拇指移动到滑块中心的上方/下方时,每一侧的轮子会向前/向后转动。 + +

+ +

+ +你还可以通过点击屏幕左上角的箭头来设置左/右转向指示灯 + + +以及中间的红色按钮来取消。 + +### 倾斜驾驶 +控制器还可以使用其加速度计运动传感器来驾驶机器人。如果你选择此选项,控制器将进入全屏(Zen)模式,只有视频显示和 `刹车` 和 `加速` 踏板。要退出此模式,请双击屏幕。 + +这是 `倾斜模式` 屏幕的图片: + +

+ +

+ +使用 `加速` 和 `刹车` 按钮来前进/后退。 + +- 按下 `加速` 按钮,机器人将在2秒内加速到全速。当你松开按钮时,机器人会减速至停止(停止速度设置为最大速度的0%,可以调整)。 +- 按下 `刹车` 按钮,机器人会立即停止。如果我们再按住刹车一秒钟,机器人会开始倒退,直到在一秒钟内达到最大倒车速度。当我们松开刹车时,机器人会停止。 +- 我们通过左右倾斜控制器来转向机器人。 + +## 未来发展 + +我们计划添加的一些功能包括: + +- 在控制器上添加更多机器人传感器的信息,如电池电量和速度。 +- 从机器人的摄像头向控制器传输视频流 +- 使用控制器的陀螺仪传感器来控制机器人 +- 从机器人向控制器发送碰撞和撞击事件,以获得更真实的体验 + +这里有一个控制器应用的 [技术概述](../../docs/technical/OpenBotController.pdf)。 \ No newline at end of file diff --git a/android/robot/README.zh-CN.md b/android/robot/README.zh-CN.md new file mode 100644 index 000000000..c79c5bec8 --- /dev/null +++ b/android/robot/README.zh-CN.md @@ -0,0 +1,396 @@ +# Robot App + +

+ English | + 简体中文 | + Deutsch +

+ +## 免责声明 + +1. **安全性:** 请确保您在安全的环境中操作。请记住,您的手机可能会在碰撞中受损!在使用自动控制(例如跟随人或驾驶策略)时需要特别小心。确保您始终连接有游戏控制器,并熟悉按键映射,以便随时停止车辆。使用风险自负! +2. **应用程序开发中:** 该应用程序正在开发中,可能会因您的手机型号和操作系统版本而崩溃或表现出意外行为。请确保在没有连接车轮的情况下测试所有功能。使用风险自负! + +## 应用程序界面 + +### 主菜单 + +应用程序启动时会显示一个菜单屏幕,列出所有可用的屏幕。可以通过点击右上角的图标打开设置屏幕。点击其他图标,用户可以访问各种屏幕,其功能在下文中解释。 + +

+主菜单 +设置菜单 +设置菜单 +设置菜单 +

+ +### 设置菜单 + +#### USB连接 + +点击USB图标打开USB选项。下拉菜单用于设置波特率。默认值为115200,除非您更改了Arduino固件,否则无需更改。应用程序会尝试自动连接,但如果遇到问题,可以使用此开关断开/连接。 + +

+连接设备 +断开按钮 +

+ +#### 权限 + +在这里您可以检查应用程序的权限,并根据需要进行调整。 + +#### 视频流 + +您可以选择 `WebRTC` 或 `RTSP` 来将视频流传输到外部设备。手机控制器应用程序和node-js服务器都需要将其设置为 `WebRTC`。Python控制器则期望将流设置为 `RTSP`。 + +#### 蓝牙连接 + +确保您的Android设备支持BLE(低功耗蓝牙)。如果您的Android版本大于或等于7.0,还需要在设置中打开位置服务并允许位置权限,以便搜索附近的BLE设备。要启用BLE,请在设置菜单中将连接模式从USB更改为蓝牙。您将在主屏幕顶部看到一个蓝牙图标。点击蓝牙图标开始BLE扫描;扫描需要4秒钟,并获取所有附近OpenBot BLE设备的列表。点击 `连接` 按钮与您的OpenBot连接。成功连接后,`连接` 按钮将变为 `断开`。您现在可以返回主屏幕。 + +

+BLE设备 +连接设备 +断开按钮 +

+ +### 自由漫游 + +自由漫游提供简单的机器人控制,并实时更新电池、电量和与表面的距离信息。 + +

+自由漫游 +

+ +- **电池**: 电池图标显示连接机器人的实时电池电量。 +- **驾驶状态**: 视图上显示了3种驾驶状态: + - D -> 驾驶,机器人向前行驶时 + - N -> 空档,机器人静止时 + - R -> 倒车,机器人向后移动时 + 方向盘会根据转向角度比例旋转。 +- **速度**: 速度表显示机器人的速度。 +- **声纳**: 机器人前方的自由距离,以厘米为单位。 +- **控制**: 控制器、驾驶模式和速度用于控制机器人设置,如[控制部分](#control)所述。 + +### 数据收集 + +用于收集数据集的简单UI。 + +

+数据收集 +

+ +- **服务器**: 如果您正在运行用于策略训练的[web应用程序](../../policy#web-app),可以在此选择它以自动上传数据。 +- **预览分辨率**: 用于切换相机预览的分辨率。有3种设置: + - ***FULL_HD*** (1920x1080p) + - ***HD*** (1280x720p) + - ***SD*** (640x360) +- **模型分辨率**: 用于切换保存用于训练不同模型的图像分辨率。 +- **保存/丢弃收集的数据**: 数据收集过程可以从屏幕或远程控制,例如通过蓝牙控制器。当使用蓝牙控制器时,您可以: + - 按 **A按钮** **开始** 数据收集过程 + - 再次按 **A按钮** **停止** 数据收集并将收集的数据保存为.zip文件 + - 或者按 **R1按钮** **停止** 数据收集 **不保存** 收集的数据(例如由于意外碰撞) + - 请记住使用控制器映射片段以确保您使用正确的按钮。 + +### 控制器映射 + +用于检查连接的蓝牙控制器的按钮和摇杆映射的简单UI。 + +

+控制器映射 +

+ +### 机器人信息 + +用于获取机器人信息和测试基本功能的简单UI。固件中配置的 **机器人类型** 以文本和动画形式显示。**传感器**、**轮子里程计** 和 **LED** 部分的复选标记显示连接的机器人支持哪些功能。**读数** 部分提供最重要的传感器测量值。在 **发送命令** 部分,用户可以通过按相应的按钮发送基本的电机命令,并通过滑块控制前后LED。 + +

+机器人信息 +

+ +### 自动驾驶 + +用于运行自动驾驶模型的简单UI。 + +

+自动驾驶 +

+ +- **服务器**: 如果您正在运行用于策略训练的[web应用程序](../../policy#web-app),可以在此选择它并将训练好的自动驾驶模型发送到机器人。 +- **模型**: 选择一个训练好的模型用于自动驾驶模式。 +- **设备**: 使用CPU、GPU或NNAPI进行推理(更多详情见[这里](#device))。 +- **线程**: 使用的线程数(仅在选择CPU作为设备时有所不同)。 +- **控制**: 控制器、驾驶模式和速度用于控制机器人设置,如[控制部分](#control)所述。 + +### 物体跟踪 + +用于跟踪80种不同类别物体的简单UI。关于物体跟踪的不同AI模型和性能基准的简短描述可以在[模型管理](#model-management)中找到。 + +

+物体跟踪 +物体跟踪 +

+ +- **动态速度**: 在“自动模式”下,如果机器人接近被跟踪物体,会减少速度。速度根据边界框的面积进行缩放(在横向模式下效果最佳)。 +- **模型**: 根据您的手机性能选择一个物体检测器(见下文[基准测试结果](#benchmark))。 +- **物体**: 选择您要跟踪的物体。模型可以检测80种COCO[物体类别](https://tech.amikelive.com/node-718/what-object-categories-labels-are-in-coco-dataset/)。 +- **置信度**: 确定是否接受检测结果的置信度阈值。如果出现误检,请增加;如果未检测到感兴趣的物体,请减少。 +- **设备**: 使用CPU、GPU或NNAPI进行推理(更多详情见[这里](#device))。 +- **线程**: 使用的线程数(仅在选择CPU作为设备时有所不同)。 +- **控制**: 控制器、驾驶模式和速度用于控制机器人设置,如[控制部分](#control)所述。 + +### 目标导航 + +请注意,此片段需要ARCore和相机权限。如果您的设备不支持ARCore并继续操作,应用程序将崩溃。在此屏幕中,您可以根据机器人的当前位置和方向指定一个目标。2D向量包含到机器人前方和左侧的距离(以米为单位)。这两个值也可以为负数,对应于机器人的后方和右侧。指定目标并按下 `开始` 后,机器人将执行一个AI策略,尝试在避开障碍物的同时到达目标。 + +

+目标导航 +

+ +### 模型管理 + +所有模型都经过量化,以在嵌入式设备上获得更好的性能。请参阅下文,了解可用模型和基准测试结果的简短描述。[平均精度(mAP)](https://kharshit.github.io/blog/2019/09/20/evaluation-metrics-for-object-detection-and-segmentation) 在[COCO检测2017](https://cocodataset.org/#detection-2017)数据集的验证集上计算。每个模型运行约1分钟;推理时间在最后100帧中平均,并以每秒帧数(fps)报告。请注意,尽管mAP较低,但输入分辨率较大的模型可能对较小的物体更好。 + +

+模型管理 +

+ +### 基准测试 + +#### 手机 + +| 型号名称 | 芯片组 | 内存 | 操作系统 | +|------------------|----------------|------|---------| +| 三星 S22 Ultra | Exynos 2200 | 12GB | 12 | +| 三星 S20FE 5G | Snapdragon 865 | 6GB | 12 | +| 华为 P30 Pro | Kirin 980 | 8GB | 10 | +| 谷歌 Pixel 6XL | Google Tensor | 12GB | 12 | +| 小米 Mi9 | Snapdragon 855 | 6GB | 10 | +| 谷歌 Pixel 4XL | Snapdragon 855 | 6GB | 13 | + +#### MobileNetV1-300(预装) - mAP: 18% + +具有[MobileNet V1](https://tfhub.dev/tensorflow/lite-model/ssd_mobilenet_v1/1/metadata/2)主干和300x300输入分辨率的SSD物体检测器。 + +|手机/设备 (fps) | CPU | GPU | NNAPI | +|------------------|-----|-----|-------| +| 三星 S22 Ultra | 33 | 13 | 30 | +| 三星 S20FE 5G | 34 | 57 | 87 | +| 华为 P30 Pro | 36 | 25 | 10 | +| 谷歌 Pixel 6XL | 35 | 42 | 53 | +| 小米 Mi9 | 22 | 41 | 33 | +| 谷歌 Pixel 4XL | 37 | 36 | 45 | + +#### MobileNetV3-320 - mAP: 16% + +具有MobileNet V3主干和320x320输入分辨率的SSD物体检测器。 + +|手机/设备 (fps) | CPU | GPU | NNAPI | +|------------------|-----|-----|-------| +| 三星 S22 Ultra | 30 | 17 | 30 | +| 三星 S20FE 5G | 34 | 42 | 28 | +| 华为 P30 Pro | 32 | 27 | 23 | +| 谷歌 Pixel 6XL | 33 | 43 | 27 | +| 小米 Mi9 | 20 | 45 | 10 | +| 谷歌 Pixel 4XL | 32 | 38 | 21 | + +#### YoloV4-tiny-224 - mAP: 22% + +[YoloV4](https://arxiv.org/abs/2004.10934)的精简版,输入分辨率为224x224。 + +|手机/设备 (fps) | CPU | GPU | NNAPI | +|------------------|-----|-----|-------| +| 三星 S22 Ultra | 31 | 12 | 31 | +| 三星 S20FE 5G | 30 | 21 | 14 | +| 华为 P30 Pro | 27 | 17 | 22 | +| 谷歌 Pixel 6XL | 29 | 24 | 19 | +| 小米 Mi9 | 16 | 14 | 9.3 | +| 谷歌 Pixel 4XL | 22 | 19 | 14 | + +#### YoloV4-tiny-416 - mAP: 29% + +[YoloV4](https://arxiv.org/abs/2004.10934)的精简版,输入分辨率为416x416。 + +|手机/设备 (fps) | CPU | GPU | NNAPI | +|------------------|-----|-----|-------| +| 三星 S22 Ultra | 13 | 9.8 | 13 | +| 三星 S20FE 5G | 12 | 9.4 | 7.7 | +| 华为 P30 Pro | 8.4 | 7.6 | 6.9 | +| 谷歌 Pixel 6XL | 10 | 9.6 | 7.2 | +| 小米 Mi9 | 9.0 | 7.3 | 5.0 | +| 谷歌 Pixel 4XL | 7.2 | 7.4 | 6.2 | + +#### YoloV4-224 - mAP: 40% + +[YoloV4](https://arxiv.org/abs/2004.10934)输入分辨率为224x224。 + +|手机/设备 (fps) | CPU | GPU | NNAPI | +|------------------|-----|-----|-------| +| 三星 S22 Ultra | 3.7 | 5.6 | 3.5 | +| 三星 S20FE 5G | 3.1 | 7.1 | 4.2 | +| 华为 P30 Pro | 2.4 | 6.2 | 0.7 | +| 谷歌 Pixel 6XL | 2.7 | 11 | 0.9 | +| 小米 Mi9 | 2.1 | 6.4 | 1.7 | +| 谷歌 Pixel 4XL | 1.8 | 5.0 | 3.7 | + +#### YoloV5s-320 - mAP: 28% + +[YoloV5](https://github.com/ultralytics/yolov5)输入分辨率为320x320。 + +|手机/设备 (fps) | CPU | GPU | NNAPI | +|------------------|-----|-----|-------| +| 三星 S22 Ultra | 21 | 10 | 21 | +| 小米 Mi9 | 13 | 15 | 0.8 | +| 谷歌 Pixel 4XL | 12 | 17 | 18 | + +#### YoloV5s-640 - mAP: 34% + +[YoloV5](https://github.com/ultralytics/yolov5)输入分辨率为640x640。 + +# OpenBot + +

+ English | + 简体中文 | + Deutsch +

+ +|手机/设备 (fps)| CPU | GPU | NNAPI | +|--------------|-----|-----|-------| +| Samsung S22 Ultra| 5.5 | 4.9 | 5.0 | +| Xiaomi Mi9 | 4.1 | 4.6 | - | +| Google Pixel 4XL | 3.7 | 4.6 | 4.6 | + +#### YoloV5m-320 - mAP: 35% + +[YoloV5](https://github.com/ultralytics/yolov5) 输入分辨率为320x320。 + +|手机/设备 (fps)| CPU | GPU | NNAPI | +|--------------|-----|-----|-------| +| Samsung S22 Ultra| 13 | 8.2 | 11 | +| Xiaomi Mi9 | 9.7 | 9.9 | - | +| Google Pixel 4XL | 7.9 | 9.2 | 15 | + +#### YoloV5l-320 - mAP: 38% + +[YoloV5](https://github.com/ultralytics/yolov5) 输入分辨率为320x320。 + +|手机/设备 (fps)| CPU | GPU | NNAPI | +|--------------|-----|-----|-------| +| Samsung S22 Ultra| 7.6 | 3.4 | 7.6 | +| Xiaomi Mi9 | 5.5 | 5.0 | - | +| Google Pixel 4XL | 5.3 | 4.0 | 5.3 | + +#### EfficientDet-L0-320 - mAP: 26% + +[EfficientDet-L0](https://tfhub.dev/tensorflow/lite-model/efficientdet/lite0/detection/metadata/1) 输入分辨率为320x320。注意:模型在横屏模式下性能会下降,可能需要调整置信度阈值。 + +|手机/设备 (fps)| CPU | GPU | NNAPI | +|--------------|-----|-----|-------| +| Samsung S22 Ultra| 18 | 10 | 16 | +| Xiaomi Mi9 | 16 | 20 | 1.2 | +| Google Pixel 4XL | 17 | 17 | 16 | + +#### EfficientDet-L1-384 - mAP: 31% + +[EfficientDet-L1](https://tfhub.dev/tensorflow/lite-model/efficientdet/lite1/detection/metadata/1) 输入分辨率为384x384。注意:模型在横屏模式下性能会下降,可能需要调整置信度阈值。 + +|手机/设备 (fps)| CPU | GPU | NNAPI | +|--------------|-----|-----|-------| +| Samsung S22 Ultra| 12 | 9.2 | 10 | +| Xiaomi Mi9 | 10 | 13 | - | +| Google Pixel 4XL | 11 | 11 | 10 | + +#### EfficientDet-L2-448 - mAP: 34% + +[EfficientDet-L2](https://tfhub.dev/tensorflow/lite-model/efficientdet/lite2/detection/metadata/1) 输入分辨率为448x448。注意:模型在横屏模式下性能会下降,可能需要调整置信度阈值。 + +|手机/设备 (fps)| CPU | GPU | NNAPI | +|--------------|-----|-----|-------| +| Samsung S22 Ultra| 9.8 | 8.4 | 8.2 | +| Xiaomi Mi9 | 6.4 | 9.4 | - | +| Google Pixel 4XL | 7.7 | 8.3 | 7.6 | + +### 默认 + +[DefaultActivity](src/main/java/org/openbot/original/DefaultActivity.java) 包含了OpenBot应用的所有重要功能,集成在一个屏幕上。它显示与车辆的连接状态,并报告来自车辆传感器的测量值。机器人可以通过标准的蓝牙游戏控制器或运行OpenBot [控制器应用](../controller)的另一部智能手机进行控制。我们还实现了一个数据记录器,用于收集机器人的数据集。目前,我们记录以下传感器的读数:相机、陀螺仪、加速度计、磁力计、环境光传感器和气压计。通过Android API,我们能够获得以下传感器读数:RGB图像、角速度、线性加速度、重力、磁场强度、光强度、大气压力、纬度、经度、高度、方位和速度。除了手机传感器外,我们还记录通过串行链接传输的车身传感器读数(车轮里程计、障碍物距离和电池电压)。如果连接了控制器,我们还会记录和时间戳控制信号。最后,我们集成了几种用于跟随人和自主导航的神经网络。 + +

+ App GUI +

+ +#### USB连接 + +与[设置菜单](#settings-menu)相同。 + +#### 车辆状态 + +**电池**字段显示Arduino通过分压器测量的电池电压。**速度 (l,r)**字段报告(前)轮的左、右速度(单位:rpm)。它由Arduino通过光学车轮速度传感器测量。**声纳**字段显示车前的空闲空间(单位:厘米)。它由Arduino通过超声波传感器测量。注意,只有在USB连接建立几秒钟后,您才会收到数值。 + +#### 控制 + +第一个按钮用于选择**控制模式**。有两种不同的控制模式: + +- **游戏手柄**:应用程序接收来自连接的蓝牙控制器的控制信号。 +- **手机**:机器人可以通过安装了控制器应用的另一部智能手机或通过连接到同一网络的计算机上运行的Python脚本进行控制。 + +第二个按钮用于选择**驾驶模式**。使用游戏控制器(例如PS4)时,有三种不同的驾驶模式: + +- **游戏**:使用右肩和左肩触发器(R2,L2)进行前进和倒车油门,并使用任意一个摇杆进行转向。此模式模仿赛车视频游戏的控制模式。 +- **摇杆**:使用任意一个摇杆控制机器人。 +- **双摇杆**:使用左、右摇杆分别控制车的左、右侧。这是原始的差速转向。 + +第三个按钮用于选择**速度模式**。有三种不同的速度模式: + +- **慢速**:施加到电机的电压限制为输入电压的50%(约6V)。 +- **正常**:施加到电机的电压限制为输入电压的75%(约9V)。 +- **快速**:没有限制。全油门时将施加输入电压的全部电压(约12V)。*这是运行神经网络的默认设置。* + +以更高的速度运行会减少电机的寿命,但更有趣。发送到机器人的控制信号显示在右侧。使用游戏控制器时,可以通过按下右摇杆(R3)增加速度模式,通过按下左摇杆(L3)减少速度模式。 + +#### 数据记录 + +有四种不同的记录模式: + +- **only_sensors**:保存所有传感器数据,但不保存图像。 +- **crop_img**:保存所有传感器数据和裁剪后的图像,图像的输入尺寸与网络一致。这是默认设置,应该用于数据收集。 +- **preview_img**:保存所有传感器数据和全尺寸图像。这将需要大量内存并且可能会很慢。然而,它非常适合编译FPV视频。 +- **all_imgs**:保存所有传感器数据以及裁剪后的和全尺寸图像。这将需要大量内存并且可能会很慢。 + +右侧的开关用于切换记录开关。在游戏控制器上,可以通过X按钮切换此开关。 + +#### 相机 + +第一个项目显示预览分辨率。第二个项目显示裁剪分辨率。这是用作神经网络输入的图像。您会注意到,这个分辨率会根据您选择的模型而变化。如果您训练自己的自动驾驶仪,请确保选择`AUTOPILOT_F`模型。裁剪分辨率应显示为`256x96`。右侧的开关用于在后置和前置相机之间切换。 + +#### 模型 + +应用程序附带两个模型: + +- **MobileNetV1-300**:此模型用于跟随人。它使用带有MobileNet V1骨干的SSD对象检测器。该模型经过量化以在嵌入式设备上获得更好的性能。它随应用程序一起提供。 +- **CIL-Mobile**:此模型用于自主导航。它将直接从相机输入预测控制。它可能在您的环境中不起作用。您应该按照我们的说明训练自己的[驾驶策略](../../policy)并替换它。 + +可以从模型管理屏幕下载其他模型。 + +右侧的开关用于打开和关闭网络。当网络运行时,它会为机器人生成控制信号,并禁用游戏控制器。然而,您仍然可以使用游戏控制器上的按钮,例如使用R1触发按钮切换此开关以重新获得对机器人的控制。 + +#### 设备 + +使用下拉菜单选择神经网络应在其上执行的设备。您有以下选择: + +- **CPU**:使用CPU适用于大多数手机,是默认选择。您可以调整线程数以优化性能。 +- **GPU**:大多数智能手机都有GPU。具有大输入(如图像)的网络通常在GPU上运行更快。 +- **NNAPI**:这将使用[TensorFlow Lite NNAPI委托](https://www.tensorflow.org/lite/performance/nnapi)。现代智能手机通常配有专用的AI加速器。[神经网络API](https://developer.android.com/ndk/guides/neuralnetworks)(NNAPI)为具有图形处理单元(GPU)、数字信号处理器(DSP)和神经处理单元(NPU)的Android设备上的TensorFlow Lite模型提供加速。注意,在一些较旧的手机上,这可能会非常慢! + +如果模型处于活动状态,运行模型的设备旁边将显示推理速度(单位:毫秒)。 + +## 添加您自己的片段 + +请参考[贡献指南](ContributionGuide.md)了解如何向OpenBot应用添加您自己的片段。 + +## 代码结构 + +[TensorFlow Lite对象检测Android演示](https://github.com/tensorflow/examples/tree/master/lite/examples/object_detection/android)被用作集成TFLite模型和获取相机视频流的起点。[DefaultActivity](src/main/java/org/openbot/robot/DefaultActivity.java)运行主线程,并继承自[CameraActivity](src/main/java/org/openbot/robot/CameraActivity.java)以管理相机和UI。[SensorService](src/main/java/org/openbot/robot/SensorService.java)读取所有其他手机传感器并记录它们。[ServerService](src/main/java/org/openbot/robot/ServerService.java)和[NsdService](src/main/java/org/openbot/robot/NsdService.java)与具有React前端的本地[Python服务器](../../policy/README.md#web-app)建立连接。如果您收集数据,它可以自动上传以进行可视化、训练ML模型并将训练好的模型下载到机器人。[env](src/main/java/org/openbot/env)文件夹包含实用类,如[Vehicle](src/main/java/org/openbot/env/Vehicle.java)接口、[GameController](src/main/java/org/openbot/env/GameController.java)接口、[PhoneController](src/main/java/org/openbot/env/PhoneController.java)接口和用于声音反馈的[AudioPlayer](src/main/java/org/openbot/env/AudioPlayer)。[tflite](src/main/java/org/openbot/tflite)文件夹包含[Autopilot](src/main/java/org/openbot/tflite/Autopilot.java)和[Detector](src/main/java/org/openbot/tflite/Detector.java)网络的模型定义。 + +## 下一步(可选) + +训练您自己的[驾驶策略](../../policy/README.md) \ No newline at end of file diff --git a/body/README.zh-CN.md b/body/README.zh-CN.md new file mode 100644 index 000000000..eac7e3af8 --- /dev/null +++ b/body/README.zh-CN.md @@ -0,0 +1,59 @@ +# OpenBot: 机器人主体 + +

+ English | + 简体中文 | + Deutsch +

+ +你可以在亚马逊上购买一个[即插即用 (RTR)](rtr) 的 OpenBot: +- [RTR-TT](https://buy.openbot.org/rtr-tt) +- [RTR-520](https://buy.openbot.org/rtr-520) + +对于大宗订单请求,请通过电子邮件联系我们。 + +## 自行构建 + +你可以围绕一个微控制器(如 Arduino Nano)构建任何轮式机器人主体,以便与 OpenBot 软件栈一起使用。我们设计了一个[3D打印的主体](diy)用于轮式机器人,该机器人依赖于低成本、易于获得的业余硬件。[OpenBot Lite](lite) 是 OpenBot DIY 版本的一个更小和简化的变体,专为教育而开发。即使你不想构建它,你也可能会发现[逐步视频指南](lite/#step-by-step-video-guides)很有帮助。我们还设计了一个[3D打印的主体](rc_truck)用于市售的1:16比例遥控卡车(例如[这个](https://www.amazon.de/dp/B00M3J7DJW))。我们还提供了构建[多地形车辆](mtv)的蓝图,作为使用 OpenBot 框架进行户外项目的通用平台。 + +以下是一些带有构建说明和详细信息的示例: + + + + + + + + + + + + + + + + +
+ DIY + + + + Lite + + + + RC Truck + + + + Multi-Terrain Vehicle + + + + RTR + +
DIY Lite RC Truck Multi-Terrain Vehicle RTR
+ +## 下一步 + +烧录[Arduino 固件](../firmware/README.md) \ No newline at end of file diff --git a/body/diy/README.de-DE.md b/body/diy/README.de-DE.md index 80f44c67e..d434a6e08 100644 --- a/body/diy/README.de-DE.md +++ b/body/diy/README.de-DE.md @@ -2,11 +2,11 @@

English | - 简体中文 | + 简体中文 | Deutsch

-Wir haben einen Körper für einen Radroboter entworfen, der auf kostengünstiger, leicht verfügbarer Hobby-Hardware basiert. Unten finden Sie Anweisungen zum Bau Ihres eigenen Roboters. Wenn Sie weitere Fragen oder Bedenken haben, können Sie uns gerne kontaktieren. Viel Spaß beim Roboterbau! +Wir haben ein Chassis für einen fahrenden Roboter entworfen, der auf kostengünstiger, leicht verfügbarer Hobby-Hardware basiert. Unten finden Sie Anweisungen zum Bau Ihres eigenen Roboters. Wenn Sie weitere Fragen oder Bedenken haben, können Sie uns gerne kontaktieren. Viel Spaß beim Roboterbau! ## Chassis diff --git a/body/diy/README.zh-CN.md b/body/diy/README.zh-CN.md new file mode 100644 index 000000000..fea5b1fb6 --- /dev/null +++ b/body/diy/README.zh-CN.md @@ -0,0 +1,236 @@ +# OpenBot DIY + +

+ English | + 简体中文 | + Deutsch +

+ +我们设计了一种轮式机器人的主体,依赖于低成本、易于获取的业余硬件。你可以在下面找到构建你自己的机器人的说明。如果你有任何进一步的问题或疑虑,请随时联系我们。祝你构建机器人愉快! + +## 底盘 + +### 3D打印 + +你需要打印并组装以下部件来构建你的OpenBot。 + +#### 机器人主体 + +根据你的需求和3D打印机的能力,有几种不同的机器人主体可供选择。我们鼓励你设计和构建自己的主体,但这里有一些起点供你参考: + +- [常规主体](cad/regular_body/README.md):这是我们设计的标准主体;需要一个至少240mmx150mm的打印板。 +- [纤细主体](cad/slim_body/README.md):由于许多常见的3D打印机有较小的打印体积,我们还设计了一个没有保险杠的较小版本,可以在45度角的220mmx220mm打印板上打印。 +- [可粘合主体](cad/glue_body/README.md):对于打印体积更小的3D打印机,还有一个由@sloretz设计的模块化主体,需要将几个部分粘合在一起;适合150mmx140mm的打印板。 +- [块状主体](cad/block_body/README.md):由@Christos-Ps设计的这个主体提供了多个变体,具有外壳内额外空间和兼容乐高的顶部,同时保持了仅需221mmx150mm的打印面积。 + +#### 手机支架 + +此外,你还需要打印一个手机支架并固定到机器人主体上。 + +- phone_mount_bottom ([STL](../phone_mount/phone_mount_bottom.stl), [STEP](../phone_mount/phone_mount_bottom.step)) +- phone_mount_top ([STL](../phone_mount/phone_mount_top.stl), [STEP](../phone_mount/phone_mount_top.step)) + +#### 清理 + +在你继续构建之前,你可能需要清理3D打印件。 +

+ + + +

+ +### 替代方案 + +如果你无法使用3D打印机,有几种Arduino机器人车套件可供选择,这些套件可以作为起点。这些套件包含底盘、电机和配件。我们建议购买一个基本套件,因为你不需要更昂贵套件中的许多电子元件和传感器。以下是一些选项: + +- Perseids DIY Robot Smart Car Chassis Kit ([EU](https://www.amazon.de/dp/B07DNXBNHY), [US](https://www.amazon.com/dp/B07DNXBFQN)) +- SZDoit 4WD Smart Metal Robot Car Chassis Kit ([US](https://www.amazon.com/dp/B083K4RKBP), [AE](https://www.aliexpress.com/item/33048227237.html)) +- Joy-it Robot Car Kit 01 ([EU](https://www.amazon.de/dp/B073ZGJF28)) +- Smart Car Kit 4WD Smart Robot Car Chassis Kit ([AE](https://www.aliexpress.com/item/4001238626191.html)) + +你还需要一个手机支架。以下是一些选项: + +- Phone Mount ([EU](https://www.amazon.de/dp/B06XDYJNSR), [US](https://www.amazon.com/dp/B09CY8MC2R)) + +你也可以发挥创意,使用你选择的材料(例如木材、纸板、泡沫塑料等)构建自己的OpenBot底盘和手机支架。如果你这样做了,请在[Slack频道](https://github.com/intel-isl/OpenBot#contact)上发布一些照片,让其他人欣赏你的创意。以下是[@custom-build-robots](https://custom-build-robots.com/roboter/openbot-dein-smartphone-steuert-ein-roboter-auto-chassis-bauen/13636)的一个例子: + +

+ + + +

+ +## 组装 + +有两种不同的机器人组装选项,DIY和PCB。DIY方法依赖于流行的L298N电机驱动器,推荐给有一些电子经验的爱好者。它需要相当多的布线,特别是如果安装了所有传感器和LED。然而,所有组件在大多数国家都很容易获得,特别是对于单个构建或只是尝试该项目,推荐使用DIY选项。为了减少布线并使组装更容易,我们还开发了一个[定制PCB](pcb)。如果你希望构建更整洁或想要构建多个OpenBot,推荐使用这个选项。 + +### 材料清单 + +我们的机器人主体依赖于易于获取的业余电子元件。我们提供了德国(EU)和美国(US)的快速运输链接。如果你有耐心等待更长时间,你也可以从AliExpress(AE)以更便宜的价格获取组件。你将需要以下组件。 + +#### 必需组件 + +- 1x Arduino Nano ([EU](https://www.amazon.de/dp/B01MS7DUEM), [US](https://www.amazon.com/dp/B00NLAMS9C), [AE](https://www.aliexpress.com/item/32866959979.html)) +- 4x TT电机和轮胎 ([EU](https://www.conrad.de/de/p/joy-it-com-motor01-getriebemotor-gelb-schwarz-passend-fuer-einplatinen-computer-arduino-banana-pi-cubieboard-raspbe-1573543.html), [US](https://www.amazon.com/dp/B081YQM55P), [AE](https://www.aliexpress.com/item/4000126948489.html)) +- 3x 18650电池 ([EU](https://www.conrad.de/de/p/conrad-energy-18650-usb-spezial-akku-18650-li-ion-3-7-v-1400-mah-1525536.html), [US](https://www.amazon.com/dp/B083K4XSKG), [AE](https://www.aliexpress.com/item/32352434845.html)) +- 1x 18650电池架 ([EU](https://www.amazon.de/dp/B075V25QJ9), [US](https://www.amazon.com/dp/B07DWQYD7H), [AE](https://www.aliexpress.com/item/33037738446.html)) +- 1x USB OTG电缆 ([EU](https://www.amazon.de/gp/product/B075M4CQHZ) ,[US](https://www.amazon.com/dp/B07LBHKTMM), [AE](https://www.aliexpress.com/item/10000330515850.html)) +- 1x 弹簧或橡皮筋 ([EU](https://www.amazon.de/gp/product/B01N30EAZO/), [US](https://www.amazon.com/dp/B008RFVWU2), [AE](https://www.aliexpress.com/item/33043769059.html)) +- 16x M3x25螺丝 ([EU](https://www.amazon.de/dp/B07KFL3SSV), [US](https://www.amazon.com/dp/B07WJL3P3X), [AE](https://www.aliexpress.com/item/4000173341865.html)) +- 16x M3螺母 ([EU](https://www.amazon.de/dp/B07JMF3KMD), [US](https://www.amazon.com/dp/B071NLDW56), [AE](https://www.aliexpress.com/item/32977174437.html)) +- 6x M3x5螺丝 ([EU](https://www.amazon.de/dp/B01HBRG3W8), [US](https://www.amazon.com/dp/B07MBHMLL2), [AE](https://www.aliexpress.com/item/32892594230.html)) +- 杜邦线 ([EU](https://www.amazon.de/dp/B07KYHBVR7), [US](https://www.amazon.com/dp/B07GD2BWPY), [AE](https://www.aliexpress.com/item/4000766001685.html)) + +#### 可选组件 + +- 2 x 速度传感器 ([EU](https://www.conrad.de/de/p/joy-it-sen-speed-erweiterungsmodul-passend-fuer-einplatinen-computer-arduino-banana-pi-cubieboard-raspberry-pi-pc-1646891.html), [US](https://www.amazon.com/dp/B081W2TY6Q), [AE](https://www.aliexpress.com/i/32850602744.html)) +- 1x 超声波传感器 ([EU](https://www.amazon.de/dp/B00LSJWRXU), [US](https://www.amazon.com/dp/B0852V181G/), [AE](https://www.aliexpress.com/item/32713522570.html)) +- 1x 开关 ([EU](https://www.amazon.de/dp/B07QB22J62), [US](https://www.amazon.com/dp/B01N2U8PK0), [AE](https://www.aliexpress.com/item/1000005699023.html)) +- 2x 橙色LED 5mm ([EU](https://www.amazon.de/gp/product/B01NCL0UTQ), [US](https://www.amazon.com/dp/B077XD7MVB), [AE](https://www.aliexpress.com/item/4000329069943.html)) +- 1x OLED显示屏 ([EU](https://www.amazon.de/dp/B079H2C7WH), [US](https://www.amazon.com/dp/B085NHM5TC), [AE](https://www.aliexpress.com/item/4001268387467.html)) + +#### DIY组件(选项1) + +- 1x L298N电机驱动器 ([EU](https://www.conrad.de/de/p/joy-it-motormodul-2-u-4-phasen-6-bis-12v-1573541.html), [US](https://www.amazon.com/dp/B085XSLKFQ), [AE](https://www.aliexpress.com/item/32994608743.html)) +- (可选)电阻器(2x 150用于LED,20 k和10k用于分压器) +- (组合)4x TT电机和轮胎 + 2x L298N + 杜邦线 ([US](https://www.amazon.com/dp/B07ZT619TD)) +- (组合)4x TT电机和轮胎 + 电线 + 螺丝 ([US](https://www.amazon.com/dp/B07DRGTCTP)) + +#### PCB组件(选项2) + +- 1x [定制PCB](pcb) +- 5x Micro JST PH 2.0电缆 ([EU](https://www.amazon.de/gp/product/B07449V33P), [US](https://www.amazon.com/dp/B09JZC28DP), [AE](https://www.aliexpress.com/item/32963304134.html)) + +### 构建说明 + +**提示:** 点击图片可以在新标签页中以全分辨率打开。 + +#### 选项1:DIY + +

+ + +

+ +**提示:** 为了使所有布线更容易,你可以通过将一个6x2公头焊接到一个洞洞板上来构建一个小型电源分配器。然后将电源分配器连接到电机驱动器的5V / GND。 + +# 组装指南 + +

+ English | + 简体中文 | + Deutsch +

+ +1. 将电线焊接到电机上,如果你打算使用速度传感器,请将编码器盘安装到前面的两个电机上。 +

+ + +

+2. 将左侧两个电机的正负极插入L298N板的OUT1(+)和OUT2(-),将右侧两个电机的正负极插入L298N板的OUT4(+)和OUT3(-)。 +3. 使用八颗M3x25螺丝和螺母安装电机。 +

+ + + +

+4. 使用四颗M3x5螺丝安装L298N。 +5. (可选)安装超声波传感器,并将角度连接器替换为直连接器(或小心弯曲引脚)。 +

+ + + +

+6. (可选)安装用于指示信号的橙色LED。 +

+ + + +

+7. 使用两颗M3x25螺丝和螺母将手机支架的底部安装到顶板上。 +

+ + + +

+8. 插入手机支架的顶部并安装弹簧或橡皮筋。 +

+ + +

+9. 将角度连接器替换为直连接器(或小心弯曲引脚),然后使用每个M3x5螺丝安装速度传感器。 +

+ + + +

+10. 安装电池盒(例如魔术贴)。 +

+ + + +

+11. (可选)插入开关并将其放入电流路径中。 + 1. 将开关推入相应的开口,直到听到咔哒声。 + 2. 将电池盒的红色电线(12V)和电源线分别焊接到开关的一个引脚上。连接黑色电线(GND),并用热缩管覆盖连接处。 + 3. 用胶带固定电线。 +

+ + + +

+12. (可选)安装OLED显示屏。 +13. 将L298N的PWM输入连接到Arduino的D5、D6、D9和D10引脚。 +14. 将速度传感器和超声波传感器连接到5V和GND。 +15. 将速度传感器的D0引脚分别连接到Arduino的D2(左)和D3(右)引脚。 +16. 将超声波传感器的Echo和Trigger引脚分别连接到Arduino的D11和D12引脚。 +17. (可选)将LED连接到Arduino的D4(左)和D7(右)引脚以及GND。建议串联一个150欧姆的电阻以限制电流。 +18. (可选)将分压器连接到Arduino的A7引脚。它用于测量电池电压。 +19. (可选)通过I2C总线将OLED显示屏(SSD1306芯片)连接到Arduino Nano。 + 1. 将显示屏的VIN和GND引脚连接到5V和GND。 + 2. 将显示屏的SCL引脚连接到A5引脚。 + 3. 将显示屏的SDA引脚连接到A4引脚。 +20. 将电源线连接到L298N的+12V和GND。 +21. 将USB线连接到Arduino,并通过顶盖引出。 +22. 将六颗M3螺母插入底板,并用六颗M3x25螺丝安装顶盖。 +23. 安装轮子。 + +#### 选项2:定制PCB + +1. 将带有Micro JST PH 2.0连接器的电线焊接到电机上,如果你打算使用速度传感器,请将编码器盘安装到前面的两个电机上。 +

+ + +

+2. 使用八颗M3x25螺丝和螺母安装电机。 +

+ + + +

+3. 将左侧两个电机连接到M3和M4,将右侧两个电机连接到M1和M2。 +

+ +

+4. 使用四颗M3x5螺丝安装PCB,并使用八颗M3x25螺丝和螺母安装电机。 +

+ + +

+5. 按照DIY选项中的步骤5-12进行操作。 +6. 将超声波传感器(VCC/+、Trig、Echo、GND/-)连接到PCB上标有*SONAR*的4针插头。 +

+ +

+7. 将左侧和右侧指示信号(橙色LED)连接到PCB上标有*SIGNAL_L*和*SIGNAL_R*的2针插头。较长的引脚为+,较短的为-。 +8. 将左侧和右侧速度传感器(VCC/+、GND/-、D0)连接到PCB上标有*SPEED_L*和*SPEED_R*的3针插头。 +9. (可选)将OLED显示屏(SSD1306芯片)连接到PCB上的IO2插头。 + 1. 将显示屏的VIN和GND引脚连接到5V和GND。 + 2. 将显示屏的SCL引脚连接到A5引脚。 + 3. 将显示屏的SDA引脚连接到A4引脚。 +10. 将电源线连接到PCB的Vin(Micro JST PH 2.0连接器)。 +11. 按照DIY选项中的步骤21-23进行操作。 + +## 下一步 + +刷写 [Arduino 固件](../../firmware/README.md) \ No newline at end of file diff --git a/body/diy/README_CN.md b/body/diy/README_CN.md deleted file mode 100644 index 619d2575b..000000000 --- a/body/diy/README_CN.md +++ /dev/null @@ -1,174 +0,0 @@ -# OpenBot 中文版说明 - -

- English | - 简体中文 -

- -我们为轮式机器人设计了一个车身,该车身依赖于低成本,随时可用的业余爱好硬件。 - -![Assembly](../../docs/images/assembly.gif) - -## 3D打印机身 - -您将需要打印以下部分用来组装您的OpenBot机器车。 - -1) 车身底部 ([STL](cad/body_bottom.stl), [STEP](cad/body_bottom.step)) -2) 车身顶部 ([STL](cad/body_top.stl), [STEP](cad/body_top.step)) -3) 手机支架底部 ([STL](../phone_mount_bottom.stl), [STEP](../phone_mount_bottom.step)) -4) 手机支架顶部 ([STL](../phone_mount_top.stl), [STEP](../phone_mount_top.step)) - -对于上述零件,你的构建板至少需要240mmx150mm。 - -由于很多常见的3D打印机的构建体积较小,我们还制作了一个[slim body](cad/slim_body/README_CN.md),它适合在220mmx220mm的构建板上以45度的角度进行构建。 - -对于在3D打印机上打印更小的构建量,还有一个[glueable body](cad/glue_body/README_CN.md),适合在150mmx140mm的构建板上打印。感谢@sloretz。 - -在Ultimaker S5上,我们通过以下设置获得了良好的效果: - -- 层高:0.2mm -- 壁厚:1.5mm -- 填充密度:20% -- 填充图案:网格 -- 打印速度80毫米/秒 -- 无支持 - -我们能够使用PLA,ABS和CPE打印机箱。 根据我们的经验,打印设置不受打印设置的影响很大。 但是,如果您有耐心,则打印速度较慢且层高度较小的纸张会改善打印质量。 另外,添加支撑结构可以改善打印效果,但是添加的支撑之后需要进行额外的工作才能去除。 - -中国用户可以在淘宝找商家打印。注意以下事项: - -- PLA材料 3D打印机身 - - 层高:0.2mm - - 壁厚:1.5mm - - 填充密度:20% - - 填充图案:网格 - - 机身数量 共4块 - - 建议价格:¥120.00以内(含邮费) - -## 部件 - -机器人的组装有两种不同的选择:DIY和PCB。 DIY方法依赖于流行的L298N电机驱动器,建议具有一定电子经验的业余爱好者使用。 它需要大量的接线,尤其是在安装所有传感器和LED的情况下。但是,在大多数情况下,所有组件都很容易获得,尤其是对于只需要制作一部车身或只是为了尝试项目,建议使用DIY选项。同时为了减少布线并简化组装,我们还开发了[custom PCB](pcb)。 如果您想要制作过程更简单或想要多个OpenBots车身,则建议这样做。 - -### 料清单 - -我们的机器人主体依靠随时可用的爱好电子设备。 我们提供快速运输到德国(EU)和美国(US)的链接。 如果您有耐心等待更长的时间,您也可以从速卖通(AE)那里购买便宜得多的组件。中国用户建议在淘宝购买。您将需要以下组件。 - -(通用) - -- Arduino nano V3.0 CH340G 改进版 - - 数量 1 - - 价格:¥5.49 - - [淘宝购买](https://s.click.taobao.com/iI1K4xu) -- 直流减速电机+智能小车车轮cbot - - 数量 4 - - 价格:¥10.00 - - [淘宝购买](https://s.click.taobao.com/GA955xu) -- 18650大容量充电锂电池 - - 数量 3 - - 价格:¥16.80 - - [淘宝购买](https://s.click.taobao.com/5jj45xu) , [领券](https://s.click.taobao.com/ww855xu) -- BS电池盒 5号/五号/七号7号18650电池盒 - - 数量 1 - - 价格:¥1.59 - - [淘宝购买](https://s.click.taobao.com/tzcJ4xu) -- T型口转type-c 连接线 - - 数量 1 - - 价格:¥25.00 - - [淘宝购买](https://s.click.taobao.com/FKmZVvu) -- 304不锈钢拉簧拉力拉伸带钩弹簧 - - 数量 1 - - 价格:¥0.60 - - [淘宝购买](https://s.click.taobao.com/nj1Kzwu) -- M2.5 M3 304不锈钢圆头一字螺丝*25mm - - 数量 16 - - 价格:¥4.00 - - [淘宝购买](https://s.click.taobao.com/GGF45xu) -- 304不锈钢六角螺母小螺丝帽 - - 数量 16 - - 价格:¥18.00 - - [淘宝购买](https://s.click.taobao.com/3roD0xu) -- M3* 5 螺丝 - - 数量 6 - - 价格:¥2.18 - - [淘宝购买](https://s.click.taobao.com/WHO55xu) , [领券](https://s.click.taobao.com/6Np45xu) -- 杜邦线 - - 数量 1 - - 价格:¥2.80 - - [淘宝购买](https://s.click.taobao.com/nfSJ4xu) - -(仅DIY) - -- L298N 开发板 - - 数量 1 - - 价格:¥14.92 - - [淘宝购买](https://s.click.taobao.com/pyt45xu) , [领券](https://s.click.taobao.com/C1nJ4xu) -- (可选) 电阻器(2x 150用于LED,20k和10k用于分压器) -- (Combo) 4x TT马达和轮胎+2x L298N+dupont电缆 ([US](https://www.amazon.com/dp/B07ZT619TD)) -- (Combo) 4x TT马达和轮胎+电线+螺丝 ([US](https://www.amazon.com/dp/B07DRGTCTP)) - -(仅PCB) - -- 1x [自定义PCB](pcb) -- 5条Micro JST PH 2.0电缆([淘宝购买](https://s.click.taobao.com/HYyOTvu)) - -(可选) - -- 测速传感器 Tacho Sensor 3.3V-5V - - 数量 2 - - 价格:¥3.80 - - [淘宝购买](https://s.click.taobao.com/jMA45xu) -- HC-SR04超声波测距模块传感器 - - 数量 1 - - 价格:¥2.69 - - [淘宝购买](https://s.click.taobao.com/q5545xu) -- 21*15mm 开关 - - 数量 1 - - 价格:¥1.60 - - [淘宝购买](https://m.tb.cn/h.VzbvV36) -- 5mm发光二极管橘色 (接线需要分压器, 新手不太建议) - - 数量 2 - - 价格:¥1.98 - - [淘宝购买](https://s.click.taobao.com/rjXJ4xu) - -## 制作说明 - -### 选项1:自己动手做 - -![Wiring Diagram](../../docs/images/wiring_diagram.png) - -1. 如有必要,将线连接到电动机 -2. 将两个电动机的正极和负极引线插入L298N板的OUT1(+)和OUT2(-) -3. 将其他两个电动机的正极和负极引线插入L298N板的OUT4(+)和OUT3(-) -4. 用4个M3x5螺钉安装L298N,用8个M3x25螺钉和螺母安装电动机。 -5. (可选)安装超声波传感器和橙色LED -6. 使用两个M3x25螺钉和螺母将手机支架的底部安装到顶板上 -7. 插入手机支架的顶部并安装弹簧或橡皮筋 -8. 用一颗M3x5螺钉安装速度传感器 -9. 安装电池盒 -10. (可选)插入电源开关 -11. 将L298N的PWM输入连接到Arduino的引脚D5,D6,D9和D10 -12. 将速度传感器和超声波传感器连接到5V和GND -13. 将速度传感器的D0连接到Arduino的D2引脚(左)和D3(右侧) -14. 将超声波传感器的回声和触发器连接到Arduino的D11和D12引脚 -15. 将USB电缆连接到Arduino,并将其穿过顶盖 -16. (可选)将LED连接到Arduino和GND的D4引脚(左)和D7引脚(右) -17. (可选)将分压器连接至Arduino的A7引脚 -18. 将电池电缆连接至L298N的Vin。如果安装了交换机,请将其放在当前路径中。 -19. 将六个M3螺母插入底板,然后用六个M3x25螺钉安装顶盖 -20. 安装车轮 - -### 选项2:定制PCB - -1. 将带有Micro JST PH 2.0连接器的导线焊接到电机上。 -2. 将左边两个电机连接到 M3 和 M4,右边两个电机连接到 M1 和 M2。 -3. 用四个 M3x5 螺丝安装 PCB,用八个 M3x25 螺丝和螺母安装电机。 -4. 按照DIY选项中的步骤5-10进行。 -5. 将LED、速度传感器和超声波传感器连接到PCB上。 -6. 将USB电缆连接到Arduino,并将其穿过顶盖。 -7. 将电池连接到PCB的Vin(Micro JST PH 2.0连接器)。如果你安装了开关,把它放在电流路径上。 -8. 按照DIY选项中的步骤19-20。 - -## 下一步 - -烧录[Arduino固件](../../firmware/README_CN.md) - diff --git a/body/diy/cad/block_body/README.zh-CN.md b/body/diy/cad/block_body/README.zh-CN.md new file mode 100644 index 000000000..91cf78a2d --- /dev/null +++ b/body/diy/cad/block_body/README.zh-CN.md @@ -0,0 +1,44 @@ +# Blocky Body with Additional Space and Lego Support + +

+ English | + 简体中文 | + Deutsch +

+ +这个机器人底盘提供了一些额外的高度,使得安装所有电子设备更加容易,并且顶部兼容乐高。这一版本具有与[常规底盘](../regular_body/)相同的结构完整性能力,同时增加了额外的功能,例如OpenBot外壳内的额外空间、用于游戏和学习的乐高兼容顶部,以及适合较小打印床尺寸的占地面积,同时保持保险杠。 + +![Block CAD](../../../../docs/images/block_cad.jpg) + +## 部件 + +您需要打印底部部件和其中一个顶部部件: + +- `block_body_bottom`([STL](block_body_bottom.stl), [STEP](block_body_bottom.step)):底部部件 +- `block_body_top`([STL](block_body_top.stl), [STEP](block_body_top.step)):基本顶部部件 +- `block_body_top_lego`([STL](block_body_top_lego.stl), [STEP](block_body_top_lego.step)):带有乐高兼容表面的基本顶部部件 +- `block_body_top_big`([STL](block_body_top_big.stl), [STEP](block_body_top_big.step)):带有额外电子设备空间的大型顶部部件 +- `block_body_top_lego`([STL](block_body_top_big_lego.stl), [STEP](block_body_top_big_lego.step)):带有乐高兼容表面的大型顶部部件 + +对于上述部件,您的打印板需要至少221x150mm。 + +## 打印设置 + +为了获得最佳效果,我们建议使用以下打印设置: + +- 层高:0.2mm +- 墙线数:3(更多的墙线可以提高较大表面的结构完整性) +- 顶层:5 +- 底层:4 +- 填充率:25% +- 填充图案:同心(这种设置似乎可以节省时间和塑料) +- 打印速度:50mm/秒 +- 生成支撑:是 +- 支撑图案:同心 +- 支撑密度:15% +- 启用支撑边缘:是 +- 构建板粘附类型:无 + +祝您机器人制作愉快! + +![Block Body](../../../../docs/images/block_body.jpg) \ No newline at end of file diff --git a/body/diy/cad/glue_body/README.de-DE.md b/body/diy/cad/glue_body/README.de-DE.md index 5781d11ef..85e247d71 100644 --- a/body/diy/cad/glue_body/README.de-DE.md +++ b/body/diy/cad/glue_body/README.de-DE.md @@ -2,7 +2,7 @@

English | - 简体中文 | + 简体中文 | Deutsch

diff --git a/body/diy/cad/glue_body/README.zh-CN.md b/body/diy/cad/glue_body/README.zh-CN.md new file mode 100644 index 000000000..2a1a58900 --- /dev/null +++ b/body/diy/cad/glue_body/README.zh-CN.md @@ -0,0 +1,30 @@ +# 可粘合机身 + +

+ English | + 简体中文 | + Deutsch +

+ +一些3D打印机的构建体积太小,无法打印全尺寸的OpenBot机身。 +此文件夹包含分成4个部分的OpenBot机身。 +它可以用最小为150mmx140mm的构建板打印,然后粘合在一起。 + +![可粘合机身](../../../../docs/images/glue_body.jpg) + +## 部件 + +所需部件: + +1) `glue_body_bottom_A` ([STL](glue_body_bottom_A.stl), [STEP](glue_body_bottom_A.step)) +2) `glue_body_bottom_B` ([STL](glue_body_bottom_B.stl), [STEP](glue_body_bottom_B.step)) +3) `glue_body_top_A` ([STL](glue_body_top_A.stl), [STEP](glue_body_top_A.step)) +4) `glue_body_top_B` ([STL](glue_body_top_B.stl), [STEP](glue_body_top_B.step)) + +可选部件: + +这些部件提供了额外的粘合表面积,如果您的打印件出现翘曲,这些部件可以提供帮助。 + +* `glue_connector_bottom` ([STL](glue_connector_bottom.stl), [STEP](glue_connector_bottom.step)) +* `glue_connector_top_A` ([STL](glue_connector_top_A.stl), [STEP](glue_connector_top_A.step)) +* `glue_connector_top_B` ([STL](glue_connector_top_B.stl), [STEP](glue_connector_top_B.step)) \ No newline at end of file diff --git a/body/diy/cad/glue_body/README_CN.md b/body/diy/cad/glue_body/README_CN.md deleted file mode 100644 index 50a7dec82..000000000 --- a/body/diy/cad/glue_body/README_CN.md +++ /dev/null @@ -1,30 +0,0 @@ -# 可粘合机身 - -

- English | - 简体中文 -

- - -有些3D打印机的构建体积太小,无法打印完整尺寸的OpenBot本体。 -这个文件夹包含了分成4块的OpenBot本体。 -它可以用小到150mmx140mm的构建板打印,然后粘合在一起。 - -![可胶合机身](../../../../docs/images/glue_body.jpg) - -## 部件 - -必需的部件: - -1) `glue_body_bottom_A` ([STL](glue_body_bottom_A.stl), [STEP](glue_body_bottom_A.step)) -2) `glue_body_bottom_B` ([STL](glue_body_bottom_B.stl), [STEP](glue_body_bottom_B.step)) -3) `glue_body_top_A` ([STL](glue_body_top_A.stl), [STEP](glue_body_top_A.step)) -4) `glue_body_top_B` ([STL](glue_body_top_B.stl), [STEP](glue_body_top_B.step)) - -可选部件: - -这些片提供了额外的表面面积来上胶,,如果您的印刷品出现变形,这些部件可以帮助您。 - -* `glue_connector_bottom`([STL](glue_connector_bottom.stl), [STEP](glue_connector_bottom.step)) -* `glue_connector_top_A` ([STL](glue_connector_top_A.stl), [STEP](glue_connector_top_A.step)) -* `glue_connector_top_B` ([STL](glue_connector_top_B.stl), [STEP](glue_connector_top_B.step)) \ No newline at end of file diff --git a/body/diy/cad/regular_body/README.md b/body/diy/cad/regular_body/README.md index fbbd11d49..de81e757b 100644 --- a/body/diy/cad/regular_body/README.md +++ b/body/diy/cad/regular_body/README.md @@ -2,7 +2,7 @@

English | - 简体中文 | + 简体中文 | Deutsch

diff --git a/body/diy/cad/regular_body/README.zh-CN.md b/body/diy/cad/regular_body/README.zh-CN.md new file mode 100644 index 000000000..8b432916e --- /dev/null +++ b/body/diy/cad/regular_body/README.zh-CN.md @@ -0,0 +1,31 @@ +# Regular Body + +

+ English | + 简体中文 | + Deutsch +

+ +![Assembly](../../../../docs/images/assembly.gif) + +## 零件 + +您需要打印以下零件来组装您的 OpenBot。 + +- `body_bottom` ([STL](body_bottom.stl), [STEP](body_bottom.step)) +- `body_top` ([STL](body_top.stl), [STEP](body_top.step)) + +对于上述零件,您的打印板需要至少为 240mmx150mm。 + +## 打印设置 + +在 Ultimaker S5 上,我们使用以下设置取得了良好的效果: + +- 层高:0.2mm +- 壁厚:1.5mm +- 填充密度:20% +- 填充图案:网格 +- 打印速度:80 mm/s +- 无支撑 + +我们能够使用 PLA、ABS 和 CPE 打印底盘。根据我们的经验,打印设置对打印结果的影响不大。然而,如果您有耐心,较慢的打印速度和较小的层高将改善打印效果。此外,添加支撑结构可以改善打印,但之后需要额外的工作来移除。 \ No newline at end of file diff --git a/body/diy/cad/slim_body/README.de-DE.md b/body/diy/cad/slim_body/README.de-DE.md index c9f1c1979..a6adb8233 100644 --- a/body/diy/cad/slim_body/README.de-DE.md +++ b/body/diy/cad/slim_body/README.de-DE.md @@ -2,7 +2,7 @@

English | - 简体中文 | + 简体中文 | Deutsch

diff --git a/body/diy/cad/slim_body/README.md b/body/diy/cad/slim_body/README.md index 217897e71..1f52fe894 100644 --- a/body/diy/cad/slim_body/README.md +++ b/body/diy/cad/slim_body/README.md @@ -2,7 +2,7 @@

English | - 简体中文 | + 简体中文 | Deutsch

diff --git a/body/diy/cad/slim_body/README.zh-CN.md b/body/diy/cad/slim_body/README.zh-CN.md new file mode 100644 index 000000000..a372ffb32 --- /dev/null +++ b/body/diy/cad/slim_body/README.zh-CN.md @@ -0,0 +1,26 @@ +# Slim Body + +

+ English | + 简体中文 | + Deutsch +

+ +一些3D打印机的构建体积太小,无法打印全尺寸的OpenBot机身。 +此文件夹包含OpenBot机身的瘦身版本。 +当部件旋转45度时,可以在220mmx220mm的构建板上打印。 + +![Slim Body](../../../../docs/images/slim_body.jpg) + +## 部件 + +1) `slim_body_bottom` ([STL](slim_body_bottom.stl), [STEP](slim_body_bottom.step)) +2) `slim_body_top` ([STL](slim_body_top.stl), [STEP](slim_body_top.step)) + +为了使其适应,您可能需要调整以下设置以获得最大的打印区域。 + +- 将*构建板粘附类型*设置为“无”(边缘、裙边和筏子会增加打印的整体尺寸) +- 禁用预热块(在*构建板*部分) +- 禁用第二个挤出机(如果您的打印机有的话) + +如果您有一点额外的空间(223mmx223mm),您还可以打印`slim_body_top_rim` ([STL](slim_body_top_rim.stl), [STEP](slim_body_top_rim.step))。它有一个稍大的边缘,使得更容易取下顶部。 \ No newline at end of file diff --git a/body/diy/cad/slim_body/README_CN.md b/body/diy/cad/slim_body/README_CN.md deleted file mode 100644 index 0e45ef2e6..000000000 --- a/body/diy/cad/slim_body/README_CN.md +++ /dev/null @@ -1,25 +0,0 @@ -# 超薄版车身 - -

- English | - 简体中文 -

- -有些 3D 打印机的构建量太小,无法打印完整尺寸的 OpenBot 机身。 -这个文件夹包含超薄版的OpenBot车身。 -当零件旋转45度时,它可以用220mmx220mm的构建板打印。 - -![超薄机身](../../../../docs/images/slim_body.jpg) - -## 部件 - -1) `slim_body_bottom`([STL](slim_body_bottom.stl), [STEP](slim_body_bottom.step)) -2) `slim_body_top`([STL](slim_body_top.stl), [STEP](slim_body_top.step)) - -为了使其合适,您可能需要调整以下设置以获得最大的印刷面积。 - -- 将 `Build Plate Adhesion Type`设置为 `None`(檐部、裙部和筏部会增加印刷品的整体尺寸)。 -- 禁用主图块(在*Build Plate*部分)。 -- 禁用第二台挤出机(如果您的打印机有)。 - -如果你有额外的空间(223mmx223mm),你也可以打印`slim_body_top_rim`([STL](slim_body_top_rim.stl), [STEP](slim_body_top_rim.step))。它的边缘略大,使其更容易取下顶部。 \ No newline at end of file diff --git a/body/diy/pcb/README.de-DE.md b/body/diy/pcb/README.de-DE.md index 65d42808c..e2a5148d3 100644 --- a/body/diy/pcb/README.de-DE.md +++ b/body/diy/pcb/README.de-DE.md @@ -2,7 +2,7 @@

English | - 简体中文 | + 简体中文 | Deutsch

diff --git a/body/diy/pcb/README.zh-CN.md b/body/diy/pcb/README.zh-CN.md new file mode 100644 index 000000000..038c73a15 --- /dev/null +++ b/body/diy/pcb/README.zh-CN.md @@ -0,0 +1,34 @@ +# 定制PCB + +

+ English | + 简体中文 | + Deutsch +

+ +定制PCB作为Arduino Nano的载板,集成了现代电机驱动器、电压分压电路和LED电阻。Arduino只需插入针脚头,所有传感器和LED通过杜邦线连接到相应的连接器。 + +![PCB_2D](../../../docs/images/pcb_2d_v2.png) +![PCB_3D](../../../docs/images/pcb_3d_v2.png) + +最新的PCB是[版本2](v2)。与[版本1](v1)相比,这里是一些变化: + +- 将右侧速度传感器移动到D3引脚以启用中断功能 +- 添加主电池的电源LED +- 更新一些更常见的组件 +- 将电压分压器更新为20k/10k以提高精度 +- 更改电机连接器为直立版本以便于访问 + +如果你已经订购了[版本1](v1)的PCB([2D视图](../../../docs/images/pcb_2d_v1.png),[3D视图](../../../docs/images/pcb_3d_v1.png)),不用担心,它仍然可以正常工作。只需确保在固件中设置正确的标志。 + +定制PCB涉及以下步骤: + +1) **订购PCB**:下载[Gerber](v2/gerber_v2.zip)文件并在你选择的供应商处订购PCB。你也可以直接在[PCBWay](https://www.pcbway.com/project/shareproject/OpenBot__Turning_Smartphones_into_Robots.html)上订购,我们在这里分享了一个OpenBot项目。 +2) **订购组件**:下载[BOM](v2/BOM_v2.csv)并在你选择的供应商处订购组件,例如[LCSC](https://lcsc.com)。 +3) **组装PCB**:你可以自己组装PCB,也可以让供应商组装。对于自动化组装,你将需要[Centroid File](v2/centroid_file_v2.csv)。如果你在[JLCPCB](https://jlcpcb.com/)订购PCB,可以使用他们的SMT组装服务。然后你只需自己订购并焊接通孔组件。我们发现这是最方便、最便宜和最快的选择。在[版本2](v2)的PCB中,我们更新了组件,以确保所有组件都可以直接从[JLCPCB](https://jlcpcb.com/)获得。 + +你也可以找到提供一站式解决方案的供应商,涵盖所有3个步骤。他们将制造PCB、采购组件并组装PCB。这非常方便且价格也不贵。然而,交货时间通常很长(1-3个月)。 + +在[PCBWay](https://www.pcbway.com/orderonline.aspx)请求报价时,上传Gerber文件后可以选择组装服务。 +![Assembly Service](../../../docs/images/assembly_service.jpg) +在下一步中,你需要上传[BOM](v2/BOM_v2.csv)和[Centroid File](v2/centroid_file_v2.csv)。你的报价将在几天内审核并更新。你可以在审核成本和交货时间后选择继续付款。 \ No newline at end of file diff --git a/body/diy/pcb/README_CN.md b/body/diy/pcb/README_CN.md deleted file mode 100644 index a6691fb95..000000000 --- a/body/diy/pcb/README_CN.md +++ /dev/null @@ -1,34 +0,0 @@ -# 定制PCB - -

- English | - 简体中文 -

- - -定制PCB充当Arduino Nano的载板,并集成了现代电机驱动器,分压器电路和LED电阻器。只需将Arduino插入引脚,所有传感器和LED都通过杜邦线连接到适当的连接器。 - -![PCB_2D](../../../docs/images/pcb_2d_v2.png) -![PCB_3D](../../../docs/images/pcb_3d_v2.png) - -最新的PCB是[版本2](v2)。以下是与[版本1](v1)相比的更改: - -- 将右边的速度传感器移到D3引脚,以实现停止功能 -- 为主电池添加电源LED -- 更新一些更常用的组件 -- 将分压器更新为20k/10k,以实现更高的精度 -- 将电机连接器更改为直立版本,以便于操作 - -如果您已经订购了PCB的[版本1](v1)([2D视图](../../../docs/images/pcb_2d_v1.png),[3D视图](../../../docs/images/pcb_3d_v1.png) ,请放心,它会正常工作。只要确保在固件中设置正确的标志即可。 - -定制PCB涉及以下步骤: - -1)**订购PCB:** 下载[Gerber](v2/gerber_v2.zip)文件,然后在您选择的供应商处订购PCB。您也可以直接在我们共享了OpenBot项目的[PCBWay](https://www.pcbway.com/project/shareproject/OpenBot__Turning_Smartphones_into_Robots.html)上订购PCB。 -2)**订购组件:** 下载[BOM](v2/BOM_v2.csv)并在您选择的供应商处订购组件,例如[LCSC](https://lcsc.com)。 -3)**PCB的组装:** 您既可以自己组装PCB,也可以由供应商组装。对于自动组装,您需要[Centroid File](v2/centroid_file_v2.csv)。如果您通过[JLCPCB](https://jlcpcb.com/)订购PCB,则可以使用其SMT组装服务。然后,您只需要自己订购和焊接通孔组件。我们发现这是最方便,最便宜和最快的选择。在PCB的[版本2](v2)中,我们更新了组件,以确保可以从[JLCPCB](https://jlcpcb.com/)直接获得所有组件。 - -您还可以找到可以为您提供涵盖所有3个步骤的TurnKey解决方案的供应商。他们将制造PCB,采购组件并组装PCB。这非常方便并且也不太昂贵。但是,交货时间通常很长(1-3个月)。 - -在[PCBWay](https://www.pcbway.com/orderonline.aspx)上请求报价时,可以在上载Gerber文件后选择组装服务。 -![组装服务](../../../docs/images/assembly_service.jpg) -在下一步中,您将需要上传[BOM](v2/BOM_v2.csv)和[Centroid File](v2/centroid_file_v2.csv)。您的报价将在几天之内进行审核和更新。然后,您可以在查看费用和交货时间后选择继续付款。 \ No newline at end of file diff --git a/body/lite/README.zh-CN.md b/body/lite/README.zh-CN.md new file mode 100644 index 000000000..aa020b7b2 --- /dev/null +++ b/body/lite/README.zh-CN.md @@ -0,0 +1,71 @@ +# OpenBot for Education + +

+ English | + 简体中文 | + Deutsch +

+ +ITE 的 eSpace 已经开发了一套围绕 OpenBot 软件栈的 [课程](#curriculum),旨在提供经济且可扩展的 AI 和机器人教育。该课程以 [逐步指导的 YouTube 视频](#step-by-step-video-guides) 形式呈现,指导您组装 [OpenBot Lite](#openbot-lite-arduino),安装必要的软件,使用跟随功能以及训练和部署您自己的自动驾驶策略。 + +## OpenBot Lite + +OpenBot Lite 是 OpenBot DIY 版本的一个更小且简化的变体。这个极简版本由 ITE 的 eSpace 开发,旨在利用 OpenBot 软件栈的巨大潜力,为经济且可扩展的 AI 和机器人教育服务。OpenBot Lite 支持 [micro:bit](https://microbit.org/)(加上专有 IO 板)或 Arduino Nano。下图显示了左侧的 micro:bit 变体和右侧的 Arduino 变体。 + +

+ +

+ +## 课程 + +该课程已在韩国和德国的教育工作者中进行了测试,已有超过 100 名学生通过该课程学习了 AI 和机器人。以下是我们在线培训的一些成果: + +* [韩国](https://fb.watch/bDK2Vjgm3g/) +* [德国](https://www.facebook.com/EspaceCW/posts/5087394677946975) + +跟随功能展示: + +

+ +

+ +策略学习基于一个 2.4m x 1.8m 的街道布局的游戏场地。机器人学习在这条街道上自主驾驶并避开障碍物。这使得课程适合家庭学习。 + +

+ +

+ +训练后的自动驾驶展示: + +

+ +

+ +## 逐步视频指南 + +以下是按顺序排列的 YouTube 播放列表: + +Arduino 版本: +1. [OpenBot Lite 组装(Arduino)](https://youtube.com/playlist?list=PLNKFHX5MRn52za5VeteCmvLNcL1Kowtw2) +2. [跟随功能](https://youtube.com/playlist?list=PLNKFHX5MRn501oWvPbKzP1zkcqhLU5TOh) +3. [策略学习](https://youtube.com/playlist?list=PLNKFHX5MRn5233AyCWhcn71JdB9qIEa-E) + +micro:bit 版本: +1. [OpenBot Lite 组装(micro:bit)](https://youtube.com/playlist?list=PLNKFHX5MRn51xVKHo2VCY-KbOFQrkOm2R) +2. [跟随功能](https://youtube.com/playlist?list=PLNKFHX5MRn51crWis1lwFJXj69DN9evG1) +3. [micro:bit 代码解释](https://youtube.com/playlist?list=PLNKFHX5MRn51DfspxVo16BkfXz8y9uR7N) +4. [策略学习](https://youtube.com/playlist?list=PLNKFHX5MRn5233AyCWhcn71JdB9qIEa-E) + +## 致谢 + +如果您觉得这些材料有帮助,请点赞视频并订阅 eSpace 频道。如果您成功组装了自己的 OpenBot Lite,并使跟随功能和/或自动驾驶功能正常工作,欢迎在社交媒体和 [Slack](https://join.slack.com/t/openbot-community/shared_invite/zt-jl8ygxqt-WNRNi9yzh7Lu60qui6Nh6w) 上分享您的成功故事和 OpenBot 视频。您还可以在社交媒体上支持和关注正在开发教育材料的 Willam Tan 和 eSpace 团队。 + +* [OpenBot Slack 频道](https://join.slack.com/t/openbot-community/shared_invite/zt-jl8ygxqt-WNRNi9yzh7Lu60qui6Nh6w) +* [eSpace 的 Facebook](https://www.facebook.com/EspaceCW) +* [eSpace 的 Instagram](https://www.instagram.com/EspaceCW/) + +我们期待您的成功故事和视频。祝您玩得开心! + +## 下一步 + +刷写 [Arduino 固件](../../firmware/README.md) \ No newline at end of file diff --git a/body/mtv/README.zh-CN.md b/body/mtv/README.zh-CN.md new file mode 100644 index 000000000..81d9cc316 --- /dev/null +++ b/body/mtv/README.zh-CN.md @@ -0,0 +1,697 @@ +# OpenBot: 多地形车辆 (MTV) 车身 + +

+ English | + 简体中文 | + Deutsch +

+ +我们在此提出了一个原始 [OpenBot](https://www.openbot.org/) 车辆的全地形替代方案。由 **Ivy Tech LTD** 合作开发的多地形车辆 (MTV) 也基于廉价且易于打印的组件。MTV 的设计灵感来自过去几十年为月球和火星探索开发的多个探测车概念。MTV 采用 6 个驱动轮,按照摇杆-摇臂配置排列。与大多数月球或火星探测车不同,这些轮子不能径向旋转。因此,该车辆的操作方式类似于坦克,使得手动控制相当直观。 + +

+ App GUI +

+ +## I. 3D 打印 + +您需要打印以下部件以组装您的 OpenBot MTV。 + +

+ App GUI +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID 组别项目名称数量图片(不按比例)材料时长成本
A1电机组件电机外壳顶部
(STL, STEP)
6

App GUI

498g36小时€23.51
A2电机外壳底部
(STL, STEP)
6

App GUI

A3电机支架
(STL, STEP)
6

App GUI

251g17.5小时€11.98
A4关节90度关节
(STL, STEP)
2

App GUI

228g20.5小时€15.05
A5100度关节
(STL, STEP)
1

App GUI

A6100度关节镜像
(STL, STEP)
1

App GUI

A7端部关节
(STL, STEP)
2

App GUI

A8腿部前腿
(STL, STEP)
4

App GUI

317g22.5小时€14.97
A9中腿
(STL, STEP)
2

App GUI

A10后腿
(STL, STEP)
2

App GUI

A11轴承盖轴承盖
(STL, STEP)
4

App GUI

13g1.5小时€0.60
A12手机支架平台手机支架平台
(STL, STEP)
1

App GUI

19g2小时€0.91
A13前缓冲器前部名称
(STL, STEP)
1

App GUI

228g20.5小时€15.04
A14后部名称
(STL, STEP)
1

App GUI

A15左缓冲器
(STL, STEP)
1

App GUI

A16右缓冲器
(STL, STEP)
1

App GUI

A17隔间隔间后部
(STL, STEP)
1

App GUI

413g32小时€22.75
A18隔间前部
(STL, STEP)
1

App GUI

316g22小时€17.42
A19前屋顶
(STL, STEP)
1

App GUI

58g5.5小时€3.19
A20后屋顶
(STL, STEP)
1

App GUI

140g13.5小时€7.73
A21ab电池安装P1 & P2
(STL, STEP) +
(STL, STEP)
1

App GUI

15g1.5小时€0.80
A22灯罩端盖
(STL, STEP)
4

App GUI

47g4小时€2.58
A23前灯
(STL, STEP)
4

App GUI

A24电池访问盖
(STL, STEP)
1

App GUI

+ +# II. 机电装配 + +

+ English | + 简体中文 | + Deutsch +

+ +### II.1. 材料清单 + +我们的机器人主体依赖于现成的业余电子产品。我们提供了德国(EU)和美国(US)的链接,快速发货。如果你有耐心等待更长时间,你也可以从AliExpress(AE)以更便宜的价格购买这些组件。你将需要以下组件。 + + + +# 物料清单 + +

+ English | + 简体中文 +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID 描述图片供应商单价数量总成本
O1JGB37-520 直流电机带编码器 - 12V | 178RPM

App GUI

AE$8.93 | €8.126$53.58 | €48.72
O22.8" Talon 轮胎 (2 个)

App GUI

US | EU$26.95 | €23.066$161.7 | €138.36
O37 芯电缆 0.5 mm² (5m)

App GUI

US | EU $25.53 | €20.610.25$6.38 | €5.15
O4D-Line 电缆槽。20mm x 10mm x 1m (2 个)

App GUI

US | EU$12.00 | €9.991$12.00 | €9.99
O5PG7 电缆接头 3~6.5mm (50 个)

App GUI

US | EU$8.99 | €9.990.5$4.49 | €4.99
O6MR126ZZ 轴承 6x12x4mm (4 个)

App GUI

AE$5.52 | €3.451$5.52 | €3.45
O7INJORA 90mm RC 车弹簧减震器 (2 个)

App GUI

AE$8.30 | €7.991$8.30 | €7.99
O8AXSPEED RC 车 LED 4.2v-6v 白色 17mm (2 个)

App GUI

AE$7.43 | €6.871$7.43 | €6.87
O9AXSPEED RC 车 LED 4.2v-6v 红色 17mm (2 个)

App GUI

AE$7.43 | €6.871$7.43 | €6.87
O10减震器 M3 x 8mm 螺柱 (4 个)

App GUI

US | EU$8.09 | €9.491$8.09 | €9.49
O11Zeadio 通用智能手机支架

App GUI

US | EU$11.99 | €10.991$11.99 | €10.99
O12DC 12-24 V 车用电压表

App GUI

US | EU$10.99 | €11.881$10.99 | €11.88
O13迷你摇杆开关 (20 个)

App GUI

US | EU + +# MTV 组装指南 + +

+ English | + 简体中文 +

+ +外部采购组件的总成本估计约为 **500€**,因此 MTV 的总成本约为 **600€**。 + +### II.2. 机械组装 + +#### II.2.1. 概述 + +本章涵盖了 MTV 的组装过程。请注意,文中提到的左侧和右侧分别是机器人的左舷和右舷,可以互换使用。除非另有说明,否则所有螺栓都假定配有平垫圈以保护 3D 打印的塑料。此外,使用弹簧垫圈和尼龙锁通常可以防止由于振动导致的螺母松动。 + +MTV 的组装过程可以分为七个主要步骤,即: +1. 组装 6 个电机模块 +2. 组装腿部 +3. 组装底盘 +4. 组装主舱 +5. 组装车辆 +6. 组装电源单元、控制单元并连接不同组件 +7. 测试、编程和使用 + +

+ App GUI +

+ +#### II.2.2. 电机模块的组装 + +每个电机模块由以下部分组成: + +- 1 x 3D 打印的 电机外壳顶部 (A1) +- 1 x 3D 打印的 电机外壳底部 (A2) +- 1 x 3D 打印的 电机支架 (A3) +- 1 x 带编码器和轮子适配器的 JGB37-520 直流电机 (O1) +- 1 x PG7 电缆接头 (O5) + +组装电机模块: + +1. 首先将套件中提供的控制电缆 (O1) 连接到电机。强烈建议使用一点热熔胶固定此连接。 +2. 小心对齐电机固定图案与 3D 打印的电机外壳 (A1) 孔图案。确保不要对编码器施加任何力,以免损坏它。使用套件中提供的螺钉 (O1) 将电机固定到 3D 打印的电机外壳 (A1) 上。 +3. 使用提供的内六角扳手将套件中的联轴器套筒 (O1) 固定到电机轴上。将固定轮子的螺母安全地拧在六角轮毂中,因为稍后在将轮胎 (O2) 安装到车辆上时需要用到它。 +4. 将电机支架 (A3) 插入电机外壳顶部 (A1)。这是一个推合配合,滑动时可能需要一些小心对齐。请注意,电机支架的肩部(如下图所示)应面向电机轴的一侧,以便更整洁的组装。确保电机支架 (A3) 与电机外壳顶部 (A1) 紧密配合。使用热熔胶或强力胶固定组件。 +5. 将电缆接头 (O5) 添加到电机外壳底部 (A2),并通过接头穿过电机线。 +6. 小心地将电机外壳底部 (A2) 插入电机外壳顶部 (A1),直到电机外壳底部 (A2) 完全插入。确保电机支架 (A3) 与电机外壳顶部 (A1) 齐平。注意不要将电线卡在编码器上——编码器需要自由旋转。 +7. 使用 M4 x 60mm 螺栓 (O23) 和尼龙锁螺母 (O28) 将电机外壳顶部 (A2) 与电机支架 (A3) 固定。 + +

+ App GUI +

+

+ App GUI +

+ +#### II.2.3. 腿部的组装 + +MTV 的左腿由以下部分组成: + +- 1 x 3D 打印的 90 度接头 (A4) +- 1 x 3D 打印的 端接头 (A7) +- 1 x 3D 打印的 轴承盖 (A11) +- 1 x 3D 打印的 100 度接头 (A5) +- 2 x 3D 打印的 前腿 (A8) +- 1 x 3D 打印的 中腿 (A9) +- 1 x 3D 打印的 后腿 (A10) +- 1 x D-Line 电缆槽 (O4) +- 1 x 7 芯电缆 (O3) +- 1 x MR126ZZ 球轴承 (O6) + +MTV 的右腿由以下部分组成: + +- 1 x 3D 打印的 90 度接头 (A4) +- 1 x 3D 打印的 端接头 (A7) +- 1 x 3D 打印的 轴承盖 (A11) +- 1 x 3D 打印的 100 度接头镜像 (A6) +- 2 x 3D 打印的 前腿 (A8) +- 1 x 3D 打印的 中腿 (A9) +- 1 x 3D 打印的 后腿 (A10) +- 1 x D-Line 电缆槽 (O4) +- 1 x 7 芯电缆 (O3) +- 1 x MR126ZZ 球轴承 (O6) + +组装 90 度接头 (A4) 和相关的腿部 (A8)(2x 前腿 + 中腿)以形成前腿组件(左右)。使用 M4 x 40mm 螺栓 (O24)、平垫圈 (O30)、弹簧垫圈 (O30) 和螺母 (O28) 将腿部固定到接头上。在腿部组件中使用 M4 钻导孔(在中腿中有 3 个导孔,端部 2 个应为 M4,中部应为 M3,将用于安装减震器)。将后腿 100 度接头 (A5)(或镜像 A6)和后腿连接,形成左舷和右舷完整的腿部组件,并使用 M4 x 40mm 螺栓 (O24)、平垫圈 (O30)、弹簧垫圈 (O30) 和螺母 (O28) 固定腿部。 + +

+ App GUI +

+ +#### II.2.4. 底盘的组装 + +使用 M4 x 40mm 螺栓 (O24)、平垫圈和弹簧垫圈 (O30) 以及螺母 (O28) 将电机支架固定到每条腿的自由端(左右两侧的前腿和后腿)。将轮胎 (O2) 安装到六角轮毂上,并用轮毂螺母固定。MTV 电机包含一个集成的磁编码器用于速度估计,并具有 6 针接口,分别为 `[电机电源 +, 电机电源 -, 编码器电源 +, 编码器电源 -, 编码器数据 1, 编码器数据 2]`。电机与控制 PCB 之间的电气连接应使用 (O3) 7 芯电缆进行: + +

+ App GUI +

+ +完成底盘组装,包括根据需要安装电缆槽 (O4): + +

+ App GUI +

+ +#### II.2.5. 主舱的组装 + +主舱由以下部分组成: + +- 2 x 3D 打印的 轴承盖 (A11) +- 1 x 3D 打印的 手机支架平台 (A12) +- 1 x 3D 打印的 前名牌 (A13) +- 1 x 3D 打印的 后名牌 (A14) +- 1 x 3D 打印的 左缓冲器 (A15) +- 1 x 3D 打印的 右缓冲器 (A16) +- 1 x 3D 打印的 后舱 (A17) +- 1 x 3D 打印的 前舱 (A18) +- 1 x 3D 打印的 前车顶 (A19) +- 1 x 3D 打印的 后车顶 (A20) +- 1 x 3D 打印的 电池安装支架 P1 (A21a) +- 1 x 3D 打印的 电池安装支架 P2 (A21b) +- 4 x M4 x 120mm 螺钉 (O26) +- 6 x PG7 电缆接头 (O5) +- 1 x M6 螺纹杆 (O21) + +使用 M3 x 15mm (O25)、平垫圈 (O28) 和尼龙锁螺母 (O28) 将后舱 (A17) 与前舱 (A18) 连接,形成舱体组件。使用导孔钻 M3 孔以进行连接。 + +

+ App GUI +

+ +在底盘上钻轴承连接孔,并将轴承 (O6) 插入轴承盖 (A11),使用 4 个 M3 x 30mm 螺栓 (O25)、弹簧垫圈 (O30)、垫圈 (O28) 和尼龙锁 (O28) 将轴承组件固定到舱体组件的外侧。 + +

+ App GUI +

+ +将电缆接头 (O5) 安装到后舱 (A17) 的六个孔上。这六个接头用于将电机线穿入舱内: + +

+ App GUI +

+ +使用 4 个 M3 x 20mm 螺栓 (O25)、弹簧垫圈 (O30)、垫圈 (O28) 和尼龙锁 (O28) 将左缓冲器 (A15) 和右缓冲器 (A16) 固定到舱体组件上。 + +

+ App GUI +

+ +使用 M3 x 15mm 螺栓 (O25) 和尼龙锁 (O28) 将电池安装支架 P1 和 P2 (A21 a & b) 固定到后舱上。将 M6 螺纹杆 (O21) 插入底盘组件,通过轴承的中心孔和电池安装支架 P1&P2 组件。插入螺纹杆时,注意添加舱内所需的 M6 螺母 (O29)。 +- 请注意,舱外有两个 M6 螺母 (O29),它们作为底盘和舱体组件之间的间隔。 +- 还要注意,螺纹杆需要在左右之间平衡,以确保底盘组装的空间。 +- 插入螺纹杆时必须小心,以确保不会对侧壁施加预紧力。 + +

+ App GUI +

+ +#### II.2.6. 车辆的组装 + +将底盘组件固定到舱体两侧的 M6 螺纹杆上,并用 M6 螺母 (O29) 固定: + +

+ App GUI +

+ +将减震器 (O7) 安装在中腿和底盘之间: + +

+ App GUI +

+ +将减震器中的出厂默认弹簧更换为提供的中等弹性套装(黄金弹簧),以确保机器人的车身保持水平。使用减震器 (O10) 和 M3 锁紧螺母 (O28) 提供的垫片和螺栓将活塞端固定到机器人舱体上。使用 M3 x 40 螺栓 (O25) 和尼龙锁 (O28) 固定杆端。按照布线指南将腿部组件的电线引入主机体,并适当使用电缆管理槽。将手机支架安装到前车顶 (A19) 上: +- 将通用智能手机支架 (O11) 安装到手机支架平台 (A12) 上。 +- 将减震器 (O11) 安装到手机支架平台 (A12) 上,并使用锁紧螺母和垫圈将其固定到前车顶 (A19) 上,如图所示。 + +

+ App GUI +

+ +将电压显示器 (O12)、电源控制开关 (O13) 和 Micro USB 面板安装电缆 (O14) 安装到后车顶的指定插槽中。通过车顶切口拉出前后灯 (O8 & O9),并将前车顶 (A19) 和后车顶 (A20) 固定到舱体组件上。将前灯 (O8) 插入前灯插座 (A23),将后灯 (O9) 插入后灯插座 (A24),并固定到前车顶 (A19) 和后车顶 (A20) 的相应插槽中。使用灯罩 (A22) 密封灯座,如下图所示,并使用强力胶将其固定。插入定制的前名牌 (A13) 和后名牌 (A14) 板。 + +

+ App GUI +

+ +### II.3. 电子组装 + +本部分仅涵盖电子板在车辆中的集成。读者可以通过[以下链接](./pcb)找到有关不同 PCB 的架构和组件的补充详细信息。原型 PCB 如下图所示: + +

+ App GUI +

+ +#### II.3.1. 电池与 PCB 的连接 + +MTV 选用的可充电锂聚合物电池通过一组专用连接器连接到电源分配 PCB。一个开关可以防止电池连接器受到火花损坏。由于此开 + +

+ English | + 简体中文 +

+ +

+ App GUI +

+ +#### II.3.3. PCB – 灯光连接 + +前后灯应连接到MTV的主PCB上。开关应放置在MTV的盖子上以控制它们。 + +

+ App GUI +

+ +

+ App GUI +

+ +#### II.3.4. 电源分配PCB组装 + +电源分配板安装在MTV主机壳内。电机电缆在电源分配板就位后通过安装槽拉出。然后将主PCB按如下图所示连接到MTV上: + +

+ App GUI +

+ +主PCB就位后,电机连接电缆被缩短并使用2针、5.08毫米间距的螺钉端子连接到主板。接下来是灯光连接。电源分配PCB的12V和5V电压连接在最后一步连接到MTV。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PCBPCB上印刷的名称图片备注
电源分配PCB + Mount_1 + Mount_2 + Mount_3 + Mount_4 +

App GUI

这些M3类型的安装孔设计用于通过螺钉和螺母将电源分配PCB连接到MTV的连接点。
+ VC_Mount_1 + VC_Mount_2 + VC_Mount_3 + VC_Mount_4 +

App GUI

这些M3类型的安装孔设计用于通过螺钉和螺母将电压转换器连接到电源分配PCB上。
主PCB + Mount_1 + Mount_2 + Mount_3 + Mount_4 +

App GUI

这些M3类型的安装孔设计用于通过螺钉和螺母将主PCB连接到MTV的连接点。
+ MD_Mount_1 + MD_Mount_2 + MD_Mount_3 + MD_Mount_4 +

App GUI

这些M3类型的安装孔设计用于通过螺钉和螺母将电机驱动器连接到主PCB上。
+ +#### II.3.4. MTV顶盖电缆组装 + +主PCB连接好后,MTV顶盖的开关和显示器通过拼接连接器连接。ESP 32的Micro USB编程端口连接到一个“左弯90度Micro USB安装延长线(公对母)”。面板安装USB延长线的母端连接到MTV的盖子上。因此,用户可以插入USB电缆而无需拆下盖子。 + +

+ App GUI +

+ +### II.4. 安全声明 + +*假设MTV将由具有中级或高级机械和电子设备组装技能的个人组装。请在组装和操作机器人时注意自身安全。**Ivy Tech LTD**和**Intel Deutschland GmbH**对用户疏忽造成的任何事故结果不承担责任。* + +- 在组装前仔细阅读手册。 +- 注意3D打印组件的锋利边缘。 +- 操作期间与机器人保持安全距离。 +- 小心不要让手指卡在机器人关节和轮子之间。 +- 不要将机器人存放在阳光直射下。 +- 本产品**不防水**。我们不建议在雨天或潮湿环境中操作MTV。 +- 不要在火源或任何热源附近使用MTV。 +- 不要从高处掉落MTV。 +- 仅使用指定/推荐的工具组装机器人。 +- 不要对螺母、螺栓或机器人部件施加过大的力。 +- 避免在高处激活机器人以防止突然掉落。 +- 不要损坏或将Li-Po电池放入水中。 +- 不要将Li-Po电池连接或接触除建议的端子以外的其他导体。 +- 当机器人没电时,建议将电池从机器人中取出并放入Li-Po安全袋中充电。电池充满电后可以按照下图插回机器人中。 + +

+ App GUI +

+ +

+ App GUI +

+ +## III: 下一步 + +刷写 [Arduino 固件](../../firmware/README.md) \ No newline at end of file diff --git a/body/mtv/pcb/README.zh-CN.md b/body/mtv/pcb/README.zh-CN.md new file mode 100644 index 000000000..c950063b5 --- /dev/null +++ b/body/mtv/pcb/README.zh-CN.md @@ -0,0 +1,50 @@ +## 电子与控制开发 + +

+ English | + 简体中文 | + Deutsch +

+ +### MTV控制架构概述 + +MTV的控制架构是级联类型的。高层命令由运行Intel [OpenBot](https://www.openbot.org/)框架的智能手机计算。这些命令然后传递给ESP32低级控制板,该控制板负责PWM生成以及与不同MTV传感器(如编码器、声纳等)的通信。 + +

+ App GUI +

+ +ESP32低级控制板通过专用的串行-USB接口与智能手机通信。 + +### 组件架构和PCB开发 + +MTV的运动系统围绕六个12V直流电机构建,即漫游车每侧三个电机。每个电机都配有行星齿轮箱以及内置磁编码器,允许速度估计。因此,选择了两个单电机驱动器进行开发。由于需要高电流消耗,设计中添加了重型电机驱动器。由于模块化的原因,即在需要时能够更换电机驱动器,提出了使用现成的电机驱动器进行开发。MTV的整体组件架构如下图所示: + +

+ App GUI +

+ +在设计PCB时,整体尺寸被认为是一个限制因素。因此,PCB的设计被分为两个主要部分,如下所示。即主PCB和电源分配PCB。主PCB容纳系统的主要组件,如ESP32 MCU、2个电机驱动器、电机连接等。电源分配PCB被设计为将11.1V-12V输入电池电源转换为12V和5V。即12V电源:电机驱动器。5V电源:ESP32、电机编码器、前后灯。MTV的设计使用了可充电的11.1V LiPo电池。因此,添加了一个电压显示器作为电池电量指示器。 + +

+ App GUI +

+ +一组定制的2层PCB被设计用于电力生成和控制目的: +

+ App GUI +

+

+ App GUI +

+

+ App GUI +

+PCB的所有组件接口端口都设计为模块化和易于即插即用。此外,12V电源线和5V信号线分开布置,以尽量减少潜在的干扰。设计中还添加了一些额外的5V和12V电源输出端口,以便将来扩展。此外,还在ESP32并行添加了额外的针头,以便用户可以将PCB用作开发板进行未来的扩展活动。原型(部分布线并带有ESP32和电机驱动器)PCB如下图所示: +

+ App GUI +

+ +

+ App GUI +

\ No newline at end of file diff --git a/body/rc_truck/README.de-DE.md b/body/rc_truck/README.de-DE.md index f7f905490..0aeacad60 100644 --- a/body/rc_truck/README.de-DE.md +++ b/body/rc_truck/README.de-DE.md @@ -2,7 +2,7 @@

English | - 简体中文 | + 简体中文 | Deutsch

@@ -206,4 +206,4 @@ Der OpenBot RC-Truck basiert hauptsächlich auf leicht verfügbaren Hobby-Elektr ## Nächstes -Flashen Sie die [Arduino Firmware](../../firmware/README.md) \ No newline at end of file +Flashen Sie die [Arduino Firmware](../../firmware/README.md) diff --git a/body/rc_truck/README.zh-CN.md b/body/rc_truck/README.zh-CN.md new file mode 100644 index 000000000..b3dfa6333 --- /dev/null +++ b/body/rc_truck/README.zh-CN.md @@ -0,0 +1,211 @@ +# OpenBot: RC-Truck 车身 + +

+ English | + 简体中文 | + Deutsch +

+ +我们为广泛使用的1:16比例RC玩具卡车/越野车(例如[这个](https://www.amazon.de/dp/B00M3J7DJW)在亚马逊上)设计了一个机器人车身。 + +![RC-Truck-Banner](/docs/images/rc-truck-banner.jpg) + +我们还有一个通用的[车身](/body/),设计用于依赖低成本、易得的业余硬件的简单轮式机器人。常规OpenBot的构建说明可以在[这里](/body/README.md)找到。 + +## 底盘 + +OpenBot RC-Truck的底盘由两个主要组件组成:(a) 您选择的1:16比例RC玩具卡车和(b) 我们提供的一些定制设计的零件,这些零件可以3D打印。 + +### 1:16 RC玩具卡车 + +要构建您自己的OpenBot RC-Truck,您需要一个1:16比例的RC玩具卡车/越野车。我们提供了德国([EU](https://www.amazon.de/dp/B00M3J7DJW))、([EU](https://www.amazon.de/dp/B088FGVYNW))和美国([US](https://www.amazon.com/gp/product/B09C8XMPQ9))的兼容RC玩具卡车的亚马逊链接,具有快速运输速度。类似的1:16比例玩具卡车也可以在其他在线零售商如eBay、阿里巴巴或AliExpress上找到,通常价格更低但运输速度较慢。 + +无论您选择哪个零售商和版本的RC玩具卡车,请确保它确实是1:16比例的RC卡车。这很重要,因为我们提供的3D打印零件目前仅设计适合1:16比例的卡车,可能需要一些小调整(稍后会详细介绍)。以下是一些兼容的1:16比例RC玩具卡车/越野车的示例。 + +

+   + +         + + + +

+ +### 3D打印 + +您需要打印以下零件以构建您的OpenBot RC-Truck。 + +1) ```main_frame``` ([STL](cad/rc_truck_body/main_frame.stl), [STEP](cad/rc_truck_body/main_frame.step)) +2) ```side_cover``` \[x2\] ([STL](cad/rc_truck_body/side_cover.stl), [STEP](cad/rc_truck_body/side_cover.step)) +3) ```phone_mount_bottom``` ([STL](../phone_mount/phone_mount_bottom.stl), [STEP](../phone_mount/phone_mount_bottom.step)) +4) ```phone_mount_top``` ([STL](../phone_mount/phone_mount_top.stl), [STEP](../phone_mount/phone_mount_top.step)) + +注意,\[xN\]表示您需要打印的特定零件的副本数量(即N)。 + +以下零件是可选的(但推荐)以使您的OpenBot RC-Truck更紧凑和美观。 + +5) ```camera_elevator``` ([STL](cad/rc_truck_body/camera_elevator.stl), [STEP](cad/rc_truck_body/camera_elevator.step)) +6) ```electronics_cover``` \[x2\] ([STL](cad/rc_truck_body/electronics_cover.stl), [STEP](cad/rc_truck_body/electronics_cover.step)) +7) ```spacer``` \[x4\] ([STL](cad/rc_truck_body/spacer.stl), [STEP](cad/rc_truck_body/spacer.step)) +8) ```front_light_spacer``` \[x2\] ([STL](cad/rc_truck_body/front_light_spacer.stl), [STEP](cad/rc_truck_body/front_light_spacer.step)) + +对于上述所有零件,您的打印板需要至少260mmx220mm,这是```main_frame```的打印尺寸。 + +由于许多常见的3D打印机具有较小的构建体积(通常为220mmx220mm),还有两个可行的选项。 +第一个选项是以45度角打印```main_frame```,并增加支撑材料。 +第二个选项需要修改原始的```main_frame```零件。我们推荐使用[Autodesk Fusion 360](https://www.autodesk.com/products/fusion-360/overview)进行此类CAD修改(Fusion 360提供免费的1年学术许可证)。 +对于此选项,我们提供其[STEP](/body/cad/rc_truck_body/main_frame.step)文件,您可以将其切割成两/三个较小的部分。 +然后,生成的子部分将适合标准(即220mmx220mm)的打印板,并可以在打印后组装在一起。 +将来,我们可能还会在此处发布这种模块化版本的```main_frame```。所有其他零件需要最小的打印板尺寸为220mmx60mm。 + +在Ultimaker S5上,我们使用以下设置取得了良好的效果: + +- 层高:0.2mm +- 壁厚:1.5mm +- 填充密度:20% +- 填充模式:网格 +- 打印速度:80 mm/s +- 无支撑 + +我们能够使用PLA、CPE和ABS打印底盘。根据我们的经验,打印设置对打印影响不大。然而,如果您有耐心,较慢的打印速度和较小的层高将改善打印效果。此外,添加支撑结构可以改善打印,但需要额外的工作来移除。 + +在您继续构建之前,您可能需要清理3D打印件。然而,使用上述设置,我们在构建过程中不需要任何打磨或清理。如果可能,我们建议使用两种不同颜色(例如绿色/黑色或红色/黑色)组合打印同一个OpenBot RC-Truck的不同部分,如下所示。 + +**提示:** 点击图片在新标签页中以全分辨率打开。 + +

+ + + +

+ +## 组装 + +虽然可以采用类似于常规OpenBot的DIY方法构建您的OpenBot RC-Truck(参见OpenBot的DIY构建组件和说明[这里](/body/README.md)),我们推荐使用OpenBot的[定制PCB](/body/pcb)来构建和组装OpenBot RC-Truck。如果您希望构建更整洁或希望构建多个OpenBot RC-Truck,这个选项是推荐的。使用我们的[定制PCB](/body/pcb)的另一个优势是,您可以使用相同的组件构建并在不同的OpenBot车身之间切换。 + +### 材料清单 + +OpenBot RC-Truck主要依赖于易得的业余电子产品。我们提供了德国(EU)和美国(US)具有快速运输速度的亚马逊链接。如果您有耐心等待更长时间,您也可以从AliExpress(AE)以更便宜的价格获得组件。您将需要以下组件。 + +#### 必需组件 + +- 1x RC玩具卡车/越野车([EU](https://www.amazon.de/dp/B00M3J7DJW), [EU](https://www.amazon.de/dp/B088FGVYNW), [US](https://www.amazon.com/gp/product/B09C8XMPQ9)) +- 1x Arduino Nano([EU](https://www.amazon.de/dp/B01MS7DUEM), [US](https://www.amazon.com/dp/B00NLAMS9C), [AE](https://www.aliexpress.com/item/32866959979.html)) +- 1x OpenBot [定制PCB](/body/pcb) +- 1x USB OTG电缆([EU](https://www.amazon.de/gp/product/B075M4CQHZ), [US](https://www.amazon.com/dp/B07LBHKTMM), [AE](https://www.aliexpress.com/item/10000330515850.html)) +- 1x 弹簧或橡皮筋([EU](https://www.amazon.de/gp/product/B01N30EAZO/), [US](https://www.amazon.com/dp/B008RFVWU2), [AE](https://www.aliexpress.com/item/33043769059.html)) +- 6x M3x25螺丝([EU](https://www.amazon.de/dp/B07KFL3SSV), [US](https://www.amazon.com/dp/B07WJL3P3X), [AE](https://www.aliexpress.com/item/4000173341865.html)) +- 6x M3螺母([EU](https://www.amazon.de/dp/B07JMF3KMD), [US](https://www.amazon.com/dp/B071NLDW56), [AE](https://www.aliexpress.com/item/32977174437.html)) +- 杜邦线([EU](https://www.amazon.de/dp/B07KYHBVR7), [US](https://www.amazon.com/dp/B07GD2BWPY), [AE](https://www.aliexpress.com/item/4000766001685.html)) + +#### 可选组件 + +- 1x 超声波传感器([EU](https://www.amazon.de/dp/B00LSJWRXU), [US](https://www.amazon.com/dp/B0852V181G/), [AE](https://www.aliexpress.com/item/32713522570.html)) +- 2x 开关([EU](https://www.amazon.de/dp/B07QB22J62), [US](https://www.amazon.com/dp/B01N2U8PK0), [AE](https://www.aliexpress.com/item/1000005699023.html)) +- 4x 橙色LED 5mm([EU](https://www.amazon.de/gp/product/B01NCL0UTQ), [US](https://www.amazon.com/dp/B077XD7MVB), [AE](https://www.aliexpress.com/item/4000329069943.html)) +- 4x 红色LED 5mm([EU](https://www.amazon.de/dp/B083HN3CLY), [US](https://www.amazon.com/dp/B077X95F7C), [AE](https://www.aliexpress.com/item/4000329069943.html)) +- 2x 白色LED灯([EU](https://www.amazon.de/-/en/gp/product/B06XTQSZDX), [US](https://www.amazon.com/gp/product/B01N2UPAD8), [AE](https://de.aliexpress.com/item/1005002991235830.html)) +- LED用可变电阻器([EU](https://www.amazon.de/gp/product/B081TXJJGV), [US](https://www.amazon.com/dp/B0711MB4TL), [AE](https://de.aliexpress.com/item/1005003610664176.html)) + +### 构建说明 + +**提示:** 点击图片在新标签页中以全分辨率打开。 + +# 下一步 + +

+ English | + 简体中文 | + Deutsch +

+ +1. 拆卸遥控玩具卡车。移除其顶部盖子,并按照下图所示从底座上拧下四个安装销。保管好所有四个安装销及其对应的螺丝,因为在所有布线完成后,你将使用它们将```main_frame```安装到遥控卡车车身上。所有兼容的遥控玩具卡车都配有两个电机:一个用于油门,另一个用于转向,还有一个用于油门电机的速度控制器(内置5-7V UBEC)和一个2S 7.4V LiPo电池组。从卡车底座上卸下并移除电池组,并使用随车附带的充电器为其充电。暴露/松开两个电机的线连接器以及速度控制器的UBEC输出。在我们的案例中,UBEC输出为6V。 +

+ + + +

+2. 注意到```main_frame```上的两个尺寸d1和d2(如下图所示)取决于所使用的遥控玩具卡车的型号。我们为[这个](https://www.amazon.de/dp/B00M3J7DJW)遥控玩具卡车型号设计了我们的```main_frame```部件。根据你使用的卡车(1:16比例),你可能需要使用```main_frame``` [STEP](/body/cad/rc_truck_body/main_frame.step)文件稍微调整这些尺寸。我们推荐使用[Autodesk Fusion 360](https://www.autodesk.com/products/fusion-360/overview)进行此类CAD修改(Fusion 360提供免费的一年学术许可证)。另外,注意```main_frame```上的小楔形/三角形表示前进方向。 +

+ + +

+3. (可选)安装用于为机器人供电的开关。你可以简单地通过剪断从速度控制器到电池的正极线,并将开关焊接在这条线的两个分开的部分之间来实现这一点。请确保开关连接器通过热缩管或电工胶带绝缘,并且电源线足够长,以便在组装后开关可以通过```main_frame```背面的矩形开口(见下图)。 +

+ + +

+4. (可选)通过```main_frame```的前格栅安装超声波传感器。如果需要,可以使用热熔胶将其固定到位。在放置之前,轻轻地将连接器推直。这将使组装后更容易访问连接器。将杜邦线从超声波连接器一直拉到```main_frame```背面的矩形开口。 +

+ + + +

+5. (可选)安装用于指示信号的橙色LED灯,分别在```main_frame```的前部和后部。如果需要,可以使用热熔胶将其固定到位。对于每一侧,即左侧和右侧,你需要将前后LED灯并联连接。为此,只需分别将它们的正极和负极连接在一起。类似于超声波传感器电缆,将正负杜邦线从左右指示信号一直拉到```main_frame```背面的矩形开口,在那里它们将连接到PCB上的相应指示信号引脚(正极和负极)。 +

+ + + +

+**提示:** 为了避免布线时的混乱和潜在的接地错误,建议为所有LED的负极形成一个统一的接地环。这意味着在```main_frame```下方运行一根连接所有LED负极的线。然后,这个接地环可以通过一根杜邦线连接到Arduino Nano的接地引脚,该杜邦线运行到```main_frame```背面的矩形开口。 + +6. (可选)安装前LED灯。你可以使用热熔胶将底座固定到位,并通过每侧的前开口将灯拧入其相应的底座。通过分别连接正极和负极,将两个前LED灯并联连接。由于这些灯工作在6V,你可以将它们的正极直接连接到UBEC输出。将负极连接到接地环(见上面的提示)。这些LED的内部电阻相当高,因此无需添加任何外部电阻。安装LED灯后,在每侧插入并用热熔胶固定两个```front_light_spacers```以锁定LED。 +

+ + + +

+7. (可选)安装用于后灯的红色LED。如果需要,可以使用热熔胶将其固定到位。将所有四个红色LED并联连接;即分别连接它们的正极和负极。负极将接地,而正极将通过适当的分压器连接到UBEC输出(有关分压器构造的详细信息,请参见下一步)。 +

+ + +

+8. (可选)为后部红色LED安装分压器。大多数彩色LED(例如红色、橙色、黄色等)工作在2-3V,而不是传统的5V,这是Arduino Nano的正常工作电压。因此,需要一个分压器来安全地操作这些LED。对于指示信号,我们的定制PCB中已经内置了一个分压器。因此,你不需要为使用指示信号(即橙色)LED做任何事情。然而,如果你选择添加后灯,即红色LED,那么需要为它们安装一个外部分压器。我们建议使用10kΩ或更高的可变电阻来制作你的分压器。根据你的UBEC输出电压(在我们的案例中为6V),你需要设置一个输出为2-3V的分压器。这可以通过在电阻的外端施加UBEC输出,并通过旋转其顶部的螺丝并使用数字万用表监测地和中间端子之间的输出电压来完成(见下图)。一旦可变电阻的输出电压,即分压器的电压设置在适当的2-3V范围内,用热熔胶固定其螺丝,并将其固定在```main_frame```下方的一个方便位置。 +

+ + +

+9. (可选)你还可以使用一个或两个单独的开关来打开和关闭前后LED灯。请按照步骤3中的说明安装一个或多个开关以实现此目的。 +10. 现在你几乎完成了机器人的布线。此时,请花一些时间确保```main_frame```下方的所有电线和连接正确并使用热缩管或电工胶带进行良好绝缘。使用热熔胶将任何松散的电线固定到位,以防止它们在组装后接触到车轮或机器人的任何活动部件。确保所有来自电机、速度控制器UBEC、LED和超声波传感器的电缆都可以自由地从```main_frame```背面的矩形开口出来。 +11. 使用两颗M3x25螺丝和螺母将```phone_mount_bottom```安装到```main_frame```上。如果你想调整手机支架的垂直高度,可以选择在中间插入一个或多个```camera_elevators```。如果使用```camera_elevator```,你将需要M3x35或更长的螺丝将手机支架安装到```main_frame```上。 +

+ + +

+10. 插入```phone_mount_top```并安装弹簧或橡皮筋。 +

+ +

+11. 将两个```side_covers```插入各自的槽中。 +

+ + +

+12. 使用四个安装销及其对应的螺丝将```main_frame```安装到遥控卡车车身上。确保所有电缆连接器和机器人的电源开关可以通过```main_frame```背面的矩形开口进行PCB连接。从```main_frame```前面的三角形开口拉出电池连接器。 +

+ + + +

+12. 使用四颗M3x25螺丝和螺母在```main_frame```背面安装PCB,并在中间放置四个```spacers```。将Arduino Nano安装到PCB上,并将USB OTG电缆连接到Arduino Nano的USB端口。 +

+ +

+13. 将超声波传感器电缆连接到PCB上标有“sonar”的连接器。确保传感器和PCB端口之间的正负极和数据线正确匹配。 +14. 将左右指示灯LED电缆连接到PCB上的相应指示信号连接器。确保LED正负极的正确极性。 +15. 将UBEC输出(+6V)连接到Arduino Nano的Vin引脚(可选,Arduino也可以由手机供电),并将UBEC GND连接到Arduino的GND引脚(在Vin旁边)。 +16. 将UBEC输出(+6V)连接到转向伺服电机、前LED灯和通过分压器的后红色LED的正极端子。 +17. 将转向伺服电机的地线连接到Arduino的GND引脚。 +18. 将油门伺服电机的PWM电缆(来自速度控制器)连接到Arduino Nano或PCB扩展板上的A0引脚。 +19. 将转向伺服电机的PWM电缆连接到Arduino Nano或PCB扩展板上的A1引脚。 +**提示:** 如果你已经为LED布线创建了一个统一的接地环,那么将接地环电缆连接到Arduino的一个GND引脚。Arduino Nano有三个GND引脚可用。如果你没有构建接地环,那么确保所有LED、转向伺服电机、传感器、Arduino Nano和速度控制器的UBEC共享相同的接地,并进行适当的布线和连接。 +21. 将电池组连接到前部,并使用魔术贴或安装胶带将其固定到位。将电池放在前部可以方便地进行充电。这种放置方式还可以在智能手机安装在顶部时帮助平衡机器人的重量。 +22. 安装前后```electronics_covers```。从后```electronics_cover```的缝隙中拉出USB OTG电缆,以便将其连接到安卓智能手机。 +

+ + +

+ +## 下一步 + +刷入[Arduino固件](../../firmware/README.md) \ No newline at end of file diff --git a/body/rtr/README.zh-CN.md b/body/rtr/README.zh-CN.md new file mode 100644 index 000000000..2dd93b1ed --- /dev/null +++ b/body/rtr/README.zh-CN.md @@ -0,0 +1,73 @@ +# OpenBot: 即插即用 (RTR) 车辆 + +

+ English | + 简体中文 | + Deutsch +

+ +即插即用 (RTR) 版本的 OpenBot 车辆是面向那些没有意愿或时间自己组装机器人的用户。RTR 车辆配备了完全集成的电子设备,已经在固件层面得到了支持,并且从软件和硬件角度都经过了彻底测试。RTR 车辆有两种不同的版本,分别称为 "RTR_TT" 和 "RTR_520"。两种车辆都基于相同的防溅 ABS 外壳,但用途不同。RTR_TT 主要用于室内,而 RTR_520 配备了更强大的处理器、更好的电机、更坚固的金属齿轮箱,并且还配有一套全地形轮胎,支持室内和室外使用。 +

+   + + + +

+ +### 订购 + +RTR OpenBot 车辆可以在[这里](http://www.openbot.info/)订购。 + +## 自己组装 RTR + +如果你想自己组装 OpenBot RTR,你需要打印底盘、制造 PCB 并购买电机和手机支架。 + +### 3D 打印 + +如果你仍然想打印自己的 OpenBot RTR,你需要打印以下部件。 + +1) ```shell_bottom``` ([STL](cad/rtr_bottom.stl), [STEP](cad/rtr_bottom.step)) +2) ```shell_top``` ([STL](cad/rtr_top.stl), [STEP](cad/rtr_top.step)) +3) ```phone_mount``` ([STL](cad/rtr_mount.stl), [STEP](cad/rtr_mount.step)) + +

+ App GUI +

+ +### PCB + +每个 PCB 都有三个文件。gerber 文件包含实际的 PCB,BOM(材料清单)文件包含所有要焊接到 PCB 上的组件,centroid 文件包含每个组件的坐标,用于自动 PCB 组装。基础板包含大多数组件。基础板有三种变体。变体 A 是一个带有外部电机驱动板和外部微控制器板连接器的裸板。变体 B 是一个带有外部微控制器针头的模块化板。变体 C 是完全集成的基础板,我们推荐大多数用户使用。前碰撞传感器板包含两个碰撞传感器、一个声纳传感器和 USB 驱动器。前碰撞传感器板有两种变体,一种是更便宜的 CH340G USB 驱动器,另一种是更可靠的 CP2102N USB 驱动器。根据你想要组装的版本(TT 电机或 520 电机),你将需要以下 PCB。 + +#### TT 电机 + +- 1x 基础板 (Arduino) +- 1x 状态 LED 板 +- 1x 前/顶/后碰撞传感器板 +- 4x 速度传感器板 (Arduino) + +#### 520 电机 + +- 1x 基础板 (ESP32) +- 1x 状态 LED 板 +- 1x 前/顶/后碰撞传感器板 + +#### 板参考 + +- 状态 LED 板 ([gerber](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/Gerber_Status_LED_Board_V1.zip),[bom](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/BOM_Status_LED_Board_V1.csv),[centroid](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/PickAndPlace_Status_LED_Board_V1.csv)) +- 顶部碰撞传感器板 ([gerber](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/Gerber_BumpSensorTop_V1.zip),[bom](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/BOM_BumpSensorTop_V1.csv),[centroid](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/PickAndPlace_BumpSensorTop_V1.csv)) +- 后部碰撞传感器板 ([gerber](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/Gerber_BumpSensorBack_V1.zip),[bom](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/BOM_BumpSensorBack_V1.csv),[centroid](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/PickAndPlace_BumpSensorBack_V1.csv)) +- 前碰撞传感器板 (CH340G) ([gerber](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/Gerber_SensorBoardFront_CH340G_V1.zip),[bom](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/BOM_SensorBoardFront_CH340G_V1.csv),[centroid](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/PickAndPlace_SensorBoardFront_CH340G_V1.csv)) +- 前碰撞传感器板 (CP2102N) ([gerber](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/Gerber_SensorBoardFront_CP2102N_V1.zip),[bom](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/BOM_SensorBoardFront_CP2102N_V1.csv),[centroid](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/PickAndPlace_SensorBoardFront_CP2102N_V1.csv)) +- 速度传感器板 (Arduino) ([gerber](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/Gerber_SpeedSensor_Arduino_V1.zip),[bom](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/BOM_SpeedSensor_Arduino_V1.csv),[centroid](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/PickAndPlace_SpeedSensor_Arduino_V1.csv)) +- 集成基础板 C (Arduino) ([gerber](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/Gerber_BaseBoard_Arduino_V1C.zip),[bom](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/BOM_BaseBoard_Arduino_V1C.csv),[centroid](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/PickAndPlace_BaseBoard_Arduino_V1C.csv)) +- 集成基础板 C (ESP32) ([gerber](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/Gerber_BaseBoard_ESP32_V1C.zip),[bom](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/BOM_BaseBoard_ESP32_V1C.csv),[centroid](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/PickAndPlace_BaseBoard_ESP32_V1C.csv)) +- 模块化基础板 B (Arduino) ([gerber](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/Gerber_BaseBoard_Arduino_V1B.zip),[bom](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/BOM_BaseBoard_Arduino_V1B.csv),[centroid](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/PickAndPlace_BaseBoard_Arduino_V1B.csv)) +- 模块化基础板 B (ESP32) ([gerber](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/Gerber_BaseBoard_ESP32_V1B.zip),[bom](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/BOM_BaseBoard_ESP32_V1B.csv),[centroid](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/PickAndPlace_BaseBoard_ESP32_V1B.csv)) +- 裸基础板 A (Arduino) ([gerber](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/Gerber_BaseBoard_Arduino_V1A.zip),[bom](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/BOM_BaseBoard_Arduino_V1A.csv),[centroid](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/PickAndPlace_BaseBoard_Arduino_V1A.csv)) +- 电机驱动 DRV8870 板 (Arduino) ([gerber](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/Gerber_MotorBoard_Arduino_V1_DRV8870.zip),[bom](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/BOM_MotorBoard_Arduino_V1_DRV8870.csv),[centroid](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/PickAndPlace_MotorBoard_Arduino_V1_DRV8870.csv)) +- 裸基础板 A (ESP32) ([gerber](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/Gerber_BaseBoard_ESP32_V1A.zip),[bom](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/BOM_BaseBoard_ESP32_V1A.csv),[centroid](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/PickAndPlace_BaseBoard_ESP32_V1A.csv)) +- 电机驱动 DRV8870 板 (ESP32) ([gerber](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/Gerber_MotorBoard_ESP32_V1_DRV8870.zip),[bom](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/BOM_MotorBoard_ESP32_V1_DRV8870.csv),[centroid](https://github.com/isl-org/OpenBot/blob/thias15/rtr/body/rtr/pcb/PickAndPlace_MotorBoard_ESP32_V1_DRV8870.csv)) + +## 下一步 + +刷入 [Arduino 固件](../../firmware/README.md) \ No newline at end of file diff --git a/controller/README.zh-CN.md b/controller/README.zh-CN.md new file mode 100644 index 000000000..ef60348b7 --- /dev/null +++ b/controller/README.zh-CN.md @@ -0,0 +1,25 @@ +# OpenBot 控制器 + +

+ English | + 简体中文 | + Deutsch +

+ +有几种方法可以控制 OpenBot 机器人。 + +## 蓝牙控制器 + +控制机器人最简单的方法是通过蓝牙连接游戏控制器。大多数蓝牙游戏控制器都应该可以使用。我们已经测试了[PS4 控制器](https://www.amazon.de/-/en/Sony-Dualshock-Gamepad-Playstation-Black/dp/B01LYWPQUN)、[XBox 控制器](https://www.amazon.de/-/en/QAT-00002/dp/B07SDFLVKD)和一些第三方控制器,例如[X3](https://www.amazon.com/Controller-Wireless-Joystick-Bluetooth-Android/dp/B08H5MM64P)。 + +## [Node.js 控制器](node-js) + +此控制器要求您的手机和计算机(例如笔记本电脑、树莓派)连接到同一个 WiFi 网络。成功连接后,您将获得实时低延迟视频流,并可以使用键盘从浏览器控制机器人。 + +特别感谢 Ivo Zivkov [izivkov@gmail.com](mailto:izivkov@gmail.com) 的开发。 + +## [Python 控制器](python) + +此控制器要求您的手机和计算机(例如笔记本电脑、树莓派)连接到同一个 WiFi 网络。成功连接后,您将获得实时 RTSP 视频流,并可以使用键盘从终端控制机器人。您可以使用 Python 脚本作为模板来开发自己的控制器。 + +特别感谢 Ivo Zivkov [izivkov@gmail.com](mailto:izivkov@gmail.com) 的开发。 \ No newline at end of file diff --git a/controller/flutter/README.zh-CN.md b/controller/flutter/README.zh-CN.md new file mode 100644 index 000000000..ce6b1e897 --- /dev/null +++ b/controller/flutter/README.zh-CN.md @@ -0,0 +1,104 @@ +# Flutter 控制器应用 + +

+ English | + 简体中文 | + Deutsch +

+ +这个控制器应用程序作为 [OpenBot](https://www.openbot.org) 车辆的 `远程控制器`,类似于 BT 控制器(例如 PS3/4 或 Xbox)。它运行在另一台 Android/iOS 设备上,除了控制功能外,还支持实时视频/音频流。 + +## 入门指南 +首先在你的系统上安装 [Flutter](https://flutter.dev/)。选择适合你操作系统的下载选项,包括 Windows、macOS、Linux 和 ChromeOS。请按照官方 Flutter 安装指南进行详细安装:[Flutter 安装指南](https://docs.flutter.dev/get-started/install) + +### 使用终端 +- 成功安装 Flutter 后,打开你的 **终端** 或 **命令提示符**。 +- 将当前目录更改为存储 OpenBot 项目的位置,然后导航到 `OpenBot/controller/flutter`。 +- 使用以下命令从终端运行 Flutter 应用程序。 + + #### 安装依赖项: + ```bash + flutter pub get + ``` + 运行项目: + ```bash + flutter run + ``` + 如果遇到任何问题,请运行以下命令: + ```bash + flutter doctor + ``` +### 使用编辑器 +- 按照官方 Flutter 指南设置编辑器:[设置编辑器](https://docs.flutter.dev/tools/android-studio) +- 确保你的编辑器已配置为 Flutter 开发。安装任何所需的插件或扩展,按照 Flutter 文档中的编辑器特定说明进行设置,以获得最佳开发体验。 + +- 设置完成后,在编辑器中打开项目,它将显示如下图所示。 + +

+ +

+ +- 请按照上述类似的指示运行 Flutter 在终端中的命令,并直接使用 ``run`` 按钮进行后续运行。 + +

+ +

+ +## 连接 + +启动控制器应用程序时,它会立即尝试连接到机器人并显示以下屏幕: + +

+ +

+ +要将控制器连接到机器人,请将机器人的控制模式设置为 **Phone**。 +例如,在 `FreeRoamFragment` 中,手机模式如下激活: + +

+ +

+ +连接后,控制器应用程序将如下所示: + +

+ +

+ +在这里,你可以选择通过倾斜手机或使用屏幕上的控件来驾驶机器人。 + +***注意:*** 这应该足以连接,但如果在 30 秒后仍无法建立连接,请将机器人应用程序中的 `Control` 设置切换到 `Gamepad`,然后再切换回 `Phone` 以重新启动连接。如果仍然失败,请退出控制器应用程序并重新启动。再次在机器人应用程序中切换控制模式。 + +## 操作 + +### 屏幕控件 + +此模式允许用户通过 `双驱动` 模式中的两个滑块控制机器人车。你可以通过在每侧上下移动滑块拇指来左转/右转。当拇指移动到滑块中心以上/以下时,每侧的轮子将向前/向后转动。 + +

+ +

+ +- ``指示灯``:你还可以通过点击屏幕左上角的箭头来设置左/右转向指示灯 。 + +- ``切换摄像头``:在前置和后置摄像头模式之间切换。 +- ``静音``:启用/禁用音频传输。 +- ``镜像视图``:镜像视频流。 + +### 倾斜驾驶 + +控制器还可以使用其加速度计运动传感器来驾驶机器人。如果选择此选项,控制器将进入全屏(Zen)模式,仅显示视频和 `刹车` 和 `加速` 踏板。要退出此模式,请双击屏幕。 + +以下是 `倾斜模式` 屏幕的图片: + +

+ +

+ +使用 `加速` 和 `刹车` 按钮前进/后退。 + +- 按下 `加速` 按钮,机器人将在 2 秒内加速到全速。当你松开按钮时,机器人将减速至停止(停止速度设置为最大速度的 0%,可以调整)。 +- 按下 `刹车` 按钮,机器人将立即停止。如果我们再按住刹车一秒钟,机器人将开始倒退,直到在一秒钟内达到最大倒车速度。当我们松开刹车时,机器人将停止。 +- 通过左右倾斜控制器手机来转向机器人。 + +这里有一个控制器应用程序的 [技术概述](../../docs/technical/OpenBotController.pdf)。 \ No newline at end of file diff --git a/controller/flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.zh-CN.md b/controller/flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.zh-CN.md new file mode 100644 index 000000000..989609b1c --- /dev/null +++ b/controller/flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.zh-CN.md @@ -0,0 +1,11 @@ +

+ English | + 简体中文 | + Deutsch +

+ +# 启动屏幕资源 + +您可以通过替换此目录中的图像文件来自定义启动屏幕。 + +您也可以通过打开 Flutter 项目的 Xcode 项目来完成此操作,方法是使用 `open ios/Runner.xcworkspace` 命令,选择项目导航器中的 `Runner/Assets.xcassets`,然后拖入所需的图像。 \ No newline at end of file diff --git a/controller/node-js/README.zh-CN.md b/controller/node-js/README.zh-CN.md new file mode 100644 index 000000000..fc649ceb8 --- /dev/null +++ b/controller/node-js/README.zh-CN.md @@ -0,0 +1,92 @@ +# OpenBot Nodejs 控制器 + +

+ English | + 简体中文 | + Deutsch +

+ +## 术语 + +以下是本文档中将使用的一些术语: + +* ```机器人, bot``` - 这是运行在 [OpenBot](https://www.openbot.org/) 车辆上的手机上的 Android 软件。 +* ```服务器``` - Node 服务器,本项目的服务器部分 +* ```客户端, UI``` - 这是本项目的客户端部分。它在浏览器中运行。 + +## 简介 + +这是一个基于 [Node.js](https://nodejs.org/) 的项目,用于控制 [OpenBot](https://www.openbot.org/) 车辆。该软件由两部分组成——服务器和客户端。服务器是一个运行在与机器人同一网络中的计算机上的 Node.js 应用程序。客户端部分在浏览器中运行。 + +以下是浏览器的截图: + +![Screenshot](images/Screenshot.png "image_tooltip") + +## 入门指南 + +您可以在 PC、RaspberryPi 类型设备甚至支持 ```Node.js``` 环境的 [Pi Zero](https://www.raspberrypi.com/products/raspberry-pi-zero/) 设备上运行此软件。首先确保您已安装 [Node.js](https://nodejs.org/),版本为 10 或更新版本。检查版本: + + node --version + +该软件位于 OpenBot 项目的 ```/controller/node-js``` 目录中。从 [github](https://github.com/isl-org/OpenBot) 检出代码后,进入此目录并运行以下命令: + + npm install + npm start + +最后一个命令将启动服务器。如果您希望在后台无终端运行服务器,在 ```Linux/MacOS``` 上可以运行: + + npm run start-nohup + +或者直接运行: + + nohup npm start + +将浏览器指向服务器的 IP 地址和端口 8081,例如 [http://localhost:8081](http://localhost:8081),或 [http://192.168.1.100:8081](http://192.168.1.100:8081)。请注意,您可以从不同的计算机访问服务器,但机器人、服务器和浏览器 PC 需要在同一网络中。未来我们可以添加远程访问服务器的功能。 + +确保您的机器人连接在同一网络上。在机器人 Android 应用中,进入 ```General``` 面板并选择 ```Phone``` 作为控制器。这将把 Android 应用连接到 Node 服务器,并在 UI 上显示视频。 + +## 工作原理 + +1. Node 服务器创建并发布类型为 ```openbot.tcp``` 和名称为 ```OPEN_BOT_CONTROLLER``` 的 DNS 服务,端口为 19400。这使得机器人可以在不知道其 IP 地址的情况下自动找到服务器。机器人正在寻找此服务,并将在进入 ```Phone``` 控制器模式时建立 Socket 连接。 + +2. Node 服务器在端口 8081 创建一个 HTTP 服务器,并开始处理来自浏览器的请求。 + +3. 此外,Node 服务器在端口 7071 创建一个 WebSocket 服务器。这将用于直接与浏览器通信。因此,总结到目前为止,服务器已创建了两个 Socket 连接,一个到机器人,一个到浏览器。 + +4. 用户从浏览器输入键盘命令。这些按键通过 WebSocket 发送到服务器。服务器将这些命令转换为机器人可以理解的命令,如 ```{driveCmd: {r:0.4, l:0.34}}```(所有命令的列表可以在 Android 控制器的文档中找到 [这里](https://github.com/isl-org/OpenBot/blob/master/docs/technical/OpenBotController.pdf))。这些命令通过 Socket 连接发送到机器人。 + +5. 机器人通过 Socket 连接将状态信息发送回服务器,服务器将其转发到 UI。UI 可以使用此信息来增强其外观,如显示闪烁的指示灯等,但目前此状态被忽略。 + +6. Node 服务器还充当 WebRTC 信令代理。它在机器人和浏览器之间转发 WebRTC 协商命令。它重用开放的 Socket 连接,因此不需要额外的连接或配置。 + +![drawing](images/HowItWorks.png) + +## 开发 + +此代码使用 [snowpack](https://www.snowpack.dev/) 作为快速、轻量级的构建工具。 + +我们使用 [eslint](https://eslint.org/) 进行代码检查和自动格式化。建议在提交新代码之前运行 lint 并修复任何错误。如果您使用 Visual Code,可以在 [这里](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) 获取插件。运行 linter 如下: + + npm run lint + +## 生产 + +要构建 ```client``` 的生产版本,请运行: + + npm run build + +这将优化客户端代码到 ```build``` 目录中,可以部署在服务器上。此外,我们需要设置一个进程管理器来重启服务器,可能还需要一个反向代理如 [nginx](https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/),这尚未完成。 + +## 故障排除 + +* 有时浏览器不会显示命令菜单,只显示标题。这意味着 WebSocket 连接无法建立。这通常发生在刚启动服务器之后。如果检查浏览器控制台,可以找到无法连接的消息,如 ```WebSocket connection to 'ws://localhost:7071/ws' failed```,杀死所有 node 进程(pkill -9 node)并重新启动。重新加载页面,连接应能建立。 +* 如果无法将手机连接到应用程序,请确保此应用程序的另一个实例未在此机器或同一网络中的另一台机器上运行。 + +## 已知错误 + +无。 + +## 待办事项/尝试 + +* 我们需要调查是否可以远程连接到服务器,以及 WebRTC 是否仍然有效。我们应该记录防火墙配置以使其成为可能。 +* 我们需要创建一个 ```production``` 配置,可能使用 [pm2 进程管理器](https://www.npmjs.com/package/pm2) 和 [nginx](https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/)。 \ No newline at end of file diff --git a/controller/python/README.zh-CN.md b/controller/python/README.zh-CN.md new file mode 100644 index 000000000..e8d611f8c --- /dev/null +++ b/controller/python/README.zh-CN.md @@ -0,0 +1,94 @@ +# Python 控制器 + +

+ English | + 简体中文 | + Deutsch +

+ +这个 Python 程序允许你通过(无线)键盘控制机器人,并从摄像头接收视频流。该程序可以在任何连接到与机器人手机相同网络的计算机上运行。它在 Raspberry Pi 3 和 MacBook 上开发和测试。在按照以下步骤操作之前,请确保你已经获取了[源代码](https://github.com/isl-org/OpenBot#get-the-source-code)并导航到 `controller` 文件夹。 + +## 依赖项 + +我们建议为 OpenBot 创建一个 conda 环境(如果尚未创建)。有关安装 conda 的说明可以在[这里](https://docs.conda.io/projects/conda/en/latest/user-guide/install/)找到。你可以使用以下命令创建一个新环境: + +```bash +conda create -n openbot python=3.7 +``` + +如果你不想全局安装依赖项,请先激活你的 conda 环境: + +```bash +conda activate openbot +``` + +确保你在本地 OpenBot 仓库中的 `controller` 文件夹内。现在,你可以使用以下命令安装所有依赖项: + +```bash +pip install -r requirements.txt +``` + +## 控制机器人 + +注意:成功连接后,除非重新启动机器人应用,否则可能无法再次连接。 + +Python 脚本将等待传入连接。在安装了机器人应用的手机上,进入 FreeRoam 碎片并将控制模式切换到手机图标。机器人现在将尝试连接到 Python 脚本(与连接控制器应用的方式相同)。或者,你也可以使用 DefaultActivity 并选择 `Phone` 作为控制器。 + +### 使用 Pygame + +这些脚本允许你像玩赛车游戏一样使用键盘驾驶机器人。 + +运行不带视频的控制器: + +`python keyboard-pygame.py` + +运行带视频的控制器: + +`python keyboard-pygame.py --video` + +以下是使用方法: + +``` + W: 前进 + S: 后退 + A: 向左转(驾驶时) + D: 向右转(驾驶时) + Q: 左旋转 + E: 右旋转 + + M: 驾驶模式 + N: 切换噪声 + Left: 左转向灯 + Right: 右转向灯 + Up: 取消转向灯 + Down: 网络模式 + SPACE: 切换日志记录 + ESC: 退出 +``` + +### 使用 Click + +还有一个用于原型设计的脚本,允许以增量设置机器人控制,而不是动态控制。此脚本使用 click 库,需要终端保持焦点。 + +运行控制器: + +`python keyboard-click.py` + +以下是使用方法: + +```bash + W: 增加速度 + S: 减少速度 + A: 向左转更多 + D: 向右转更多 + R: 重置控制 + + M: 驾驶模式 + N: 切换噪声 + Left: 左转向灯 + Right: 右转向灯 + Up: 取消转向灯 + Down: 网络模式 + SPACE: 切换日志记录 + ESC: 退出 +``` \ No newline at end of file diff --git a/firmware/README.zh-CN.md b/firmware/README.zh-CN.md new file mode 100644 index 000000000..a9a025f05 --- /dev/null +++ b/firmware/README.zh-CN.md @@ -0,0 +1,204 @@ +# 固件 + +

+ English | + 简体中文 | + Deutsch +

+ +我们使用微控制器单元(MCU)作为机器人主体和智能手机之间的桥梁。我们为使用ATmega328P微控制器的Arduino Nano以及ESP32开发套件提供了[固件](openbot_nano/openbot_nano.ino)。 + +## 功能 + +MCU的主要任务是处理车辆的低级控制并提供来自低级车载传感器的读数。MCU通过串行连接接收车辆控制和指示信号。它将控制信号转换为电机控制器的PWM信号,并根据指示信号切换LED灯。Arduino程序还通过计算左前轮和右前轮光学传感器的中断次数来跟踪车轮旋转。它通过电压分压电路的测量值的缩放移动平均值计算电池电压。它还可以使用可选的超声波传感器测量车前障碍物的距离。这些测量值通过串行链接发送回Android应用程序。 + +## 设置 + +首先,你需要在代码的开头设置你的硬件配置。如果你是DIY构建(使用L298N电机驱动器),请设置`OPENBOT DIY`。如果你使用了定制的PCB,请检查版本并设置`OPENBOT PCB_V1`或`OPENBOT PCB_V2`。如果你有一个OpenBot套件,请设置`OPENBOT RTR_TT`。如果你改装了一辆RC卡车,请设置`OPENBOT RC_CAR`。如果你使用的是用于教育的小型DIY版本,请设置`OPENBOT LITE`。如果你使用的是带有520电机的OpenBot即插即用套件,请设置`OPENBOT RTR_520`。如果你构建了多地形车辆,请设置`OPENBOT MTV`。要使用ESP32运行`OpenBot DIY`,请设置`DIY_ESP32`。 + +## 蓝牙 + +你也可以通过蓝牙运行OpenBot,为此你可以通过设置`BLUETOOTH 1`(禁用:0)来启用蓝牙。要使蓝牙工作,你需要使用ESP32板的OpenBot,例如`(RTR_520, MTV, DIY_ESP32)`。 + +## 配置 + +接下来,你需要配置要启用的功能。禁用的功能不会被编译,以节省内存并加快代码速度。如果未定义标志,则该功能将被禁用。每个模型都有一些默认设置,可能需要根据你的配置进行更改。 + +- 通过设置`HAS_VOLTAGE_DIVIDER 1`(禁用:0)启用电压分压器。如果你有电压分压器,你还应该指定`VOLTAGE_DIVIDER_FACTOR`,其计算公式为(R1+R2)/R2,`VOLTAGE_MIN`是驱动电机的最低电压,`VOLTAGE_LOW`是最低电池电压,`VOLTAGE_MAX`是最高电池电压。 +- 通过设置`HAS_INDICATORS 1`(禁用:0)启用指示灯LED。 +- 通过设置`HAS_SPEED_SENSORS_FRONT 1` / `HAS_SPEED_SENSORS_BACK 1`(禁用:0)启用前/后速度传感器。 +- 通过设置`HAS_SONAR 1`(禁用:0)启用超声波传感器。通过设置`USE_MEDIAN 1`(禁用:0)启用超声波测量的中值滤波器。 +- 通过设置`HAS_BUMPER 1`(禁用:0)启用用于检测碰撞的保险杠传感器。 +- 通过设置`HAS_OLED 1`(禁用:0)启用OLED显示屏。 +- 通过设置`HAS_LEDS_FRONT 1` / `HAS_LEDS_BACK 1` / `HAS_LEDS_STATUS 1`(禁用:0)启用前/后/状态LED。 + +### 依赖项 + +如果你启用了速度传感器或超声波传感器,你需要安装[PinChangeInterrupt](https://github.com/NicoHood/PinChangeInterrupt)库。Arduino Nano只有两个外部中断引脚(D2和D3),而D3也是仅有的六个支持PWM的引脚之一。幸运的是,它还有三个端口中断,覆盖了Arduino上的所有引脚。这个库解析这些端口中断,使Arduino的所有引脚都可以用作中断。 + +如果你启用了OLED,你需要安装[Adafruit_SSD1306](https://github.com/adafruit/Adafruit_SSD1306)和[Adafruit_GFX Library](https://github.com/adafruit/Adafruit-GFX-Library)库。 + +你可以按照以下步骤安装库: +1. 打开库管理器:`工具` :arrow_right: `管理库` +2. 在搜索栏中输入库的名称。 +3. 选择最新版本并点击安装。如果你已经安装了库,它会显示并且你可能可以更新它。 + +

+ + +

+ +### 中国克隆Nano(例如美国链接) + +你可能需要从芯片制造商(中国)下载[WCH340](http://www.wch.cn/product/CH340.html)驱动程序: + +- [Windows](http://www.wch.cn/downloads/CH341SER_EXE.html) +- [Linux](http://www.wch.cn/download/CH341SER_LINUX_ZIP.html) +- [Mac](http://www.wch.cn/download/CH341SER_MAC_ZIP.html) + +### ESP32开发套件 + +要在Arduino IDE中安装ESP32板,请按照以下说明进行操作: + +1. 在Arduino IDE中,转到**文件>首选项**: +

+ App GUI +

+ +2. 在“*附加板管理器URLs*”字段中输入*https://dl.espressif.com/dl/package_esp32_index.json*,如图所示。然后,点击“确定”按钮: +

+ App GUI +

+ +**注意:**如果你已经有ESP8266板的URL,你可以用逗号分隔URL,如下所示: + + https://dl.espressif.com/dl/package_esp32_index.json, + http://arduino.esp8266.com/stable/package_esp8266com_index.json + +3. 打开板管理器。转到**工具 > 板 > 板管理器**: +

+ App GUI +

+ +4. 搜索ESP32并按下“ESP32 by Espressif Systems”的安装按钮: +

+ App GUI +

+ +5. 你现在应该拥有成功使用Arduino开发环境刷写OpenBot的ESP32板所需的一切 +

+ App GUI +

+ +6. 要用新代码刷写OpenBot,只需在菜单**工具 > 板 > ESP32 Arduino**中选择**ESP32 Dev Module**。请注意,ESP32刷写过程的其他内容以及故障排除可以在以下[链接](https://randomnerdtutorials.com/installing-the-esp32-board-in-arduino-ide-windows-instructions/)中找到。 + +

+ App GUI +

+ +## 上传 + +### 设置(Arduino nano设置) + +- `工具` :arrow_right: `板` :arrow_right: `Arduino AVR Boards` :arrow_right: `Arduino Nano` +- `工具` :arrow_right: `处理器` :arrow_right: `ATmega328P (Old Bootloader)` +- `工具` :arrow_right: `端口` :arrow_right: `*选择USB端口*` + +:memo: 注意:目前,大多数便宜的Arduino Nano板都带有*旧引导程序*。但是,根据卖家,你也可能会得到一个带有新引导程序的板。因此,如果你无法上传固件,很可能需要将处理器更改为*ATmega328P*。 + +### 设置(ESP32设置) + +- `工具` :arrow_right: `板` :arrow_right: `ESP32 Arduino` :arrow_right: `ESP32 Dev Module` +- `工具` :arrow_right: `端口` :arrow_right: `*选择USB端口*` + +### 上传固件 + +现在可以通过`草图` :arrow_right: `上传`或按上传按钮(右箭头)上传固件。 +![固件上传](../docs/images/firmware_upload.png) + +### 测试 + +本节解释了在成功刷写固件后如何测试汽车的所有功能。 + +1. 确认: + 1. 车轮未连接到汽车 + 2. Arduino已连接到计算机 + 3. 选择了正确的USB端口 +2. 打开串行监视器:`工具` :arrow_right: `串行监视器` + +#### 向OpenBot发送消息 + +你还可以通过在顶部的输入字段中输入命令然后按发送来向Arduino发送消息。以下命令可用(前提是机器人支持必要的功能): + +- `c,`,其中``和``都在范围[-255,255]内。值为`0`将停止电机。值为`255`将以最大电压驱动电机全速前进。较低的值会导致成比例较低的电压和速度。负值会以相反的极性应用相应的电压,驱动电机倒退。 +- `i,`,其中``和``都在范围[0,1]内,对应于左侧和右侧指示灯LED。例如,`i1,0`打开左侧指示灯,`i0,1`打开右侧指示灯,`i1,1`打开两个指示灯。启用的指示灯每秒闪烁一次。值为`i0,0`将关闭指示灯。一次只能有一个状态。 +- `l,`,其中``和``都在范围[0,255]内,对应于前后LED的亮度。 +- `s`,其中``对应于触发超声波测量之间的时间(默认=1000)。获取超声波读数后,消息将发送到机器人。如果超时,将发送指定的`MAX_SONAR_DISTANCE`。 +- `w`,其中``对应于发送到机器人的车轮里程测量之间的时间(默认=1000)。车轮速度会被连续监控,并且rpm会作为指定时间间隔的平均值计算。 +- `v`,其中``对应于发送到机器人的电压测量之间的时间(默认=1000)。电压会被连续监控,并通过大小为10的移动平均滤波器进行滤波。除了设置电压读数的时间间隔外,发送此命令还会触发报告驱动电机的最低电压(`vmin:`)、最低电池电压(`vlow:`)和最高电池电压(`vmax:`)的消息。 +- `h`,其中``对应于在未收到新的心跳消息后机器人停止的时间(默认=-1)。 +- `b`,其中``对应于在保险杠触发重置后的时间(默认=750)。 +- `n,`,其中``对应于状态LED(`b`=蓝色,`g`=绿色,`y`=黄色),`state`对应于其值(`0`=关闭,`1`=打开)。 +- `f`将向OpenBot发送请求,返回带有机器人类型及其功能的消息,例如电压测量(`v`)、指示灯(`i`)、超声波(`s`)、保险杠传感器(`b`)、车轮里程计(`wf`、`wb`)、LED(`lf`、`lb`、`ls`)等。例如,对于OpenBot的`RTR_V1`版本,消息将如下所示:`fRTR_V1:v:i:s:b:wf:wb:lf:lb:ls:`。 + +#### 从OpenBot接收消息 + +根据你的配置,你可能会看到不同的消息。 + +![串行监视器](../docs/images/serial_monitor.png) + +- 以`v`开头的消息报告电池电压。如果你将电池连接到汽车(即打开开关),它应该显示电池电压。如果你断开电池(即关闭开关),它应该显示一个小值。 +- 以`w`开头的消息报告速度传感器的读数,以每分钟转数(rpm)为单位。编码盘上的每个孔将根据方向将计数器增加或减少一个。你可以使用参数`DISK_HOLES`设置孔的数量。如果你使用的是带有20个孔的标准盘,每转动一次车轮将有20个计数。 +- 以`s`开头的消息报告超声波传感器前方的估计空闲空间,以厘米为单位。 +- 以`b`开头的消息报告碰撞。代码`lf`(左前)、`rf`(右前)、`cf`(中前)、`lb`(左后)、`rb`(右后)表示哪个传感器触发了碰撞。 + +#### 测试程序 + +在继续之前,请确保轮胎已移除。你需要打开串行监视器以发送命令,并且你将看到从OpenBot接收到的消息。如果你安装了OLED显示屏,你还将在更易于阅读的格式中看到车辆状态显示。以下测试程序可用于测试汽车的所有功能: + +# OpenBot 说明文档 + +

+ English | + 简体中文 | + Deutsch | + Français | + Español +

+ +1. 启动车辆并观察电池电压(`v` 后的数字)。你可以用万用表验证读数,并在必要时调整 `VOLTAGE_DIVIDER_FACTOR`。 +2. 如果你安装了超声波传感器: + 1. 将手放在传感器前面并来回移动。你应该会看到读数(`s` 后的数字)相应变化。 + 2. 我们观察到超声波传感器对振动非常敏感!因此建议通过以下测试确保在操作期间获得可靠的读数: + 1. 将安装了超声波传感器的 OpenBot 放置在前方至少有 200 厘米自由空间的地方。你应该看到 `200` 或更多的读数。 + 2. 在串行监视器上观察读数一段时间,然后输入命令 `c128,128`。 + 3. 如果传感器读数显著变化,你需要减弱从底盘传递到超声波传感器的振动(例如添加一些硅胶,调整安装位置)。 +3. 如果你安装了速度传感器: + 1. 确保超声波传感器前方有足够的自由空间。读数(`s` 后的数字)需要至少高于默认值 `10` 的 `STOP_DISTANCE`。 + 2. 发送命令 `c128,128`。电机将以*慢速*(50% PWM)开始旋转。速度传感器读数(`w` 后的值)以 rpm 为单位报告,取决于电池的 SOC,RTR_TT 版本应在 250 到 300 之间。如果你使用 DIY 版本或较弱的电池,值可能会更低。检查所有电机是否向前旋转,速度传感器读数是否为正。 + 3. 尝试发送不同的控制命令并观察速度传感器读数。例如,命令 `c-128,-128` 将以*慢速*(50% PWM)使所有电机向后旋转。命令 `c255,-255` 将使左侧电机向前旋转,右侧电机向后旋转,以*快速*(100% PWM)速度运行。命令 `c-192,192` 将使左侧电机向后旋转,右侧电机向前旋转,以*正常速度*(75% PWM)运行。 +4. 通过发送命令 `c0,0` 或将手放在超声波传感器前停止电机。 +5. 如果你安装了指示灯 LED,发送命令 `i1,0` 并观察左侧指示灯闪烁。然后发送命令 `i0,1` 并观察右侧指示灯闪烁。最后,通过发送命令 `i0,0` 关闭指示灯。 + +### 无手机模式 + +在使用安装了 OpenBot 应用程序的智能手机测试车辆之前,你也可以先在没有手机的情况下测试车辆。只需将选项 `NO_PHONE_MODE` 设置为 `1`。车辆现在将以*正常速度*(75% PWM)行驶,并在检测到障碍物时减速。一旦接近 `TURN_THRESHOLD`(默认:50 厘米),它将开始随机方向转弯并打开该侧的 LED。如果估计的车前自由空间低于 `TURN_THRESHOLD`,它将慢慢倒退并打开两个 LED。请注意,车辆和 Arduino 都需要供电。Arduino 可以通过将 5V 引脚连接到 L298N 电机驱动器的 5V 输出,或通过将 USB 电缆连接到电源(例如手机)来供电。 + +在运行车辆之前,我们建议移除轮胎,将 Arduino 连接到计算机并观察串行监视器,如[测试](#testing)部分所述。串行监视器上的输出更容易解析(与 OLED 相同),显示电池电压、左右电机的 rpm 以及估计的车前自由空间。你可以在超声波传感器前来回移动一个大物体,并观察电机速度的变化。 + +:warning: 警告:如果你没有安装超声波传感器或它被禁用,车辆将以*正常速度*(75% PWM)向前行驶,并最终发生碰撞。即使安装了传感器,由于噪声读数,车辆也可能偶尔发生碰撞。 + +## 使用其他 MCU(要求) + +你可以使用具有以下功能的任何其他 MCU: + +- 1 个 USB-to-TTL 串行(与智能手机通信) +- 4 个 PWM 输出(控制电机) +- 1 个模拟引脚用于电池监控 +- 2 个数字引脚用于速度传感器 +- 1 个数字引脚用于超声波传感器(可选) +- 2 个数字引脚用于指示灯 LED(可选) + +## 下一步 + +编译并运行 [Android 应用程序](../android/README.md) \ No newline at end of file diff --git a/firmware/README_CN.md b/firmware/README_CN.md deleted file mode 100644 index 7f4b60595..000000000 --- a/firmware/README_CN.md +++ /dev/null @@ -1,107 +0,0 @@ -# 固件 - -

- English | - 简体中文 -

- -我们使用单片机(MCU)充当机器人主体和智能手机之间的桥梁。 我们提供带有ATmega328P微控制器的Arduino Nano的 [固件](openbot_v1_nano/openbot_v1_nano.ino) 用于Arduino Nano与ATmega328P单片机。 - -## 特性 - -MCU的主要任务是处理车辆的底层控制,并提供来自底层车载传感器的读数。 MCU通过串行连接接收车辆控制和指示信号。 它将控制转换为电机控制器的PWM信号,并根据指示器信号切换LED。 Arduino程序还通过计算左右前轮上光学传感器的中断来跟踪轮盘旋转。 它通过分压器电路上测量值的缩放移动平均值来计算电池电压。 它还可以通过选配的超声波传感器测量到汽车前方障碍物的距离。 这些测量值通过串口发送回Android应用程序。 - -## 设置 - -你只需要在一开始设置好你的硬件配置,以便于代码的编写。如果你做了DIY构建(使用L298N电机驱动),设置`OPENBOT DIY`。 -如果你使用了定制的PCB,检查版本并设置`OPENBOT PCB_V1`或`OPENBOT PCB_V2`。 - -## 依赖 - -如果要使用超声波传感器,需要安装[NewPing](https://playground.arduino.cc/Code/NewPing)库。 - -```markdown -Tools -└─── Manage Libraries -``` - -如果要启用超声波传感器,需要设置`HAS_SONAR 1`。 - -### 中文克隆Nano(例如美国链接) - -您可能需要从芯片制造商(中文)下载[WCH340](http://www.wch.cn/product/CH340.html)驱动程序: - -- [Windows](http://www.wch.cn/downloads/CH341SER_EXE.html) -- [Linux](http://www.wch.cn/download/CH341SER_LINUX_ZIP.html) -- [Mac](http://www.wch.cn/download/CH341SER_MAC_ZIP.html) - -## 上传 - -### 设置 - -- `Tools -> Board -> Arduino AVR Boards -> Arduino Nano` -- `Tools -> Processor -> ATmega328P (Old Bootloader)` -- `Tools -> Port -> 选择USB 端口 ` - -现在可以通过 `Sketch -> Upload `或按上传按钮(右箭头)上传固件。 -![固件上传](../docs/images/firmware_upload.png) - -注意:目前,大多数廉价的Arduino Nano板都带有*Old bootloader*。但是,根据卖家的不同,你也可能会得到一个新的bootloader。所以,如果你无法上传固件,有可能需要将处理器换成*ATmega328P*。 - -### 测试 - -本节介绍了固件刷新成功后,如何测试小车的各项功能。 - -1. 确认 - - 车轮没有连接到汽车上 - - Arduino连接到电脑上 - - 选择正确的USB端口 -2. 打开串行监视器:`工具->串行监视器`。 - -现在您应该看到四个逗号分隔的值,每秒更新一次。 - -![串行监视器](../docs/images/serial_monitor.png) - -- 第一个值是蓄电池电压。如果您将蓄电池连接到汽车上(即打开开关),它应该显示蓄电池电压。如果您断开蓄电池(即关闭开关),它应该显示一个小值。 -- 第二个和第三个值是速度传感器的原始读数。编码器盘上的每个孔都会产生两个计数。您可以通过参数`DISK_HOLES`设置孔的数量。如果您使用的是20个孔的标准盘,那么轮子每转一圈就会有40个计数。因此,如果你把显示的数字除以40,你将得到每秒的转数。 -- 第四个值是超声波传感器前的估计可用空间,以cm为单位,默认值为`MAX_DISTANCE`,最大值为`300`。如果禁用超声波传感器,将显示`65535`。 - -您也可以通过在顶部的输入栏中输入命令,然后按发送键向Arudino发送信息。以下是可用的命令。 - -- `c,`其中``和``都在[-255,255]范围内。`0`值将停止电机。`255`的值是驱动电机全速前进的最大电压。较低的值会导致相应的电压和速度降低。负值应用相应的极性电压,驱动电机反向运行。 -- `i`其中``的范围是[-1,1]。`-1`值打开左指示灯LED,`1`值打开右指示灯LED。值为`0`则关闭指示灯LED。每次只能有一个状态。 - -以下测试程序可用于测试该车的所有功能。 - -1. 打开汽车,观察蓄电池电压。您可以用万用表验证读数,必要时调整`VOLTAGE_DIVIDER_FACTOR`。 -2. 如果你安装了超声波传感器。 - a. 将手放在传感器前,前后移动。你应该看到读数有相应的变化。 - b. 确保超声波传感器前面没有任何东西,然后再进行下一步。你应该看到读数为`300`。如果您没有足够的空间,请确保读数至少高于 `STOP_THRESHOLD`,默认为 `64`。 -3. 发送命令`c128,128`。电机将以*低速*(50%PWM)开始旋转。速度传感器的读数应该与上图中的数值相似。如果你使用的是DIY版本或电池较弱,数值可能会低一些。检查所有电机是否都在向前旋转。 -4. 尝试发送不同的控制,观察速度传感器的读数。例如,命令`c-128,-128`将使所有电机以*低速*(50%PWM)向后旋转。命令`c255,-255`将以*快的速度*(100%PWM)使左电机向前旋转,右电机向后旋转。指令 `c-192,192 `将以*正常速度*(75%PWM)使左电机向后旋转,右电机向前旋转。 -5. 将手放在超声波传感器前或发送命令`c0,0`使电机停止。 -6. 发送指令`i-1`,观察左侧指示灯闪烁。发送命令`i1`,观察右侧指示灯闪烁。最后,发送命令`i0`,关闭指示灯。 - -### 无手机模式 - -在用安装了OpenBot应用的智能手机测试汽车之前,你也可以先测试没有手机的汽车。只需将选项`NO_PHONE_MODE`设置为`1`。汽车现在将以*正常速度*(75%PWM)行驶,当它用超声波传感器检测到障碍物时,会减速。如果它进入`STOP_THRESHOLD`(默认值:64cm)内,它将向右转。注意,汽车和Arduino都需要供电。Arduino可以通过将5V引脚连接到L298N电机驱动器的5V输出端,也可以通过USB线连接到电源上(比如手机或电脑)进行供电。 - -在让车跑之前,建议先把轮胎拆下来,把Arduino连接到电脑上,像[测试](#测试)一节那样观察串口显示器。输出的数据比较容易理解,可以显示出电池电压、左右电机的转速和车前估计的自由空间。你可以在超声波传感器前来回移动一个大物体,观察电机的速度变化。 - -警告:如果你没有安装超声波传感器或超声波传感器被禁用,汽车只会以*正常_速度*(75%PWM)向前行驶,会发生碰撞。即使安装了传感器,由于读数有噪音,汽车也会偶尔发生碰撞。 - -## 使用其他的单片机的需求 - -您可以使用具有以下功能的任何其他MCU: - -- 1个USB到TTL串行(与智能手机通信) -- 4个PWM输出(控制电机) -- 1个模拟ff引脚用于电池监控 -- 2个用于速度传感器的数字引脚 -- 1个用于超声波传感器的数字引脚(可选) -- 2个用于LED指示灯的数字引脚(可选) - -## 下一步 - -编译并运行[Android App](../android/README_CN.md) - diff --git a/ios/OpenBot/README.zh-CN.md b/ios/OpenBot/README.zh-CN.md new file mode 100644 index 000000000..e89dc6a2e --- /dev/null +++ b/ios/OpenBot/README.zh-CN.md @@ -0,0 +1,161 @@ +# Robot iOS App - Beta Release + +

+ English | + 简体中文 | + Deutsch +

+ +## 免责声明 + +1. **安全性:** 请确保您在安全的环境中操作。请记住,您的手机可能会在碰撞中受损!在使用自动控制(例如跟随人或驾驶策略)时需要特别小心。请确保您始终连接了游戏控制器,并熟悉按键映射,以便随时停止车辆。使用风险自负! +2. **应用程序正在开发中:** 该应用程序正在开发中,可能会根据您的手机型号和操作系统版本出现崩溃或意外行为。请确保在没有连接车轮的情况下测试所有功能。使用风险自负! + +## 应用程序界面 + +### 主菜单 + +应用程序启动时会显示一个菜单屏幕,展示所有可用的屏幕。点击右上角的蓝牙图标可以打开蓝牙连接屏幕。点击旁边的设置图标可以打开设置屏幕。点击其他图标,用户可以访问各种屏幕,其功能将在后续部分中解释。 + +

+主菜单 +蓝牙 +设置 +

+ +#### 蓝牙连接 + +与允许通过USB电缆将智能手机连接到OpenBot低级控制板的Android应用程序不同,iOS应用程序仅依赖于蓝牙低功耗(BLE)无线连接。在iOS应用程序中打开蓝牙连接屏幕时(通过点击主屏幕或任何片段中的蓝牙标志),会显示所有兼容设备的列表。兼容性通过在[应用程序](https://github.com/3dwesupport/OpenBot/blob/090dcb28206195a7ee45a13b8ded968a8d365abe/ios/OpenBot/OpenBot/Utils/Constants.swift#L57)和[固件](https://github.com/3dwesupport/OpenBot/blob/090dcb28206195a7ee45a13b8ded968a8d365abe/firmware/openbot_nano/openbot_nano.ino#L115)级别分配给OpenBot车辆的一系列特定UUID来强制执行。您必须确保这些UUID匹配。将iOS设备与OpenBot车辆配对只需从列表中选择该车辆并按下“连接”按钮。连接的默认波特率设置为115200,可以在应用程序和固件级别更改。 + +

+BLE连接 +

+ +### 自由漫游 + +自由漫游提供简单的机器人控制,并实时更新电池、电量和与表面的距离信息。它还提供与控制器、驾驶模式和速度相关的控制。 + +

+自由漫游 +

+ +- **电池:** 电池图标显示连接机器人的实时电池电量。 + +- **驾驶模式:** 视图上显示三种驾驶模式: + + - D -> 驾驶,当机器人向前行驶时 + + - N -> 空档,当机器人静止时 + + - R -> 倒车,当机器人向后移动时 + +- **速度:** 速度计显示机器人的实时速度。 + +- **声纳:** 声纳视图显示机器人与迎面物体的距离(以厘米为单位)。 + +- **蓝牙:** 显示与微控制器的蓝牙连接状态。点击图标,用户还可以跳转到蓝牙屏幕查看/修改连接。 + +#### 控制 + +第一个按钮用于选择**控制模式**。有两种不同的控制模式: + +- **游戏手柄:** 应用程序接收来自连接的蓝牙控制器的控制。 +- **手机(即将推出):** 机器人可以通过安装了控制器应用程序的另一部智能手机或通过连接到同一网络的计算机上运行的Python脚本进行控制。 + +第二个按钮用于选择**驾驶模式**。使用游戏控制器(例如PS4)时,有三种不同的驾驶模式: + +- **游戏:** 使用右肩和左肩触发器(R2,L2)进行前进和倒车油门,并使用任意一个摇杆进行转向。此模式模仿赛车视频游戏的控制模式。 +- **摇杆:** 使用任意一个摇杆控制机器人。 +- **双摇杆:** 使用左摇杆和右摇杆分别控制汽车的左侧和右侧。这是原始的差速转向。 + +第三个按钮用于选择**速度模式**。有三种不同的速度模式: + +- **慢速:** 应用于电机的电压限制为输入电压的50%(约6V)。 +- **正常:** 应用于电机的电压限制为输入电压的75%(约9V)。 +- **快速:** 没有限制。全油门时将对电机应用全输入电压(约12V)。*这是运行神经网络的默认设置。* + +以更高的速度运行会减少电机的使用寿命,但更有趣。发送到机器人的控制显示在右侧。使用游戏控制器时,可以通过按下右摇杆(R3)增加速度模式,通过按下左摇杆(L3)减少速度模式。 + +### 数据收集 + +用于收集数据集的简单UI。 + +

+ +数据收集 + +

+ +- **预览分辨率:** 用于切换相机预览的分辨率。有3种设置: + + - ***高*** (1920x1080p) + + - ***中*** (1280x720p) + + - ***低*** (640x360) + +- **模型分辨率:** 用于切换保存用于训练不同模型的图像分辨率。 + +- **记录收集的数据:** 数据收集过程可以从屏幕或远程控制,例如通过蓝牙控制器进行控制。使用蓝牙控制器时,您可以: + + - 按下**A按钮**以**开始**数据收集过程 + + - 再次按下**A按钮**以**停止**数据收集并将收集的数据保存到.zip文件中 + + - 或者按下**R1按钮**以**停止**数据收集**而不保存**收集的数据(例如由于意外碰撞环境) + + - 请记住使用控制器映射片段以确保您使用的是正确的按钮。 + +- **车辆状态:** **电池**字段显示微控制器通过分压器测量的电池电压。**速度(左,右)**字段报告(前)轮的左侧和右侧速度(以rpm为单位)。它由微控制器通过光学车轮速度传感器测量。**声纳**字段显示汽车前方的空闲空间(以厘米为单位)。它由微控制器通过超声波传感器测量。请注意,USB连接建立后几秒钟内您才会收到数值。 + +- **传感器:** 报告车辆传感器的测量值。目前,我们记录以下传感器的读数:相机、陀螺仪、加速度计、磁力计、环境光传感器和气压计。使用iOS API,我们能够获得以下传感器读数:RGB图像、角速度、线性加速度、重力、磁场强度、光强度、大气压力、纬度、经度、高度、方位和速度。除了手机传感器外,我们还记录通过串行链接传输的车身传感器读数(车轮里程计、障碍物距离和电池电压)。如果存在连接的控制器,我们还记录并时间戳控制信号。最后,我们集成了几种用于跟随人和自主导航的神经网络。 + +### 控制器映射 + +用于检查连接的蓝牙控制器的按钮和摇杆映射的简单UI。 + +

+控制器映射 +

+ +### 机器人信息 + +用于获取机器人信息和测试基本功能的简单UI。固件中配置的**机器人类型**以文本和动画形式显示。**传感器**、**车轮里程计**和**LED**部分的复选标记显示连接的机器人支持哪些功能。**读数**部分提供最重要的传感器测量值。在**发送命令**部分,用户可以通过按下相应的按钮发送基本电机命令,并通过滑块控制前后LED。 + +

+机器人信息 +

+ +### 自动驾驶 + +用于运行自动驾驶模型的简单UI。 + +

+ +自动驾驶 + +

+ +### 物体跟踪 + +用于跟踪80种不同类别物体的简单UI。有关物体跟踪的不同AI模型和性能基准的简短描述可以在[模型管理](#model-management)中找到。 + +

+物体跟踪 +

+ +### 模型管理 + +所有模型都经过量化以提高嵌入式设备上的性能。请注意,具有较大输入分辨率的模型可能尽管mAP较低,但对较小物体更好。 + +

+模型管理 +

+ +## 代码结构 + +[TensorFlow Lite 物体检测 iOS 示例](https://github.com/tensorflow/examples/tree/master/lite/examples/object_detection/ios)被用作集成TFLite模型和获取相机视频流的起点。[tflite](OpenBot/tflite)文件夹包含[自动驾驶](OpenBot/tflite/Autopilot.swift)和[检测器](OpenBot/tflite/Detector.swift)网络的模型定义。 + +## 下一步(可选) + +训练您自己的[驾驶策略](../../policy/README.md) \ No newline at end of file diff --git a/ios/README.zh-CN.md b/ios/README.zh-CN.md new file mode 100644 index 000000000..d6776a293 --- /dev/null +++ b/ios/README.zh-CN.md @@ -0,0 +1,40 @@ +# iOS 应用程序 - 测试版发布 + +

+ English | + 简体中文 | + Deutsch +

+ +## 功能 + +点击下面的链接阅读应用程序的功能。 + +- [机器人应用](OpenBot/README.md) +- 控制器应用(即将推出) + +## 安装应用程序 +目前,在您的手机上运行 iOS 应用程序的唯一方法是通过开发者构建,如下节所述。 + +## 构建应用程序 + +### 先决条件 + +- [Xcode iOS 13 或更高版本](https://developer.apple.com/xcode/) 用于构建和安装应用程序。 +- 系统上安装了 [Cocoapods](https://cocoapods.org/)。 +- 目前,我们使用的 iOS 部署目标版本是 15.5。 +- 项目配置为“自动管理签名”,因此您可以配置自己的独立帐户来构建应用程序 - + iOS App +- 要配置自己的团队,请通过 XCode > 设置 > 帐户或直接从上面的团队菜单中添加您的 iCloud 帐户。 +- 运行 iOS 13 或更高版本的 iOS 设备。[支持设备列表](https://support.apple.com/en-in/guide/iphone/iphe3fa5df43/ios)。 +- 在您的 iOS 设备上激活 [开发者模式](https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device)。 +- 添加的 iCloud 帐户应被您的 iOS 设备 [信任](https://developer.apple.com/forums/thread/685271)。 + +### 构建过程 + +1. 打开 XCODE 并选择 *打开项目或文件*。 +2. 要安装 [OpenBot 应用](OpenBot/README.md),请确保选择 *OpenBot* 配置。 + iOS App +3. 从可用设备列表中选择您的设备。 + iOS App +4. 通过点击 Xcode 屏幕左上角的 ▶️ 图标在设备上运行应用程序。 \ No newline at end of file diff --git a/policy/README.zh-CN.md b/policy/README.zh-CN.md new file mode 100644 index 000000000..a2e626996 --- /dev/null +++ b/policy/README.zh-CN.md @@ -0,0 +1,296 @@ +# 驾驶策略(高级) + +

+ English | + 简体中文 | + Deutsch +

+ +## 免责声明 + +1. **安全性:** 驾驶策略并不完美,可能会导致机器人发生碰撞。请确保在安全的环境中操作!请记住,您的手机可能会在碰撞中受损!确保始终连接游戏控制器,并熟悉按键映射,以便随时停止车辆。风险自负! +2. **计算硬件:** 训练驾驶策略需要大量资源,可能会减慢甚至冻结您的机器。建议使用高端笔记本电脑或工作站,具有大量RAM和专用GPU,尤其是在使用较大批量大小进行训练时。文档目前也不太详细。风险自负! +3. **需要耐心:** 要为您的自定义数据集获得良好的驾驶策略需要一些耐心。这并不是一个简单的过程,涉及数据收集、超参数调整等。如果您从未训练过机器学习模型,这将是一个挑战,甚至可能令人沮丧。 + +您首先需要设置您的训练环境。 + +## 依赖项 + +我们建议为OpenBot创建一个conda环境。关于安装conda的说明可以在[这里](https://docs.conda.io/projects/conda/en/latest/user-guide/install/)找到。创建包含所有依赖项的新环境的最简单方法是使用提供的环境文件之一。在Windows上,您还需要安装[Microsoft C++ Build Tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/)。确保您在本地OpenBot存储库中的`policy`文件夹中。根据您的操作系统,运行相应的命令: + +- **MacOS**: `conda env create -f environment_mac.yml` +- **Windows**: `conda env create -f environment_win.yml` +- **Linux**: `conda env create -f environment_linux.yml` + +为了支持GPU,请确保您也安装了适当的驱动程序。在Mac和Windows上,一切都应该开箱即用。在Linux上,您可以使用以下命令安装驱动程序: +``` +sudo apt-get install nvidia-driver-510 +``` +在Linux上,您可能还需要运行以下命令将cuda和cudnn添加到路径中: +``` +echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CONDA_PREFIX/lib/' >> ~/.bashrc +source ~/.bashrc +``` + +完成!您已准备好训练自己的模型。如果这对您不起作用,下面是手动设置此类环境的说明。 + +### 手动环境设置 + +首先使用以下命令创建一个新的conda环境: + +```bash +conda create -n openbot pip python=3.9 -y +``` + +接下来,您需要激活您的conda环境: + +```bash +conda activate openbot +``` + +如果这不起作用(例如在Windows上),您可能需要使用`activate openbot`来激活环境。 + +一旦环境激活,您需要安装tensorflow。请注意,在笔记本电脑上训练速度会非常慢。因此,如果您可以访问具有专用GPU的计算机,我们强烈建议通过安装必要的库来使用它;确保您安装了最新的GPU驱动程序。以下是为不同操作系统安装tensorflow的命令。 + +#### **Mac OS** +``` +conda install -c apple tensorflow-deps -y +pip install tensorflow-macos~=2.9.0 +``` +GPU支持 +``` +pip install tensorflow-metal~=0.5.0 +``` +[故障排除](https://developer.apple.com/metal/tensorflow-plugin/) + +#### **Linux** +``` +pip install tensorflow~=2.9.0 +``` +GPU支持 +``` +sudo apt-get install nvidia-driver-510 +conda install -c conda-forge cudatoolkit=11.2 cudnn=8.1 -y +echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CONDA_PREFIX/lib/' >> ~/.bashrc +source ~/.bashrc +``` +[故障排除](https://www.tensorflow.org/install/pip#linux) + +#### **Windows** +``` +pip install tensorflow~=2.9.0 +``` +GPU支持 +``` +conda install cudatoolkit=11.3 cudnn=8.2 -y +``` + +#### **附加要求** + +确保您在本地OpenBot存储库中的`policy`文件夹中。现在,您可以使用以下命令安装所有剩余的依赖项: + +```bash +pip install -r requirements.txt +``` + +如果您想要可视化网络架构,您还可以安装pydot(`pip install pydot`)和graphviz([参见说明](https://graphviz.gitlab.io/download/))。 + +如果您想使用[WebApp](#web-app)进行数据收集和训练,您还需要安装以下依赖项。(在Mac上,`brotlipy`包在pip上当前有问题,因此您需要首先使用conda安装它:`conda install brotlipy=0.7`) + +```bash +pip install -r requirements_web.txt +``` + +### 必要的软件包 + +为了参考和故障排除,以下是必要软件包的列表。 + +训练: + +- [tensorflow](https://pypi.org/project/tensorflow/) +- [jupyter notebook](https://pypi.org/project/notebook/) +- [matplotlib](https://pypi.org/project/matplotlib/) +- [numpy](https://pypi.org/project/numpy/) +- [PIL](https://pypi.org/project/Pillow/) +- [black[jupyter]](https://pypi.org/project/black/) + +Web界面: + +- [aiohttp](https://pypi.org/project/aiohttp/) +- [aiozeroconf](https://pypi.org/project/aiozeroconf/) +- [imageio](https://pypi.org/project/imageio/) + +### 注意事项 + +- 记得在终端运行命令之前激活环境:`conda activate openbot` +- 如果您的tensorflow导入不起作用,请尝试通过`pip install tensorflow --user`安装。(参见这个[问题](https://github.com/intel-isl/OpenBot/issues/98)。) + +## 数据集 + +### 数据收集 + +为了训练一个自动驾驶策略,您首先需要收集一个数据集。您收集的数据越多,最终的驾驶策略就越好。在我们的论文实验中,我们收集了大约30分钟的数据。请注意,网络将模仿您的驾驶行为。您驾驶得越好越一致,网络将学会驾驶得越好。 + +1. 将蓝牙游戏控制器连接到手机(例如PS4控制器:按住PS和分享按钮直到LED快速闪烁以进入配对模式)。 +2. 在应用程序中选择`CIL-Mobile-Cmd`模型。 +3. 现在通过游戏控制器驾驶汽车并记录数据集。在PS4控制器上,可以通过**X**按钮切换日志记录。 + +您现在会在智能手机的内部存储中找到一个名为*Documents/OpenBot*的文件夹。每次录制都会有一个zip文件。zip文件的名称格式为*yyyymmdd_hhmmss.zip*,对应于录制开始时的时间戳。 + +Jupyter notebook期望在同一文件夹中有一个名为`dataset`的文件夹。在这个文件夹中,应该有两个子文件夹,`train_data`和`test_data`。训练数据用于学习驾驶策略。测试数据用于在训练过程中验证在未见过的数据上的学习驾驶策略。这提供了一些关于该策略在机器人上工作的指示。即使机器人沿着训练期间看到的相同路线行驶,每次运行观察到的确切图像也会略有不同。常见的分割是80%的训练数据和20%的测试数据。在`train_data`和`test_data`文件夹中,您需要为每个录制会话创建一个文件夹,并给它一个名称,例如`my_openbot_1`,`my_openbot_2`等。这里的想法是,每个录制会话可能有不同的光照条件,不同的机器人,不同的路线。在Jupyter notebook中,您可以仅在这些数据集的子集上或在所有数据集上进行训练。在每个录制会话文件夹中,您放置所有从该录制会话中提取的zip文件。您的数据集文件夹应如下所示: + +文件夹结构 + +与其手动从手机复制所有文件,您还可以自动将日志上传到计算机上的[Python服务器](#web-app)。在这种情况下,zip文件将被上传并解压到文件夹`dataset/uploaded`中。您仍然需要将它们移动到训练的文件夹结构中。您可以简单地将`uploaded`文件夹视为一个录制会话并将其移动到`train_data`中。然后,Jupyter notebook将识别这些录音为训练数据。如果您在`test_data`文件夹中还没有录制会话,您还需要将至少一个录音从`train_data/uploaded`移动到`test_data/uploaded`中。 + +### 数据转换(可选) + +为了更好的训练性能,您可以将收集的数据集转换为专门的格式。您可以使用以下命令创建训练和测试数据集的tfrecord: + +```bash +conda activate openbot +python -m openbot.tfrecord -i dataset/train_data -o dataset/tfrecords -n train.tfrec +python -m openbot.tfrecord -i dataset/test_data -o dataset/tfrecords -n test.tfrec +``` + +默认情况下,此转换将在训练开始时自动完成。 + +## 策略训练 + +通过执行以下命令确保您的openbot conda环境已激活: + +```bash +conda activate openbot +``` + +### Jupyter Notebook + +我们提供了一个[Jupyter Notebook](policy_learning.ipynb),指导您完成训练自动驾驶策略的步骤。使用以下命令打开笔记本。 + +```bash +jupyter notebook policy_learning.ipynb +``` + +现在将自动打开一个网页浏览器窗口并加载Jupyter notebook。按照步骤使用您的数据训练模型。 + +### Shell + +此方法假设数据在正确的位置。要调整超参数,您可以传递以下参数。 + +```bash +'--no_tf_record', action='store_true', help='不加载tfrecord而是文件目录' +'--create_tf_record', action='store_true', help='创建新的tfrecord' +'--model', type=str, default='pilot_net', choices=['cil_mobile', 'cil_mobile_fast', 'cil', 'pilot_net'], help='网络架构(默认:cil_mobile)' +'--batch_size', type=int, default=16, help='训练批次大小(默认:16)' +'--learning_rate', type=float, default=0.0001, help='学习率(默认:0.0001)' +'--num_epochs', type=int, default=10, help='训练轮数(默认:10)' +'--batch_norm', action='store_true', help='使用批量归一化' +'--flip_aug', action='store_true', help='随机翻转图像和控制以进行增强' +'--cmd_aug', action='store_true', help='为命令输入添加噪声以进行增强' +'--resume', action='store_true', help='恢复之前的训练' +``` + +如果您的数据集已经转换为tfrecord,您可以使用以下命令从shell训练策略: + +```bash +python -m openbot.train +``` + +如果您想在训练之前将数据集转换为tfrecord,您需要添加以下标志: + +```bash +python -m openbot.train --create_tf_record +``` + +如果您不想将数据集转换为tfrecord,并直接使用文件进行训练,您需要添加以下标志: + +```bash +python -m openbot.train --no_tf_record +``` + +要训练用于最终部署的模型,您需要使用较大的批次大小和训练轮数。启用批量归一化通常会改善训练。模型`pilot_net`比默认的`cil_mobile`更大,但在某些任务上可以实现更好的性能,同时仍能在大多数智能手机上实时运行。 + +```bash +python -m openbot.train --model pilot_net --batch_size 128 --num_epochs 100 --batch_norm +``` + +### 部署 + +在训练过程结束时,会生成两个tflite文件:一个对应于根据验证指标的最佳检查点,另一个对应于最后一个检查点。选择其中一个并将其重命名为autopilot_float.tflite。替换Android Studio中的现有模型并重新编译应用程序。 + +

+ 应用程序GUI +

+ +如果您在本地目录中查找文件夹,您会在以下位置找到它:`app/src/main/assets/networks`。 + +## Web应用程序 + +我们提供了一个Web应用程序和一个Python Web服务器,以便于策略训练。(测试版) + +### 功能 + +- 自动日志(会话)上传 + - 参见故障排除详情 +- 列出上传的会话,带有GIF预览 +- 列出数据集,带有基本信息 +- 将会话移动到数据集 +- 删除会话 +- 列出训练的模型,并显示关于训练的图表 +- 使用基本参数训练模型,显示进度条 + +### 预览 + +Web应用程序预览 + +### 快速开始 + +```bash +conda activate openbot +python -m openbot.server +``` + +您现在可以打开浏览器,通过访问以下地址来可视化数据集并查看传入的上传: +[http://localhost:8000/#/uploaded](http://localhost:8000/#/uploaded) + +### 运行服务器 + +您可以使用以下命令运行Python服务器: + +```bash +python -m openbot.server +``` + +还有一个开发者模式: + +```bash +adev runserver openbot/server +``` + +用于前端开发(react应用程序): + +``` +FE_DEV=1 adev runserver openbot/server +``` + +当您运行服务器时,您应该会看到类似以下内容: + +``` +Skip address 127.0.0.1 @ interface lo +Found address 192.168.x.x @ interface wlp2s0 +Registration of a service, press Ctrl-C to exit... +Running frontend: 0.7.0 +Frontend path: /home/USERNAME/miniconda3/envs/openbot/lib/python3.7/site-packages/openbot_frontend +======== Running on http://0.0.0.0:8000 ======== +(Press CTRL+C to quit) +``` + +### 故障排除 + +如果上传到服务器不起作用,以下是一些故障排除提示: + +- 尝试重新启动服务器(计算机)和OpenBot应用程序(智能手机) +- 确保智能手机和计算机连接到同一个WiFi网络 +- 如果您的路由器具有相同名称的2.4 GHz和5 GHz网络,请禁用5 GHz网络 +- 在运行应用程序时将手机连接到Android Studio。在Logcat选项卡中,从下拉菜单中选择Debug。在过滤字段中输入`NSD`以查看有关服务器连接的调试消息。在过滤字段中输入`Upload`以查看有关录制文件上传的调试消息。 +- 如果发布的模型不断下载,请确保手机和笔记本电脑/工作站的时间设置正确。 \ No newline at end of file diff --git a/policy/README_CN.md b/policy/README_CN.md deleted file mode 100644 index 6930c2540..000000000 --- a/policy/README_CN.md +++ /dev/null @@ -1,81 +0,0 @@ - -# 驾驶策略(高级) - -

- English | - 简体中文 -

- -警告:要为您的自定义数据集制定良好的驾驶策略,需要一些耐心。 它不是直接的,涉及数据收集,超参数调整等。如果您以前从未训练过机器学习模型,这将是挑战,甚至可能令人沮丧。 - -为了训练自动驾驶策略,你首先需要收集一个数据集。你收集的数据越多,得出的驾驶策略就越好。对于我们论文中的实验,我们收集了大约30分钟的数据。注意,网络会模仿你的驾驶行为。你的驾驶行为越好、越稳定,网络就会越好地学习驾驶。 - -## 数据收集 - -1. 将蓝牙游戏遥控手柄连接到手机上(如PS4 遥控手柄)。 -2. 在应用程序中选择AUTOPILOT_F网络。 -3. 现在通过游戏遥控手柄驱动汽车并记录数据集。在PS4控制手柄上可以用 **X** 按钮切换记录。 - -你现在会在智能手机的内部存储上找到一个名为Openbot的文件夹。对于每个记录,都会有一个压缩文件。zip文件的名称格式为*yyyymmdd_hhmmss.zip*,对应记录开始的时间戳。 - -你的数据集文件应该以以下结构存储。 - -```markdown -dataset -└── train_data - └── my_openbot_1 - └── recording_1 - recording_2 - ... - my_openbot_2 - ... - test_data - └── my_openbot_3 - └── recording_1 - recording_2 - ... -``` - -从手机上的*Openbot*文件夹中导出,每一条记录都对应着一个解压的压缩文件。 - -## 训练策略 - -您首先需要设置您的培训环境。 - -### 依赖 - -我们建议为OpenBot创建一个conda环境。关于安装conda的说明可以在[这里](https://docs.conda.io/projects/conda/en/latest/user-guide/install/)找到。 - - -如果你没有专用的GPU(例如使用你的笔记本电脑),你可以用以下命令创建一个新的环境。 - -```bash -conda create -n openbot python=3.7 tensorflow=2.0.0 notebook=6.1.1 matplotlib=3.3.1 pillow=7.2.0 -``` - -请注意,训练速度会非常慢。所以,如果你具有专用GPU的计算机,我们强烈建议使用它。在这种情况下,你将需要支持GPU的Tensorflow。运行以下命令来设置conda环境。 - -```bash -conda create -n openbot python=3.7 tensorflow-gpu=2.0.0 notebook=6.1.1 matplotlib=3.3.1 pillow=7.2.0 -``` - -如果你喜欢手动设置环境,这里有一个依赖列表。 - -- Tensorflow -- Jupyter Notebook -- Matplotlib -- Numpy -- PIL - -### Jupyter Notebook - -我们提供了一个 [Jupyter Notebook](policy_learning.ipynb)文件,指导您完成训练自动驾驶策略的步骤。笔记本会生成两个`tflite`文件,分别对应根据验证指标的最佳checkpoint和最新checkpoint。选取其中一个并将其重命名为autopilot_float.tflite。替换现有的模型,在 - -```markdown -app -└── assets - └── networks - └── autopilot_float.tflite -``` - -并重新编译安卓App。 diff --git a/policy/frontend/README.zh-CN.md b/policy/frontend/README.zh-CN.md new file mode 100644 index 000000000..a392f3727 --- /dev/null +++ b/policy/frontend/README.zh-CN.md @@ -0,0 +1,36 @@ +# OpenBot Policy Frontend + +

+ English | + 简体中文 | + Deutsch +

+ +这个项目是用 [Create React App](https://github.com/facebook/create-react-app) 引导的。 + +## 可用脚本 + +在项目目录中,你可以运行: + +### `yarn start` + +在开发模式下运行应用程序。\ +打开 [http://localhost:3000](http://localhost:3000) 在浏览器中查看。 + +如果你进行编辑,页面将重新加载。\ +你还将在控制台中看到任何 lint 错误。 + +### `yarn test` + +在交互式监视模式下启动测试运行器。\ +有关更多信息,请参见关于[运行测试](https://facebook.github.io/create-react-app/docs/running-tests)的部分。 + +### `yarn build` + +为生产环境构建应用程序到 `build` 文件夹。\ +它在生产模式下正确地捆绑了 React 并优化了构建以获得最佳性能。 + +构建被压缩,文件名包含哈希值。\ +你的应用程序已准备好部署! + +有关更多信息,请参见关于[部署](https://facebook.github.io/create-react-app/docs/deployment)的部分。 \ No newline at end of file diff --git a/python/README.zh-CN.md b/python/README.zh-CN.md new file mode 100644 index 000000000..e00b543a6 --- /dev/null +++ b/python/README.zh-CN.md @@ -0,0 +1,130 @@ +# Python + +

+ English | + 简体中文 | + Deutsch +

+ +该模块是嵌入式Linux系统中用于控制OpenBot车辆的智能手机控制替代方案。使用Python编写,OpenBot可以通过基于Linux的计算机和摄像头进行感知和控制。 + +机器人可以通过两种方式进行控制:通过神经网络策略推理或通过操纵杆。 + +``` +├── __init__.py +├── README.md +├── requirements.txt +├── run.py +├── generate_data_for_training.py +├── export_openvino.py +├── infer.py +├── joystick.py +├── realsense.py +└── tests + ├── test_data + │   └── logs1 + │   └── ... + ├── test_models + │   ├── openvino + │   ├── tflite + │   └── tf.zip + ├── test_export_openvino.py + ├── test_infer.py + ├── test_joystick.py + ├── test_motor.py + └── test_realsense.py + +``` +## 运行机器人 + +要操作机器人,请运行`run.py`,这是主要的Python脚本。机器人可以在三种模式下运行: +- 调试模式:此模式离线运行策略。即,它使用从数据集(参见`tests/test_data/logs1/data`)加载的数据(命令和图像)作为策略的输入,而不是实际的摄像头图像和操纵杆输入命令。 +- 推理模式:此模式在线运行策略。它使用实际的摄像头图像和操纵杆输入命令作为策略的输入。可以通过按操纵杆上的`A`键切换到操纵杆模式。 +- 操纵杆模式:此模式通过操纵杆命令操作机器人,可以在“Dual”(通过左右操纵杆控制左右轮)或“Joystick”(通过一个操纵杆控制前进、后退、左转、右转方向)`control_mode`下运行。训练数据的收集是在操纵杆模式下进行的。可以通过按操纵杆上的`A`键切换到推理模式。 + +`run.py`脚本接受六个参数(详细信息见`run.py`): +``` +--policy_path: 策略文件的路径。 +--dataset_path: 数据集的路径。仅用于调试模式。 +--log_path: 日志文件夹的路径,运行记录将保存在此处。 +--inference_backend: 使用的后端。为了获得最佳性能,建议将所有模型导出为openvino模型。选项:tf, tflite, openvino。 +--mode: 运行模式。选项:debug, inference, joystick。 +--control_mode: 操纵杆模式下的控制模式。选项:dual, joystick。 +``` +## 生成训练数据 +脚本`generate_data_for_training.py`生成一个日志数据文件夹,该文件夹是通过`OpenBot/policy/openbot/train.py`脚本训练策略所需的。日志数据文件夹包含一个`images`和一个`sensor_data`文件夹,格式符合`train.py`的要求。 + +参见`tests/test_generate_data.py`以获取示例。 + +## OpenVino:优化策略推理性能 +为了在支持的Intel硬件(如[Up Core Plus](https://up-board.org/upcoreplus/specifications/)板)上优化推理速度,需要将训练好的模型导出为OpenVino。 + +`export_openvino.py`脚本将训练好的TensorFlow模型导出为OpenVino模型。然后通过`infer.py`中的`get_openvino_interpreter()`加载此OpenVino模型。 + +参见`tests/test_export_openvino.py`以获取示例。 + +## 测试和示例代码 + +**注意:** 要测试代码,需要将名为`test_data`和`test_model`的测试数据和测试模型分别放在`OpenBot/python/tests`中。`download_data.py`中的`get_data()`函数提供下载功能,并在`test_infer.py`、`test_export_openvino.py`和`test_generate_data.py`的开头调用。或者,请运行脚本`get_test_data.sh`(仅限Unix系统),该脚本会下载并解压包含`test_data`和`test_models`的zip文件,分别用于调试模式的数据和推理模型。 + +在`tests`文件夹中运行`pytest`或单独运行`test_*.py`文件以测试以下功能: + +- 通过`test_download_data.py`从云端下载测试数据和测试模型 +- 通过`test_export_openvino.py`导出到OpenVino +- 通过`test_generate_data.py`生成训练数据 +- 在调试模式下进行OpenVino、Tensorflow和Tflite的推理,通过`test_infer.py` + - *注意*:logs1中的测试数据是使用`OpenBot.policy.openbot`中的`associate_frames.py`脚本生成的,其中图像路径硬编码在`logs1/data/sensor_data/matched_frame_ctrl_cmd_processed.txt`中。 + - 因此,请在`test_infer.py`中将`path_to_openbot`替换为`OpenBot`仓库的实际路径。 +- 通过`test_joystick.py`进行操纵杆连接 +- 通过`test_motor.py`从串口到Arduino的电机连接 +- 通过`test_realsense.py`进行Realsense摄像头的视频流 + +# 安装 +安装过程如下所述。 + +用于控制OpenBot的Python实现需要一些用于推理、操纵杆控制、感知和执行的Python模块。 +此外,可能需要摄像头或控制器的驱动程序。 + +## 设置 +目前,代码在以下设备上进行了测试: +- 板: [Up Core Plus](https://up-board.org/upcoreplus/specifications/) +- 摄像头: [Realsense D435i](https://www.intelrealsense.com/depth-camera-d435i/) +- 控制器: [Xbox One](https://www.microsoft.com/en-gb/store/collections/xboxcontrollers?source=lp) +- Arduino: [OpenBot Firmware](https://github.com/isl-org/OpenBot/blob/master/firmware/README.md) + +## Python模块 + +代码在Python 3.9上进行了测试。使用Anaconda3: +``` +conda create --name openbot python==3.9 +``` + +首先,通过以下命令安装OpenBot.policy的依赖项: +``` +../policy && pip install -r requirements.txt +``` + +然后,通过以下命令安装所需的模块: +``` +pip install -r requirements.txt +``` + +特别地, +- `pyserial`通过串口与Arduino及电机通信 +- `pyrealsense2`和`opencv-python`用于摄像头图像处理 +- `pygame`用于操纵杆控制和处理操纵杆输入 +- `openvino-dev[tensorflow2,extras]`用于在支持的Intel硬件上提升性能。有关在Intel硬件上优化AI推理的更多详细信息,请参见[OpenVino](https://docs.openvino.ai/latest/home.html)。OpenVino是推荐的推理后端。Tensorflow和Tflite也受支持(参见测试)。对于运行PyTorch模块,请考虑将PyTorch转换为OpenVino后端(参见[此教程](https://docs.openvino.ai/latest/openvino_docs_MO_DG_prepare_model_convert_model_Convert_Model_From_PyTorch.html))。 + +## 驱动程序 +如果代码在Ubuntu上执行,Xbox One控制器的USB无线适配器需要一个驱动程序,可以在[此链接](https://github.com/medusalix/xone)找到。 + +## 用于推理的Tensorflow +如果使用TensorFlow进行推理,请通过`export PYTHONPATH=$PYTHONPATH:/path/to/OpenBot/policy`将Python `policy`模块添加到`PYTHONPATH`。此解决方案避免了将openbot安装为模块并找到`openbot.utils.load_model()`的需求,这对于加载tensorflow模型是必需的。更多详细信息,请参见`infer.py`中的`get_tf_interpreter()`和测试代码`tests/test_infer.py`。 + +## 对非Linux发行版(MacOS,Windows)的支持 + +请注意,代码旨在在基于Linux的计算机上运行,例如Up Core Plus。某些Python模块可能不适用于MacOS或Windows。 + +代码可以在MacOS上运行以进行调试,需进行以下更改: +- 在requirements.txt中使用`pyrealsense2-macosx`代替`pyrealsense2` +- 对于tflite,请遵循[这些说明](https://github.com/milinddeore/TfLite-Standalone-build-Linux-MacOS) \ No newline at end of file