0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样使用游戏控制器和Arduino控制机器人

454398 来源:网络整理 作者:网络整理 2019-12-03 16:39 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Arduino和类似的兼容板是世界各地DIY修补匠的首选设备之一。无论您是刚开始使用Arduino的初学者,还是已经开始使用它们的人,他们都为无数很棒的项目提供了平台。

今天,我们将探索一种创新的方式使用处理和Xbox360控制器来控制伺服器。如果您已经很精通游戏开发,那么您可能会对我们的使用Unity的Custom Game Controller教程感兴趣。

如果这是您第一次尝试Arduino摆弄,则本教程将假设您具有一点先验知识,您可能会在这里找到我们的Arduino指南。同样,如果您是第一次使用Java,可能会有些混乱。虽然Processing使用该平台的简化版本,但这些Java概念和提示仍可能会有所帮助。

您需要的内容

1个Arduino。我们今天使用的是UNO。

1个业余伺服器。一切适用于Arduino引脚的东西。

1个有线Xbox360控制器。尽管从技术上讲,这几乎可以与任何控制器一起使用。

多条连接线。

除了这些内容之外,您还需要下载Processing和Arduino IDE

准备Arduino

首先,我们需要附加伺服器。接线颜色在这里可能会有所不同,但一般来说,红色引脚会连接到 5v 引脚,并且棕色或黑色连接到 GND 引脚。数据线通常为黄色或橙色,连接到 pin 10 。

检查接线并连接Arduino到计算机。打开Arduino IDE。

打开位于文件》示例》 Firmata》 StandardFirmata 的StandardFirmata草图。此草图设置了用于通过串行端口进行外部控制的电路板,与我们在使用Python控制Arduino的文章中使用的草图相同。将草图上传到板上。

如果上传失败,请在工具菜单中检查您是否选择了正确的板和端口详细信息。

我们的Arduino准备就绪!

设置处理程序

打开处理程序,您将得到一个空白的草图。在这里做任何事情之前,我们将需要安装一些库。转到素描菜单,然后选择导入库》添加库。这将打开 Contribution Manager ,对于那里的所有Arduino用户而言,它们看起来都很熟悉。

我们需要安装三个库来完成这项工作。首先是 Game Control Plus 库。这就是允许我们将游戏控制器与处理一起使用的原因。使用搜索窗口找到它,然后单击右下角的安装。 Game Control Plus需要为其配置工具安装另一个库,所以现在就开始获取它。搜索 G4P 库并安装它。

最后,我们需要 Arduino(firmata)库。您猜对了,进行搜索,然后单击安装。安装完这些东西之后,我们就可以开始测试一切正常。我们今天正在使用Windows 10,但是可用于大多数平台(包括Raspberry Pi)进行处理。想象一下可能性!

测试Arduino

在我们开始创建自定义草图之前,我们先来测试Arduino和Servo和Processing。打开文件》示例,然后从 Contributed Libraries/Arduino(firmata)文件夹中选择 ArduinoServo 。我们将使用它来测试我们的伺服器,但首先我们可能需要更改几件事。

向下滚动草图并找到以下行:

println(Arduino.list());

如果已将其注释掉,请在 println(Arduino.list()); 之前删除两个斜杠,然后保存草图。通过单击播放图标运行它,并注意底部的控制台。这将列出连接到您的 COM 端口的所有内容。

就我而言,我的Arduino在COM 8上这里列出的第三个端口。这很重要,因为下面一行中的代码有一个 Array ,其值确定要使用哪个COM端口。

需要更改它以反映我们的COM端口。对我来说,它是第三个位置,或索引编号2:

arduino = new Arduino(this, Arduino.list()[2], 57600);

我们需要对此代码进行其他一些小的更改才能对其进行测试。向下滚动到设置Arduino引脚的位置,并在此处注释掉其中一行。将另一个更改为 Pin 10 。

//arduino.pinMode(4, Arduino.SERVO);

arduino.pinMode(10, Arduino.SERVO);

我们需要在 Draw()中执行相同的操作方法:

arduino.servoWrite(10, constrain(mouseX / 2, 0, 180));

// arduino.servoWrite(4, constrain(180 - mouseX / 2, 0, 180));

保存草图并运行。您应该能够通过在程序生成的窗口上来回移动鼠标来移动伺服器。

如果它不适用于您,检查伺服接线,并检查COM端口的阵列位置是否正确。一旦您知道Arduino与Processing的配合很好,就该继续了。

配置控制器

我们正在使用的Game Control Plus库也具有强大的配置。确保已插入控制器,打开 Configurator 示例项目,然后运行它。您将获得如下菜单:

单击您的控制器名称,将弹出一个更大的配置窗口。

这看起来似乎很艰巨,但是它的设计尽可能简单。在左侧填写第一个键,其中包含您要用作变量的名称。此变量将控制伺服器的位置,因此我将其称为 servoPos 。

在其旁边的框中,您可以对其功能进行简要说明。现在,拿起控制器并移动您希望与伺服器一起使用的操纵杆。进行一些实验后,发现右指尖与“ X旋转”框相对应。在 servoPos 变量和此框之间拖动一条线。

现在,我们需要将配置保存为数据文件。在窗口的右上方,填写设备角色字段和文件名字段。

文件名很重要,因为您会在您的代码中使用它。我将其命名为 xbs 来保持简单。点击验证,然后点击保存。这将为我们的控制器编写一个包含说明的文件,以后可以使用。

准备自定义草图文件夹

让我们进行设置我们的工作文件夹。打开一个空白的处理草图,并以您喜欢的任何名称保存。这样会在保存位置为其创建一个目录。

现在导航至 Documents/Processing/libraries/GameControlPlus/examples/Configurator ,然后复制标有 data 。此文件夹包含我们刚刚创建的配置文件。导航到新保存的空白草图的目录,然后粘贴数据文件夹。

创建自定义草图

现在所有内容到位,我们可以使用我们的两个库开始制作草图。我们将逐步进行此操作,但如果您想继续前进,可以下载完整的草图和数据文件夹。请注意,您可能仍需要修改代码以反映您的Arduino COM端口。

首先导入我们需要的所有库:

import processing.serial.*;

import net.java.games.input.*;

import org.gamecontrolplus.*;

import org.gamecontrolplus.gui.*;

import cc.arduino.*;

import org.firmata.*;

我们还需要声明 ControlDevice , I/O 和 Arduino 以及 float 来保存值从我们的指尖开始:

ControlDevice cont;

ControlIO control;

Arduino arduino;

float thumb;

我们的 setup()方法会创建一个小窗口(控制器的实例),并将设备与我们的配置进行匹配文件。在此重要的是正确获取配置数据文件的文件名:

void setup() {

size(360, 200);

control = ControlIO.getInstance(this);

cont = control.getMatchedDevice(“xbs”);

if (cont == null) {

println(“not today chump”); // write better exit statements than me

System.exit(-1);

}

// println(Arduino.list());

arduino = new Arduino(this, Arduino.list()[2], 57600);

arduino.pinMode(10, Arduino.SERVO);

}

我们还在此阶段检查是否没有适用的控制器,然后退出该程序是否需要。虽然不需要使用 size()创建的窗口,但稍后会向我们提供一些有关是否从控制器中获取有用值的反馈。我们也像测试时一样初始化Arduino并将其固定在此处。

现在,我们创建一个小方法来从控制器中获取输入值,并将其映射到我们的伺服器将能够使用的值:

public void getUserInput() {

thumb = map(cont.getSlider(“servoPos”).getValue(), -1, 1, 0, 180);

}

这一行代码使用我们的数据文件来获取命名控件 servoPos ,该控件链接到控制器的右指尖,并从中读取值。然后它将值映射,并将值存储在我们的 thumb float变量中。

现在此代码从未调用过,我们现在将对其进行修复。

void draw() {

getUserInput();

background(thumb,100,255);

arduino.servoWrite(10, (int)thumb);

}

draw()与Arduino IDE中的 loop()方法相似。每帧,它调用 getUserInput()方法并更新拇指值。它使用此值来更改 background()的红色值,从而使我们可以直观地看到值的变化。然后使用 arduino.servoWrite()函数将此值写入伺服器。请注意,我们必须将 thumb 强制转换为整数值,因为ServeWrite函数将两个整数(引脚号和角度)作为参数。

检查代码是否存在错误,保存并单击运行。在稍稍延迟了Arduino的初始化之后,它看起来应该像这样:

使用游戏控制器和Arduino进行控制:已完成!

尽管经验丰富的代码库可以为我们提供帮助,但该项目在很多方面对于经验不足的编码人员来说都是相当深入的。它代表着一种思考控制机器人以及您所构建的任何其他设备的新方式。

该项目将与我们有关构建激光炮塔的指南完美配合,使您可以完全控制它。您可以像我们的Simple Arduino Alarm教程中那样设置压电式蜂鸣器,并使用控制器来更改蜂鸣器的音高或灯光的颜色。

或者,您可以构建一个大型机器人并采用在地球上。只要您的USB线足够长!
责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    114

    文章

    17869

    浏览量

    195055
  • 机器人
    +关注

    关注

    213

    文章

    31412

    浏览量

    223589
  • Arduino
    +关注

    关注

    190

    文章

    6527

    浏览量

    197441
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    为什么说关节扭矩传感是高端机器人的“触觉神经”?

    “盲动”变成“感知运动” 普通机器人靠编码控制位置,只能“按死命令走”。而关节扭矩传感实时测量每个关节受到的扭转力,精度可达0.01牛米,采样频率高达1000赫兹(每秒反馈1000
    发表于 04-17 17:27

    钡铼技术ARMxy系列BL440究竟多适合作为具身机器人核心控制器

    过去我们谈机器人,更多关注的是“机械结构”和“运动控制”。 而今天,当**具身机器人(Embodied AI)**成为行业热词,机器人正在从“能动”走向“能感、能算、能决策”,核心
    的头像 发表于 01-13 17:56 598次阅读
    钡铼技术ARMxy系列BL440究竟多适合作为具身<b class='flag-5'>机器人</b>核心<b class='flag-5'>控制器</b>?

    为什么机器人控制器越来越偏爱 RK3588?

    为什么机器人控制器越来越偏爱 RK3588? ——结合钡铼技术 BL450,看懂下一代机器人主控的底层趋势** 过去几年,无论是 AMR/AGV、协作机器人、SCARA、视觉检测工作站
    的头像 发表于 01-13 17:51 482次阅读

    阿普奇KiWiBot系列“大小脑”控制器:打造具身智能机器人的“核心引擎”

    一个轻巧而强大的控制器,正悄然驱动着机器人从“能动”走向“智能”的关键一跃。 控制器,被称为机器人的“神经中枢”,其性能直接决定了机器人的智
    的头像 发表于 12-11 18:03 615次阅读
    阿普奇KiWiBot系列“大小脑”<b class='flag-5'>控制器</b>:打造具身智能<b class='flag-5'>机器人</b>的“核心引擎”

    高精度机器人控制的核心——基于 MYD-LT536 开发板的精密运动控制方案

    处理,支持 1.8 GHz 主频,并集成2Tops NPU、G2D、VPU 4K高清视频编解码,为复杂控制算法与视觉融合计算提供充足算力。米尔MYD-LT536开发板 在“高精度机器人
    发表于 11-14 15:48

    MCU微控制器,N32H47x高性能MCU机器人关节控制方案

    在工业自动化领域,关节作为机器人的核心运动部件,其控制精度直接决定了整机性能。英尚微电子基于国民技术MCU微控制器N32H47x系列,推出创新机器人关节
    的头像 发表于 11-07 16:28 894次阅读

    48V机器人关节控制器的拆解分析

    最近机器人非常火,正好关节控制器和底盘执行例如转向控制等比较类似,拆解了一款,简单分析了一下。
    的头像 发表于 10-14 15:25 1206次阅读
    48V<b class='flag-5'>机器人</b>关节<b class='flag-5'>控制器</b>的拆解分析

    阿普奇具身智能机器人控制器KiWiBot30系列:头部客户规模化量产的破局关键

      2025年被誉为机器人的量产元年。从实验室走向规模化生产,机器人本体厂商面临可靠性、一致性与成本控制的多重挑战。在这一背景下,阿普奇自主研发的具身智能机器人
    的头像 发表于 10-14 14:51 865次阅读
    阿普奇具身智能<b class='flag-5'>机器人</b><b class='flag-5'>控制器</b>KiWiBot30系列:头部客户规模化量产的破局关键

    知行科技推出机器人通用控制器iRC100

    近日,知行科技正式发布全球首款国产芯机器人通用控制器——iRC100。iRC100基于行业首款百TOPS级单 SoC 算控一体化机器人计算平台——地瓜机器人 S100P打造,采用大小脑
    的头像 发表于 10-09 15:28 1005次阅读

    从波动到稳定:永铭高性能电容器为工业机器人控制器打造的关键“护盾”

    智能、自动化和绿色方向转型。01工业机器人关键组件·控制器控制器作为机器人控制系统的核心,其主要功能是处理信号、执行算法以及指挥
    的头像 发表于 09-01 10:00 669次阅读
    从波动到稳定:永铭高性能电容器为工业<b class='flag-5'>机器人</b><b class='flag-5'>控制器</b>打造的关键“护盾”

    突破人形机器人控制器性能瓶颈:高效稳定的电容器解决方案

    在人形机器人的精密世界中,每一个微小的部件都承担着重要的角色。控制器,作为机器人的“大脑”,其稳定性和可靠性对于整个系统的性能至关重要。控制器不仅需要处理复杂的算法和信号,还要精确地指
    的头像 发表于 08-30 10:56 728次阅读
    突破人形<b class='flag-5'>机器人</b><b class='flag-5'>控制器</b>性能瓶颈:高效稳定的电容器解决方案

    MT6701绝对式磁编码优化机器人关节伺服控制

    在当今科技飞速发展的时代,机器人已经广泛应用于工业制造、物流配送、医疗服务等众多领域。而机器人关节伺服控制作为机器人运动的关键技术,其性能的优劣直接影响着
    的头像 发表于 08-04 17:57 1222次阅读

    海默RC系列机器人控制器

    海默协作机器人与焊接机器人控制器HARMOROBOTICS控制器作为工业机器人的三大核心零部件之一,也是工业
    的头像 发表于 08-01 15:35 1326次阅读
    海默RC系列<b class='flag-5'>机器人</b><b class='flag-5'>控制器</b>

    人形机器人控制器卡脖子难题怎么破?——基于 NVIDIA Jetson AGX Orin与X86的小型化、高可靠解决方案

    380 亿元。然而,控制器作为机器人的 “神经中枢”,仍被五大核心难题制约产业化进程 —— 空间极限压缩、算力需求爆发、实时性严苛要求、接口复杂性激增、可靠性零容忍 。   直击行业痛点 人形机器人
    的头像 发表于 06-12 16:37 2009次阅读
    人形<b class='flag-5'>机器人</b><b class='flag-5'>控制器</b>卡脖子难题怎么破?——基于 NVIDIA Jetson AGX Orin与X86的小型化、高可靠解决方案

    从感知到运控:具身智能机器人控制器的双脑协同设计与场景适配

    ,则是协调全身的“大脑”与“小脑”,既要像大脑一样思考决策,又要像小脑一样精准控制运动。作为具身智能机器人的核心枢纽,控制器直接决定了它能否在复杂场景中“像一样灵活”,甚至超越人类的
    的头像 发表于 05-11 17:42 1226次阅读
    从感知到运控:具身智能<b class='flag-5'>机器人</b><b class='flag-5'>控制器</b>的双脑协同设计与场景适配