前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用NVIDIA Jetson Orin NANO做一个星球大战机器人

用NVIDIA Jetson Orin NANO做一个星球大战机器人

作者头像
GPUS Lady
发布2023-09-07 08:31:36
3400
发布2023-09-07 08:31:36
举报
文章被收录于专栏:GPUS开发者GPUS开发者

在星际大战的宇宙里,沙坑机器人(Pit Droids)简直就是维修达人,专门负责护航赛车“超级赛车”(podracers)的保养。这帮机器小伙伴们个头不高,只有1.2米,不使用时可以折叠起来,非常可爱!

国外一个工程师Dave Moog决定做一个Pit Droids机器人,此Pit Droids可要比电影里的Pit Droids聪明多了,因为它的算力可是通过NVIDIA Jetson Orin NANO开发套件提供的哟!

让我们看看他是如何完成的。

3D打印:Pit Droid的组装与创意之旅

STL,即立体光刻技术,成为打造这些精细机器人的基石。Dave Moog是一位热爱星球大战的粉丝,他以创意满满的STL文件为沙坑机器人和其他机器人注入了生命。

在完成打印后精细的组装过程开始。这些零件需要磨光以获得更光滑的表面,消除瑕疵和线条。在涂底漆和油漆之前,这是一个至关重要的步骤。不同颗粒度的砂纸或电动砂纸机都能够帮助你更高效地完成这一过程。有了底漆,可以上色了,尽管达到完美结果通常需要多次上色。

沙坑机器人的魅力在于其多样性。可以根据个人喜好定制颜色方案,这个过程是非常有趣和有成就感的。

组装沙坑机器人包括安装腿部,并巧妙地在可移动部位涂抹WD-40润滑剂,确保顺畅的移动性。机器人的身体逐渐成形,而其头部则集结了高科技。在机器人的头部内部,有足够的空间容纳NVIDIA Jetson Orin Nano、伺服电机、LED显示屏和网络摄像头。巧妙的设计甚至隐藏了充电线,让其不会直接显眼。

一个完整组装的沙坑机器人栩栩如生,可动的手臂和腿部可以轻松地摆出各种姿势。然而,这个旅程并没有结束。使机器人运转涉及将NVIDIA Jetson Orin Nano的能力引入,让伺服电机带动机器人的头部活动。在机器人的头部,LED显示屏会点亮,显示其功能正常。

从STL文件的概念到实际的组装和技术融合,沙坑机器人彰显了创意与科技的结合。通过每一步,星球大战的粉丝能够将心爱的机器人伙伴带入实际世界,这是这个遥远星系永恒魔力的真实证明。

NVIDIA Jetson Orin Nano启动指南:释放AI力量

人工智能的领域正在不断改变着技术的可能性,而NVIDIA Jetson Orin Nano开发套件则是这种转变力量的典型范例。凭借其强大的功能,这款边缘设备赋予了AI驱动的机器人、智能无人机和智能摄像头的创造力,引领着创新的新时代。

深入技术细节,Jetson Orin Nano开发套件是一台强大的设备,与其前身Jetson Nano相比,性能提升非凡。具有惊人的80倍处理能力增加和高达40 TOPS(每秒万亿次操作)的AI性能,这款设备为曾经难以企及的复杂AI项目敞开了大门。

安装过程非常简单,按照NVIDIA官方的Jetson Orin Nano开发套件入门指南的逐步指导操作。无论您是AI领域的新手还是经验丰富的开发者,这些资源都确保了一个顺畅的起始。

在处理硬件时,NVIDIA Jetson Orin Nano拥有独特的引脚布局,是连接其他组件的蓝图。在将LED显示屏和伺服电机整合到您的项目中时,这些引脚将发挥巨大作用。在视觉捕捉领域,USB端口为网络摄像头提供了链接,这是将您的AI创意变为现实的关键元素。

引脚设置是通过Jetson-IO工具完成的,您可以在终端中使用以下命令运行它:

代码语言:javascript
复制
sudo /opt/nvidia/jetson-io/jetson-io.py

界面将弹出,显示当前的40引脚布局。

选择手动配置引脚头选项,并选择引脚32和33的PWM选项。保存更改并重新启动NVIDIA Jetson Orin Nano,以便更改生效。

有关NVIDIA Jetson Orin引脚布局和其他规格的详细信息,请随意查阅Jetson下载中心和文档Jetson Orin Nano开发套件载板规格。

LED灯控制

LED灯位于机器人头部的前部。在在灯光前面添加网络摄像头之前,确保所有部件能够很好地配合在一起。

需要 3 节 AAA 电池来为 LED 灯供电。这里使用了 Arduino 继电器。

Arduino 继电器连接到 NVIDIA Jetson Orin Nano 引脚 9、12 和 17。

电池、继电器和 LED 灯通过以下方式连接到 NVIDIA Jetson Orin Nano开发套件上:

使用 Python 测试 LED 灯可以使用以下代码完成,我们打开 Arduino 继电器并在 2 秒后将其关闭。

代码语言:javascript
复制
import RPi.GPIO as GPIO
from time import sleep

# set mode to BCM
GPIO.setmode(GPIO.BCM)

# define output pin
output_pin = 18

# GPIO setup
GPIO.setup(output_pin, GPIO.OUT)

# turn LED on
GPIO.output(output_pin, 1)
sleep(2)

# turn LED off
GPIO.output(output_pin, 0)
sleep(2)

# cleanup
GPIO.cleanup()

有了功能性 LED 灯,我将网络摄像头放置在灯前面,并将其连接到 NVIDIA Jetson Orin Nano 的 USB 端口。

伺服控制

伺服电机位于机器人头部内部并连接到其颈部。 一个伺服电机可以上下转动头部,另一个可以左右转动头部。

一个数字伺服器连接到 NVIDIA Jetson Orin Nano 引脚 2、6 和 32,另一个伺服电机连接到引脚 4、30 和 33。

您可以测试电机并将其置于起始位置。通过 ChangeDutyCycle 命令可以将电机放置在不同的位置。不要忘记最后运行停止和清理命令

代码语言:javascript
复制
import RPi.GPIO as GPIO
from time import sleep

# set mode to BOARD, pins are by numbers on board
GPIO.setmode(GPIO.BOARD)

# define output pin
output_pin = 33

# GPIO setup
GPIO.setup(output_pin, GPIO.OUT)

# start
servo=GPIO.PWM(33, 50)
servo.start(0)
sleep(1)

# move head left
servo.ChangeDutyCycle(5)
sleep(1)

# move head right
servo.ChangeDutyCycle(10)
sleep(1)

# stop and cleanup
servo.stop()
GPIO.cleanup()

两个伺服电机应用相同的逻辑,向上/向下或向左/向右移动头部。 在下面的动图中,您可以看到头部运动的工作原理。

通过使用网络摄像头和计算机视觉,机器人将能够检测物体并将头部朝向物体定位。

视觉人工智能(物体检测)

要开始了解 NVIDIA Jetson Orin Nano 以及 AI 的可能性,我推荐以下 GitHub 存储库:https://github.com/dusty-nv/jetson-inference,该存储库提供了许多很棒的示例,您可以尝试图像分类、对象检测或其他示例。

首先,在本地克隆存储库。

代码语言:javascript
复制
git clone https://github.com/dusty-nv/jetson-inference

进入克隆的文件夹:

代码语言:javascript
复制
cd jetson-inference

首先,运行 submodule update 添加所有 git 子模块。

代码语言:javascript
复制
git submodule update --init

创建一个build文件夹,进入它,运行cmake、install和ldconfig。

代码语言:javascript
复制
mkdir build
cd build
cmake ../
make -j$(nproc)
sudo make install
sudo ldconfig

现在一切准备就绪,可以开始示例了。 在 Python 示例文件夹中运行 detectornet.py 以启动实时摄像头对象检测。

代码语言:javascript
复制
./detectnet.py /dev/video0

在 Detectnet.py 代码中,您会注意到检测器对象已被记录,并且它具有检测到的类的属性和检测到的对象的位置。

代码语言:javascript
复制
-- Confidence: 0.746582
   -- ClassID: 1
   -- Left:    565
   -- Top:     314.648
   -- Right:   1173.75
   -- Bottom:  719
   -- Width:   608.75
   -- Height:  404.352
   -- Area:    246149
   -- Center:  (869.375, 516.824)

这些属性使我们能够控制机器人。一旦检测到人或其他物体,我们就可以打开 LED 灯。

代码语言:javascript
复制
# detect objects in the image (with overlay)
detections = net.Detect(img, overlay=args.overlay)

# print the detections
print("detected {:d} objects in image".format(len(detections)))

lights = False

for detection in detections:
    if int(detection.ClassID) == 1: # person is detected
        lights = True

if lights:
    GPIO.output(output_pin, 1)
else:
    GPIO.output(output_pin, 0)

同样,通过使用物体位置属性,我们可以打开伺服电机并将头部定位到检测到的物体。

总结

这个项目完整代码可以参考:https://github.com/gvuksic/PitDroid

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-08-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GPUS开发者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档