22

甚至在我学习编程之前,我就对机器人的工作方式很着迷。现在我知道如何编写底层编程指令,但我不明白的是机器人如何遵循这些指令。

例如,如果我写了这段代码:

object=Robot.ScanSurroundings(300,400);
if (Objects.isEatable(object))
{
   Robot.moveLeftArm(300,400);
   Robot.pickObject(object);
}

CPU 将如何跟踪该程序以使机器人执行向左看、移动手臂等物理动作?它主要是用二进制语言/ASM 完成的吗?

最后,如果我想学习如何创建机器人,我会去哪里?

4

14 回答 14

17

最后,必须将高级命令分解为非常低级的命令。必须将“拿起杯子”翻译成如何移动手臂(关节应该处于什么角度)到实际转动电机的硬件命令。

有些框架试图提供一定数量的这种翻译,包括(但不限于):

然而,由于机器人研究对系统的每一层都感兴趣,因此提供整个翻译堆栈的系统并不多。如果您正在研究机器人技术,有几个系统试图使这更容易(再次,随机样本):

如果做不到这一点,Make等网站甚至提供了构建机器人项目的指南。挑战是找到一个你感兴趣的项目,然后去城里!

于 2009-02-12T03:55:35.823 回答
8

您应该查看Microsoft Robotics Studio (MRS)。他们有许多视频/截屏视频书面教程。此外,Channel9 有很多关于机器人主题的视频、采访等。包括演示,以及对 MRS 开发人员的采访。

于 2009-02-12T03:27:25.737 回答
5

在大多数现代机器人中,您将拥有机构的逆运动学模型,在这种情况下是手臂,它将空间坐标转换为手臂关节的位置。这些关节通常由伺服电机移动。为了平稳地移动手臂,您需要一系列中间关节位置来定义您希望手臂遵循的路径。您还必须担心关节的速度,它们共同控制着手臂末端“手”的速度。

当手臂移动时,您的伺服系统将获得有关其实际位置的反馈。简单的伺服系统可以使用基本的 PID 反馈回路来调整电机。更复杂的系统将包括补偿惯性、重力、摩擦等的前馈参数。这些可以变得非常复杂。

当您必须在机器人周围的空间中留出障碍物时,真正的乐趣就开始了。您必须感知障碍物并弄清楚如何避开它并仍然到达目的地。

于 2009-02-12T13:11:54.177 回答
4

我只需要在其中添加一些关于Arduino 项目的内容,因为我没有看到上面提到的内容。

进入基于 Arduino 的机器人项目的门槛非常低。您为硬件编写的“草图”程序非常容易上手,并且类似于 C 语法。如果您不知道电阻器中的晶体管,这些板仍然允许您使用插件硬件和扩展基础计算机板的附加“屏蔽”做很多事情。

它非常有趣,非常灵活,可以让您的代码与现实世界进行交互。加上它的“开放硬件”非常符合开源软件的路线。

于 2010-01-12T06:14:04.687 回答
3

机器人将通过与硬件交互来工作。代码的桥接通常通过不同类型的 I/O 端口完成。例如,它可能只是一根 RS232 电缆(你知道那些旧的 COM1 端口)。硬件部分将由电机(如伺服电机)和传感器(如超声波感知障碍物、激光测距或开关)组成。

您不需要使用汇编程序来做到这一点,有很多语言(如果不是大多数)可以做到这一点,但它需要有关如何与硬件交互的知识。就像写一个驱动程序一样。如果您想自己构建机器人,它至少也需要基本的电子设备。

如果你有兴趣,我建议你看看这本书,这是一本很好的入门书。

此外,您可以尝试编写Basic stamp,按照教程非常容易,它将为您提供如何构建机器人的良好开端。它并不太贵,您很快就会与硬件进行交互。

祝好运并玩得开心点!

于 2009-02-12T03:46:21.370 回答
3

如果你在编程方面做得足够好,你可能会发现你甚至不需要机器人来测试你需要编写的大部分最难的代码......(IE,让机器人看到并识别一个总是着迷的场景我...但是在某个时候,我意识到这个问题所需的物理机器人是容易的部分......软件是困难的部分!)......

于 2009-02-12T03:53:42.007 回答
2

可能更容易获得更高级的语言来描述机器人的行为和智能,并让低级语言来进行动作(移动手臂、行走、停止)。有很多关于智能代理的 BDI 架构的研究,google 一下。

你可以在这个站点上找到更多关于它的信息,它是一个用 Java 描述代理行为的 DSL。它被称为 Jason 解释器,语言是 AgentSpeak(L)。

于 2009-02-12T03:24:50.640 回答
2

寻找当地的FIRST机器人团队并自愿担任导师。FIRST 是针对初中生和高中生的机器人竞赛。目标是让孩子们完成构建、编程、测试和运行机器人的所有工作,但您仍然有很多机会深​​入研究并真正学习软件。他们正在使用LabView由 National Instruments 主办,截至 2 月 8 日,今年的区域比赛才刚刚开始。LabView 是一个图形编程环境,它与 NI 硬件接口,让您可以对电机、执行器和传感器进行编程。NI 的东西非常漂亮而且很容易使用,而且它是免费提供给每个团队的,所以你不必自己购买硬件和软件(至少开始使用)。另外,你可以获得额外的奖励帮助新一代工程师起步。

于 2009-03-09T02:21:58.793 回答
1

您必须有一个与硬件接口的驱动程序(很可能是带有电机的 STAMP 或 FPGA 等......)。然后你会调用函数 me.moveLeftArm(x,y); 并且驱动程序会知道 moveLeftArm() 意味着将执行器移动 X 秒/毫秒/度。

我相信你可以找到一个进行机器人编程的工具包。

于 2009-02-12T03:22:42.050 回答
1

如果你想要一个 Java 替代品,我可以推荐这本书Linux Robotics。它有很多关于从何处获取套件、部件和传感器的有用信息,以及完整的 Java 源代码清单。

于 2009-03-09T02:04:44.187 回答
1

我有同样的渴望。我要购买我的第一个Beagle Board和一些可以使用I2C总线的传感器/伺服器。我将使用事件驱动设计和纤维(如果你愿意的话)的粗略实现,它们是用户空间线程。

基本上我的设计需要一个进程,每组伺服启动一个线程。每个组管理器线程将启动 x # 个原纤维,每个伺服 2 个(可能)。一根原纤维用于控制伺服,另一根原纤维处理来自该伺服的事件(即,物体太重而无法拾取,物体掉落等)。

主要过程的任务是从其他事物中侦听事件,并确保“右手知道左手在做什么”,同时前进和越过障碍。

我需要两年的大部分时间才能使某些工作达到我为之自豪的程度..但我预计会有很多愉快的夜晚来实现这一点。

我很可能会使用微内核,而不是 Linux。

我这样做是为了通过事件驱动的方法来磨练自己,以及我制作自己的 R2 的愿望 :)

于 2009-03-09T02:53:47.440 回答
1

如果您熟悉 .Net ,请从Phidets开始。您可以在TrossenRobotics.com上查看零件。

Phidg​​ets 接口套件是一个很好的起点。从那里你可以得到一个伺服控制器并开始构建移动的东西。

Trossen 论坛也是审查其他人项目的好地方。他们也有一个带有代码/项目示例的新数据中心。我不为他们工作......只是一个快乐的客户。

于 2009-06-08T20:54:44.313 回答
0

这里有很多很好的答案。您的幻想代码与您在 MS Robotics Studio 上使用更高级别的语言(例如 C#)的方式相距不远。请记住,即使是简单的事情(例如“向左移动手臂”)也充满了“信息偏差”。

在金属上,机械臂是一组连杆和[可能]电动关节。因此,“向左移动手臂”(或坐标中的任何点)已经是一项非常复杂的计算任务(查找 D&H 表、机械手的正向和反向运动学)。

还有一个概念,即向左移动手臂假设该空间中没有任何东西并且不会发生碰撞。如果环境不受约束,那么您需要实现一个碰撞检测系统,通常基于某种传感器(相机)和机器视觉算法。

总之,与对系统建模以实现所需行为相比,语言和硬件接口通常是微不足道的。

于 2010-01-12T06:06:20.970 回答
0

关于最后一个问题“如何创建机器人”,我发现从在[Adafruit][1]、[Hackster.io][2]甚至[glitch][3]等在线社区中寻找相关项目开始,或寻找从零开始构建机器人的人的博客文章,例如https://burningservos.com,或为硬件和软件提供文档和教程的产品,例如http://emanual.robotis.com/ docs/en/platform/openmanipulator_x/overview/

于 2019-05-03T18:41:05.200 回答