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

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

    关注

    112

    文章

    16070

    浏览量

    176957
  • 机器人
    +关注

    关注

    210

    文章

    28063

    浏览量

    205755
  • Arduino
    +关注

    关注

    187

    文章

    6456

    浏览量

    186467
收藏 人收藏

    评论

    相关推荐

    工业机器人控制器的主要功能有哪些

    工业机器人控制器是工业机器人系统的大脑,负责接收指令、处理数据、控制机器人的运动和操作。控制器
    的头像 发表于 09-04 09:18 377次阅读

    伺服控制机器人控制方式有哪些

    。 开环控制 : 定义 :开环控制是一种没有反馈机制的控制方式,控制器根据预设的指令直接驱动机器人执行动作。 特点 :简单、成本低,但无法自
    的头像 发表于 09-04 09:16 302次阅读

    人形机器人控制器之MCU、DSP、AI芯片

    电子发烧友网报道(文/李弯弯)人形机器人控制器是人形机器人中的核心神经系统,负责对机器人的运动进行细致规划和控制,是
    的头像 发表于 08-26 07:57 4559次阅读

    如何使用PLC控制机器人

    随着工业自动化技术的飞速发展,机器人技术作为其中的重要组成部分,其应用范围日益广泛。在机器人控制系统中,PLC(Programmable Logic Controller,可编程逻辑控制器
    的头像 发表于 06-17 10:50 1320次阅读

    简述工业机器人控制系统的特点

    机器人控制系统的特点,包括其组成、功能、性能、可靠性、灵活性、智能化、安全性、人机交互等方面。 一、组成 工业机器人控制系统主要由以下几个部分组成:
    的头像 发表于 06-16 15:38 1181次阅读

    机器人控制系统的基本单元有哪些

    的自主控制机器人控制系统的基本单元包括传感、执行控制器、驱动
    的头像 发表于 06-16 15:36 1342次阅读

    机器人控制系统按控制方法可哪些种类

    控制系统,它不涉及对机器人运动状态的反馈。在开环控制系统中,控制器根据输入信号直接生成控制信号,驱动机器
    的头像 发表于 06-16 15:35 1592次阅读

    工业机器人电气控制系统的体系结构主要有哪些

    电气控制系统的体系结构,包括其组成、功能、特点以及发展趋势。 一、工业机器人电气控制系统的组成 控制器控制器是工业
    的头像 发表于 06-16 15:28 1463次阅读

    恩智浦MCX微控制器增强移动机器人电机控制能力

    移动机器人的卓越性能、平稳运动和可靠运行离不开高效精确的电机控制机器人的自主性和复杂性不断提高,非常需要能够处理复杂电机控制和其他任务的高级微控制
    的头像 发表于 05-24 09:15 1168次阅读
    恩智浦MCX微<b class='flag-5'>控制器</b>增强移动<b class='flag-5'>机器人</b>电机<b class='flag-5'>控制</b>能力

    基于飞凌嵌入式RK3568J核心板的工业机器人控制器应用方案

    控制系统当中。那么今天,我们就通过多轴工业机器人来聊聊机器人控制系统以及控制器的实现。 1 机器人
    发表于 05-11 09:40

    基于OpenVINO™的诺达佳机器人控制器实战

    诺达佳机器人控制器,搭载英特尔处理,以其强大的性能和稳定性,为AI机器人长期无故障运行提供了坚实的基础。
    的头像 发表于 04-20 10:34 755次阅读
    基于OpenVINO™的诺达佳<b class='flag-5'>机器人</b><b class='flag-5'>控制器</b>实战

    工业机器人应用中的AI边缘控制器:技术创新与效率提升的双重驱动

    工业机器人应用中的AI边缘控制器:技术创新与效率提升的双重驱动 随着科技的不断进步,AI边缘控制器在工业机器人领域的应用越来越广泛。这种创新技术不仅推动了工业
    的头像 发表于 03-08 10:45 659次阅读

    开源项目!教你如何复刻自平衡赛车机器人、智能家居中控、竞技机器人先进模糊控制器

    ;gt;>点此查看全文 3.全志XR806基于FreeRTOS下部署竞技机器人先进模糊控制器 前言 很荣幸参与到由全志在线举办的XR806开发板试用活动。本人热衷于各种的开发板的开发,同时
    发表于 12-26 09:17

    控制如何准确地控制机器人的力矩输出

    以确保准确性和可靠性。 2. 力传递与力传感的刚度匹配:确保机器人的结构和连接部件具有足够的刚度,以使力传递到传感上的失真最小化。 3. 控制器设计与参数调整:设计合适的力
    的头像 发表于 11-09 17:26 800次阅读

    力控机器人导纳控制框架

    导纳控制框架: 力/力矩传感:用于测量机器人与环境之间的力和力矩。 导纳控制器:根据传感测量值和期望的力/力矩指令,生成
    的头像 发表于 11-09 16:12 982次阅读
    力控<b class='flag-5'>机器人</b>导纳<b class='flag-5'>控制</b>框架