“3D打印机器人开发平台”或3DPRDP,是一个完全可3D打印的开发平台。它由Nvidia Jetson Nano和Arduino Nano开发板驱动,运行在Ubuntu系统上。它可以轻松实现人工智能和机器学习模型。我设计它是为了快速测试原型和新想法。它不需要每个项目都从头开始,而是有助于在项目早期测试关键内容,例如代码和算法。我希望设计一个价格合理且易于使用的系统。它完全由3D打印而成,无需复杂的组装或螺母和螺栓。
主程序用 Python 编写,使用 Flask 和 Socket I/O 在板上运行 Web 服务器。您可以使用 IP 地址连接到接口。该项目是模块化的,您无需安装所有组件即可运行。我已经在本文的注释中标注了可以替换的组件及其替代方案……

## 补给品
3D打印部件
Nvidia Jetson nano
犯罪现场调查:橙色
职业课程(可选)
Arduino nano
2 个电机驱动器
2 X MG90S伺服器
0.92英寸OLED
PCA9685伺服驱动器
USB 电缆
4 X 16850 锂电池
Jetson Nano 移动电源
## 第一步:放松,听我说完
放松并听我说完
这个项目对初学者来说可能有点难,但不用担心,只要你愿意付出一些努力,一切都会好起来。这个项目的设计对初学者来说可能看起来有点吓人,但其实不然。我不是专业的程序员或专家。我在做这个项目的过程中学习了所有的代码和其他知识。所以,如果我能做到,你也能做到。我还附上了所有我学习时用到的资源。
另外,并非所有组件都是完成此项目所必需的。如果您预算紧张,可以省略一些组件,例如 GoPro。不用担心,我会逐步解释。我还调整了代码,以防某些组件不可用,只需注释掉一些行即可正常工作。
我在项目中提供了许多超链接,如果你仔细阅读它们,将会帮助你更轻松地构建这个项目。它们将解决你的大部分问题。

## 第 2 步:设置 Nvidia Jetson Nano
我们将在本项目中使用 Nvidia Jetson Nano。NVIDIA Jetson Nano 开发套件是一款小型但功能强大的计算机,可让您并行运行多个神经网络,用于图像分类、目标检测、分割和语音处理等应用。所有这些都集成在一个易于使用的平台上,运行功耗仅为 5 瓦。
您可以使用树莓派,而且该项目的代码与所使用的硬件无关。我选择 Nvidia 是因为它提供了大量的库和示例,这将使将来添加 AI/ML 功能更加容易。
这是有关如何设置 jetson nano 的完整官方指南。
https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit
对于视觉学习者
Digi-key 教程
提示:-
这里有一些关于 Jetson Nano 的学习资源。我用它们设置了我的 Jetson。这是 Jetson 设备最好的专用网站。
https://www.jetsonhacks.com/


## 步骤3:组装
这个项目完全由 3D 打印,无需任何复杂的组装。采用 PLA 材料打印,层高 0.3 毫米,使用 ender 3 pro。阅读组装说明会非常枯燥,因此我们提供了一个可在浏览器上运行的整个项目的交互式 3D 模型。Grab CAD 上有一个 3D 模型分解功能,请使用它,这样您可以更好地了解各个部件的放置位置。
Grabcad 交互模型
用于 3D 打印的 STL 文件
您也可以从给定的链接下载该项目的原始 Solidworks 文件。由于这些是原始文件,并且是参数化修改的,因此设计将非常容易。
提示:-
如果您没有 3D 打印机,可以使用任何常规的机器人底盘或旧塑料盒。我刚开始做这个爱好的时候,用过很多外卖塑料盒。机器人技术是一项昂贵的爱好,但总有办法解决这个问题,比如模拟之类的。ROS 是一个免费的平台,可以免费实验和搭建机器人。我将在下周为这个项目制作一个 ROS 软件包,很快就会在这里更新。





## 步骤4:Arduino和电机设置
我们使用 Arduino nano 和两个电机驱动器来控制每个车轮。设置很简单,就像任何其他使用 Arduino 驱动的汽车一样,没有什么特别之处。Arduino 将通过 USB 连接到 Jetson。
为 Arduino 和电机驱动器供电。
Arduino 通过 USB 数据线从 Jetson nano 供电。电机驱动器则由锂离子电池供电。它们使用两个独立的电源供电。电机驱动器有单独的 + - 引脚用于电源输入。我们只需将 Arduino nano 的地线连接到电机驱动器的地线即可。切勿同时使用电池和 USB 为 Arduino nano 供电,否则会导致电路板烧坏。
(请勿同时将 ARDUINO 连接到电池和 JETSON。
仅将电池的接地线连接到ARDUINO NANO的接地)
电机驱动器
电机驱动器有输入引脚 (A1, A2, B1, B2) 或 (INT1, INT2, INT3, INT4),虽然标签可能不同,但它们的功能相同。从 Arduino 引脚获取信号,并据此改变电机方向。
驱动器还有 4 个输出引脚,分别标记为电机 A 和电机 B。您可以将电机线连接到此处。电机没有单独的电源,它们由电机驱动器供电。
使用的引脚:3、6、4、5
接线
司机1
IN1=3; IN2=6; IN3=4; IN4=5;
司机2
IN5=7; IN6=8; IN7=9; IN8=10;
将 Arduino nano 的 GND 与电机驱动器的 GND(负极)连接。
Arduino_程序.ino
提示:-
你可能对 Arduino 的这种设置不太习惯,没关系。还有其他选择,我使用这种设置是为了让我的部件看起来更简洁。我们也可以使用普通的 Arduino UNO 搭配电机驱动器扩展板。这就是我把所有东西都做成独立系统的原因。
我们的当前系统如何运作。
Arduino nano 通过 USB 从 python 文件获取命令。
f - 向前
b - 向后
l - 左
r - 右
c-停止
根据这些命令,它将运行一个功能。
例子:-
如果收到“f”,它将运行 Forward(Speed,0);这将使机器人向前移动。
我们可以用 Arduino UNO 和电机驱动器扩展板替换当前的设置,而无需更改 Python 代码中的任何内容。只需在 Arduino 代码中进行更改即可。实际上,您可以使用相同的 Arduino 代码,只需更改代码开头的引脚声明即可。
这是我之前一个项目的参考代码。它运行在蓝牙上,你可以使用这段代码来学习如何声明引脚。
智能雷达系统
https://github.com/sastejugaad/SMARS




## 步骤5:炮塔系统
转塔的作用是控制摄像头的转动。它由两个伺服电机、OLED 显示屏和 CSI 摄像头组成。OLED 显示屏仅显示 Jetson Nano 的统计数据,并非机器人运行的必要条件。即使不使用它,一切仍可正常工作。
伺服器将由 PCA9685 伺服驱动器控制,该驱动器将连接到 Jetson Nano 的 SDA 和 SLC 引脚。OLED 屏幕也同样,将其连接到 Jetson Nano 的 SDA 和 SLC 引脚。查看图片以便更好地理解。
你是
OLED连接指南
用于OLED的Python库
PCA9685
安装
PCA9685 的 Python 库
https://www.youtube.com/watch?v=8YKAtpPSEOk
提示:-
Oled 和 PCA9685 库也适用于树莓派。所以如果你遇到问题,也可以搜索树莓派教程。
适用于树莓派的OLED
更多 pi






## 步骤6:摄像系统
我们有一个 GoPro Hero 会话(非必需)和 CSI 摄像头。CSI 摄像头是我们的主要摄像头,所有计算机视觉工作都将在这里完成。请使用树莓派摄像头,因为 Jetson 不支持 2 个较旧的摄像头。首次设置摄像头会比较棘手,以下是简要指南。我建议在设置好 Jetson Nano 后,使用 Python 文件进行简单的摄像头测试。
您所需要的一切都在下面给出。
Jetson CAM 指南
USB CAM 指南
CSI CAM指南
您可以使用 USB 摄像头。代码中已内置对 USB 摄像头的支持,但已被注释掉。因此,请注释掉 CSI 摄像头的注释行,并取消 USB 摄像头的注释行,这样就可以了。
例如: #video_capture = cv2.VideoCapture(1)
提示:-
有两个用于处理计算机视觉的 Python 文件:camera.py 和 ARcamera.py。两者基本相同,只是 ARcamera.py支持Aruco 标记。你可以用它制作一些很酷的 AR 内容。我不想让本教程太复杂,所以我们暂时使用简单的 camera.py 版本。
这是我之前的一个项目的例子。跟踪两个标记之间的距离并进行增强现实演示。
增强现实演示
寻找距离
## 步骤 7:为所有设备供电
嗯,电源系统一团糟。我做了个 Jetson Nano 的移动电源,以及 4 块 16850 电池,分别给电机和炮塔系统供电。两块电池给 Arduino 和直流电机供电,另外两块给炮塔上的伺服电机供电。
这完全没有必要,整个系统只能由锂电池和直流转换器供电,但我想安全起见,所以我决定分离电源。
16850电池
小米移动电源3超紧凑型
提示:-
普通的 9V 电池也可以代替 16850 电池,但续航时间可能不长,大概 8-10 分钟。任何移动电源都可以,我选了最小的那个。如果你想尝试一下,还有一种更好的电源系统设计方法。我会在下一个版本中实现它。
更好的电力系统



## 步骤8:代码设置
它全部用 Python 3 编写。我们将使用 HTML、CSS 和 JavaScript 来处理 Web UI。不过不用担心,除非你想修改 UI,否则你不需要处理这些。Github 页面上有单独的 UI 处理指南。
文件层次结构
main.py - 主文件控制所有其他系统。运行此文件即可使用机器人
turret.py——控制炮塔
camera.py - 打开相机并将帧发送回 main.py,这些帧在 Web 浏览器上显示为视频源
ARcamera2.py - 与 camera.py 相同,但带有 aruco 标记
Oled_disp.py - 显示有关 jetson nano 系统的统计数据。
Simplecameratest.py - 顶部检查相机是否安装正确。
arduino_control.py - 与 Arduino 通信。从 main.py 接收命令,并通过 USB 连接发送至 Arduino
Arduino_program.ino - 上传至 Arduino。用于控制电机。
代码如何工作
运行 main.py 文件将启动所有其他功能,例如摄像头和 Web 服务器。我们使用 flask 和 Socket IO 库通过 Web 浏览器与机器人通信。移动设备和机器人应连接到同一网络。然后,打开 Web 浏览器并输入 :5000,即可看到界面。
代码逐行都有详细的注释,方便你了解各个部分的功能。我还在 GitHub 上对代码进行了更详细的解释,因为那里更容易理解。
提示:-
请不要重命名或移动文件,除非您更改代码中的引用,否则您将收到错误。


## 步骤9:如何运行它!
安装 python3 和所有必需的库
将机器人和您的移动设备连接到同一个 WiFi 网络。
获取机器人或 jetson nano 的 IP 地址。
运行 main.py(使用 - sudo python3 main.py)
在手机上打开网络浏览器并访问 :5000
您应该获得实时信息。
右摇杆控制炮塔,左摇杆控制机器人移动
小演示
提示:-
您也可以在电脑网页浏览器中查看 UI,但无法控制它。这是因为它仅适用于触控设备。使用 CSS 文件将操纵杆放大,以便更好地控制。Github 上有一个单独的指南,详细介绍了操纵杆、CSS 和 HTML 的所有内容。
在尝试 CSS 和 HTML 时,请清除浏览器缓存或使用隐身模式,并在每次更改代码后重新启动浏览器。浏览器会保存部分数据以便快速重新加载,尽管您可能在重新加载时更改了代码,但您不会看到更改。我经历了惨痛的教训才明白这一点。



## 第十步:恼人的问题
下面列出了一些可以简化您的工作的命令。这将节省您数小时的研究时间。这些命令是通用命令,并非特定于此项目。
重启相机恶魔
这一点很重要,因为有时你可能会重启主程序,然后会收到“摄像头不工作”或“没有实时视频”的错误提示。运行此命令可以修复此问题。
sudo 服务 nvargus-daemon 重启
检查CSI摄像头是否正常工作
gst-launch-1.0 nvarguscamerasrc!'video/x-raw(内存:NVMM),宽度=3820,高度=2464,帧速率=21/1,格式=NV12'!nvvidconv flip-method=0!'video/x-raw,宽度=960,高度=616'!nvvidconv!nvegltransform!nveglglessink -e
在 jetsonano 上创建热点
# 创建连接
sudo nmcli 连接添加类型 wifi ifname '*' con-name my-hotspot 自动连接是 ssid my-local-hotspot
# 将其放入接入点
sudo nmcli 连接修改 my-hotspot 802-11-wireless.mode ap 802-11-wireless.band bg ipv4.method 共享
# 设置 WPA 密码(你应该更改它)
sudo nmcli 连接修改 my-hotspot 802-11-wireless-security.key-mgmt wpa-psk 802-11-wireless-security.psk 12345678
# 启用它(每次想要启用接入点时运行此命令)
sudo nmcli 连接我的热点
检查 I2C 连接(Oled 和伺服驱动器)
sudo i2cdetect -y 1
或者
sudo i2cdetect -r -y 1
列出视频设备
ls /dev/video0
列出CSI相机支持的视频格式
v4l2-ctl -d /dev/video0 --list-formats
提示:-
使用 sudo


## 步骤11:结论
这个项目仍在不断发展。我仍在尝试改进这个项目的代码,这也是我决定在 Github 页面上解释代码的原因,因为这样更容易进行代码修改和跟踪。
我已经把用于完成这个项目的大部分资源都链接到了链接,但请随时提问。这不是项目的结束,我希望它更加完善。你们的所有问题和疑问都将帮助我实现目标。



附录
项目链接:https://benchrobotics.com/arduino/nvidia-jetson-nano-3d-printed-robotics-development-platform-with/
https://www.instructables.com/3D-Printed-Robotics-Development-Platform-With-Nvid/
项目作者:印度 shubham_bhatt
项目视频:https://www.youtube.com/watch?v=7Dail3PpAlU&t=207s
项目代码:https://github.com/sastejugaad/SMARS
https://github.com/sastejugaad/3Dprdp
https://github.com/sastejugaad/3Dprdp/blob/main/Arduino%20Program/Arduino_program.ino
Grabcad 交互模型:https://grabcad.com/library/nvidia-jetson-nano-robot-development-platform-for-3d-printing-1
附件
评论