在我学习编程之前,我一直对机器人如何工作着迷。现在我知道如何编写底层编程指令,但我不明白的是机器人如何遵循这些指令。
例如,如果我写了这段代码:
object=Robot.ScanSurroundings(300,400);
if (Objects.isEatable(object))
{
Robot.moveLeftArm(300,400);
Robot.pickObject(object);
}
CPU如何以一种能让机器人向左侧移动,移动手臂等物理动作的方式跟随此程序?它主要是用二进制语言/ ASM完成的吗?
最后,如果我想学习如何创建机器人,我会去哪里?
答案 0 :(得分:17)
最后,必须将高级命令分解为非常低级别的命令。有些事情必须将“拿起杯子”转换为如何将手臂(关节应该处于什么角度)移动到实际转动马达的硬件命令。
有些框架试图提供一定数量的翻译,包括(但不限于):
然而,由于机器人研究对系统的每一层都感兴趣,因此提供整个翻译堆栈的系统并不多。如果你正在考虑进入机器人技术,有几个系统试图让这更容易(同样,随机样本):
如果不这样做,Make之类的网站甚至会提供建立机器人项目的指南。挑战是找到一个你很兴奋的项目,然后去城里!
答案 1 :(得分:8)
你应该看看Microsoft Robotics Studio(MRS)。他们有很多videos/screencasts和written tutorials。此外,Channel9对robitics主题进行了many videos,访谈等。包括演示,以及与MRS开发人员的访谈。
答案 2 :(得分:5)
在大多数现代机器人中,您将拥有机械装置的反向运动学模型,在这种情况下是手臂,它将空间坐标转换为手臂关节的位置。这些接头通常由伺服电机移动。要平稳地移动手臂,您需要一系列中间关节位置来定义您希望手臂跟随的路径。您还必须担心关节的速度,它们共同控制手臂末端“手”的速度。
当手臂移动时,伺服系统将获得有关其实际位置的反馈。简单的伺服系统可以使用基本的PID反馈回路来调节电动机。更复杂的系统将包括前馈参数,其补偿惯性,重力,摩擦等。这些可能变得非常复杂。
当您必须在机器人周围留出障碍物时,真正的乐趣就开始了。您必须感知障碍并找出如何避开它并仍然到达目的地。
答案 3 :(得分:4)
我只需添加一些关于Arduino projects的内容,因为我上面没有看到它。
进入基于Arduino的机器人项目的门槛非常低。您为硬件编写的“草图”程序非常容易上传,类似于C语法。如果您不知道电阻器中的晶体管,这些电路板仍允许您使用插件硬件和扩展基板电脑板的其他"shields"。
非常有趣,非常灵活,可让您的代码与现实世界互动。加上它的“开放硬件”非常类似于开源软件。
答案 4 :(得分:3)
机器人将通过与硬件交互来工作。代码中的桥接器通常通过不同类型的I / O端口完成。它可能只是一个RS232电缆(你知道那些旧的COM1端口)。硬件部件将由电机(如servo motors)和传感器(如超声波感知障碍物,激光距离或开关)组成。
您不需要使用汇编程序来执行此操作,有许多语言(如果不是大多数)可以执行此操作,但它需要有关如何与硬件交互的知识。喜欢写一个司机。如果你想自己制造机器人,它至少需要基本的电子设备。
如果您有兴趣,我建议您查看this book这是一本很好的入门书。
此外,您可以尝试编写Basic stamp编程,这很容易遵循教程,它将为您提供如何构建机器人的良好开端。它并不太昂贵,您很快就会与硬件进行交互。
祝你好运,玩得开心!
答案 5 :(得分:3)
如果你在编程方面做得足够好,你可能会发现你甚至不需要一个机器人来测试你需要编写的大部分最难的代码......(IE,让机器人看到并识别出一个场景总是让我着迷...但在某些时候,我意识到这个问题所需的物理机器人很容易......软件很难实现!)...
答案 6 :(得分:2)
可能更容易获得更高级别的语言来描述机器人的行为和智能,并让低级语言适应行动(移动手臂,走路,停止)。有很多关于智能代理的BDI架构的研究,google for it。
您可以在此site找到更多信息,它是用于描述使用Java制作的代理行为的DSL。它被称为Jason解释器,语言是AgentSpeak(L)。
答案 7 :(得分:2)
找一个本地FIRST机器人团队并自愿成为一名导师。 FIRST是针对中学和高中儿童的机器人竞赛。目标是孩子们完成构建,编程,测试和运行机器人的所有工作,但是你仍然有很多机会深入挖掘并真正学习软件。他们正在使用National Instruments的LabView,截至2月8日,他们刚刚开始今年的区域竞赛。 LabView是一个图形化编程环境,可与NI硬件连接,使您可以对电机,执行器和传感器进行编程。 NI的东西很漂亮,而且很容易使用,而且它是免费提供给每个团队的,所以你不必自己购买硬件和软件(至少要开始使用。)另外,你还可以获得额外的奖励。帮助新一代工程师开始。
答案 8 :(得分:1)
你必须有一个与硬件接口的驱动程序(很可能是带有电机等的STAMP或FPGA)。然后你会调用函数me.moveLeftArm(x,y);并且驱动程序会知道moveLeftArm()意味着将执行器移动X秒/毫秒/度。
我确信您可以找到一个可以进行机器人编程的套件。
答案 9 :(得分:1)
如果您想要Java备选方案,我可以推荐书籍Linux Robotics。它有很多关于在哪里获得套件,部件和传感器以及完整的Java源代码清单的信息。
答案 10 :(得分:1)
我分享同样的痒......我即将购买我的第一个Beagle Board和一些可以使用I2C总线的传感器/伺服器。我将使用事件驱动设计和粗略的纤维实现(原纤维,如果你愿意),它们是用户空间线程。
基本上我的设计需要一个进程,每个进程组启动一个线程。每个组管理器线程将启动x#的原纤维,每个伺服2个(可能)。一个原纤维用于控制伺服,另一个原纤维处理来自该伺服的事件(即,物体太重而无法拾取,物体掉落等)。
主要过程的任务是听取其他所有事件,并确保“右手知道左手在做什么”,同时前进并协商障碍。
它将花费我两年的大部分时间来让事情发展到令我自豪的程度......但我期待很多愉快的夜晚能够达到这一点。
我很可能会使用Microkernel,而不是Linux。
我正在这样做,以使用事件驱动的方法以及我自己制作自己的R2的方式来加强自己:)
答案 11 :(得分:1)
如果您熟悉.Net,请从 Phidets 开始。您可以查看TrossenRobotics.com部分。
Phidgets界面工具包是一个很好的起点。从那里你可以得到一个伺服控制器并开始构建移动的东西。
Trossen论坛也是审查其他人项目的好地方。他们有一个新的数据中心,包含代码/项目样本。我不为他们工作......只是一个快乐的顾客。
答案 12 :(得分:0)
这里有很多好的答案。你的幻想代码与你在C#over MS Robotics Studio等高级语言中所做的相差不远。请记住,即使是简单的事情(如“向左移动”)也会充满“信息偏见”。
向下到金属,机器人手臂是一组链接和[可能]机动关节。因此,“向左移动手臂”(或坐标中的任何点)已经是一项非常复杂的计算任务(查找D& H表,操纵器的正向和反向运动)。
还有一个概念,即左臂移动假设在该空间内没有任何东西,并且不会发生碰撞。如果环境不受约束,那么您需要实施碰撞检测系统,通常基于某种传感器(摄像头)和机器视觉算法。
总之,与对系统进行建模以实现所需行为相比,语言和硬件接口通常是微不足道的。
答案 13 :(得分:0)
关于最后一个问题“如何创建机器人”,我发现从在[Adafruit] [1],[Hackster.io] [2]甚至是[glitch] [ 3],或寻找某人从头开始构建机器人的博客帖子,例如https://burningservos.com,或提供提供硬件和软件的文档和教程的产品,例如http://emanual.robotis.com/docs/en/platform/openmanipulator_x/overview/。