The present invention relates to a framework for robotics development that allows robotic system designers with varying areas of expertise to rapidly deploy robotic systems for industry, research and education.
Robotics development projects utilize many different sensors and actuators that are available to the robotics community. At the lowest level, component-level sensors that interface directly with microcontrollers are available from many semiconductor companies. Each device has its own particular interface and traits that must be considered in interacting with the sensors. Actuators present a similar case where there is an abundance of different motors and motor controllers each with its own interface. Other actuators requiring controllers include hydraulics, pneumatics, shape memory alloy (SMA), electroactive polymers (EAPs), and the like.
Robotics development projects also utilize many different types of microcontrollers. The speed of the microcontrollers may be an issue if any complicated computation is needed. The most common type of microcontroller is relatively slow running at around 10 MHz and is of an 8-bit architecture. Some other microcontrollers are faster but do not approach the raw processing power of a simple modern desktop computer with its multi-core, superscalar, cached, pipelined, GHz-class processor and variety of available software. Accordingly, a microcontroller in robotics most often performs simple low-level calculations repetitively and manages digital inputs and outputs.
Integrated robotics development systems attempt to identify any difficulties in programming and using microcontrollers and endeavor to make them easier to use by abstracting some of the development from the user. The integrated robotics development systems provide support circuitry, power management and libraries of functions that provide access to features of the microcontrollers. Examples of systems that fit into this category include the Arduino and the VEX™ development system from Innovation First, Inc.
Robotics development systems may also provide hardware abstraction over a known protocol. These devices or systems attempt to provide access to robotic elements, such as sensors and actuators, using a defined protocol and an interface that a generic operating system can use.
One class of hardware abstraction is the group of systems that abstract over TCP/IP. Examples of such systems include the National Instruments (Austin, Tex.) cRIO® data acquisition systems, Willow Garage (Menlo Park, Calif.) Player® system, and Galil (Rocklin, Calif.) motion controllers, all of which are robotics development platforms. In addition, protocols such as the OpenIGTLink have been developed to provide a common interface for custom robotic hardware with a specific focus on medical robotics.
Robotics development systems may also utilize a robotic control framework that runs at the operating system level. This is the level at which many researchers are either developing or require custom software for evaluation of robotic system components. Two existing frameworks are widely used in the robotics community. MATLAB from the MathWorks Inc. of Natick, Mass. is often used as a research interface, while National Instruments' LabView® provides an integrated device interface. These products are commonly used among developers who are looking to demonstrate a set of algorithms and its interaction to the world. Related robotics frameworks include the Willow Garage Robot Operating System (RoS), Microsoft Robotics Studio (MRS) (Redmond, Wash.), and OROCOS.
The embodiments of the present invention provide a common, modular framework that allows iterative and independent development of electro-mechanical systems. The framework provides a development platform for development of robotics and other cyber-physical devices. The platform includes one or more libraries of module objects defining functionality for associated robotic and/or other device modules. The objects provide support for the use of an abstract communication protocol for communicating with and between device modules. By incorporating a multi-language, multi-platform device interface into a community development environment, users can focus their research on their area of expertise and leverage developments in other sectors.
According to one embodiment of the present invention, a system for robotics development is provided. The system includes a computing device generated platform for development of a robotics device and an abstract communication protocol used to control hardware components for the robotics device. The platform includes one or more libraries holding robotic device module objects. The robotic device module objects define functionality of associated robotic device modules. The robotic device module objects include objects associated with at least two different types of robotics device modules and hold information for communicating with their respective associated robotics device modules. The abstract communication protocol is supported by instances of the robotic device module objects and interconnects the platform and the robotic device modules. The abstract communication protocol supports communication over different types of physical layer connections and further supports communication between robotics device modules using different types of network transport layer protocols. The robotic device modules respectively control hardware components in the robotics device.
According to an embodiment of the present invention, a method for operating a robotics development system is provided. The method includes providing a platform for development of a robotics device. The platform includes one or more libraries and an abstract communication protocol. The libraries hold robotic device module objects defining functionality of associated robotic device modules. The abstract communication protocol is supported by instances of the robotic device module objects and interconnects the platform and the robotic device modules of the robotics device. The abstract communication protocol supports communication over different types of physical layer connections and further supports communication between robotic device modules using different types of network transport layer protocols. The method further includes designating with the platform a host to control at least one robotics device module in the robotics device that is designated as a node. The method also includes receiving at the host a communication from the node, the communication using the abstract communication protocol and describing an interface for the node. A command is transmitted from the host to the node, the command directed to a hardware component associated with the node. The method further includes receiving, at the host, a result of an attempted execution of the command from the node.
According to various embodiments of the present invention, a method for performing unit testing in a robotics development system is provided. The method includes providing a platform for development of a robotics device. The platform includes one or more libraries and an abstract communication protocol. The libraries hold robotic device module objects defining functionality of associated robotic device modules. The abstract communication protocol is supported by instances of the robotic device module objects and interconnects the platform and the robotic device modules of the robotics device. The abstract communication protocol supports communication over different types of physical layer connections and further supports communication between robotic device modules using different types of network transport layer protocols. The method further designates with the platform a host to control at least one robotics device module in the robotics device. At least one robotics device module is designated as a node. The node controls a computing resource simulating the performance of virtual hardware component in the robotics device. The method further includes receiving at the host a communication from the node, the communication using the abstract communication protocol and describing an interface for the node. A command is transmitted from the host to the node, the command directed to the virtual hardware component associated with the node. The method further receives, at the host from the node, a result of the simulated execution of the command by the computing resource. The platform is used to evaluate the performance of the virtual hardware component in the robotics device.
According to another embodiment of the present invention, a system for cyber-physical system (CPS) development is provided. The system includes a computing-device generated platform for development of a CPS system and an abstract communication protocol used to control hardware components for the CPS system. The platform includes one or more libraries holding CPS module objects. The CPS module objects define functionality of associated CPS modules. The CPS module objects include objects associated with at least two different types of CPS modules and hold information for communicating with their respective associated CPS modules. The abstract communication protocol is supported by instances of the CPS module objects and used to interconnect the platform and the CPS modules. The abstract communication protocol supports communication over different types of physical layer connections and further supports communication between CPS modules using different types of network transport layer protocols. The CPS modules respectively control hardware components in the CPS system.
These and other aspects of this invention will be readily apparent from the detailed description below and the appended drawings, which are meant to illustrate and not to limit the invention, and in which:
The lack of interoperability and standardized development platforms is a significant impediment to the proliferation of robotics. Robotic system development as conventionally practiced has proved to be a needlessly time consuming and expensive process because each system must be built entirely from the ground up. As specializations emerge within the field of robotics, it is unnecessary and unproductive for researchers, educators, or developers to distract their focus from their primary goal. Ideally, a robotic mechanism designer should be able to develop devices without focusing on software or interfaces, while a software developer should not require a fully functional robotics system to evaluate their implementation. Unfortunately conventional robotics development systems have been lacking in meeting these goals.
The lack of standardization in robotics development also manifests itself in the lack of the ability to verify discrete units of a system. Without this ability, development can be halted by a single misbehaving component which cannot be removed from a system for testing. Development time is wasted tracking down bugs in complex systems. Additionally the lack of a standard framework requires vast development time being spent on creating a virtualization of a system, or making such virtualization prohibitively expensive. Without virtualization and the ability to test units, the developer of robotic systems ends up wasting time on problems that should be detected by a testing framework. In addition to the lack of testing, a developer cannot easily take elements of a project and use them in another project. Code is rarely portable from one type of controller hardware to the next. The lack of portability forces controller-specific code to be written over and over for common tasks, even if the functionality is the same. These tasks are usually not the focus of development, and the result of rewriting this code is wasted time.
Development of a robotic system includes gathering requirements, deciding on a controller that can fulfill the requirements, writing code and making circuits for that controller, as well as designing the physical body around the controller, and testing the system as it is built. If requirements change or tests reveal a problem, all of the controller specific code, electronics, and machining may be lost or haphazardly modified to fit the changed circumstances. There is a need for an infrastructure that allows iterative development of system components with a focus on system integration.
The development of Cyber-Physical systems (CPS) have suffered from some of the same issues. A CPS is an embedded system where the computational elements of the system are in combination and coordination with the physical elements of the system. Unlike more traditional embedded systems, a full-fledged CPS is typically designed as a network of interacting elements with physical input and output instead of as standalone devices. The notion is closely tied to concepts of robotics and sensor networks. For ease of explanation and illustration, much of the below description discusses embodiments of the present invention that are directed to the development of robotics devices. It should be appreciated however that the scope of the present invention is not limited to the development of robotic devices but is also applicable to cyber-physical systems and encompasses the development of CPS devices generally. Accordingly, the techniques discussed herein that apply to the development of robotic devices should also be understood to have applicability to CPS development.
The system for robotics development of the present invention includes a platform that integrates the processing of actuators and sensors discussed above. The platform is inter-operable with many existing systems. The platform allows communication using an abstract communication protocol, such as the Bowler Communications System (BCS) protocol, between various modular processing units, (robotic device modules). The robotic device modules may be connected to the system using a USB, Ethernet or other connection. The Ethernet connection provides portability. For example, a robotic device module that is connected using an Ethernet connection may be used with different kinds of platforms. The modules are developed to do discrete atomic tasks that are commonly found in robotics. For example, an exemplary module may include a motor that moves the robot and/or a reading and controlling sensor. Using the platform, the robotic device modules may communicate with each other and with other devices such as computers and user built modules.
Some exemplary robotic device modules include a servo controller, a general purpose Input/Output module, a DC motor controller module, a range-finder module, a battery regulator/power module, a wireless interface module and an Ethernet interface module. The battery module allows users to have control over power management and the general purpose I/O module allows developers to quickly integrate custom hardware that is added into the system. The wireless and Ethernet interface modules allows users to directly control a module via a computer device over different physical mediums. The exemplary modules are provided for illustrative purposes and should not be construed as limiting.
The exemplary platform enables distributed processing among the robotic device modules without the use of a standard communication path. That is, the network over which the robotic device modules communicate is not required to have a prior knowledge of the capabilities of each robotic device module. The robotic device modules notify the system about their own capabilities. According to various embodiments of the present invention, the robotic device modules communicate their interfaces to the system as opposed to requiring a driver from the system.
The platform and the system provided in the present application significantly reduces the costs that are currently associated with robotics development and therefore opens opportunities for robotics development to a broader audience. The platform and the system include an integrated development environment for general use with robotics; an open, online community for developers to share robotics knowledge and efforts via a common repository, a wide variety of highly documented robotics components for developers to select from; a tested and proven highly extensible communications protocol for robotics components and the basis of an advanced testing framework for unit testing robotics projects. The system can be hooked into at different levels of development and allows designers and researchers to treat everything outside their area of expertise as a black box.
According to another aspect of the invention, an Integrated Development Environment (IDE) that includes examples of multi-language approaches and extensions with industry standard applications such as MATLAB and LabView® is provided. The IDE allows developers to easily develop for compatible hardware utilizing previously generated libraries.
The developed libraries may include elements for sensing and actuation, inter-device communication, low-level device control, and high level control. Due to the modular structure of the system, developers can focus efforts on specific functionality while basing the remainder of the platform on existing, proven software components. The open nature of community development allows for new algorithms, structures, devices, and protocols to be widely distributed to the robotics community and avoid duplication of effort.
By incorporating technologies to automatically detect devices, configure devices, and provide the appropriate API to the developer, an expandable system may be built without knowledge of the specific hardware to be used. In addition, the modularity of the system allows for ease of unit testing and simulation of specific hardware or software components independent of the complete system.
The libraries 120 give the user of the platform 110 the ability to list all connections for the system and then specify messages among components of the distributed robotics device/system 150. The platform 110 uses the library information to automatically find the correct communication route among the components of the distributed robotics device/system 150.
The platform 110 communicates with the modules 141 using an abstract communication protocol that is supported by all instances of the robotic device module objects. The communication may take place over a network 130.
The embodiments of the present invention allow for a centralized robotics system design with distributed control ability among the components of the robotics system. The foregoing components and processes are explained in detail below.
An important component to a robotics development system is to define a device structure, and define how elements in the structure communicate. For example, for one type of device structure, the system can be designed using one interface module which interfaces with the user's software. The interface module can be replaced with a different module without changing the core algorithm or software-hardware interface if the requirements of the system change within time. Using this framework, if the I/O requirements change, only the I/O controller needs to be swapped out.
Embodiments of the present invention provide a modular, multi-platform, multi-language device interface that features the use of the Bowler Communications System (BCS) protocol, an abstract communication protocol. It will be appreciated that although for ease of illustration reference is made below to the BCS protocol in descriptions of embodiments of the present invention, other abstract communication protocols with substantially similar functionality are also considered to be within the scope of the present invention.
The BCS protocol 250 is designed to allow for decentralized sensors and actuators or other modules to be utilized in a uniform and reliable manner. A BCS network is based on an asymmetric star topology in which two classes of devices exist: a Host and a Node. Modules are designated as a Host or a Node. In the network, Hosts utilize services provided by connected Nodes to interact with the Node's peripherals devices. A Host communicates requests and Nodes communicate request status and data. An exemplary setup may be a laptop running an application (Host) connected to a servo module (Node) via a USB cable. Hosts may have multiple Nodes while Nodes may have only a single Host. Nodes may act as hosts to other nodes. Routing devices may be used to split a single Nodes connection into multiple Nodes connections. Inter-device communication is accomplished via the BCS protocol and BCS messages. Each Node has a predefined vocabulary of functionality that it implements. Both Hosts and Nodes are capable of decoding a message and determining what actions are necessary as a result.
The BCS protocol governs the datagram structure and transmission rules for carrying the BCS messages. Devices formulate and transmit a datagram in accordance with the BCS protocol. A BCS datagram includes a head and a body. The head is comprised of a number of elements that aid in routing as well as data integrity such as a protocol revision number, the intended recipient's address, a method identifier, a reply flag, a transaction ID, data length field and Cyclic Redundancy Checksum (CRC). The body of the datagram contains the messages that devices will interpret.
According to the BCS protocol, Remote Procedure Call (RPC) messages from the Host are only sent in a synchronous manner in which the Host sends a message and expects a reply within a given amount of time. If a reply message from the Node is not received within the specified amount of time, the Host assumes the message is lost and any response to the initial message after that point is considered to be stale. Nodes, however, have the ability to send messages to the Host either synchronously or asynchronously. Nodes send synchronous messages when replying to a Host. Additionally, a Node may send unprompted, or asynchronous, messages to a Host. Asynchronous messages include error/warning messages when an unexpected event occurs or safety threshold is passed (i.e. a motor overheats, a battery was disconnected, etc. . . . ) or if a Node changes state.
As one example of BCS communication, an application may send a message down a USB connection to a server controller requesting a servo to move to a certain position. The servo controller receives this message, processes it (i.e. move the servo to the requested position) and then sends a return message informing the application of the status of the task (i.e. Successful).
Communications from a Node may be processed messages in any order. As a result, reply messages are not guaranteed to be ordered. To ensure unambiguous communications, a Host may generate a unique Transaction ID and add the Transaction ID to the BCS message. The Node marks any replies, regardless if they are synchronous or asynchronous, with the Transaction ID of the original message. This allows an application attempting to communicate with the Node to map multiple responses to the original requests. A Host may reuse Transaction IDs whenever the Host deems appropriate.
Using the foregoing example, if the application issued a request that a servo temporarily move to a second position from a first position and then, after an amount of time, move back to the first position, the Host may send the request with a generated Globally Unique Identifier (GUID) as the Transaction ID. The module would receive and process the message and send a synchronous reply. The module would then move the servo and send an asynchronous message with the status once the servo has moved to the second position. All the messages, i.e. the message sent by the Host and the two messages sent by the module, would have the same Transaction ID. If there was a sudden failure unrelated to the scope of the initial message, as determined by the servo module (i.e. the battery was running low), the servo module would send an error message with a blank Transaction ID.
All Hosts and Nodes within a BCS network are required to have a unique IEEE EUI-48 Media Access Control (MAC) address. The MAC addresses are used to identify and route communications to devices. In addition to this, a broadcast address is reserved. A device does not distinguish between messages addressed to the device or messages with the broadcast. Routing devices use the broadcast address as their own address and do not implement a valid MAC address.
As noted above, in order to ensure reliable system functionality and safe operation of systems, the BCS utilizes a system heartbeat that will periodically require Nodes to “check-in”. The heartbeat can be used to quickly put sections of or an entire system in a safe operation mode. During initialization, a Host sends a Node a heartbeat trigger message addressed to the broadcast address. The message is marked as critical and indicates that the message should not be interrupted. After performing any safety checks, the Node signifies its proper functionality by responding with a heartbeat acknowledgement message, replacing the broadcast address with its own MAC address. The Host then periodically repeats this process as needed to ensure safe operation. This allows safe and flexible operation as developers can choose the appropriate level of polling needed to determine the health of the Node.
In one embodiment, all Nodes must implement three operating modes: a Normal mode, a Safe mode, and a Full mode. Normal mode is when the Node functions with all possible capabilities. In Normal mode each Node will have a known safe timeout value. This value is the maximum amount of time that a Node will allow between heartbeats before assuming that there has been a loss in communications or functionality and attempts to go into Safe mode. Safe mode is when the device must attempt to act in the safest manner possible with respect to its peripherals (i.e. a motor module may lock motors in position, a servo module may kill power to the servos, etc. . . . ). The device manufacturer publishes what actions that will be taken by a device placed into Safe mode. If the Node is in Safe mode it replies to any heartbeats with notification of the timeout. A Host may bring a Node out of safe mode by sending a reset message. Full mode is when a Node runs as it would in Normal mode but does not timeout. Nodes may not use Full mode as a default mode of operation, but all devices may be put into Full mode, temporarily until hardware reset or power cycle.
The BCS protocol relies on the idea of a tiered processing structure having distinct levels. These levels are discussed below.
The first level of the protocol is the “current through a wire” lowest level hardware interface. This is typically handled by small microcontrollers or Field Programmable Gate Arrays (FPGAs), but may be serviced by hardware ranging from 8-bit microcontrollers up to the most advanced servers. The lowest level takes small packets of bytes as commands with a rigidly defined header followed by a byte stream where the length of the byte stream is described in the header. The header structure allows for the simplest of controllers to take in and process packets without having to do complicated pattern matching or having magic start and/or stop bytes that are forbidden to be sent as raw data. For example, a device manufactured by Neuron Robotics of Worcester, Mass. sends these byte streams over TTL (5-volt logic) level RS-232 structured serial. Information may be encapsulated in a TCP connection or a UDP packet and sent to a corresponding device by a network bridge. Libraries may be built to form and send these packets based on the published protocol specification via serial or over an IP based network. This specific implementation, however, is not intrinsic to the protocol, and is merely a communication protocol that is implemented on a microcontroller allowing any microcontroller to serve as a device at this level. The foregoing example is provided for illustration purposes only and should not be construed as limiting.
A standard set of libraries formulate, verify and propagate BCS communications. JAVA may be used to implement the core of these libraries. Using JAVA enables users to leverage existing projects and techniques for quickly developing upper level applications. The libraries are presented to users in such a manner to make the underlying system transparent as possible. Ideally the libraries do not rely on the host system, but are at the very minimum equally stable with any idiosyncrasies between the major operating systems (Microsoft Windows XP and Windows Vista, Linux 2.6 kernel or higher, Apple OSX 10.5 or higher) hidden to the user. This ultimately allows users to be completely agnostic to the underlying system that they develop on and enhances cross-platform development. Although only the implementation in JAVA is discussed throughout this application, implementation of the communications libraries with a larger selection of languages by the community is also within the scope of the present invention. For example, languages that are popular among roboticists such as C++ and Python as well as languages that are traditionally not associated with robotics development including Scheme, Ruby, and Haskell are within the scope of the present invention.
A component that allows users to freely use, swap, and virtualize hardware is a hardware abstraction layer (HAL). This layer allows vendors to publish interfaces and to subscribe to existing interfaces to enable seamless transition between different hardware implementations with the same functionality. A HAL that is effective specifically for BCS while at the same time being intuitive to users is provided by an embodiment of the present invention. A text-based data interchange such as XML or JSON may be used to create a hardware interface specification. Using a text based data interchange makes it significantly easier for users to directly interact with existing specifications while cutting down development time for machine parsing libraries. Most common languages have existing proven libraries designed for basic parsing of common data interchange formats so specialization of the libraries for the HAL requires using an existing parser and building interfaces via the HAL file for BCS devices. Utilities may be built to allow users direct access live hardware on the network without the need of extensive coding or customization.
A community repository may be provided on a community website that allows users to publish HAL description files. Users may use their existing forum profiles to upload BCS files to the repository. The uploading mechanism may validate the format and uniqueness of the submissions.
According to various embodiments of the present invention, a deployable firmware for the VEX™ robotics design system from Innovation First, Inc. that would allow a user to follow the standard firmware update process for the VEX controller is provided. The user may utilize the controller as a BCS device and give full control of the controller's peripherals to a user application on a BCS network by using the firmware and a hardware adapter. Thus, users may deploy and use BCS with systems that they may already have or that can be obtained off the shelf with minimal overhead and costs.
The libraries may be interfaced with different higher level control technologies. For example, the libraries may be interfaced with MATLAB® from The MathWorks Inc. to allow users to connect with a BCS network and pull in sensor data directly. Additionally, libraries may be interfaced with LabView® from National Instruments to enable users to process incoming data directly from BCS devices so as to allow users to manipulate actuators connected via BCS.
The integrated development environment (IDE) of the present invention enables users to access and use BCS hardware in real-time. The Eclipse® platform may be leveraged to build the initial implementation of the IDE as an Eclipse® plug-in. This allows users to more easily adopt the IDE and lowers the entry costs of development with BCS. Keeping in line with the design considerations during the Continuous Computation Language (CCL) development, the IDE may be platform independent to prevent user limitation due to the host systems that they use.
Primary functionalities of the IDE may include among other things the ability to intuitively visualize in real-time BCS compliant modules as they are added and removed from operation, allow for device configuration as necessary, allow users to intuitively interact with the modules in real-time, and present the built libraries such that users can easily access them from within and outside of the IDE.
Users may access a conceptual view of the BCS network to which they are attached. This view may allow users to filter the modules or devices that are displayed based on states of the modules or devices, module or device identifiers and other attributes of the modules or devices. This view may also allow users to conceptually group modules or devices into functional blocks. Although this may not result in any change to the network directly, users may use the view to organize the network as they feel necessary.
Users may select devices or modules from the visualization and configure the modules or devices as appropriate. For example, the user may select a motor controller module. Since this particular module may have a PID controller and implement the PID HAL interface, the IDE would present the user with the ability to set and edit the corresponding gain values for the controller. For the same user, a module may exist that controls a number of servos. When the user selects this module, they are presented with a dialogue that has a number of sliders that correlate to servo position.
A system that allows a user to directly interact with hardware “straight out of the box” with minimal setup is provided. Because the IDE may be a plug-in to Eclipse®, users may go from point and click interactions with hardware to developing scripts and applications from within the same context. This arrangement makes the BCS system available to users ranging from novice to expert and gives all users a common tool to work with. Since the IDE is built using the libraries, users may import the libraries that are outside of the IDE and may move from development within the IDE to a stand-alone application deployment without the need of any additional tools.
According to various aspects of the present invention, an extension to the plug-in that would allow users to interact with non-BCS devices from within the IDE is provided. The extension allows users to fuse the functionality from the different systems with one another at development stage. The extension may allow the BCS IDE to interact directly with industry standard cRIO data acquisition systems and other robot controllers.
Moreover, multiple BCS modules may be used to control a number of small mobile robotics. These robots may be used to present possibilities of the technology for use with swarm robotics research. An exemplary implementation using the EduArm robot 400 that was developed as a low-cost teaching robot is illustrated in
The embodiments of the present invention allow modules to be developed to do discrete tasks that are commonly found in robotics such as moving parts of a robot or reading and controlling sensors. The modules communicate with each other and with other devices such as computers and user built modules. Some exemplary modules include a servo controller, a general purpose Input/Output module, a DC motor controller module, a range-finder module, a battery regulator/power module, a USB interface module, a wireless module, and an Ethernet routing module to pull all the modules together. The USB interface module allows users to directly control a module via a USB connection to a computer device.
For example, in the example of
USB 506 connected devices act in the same manner. When a message is sent, the Ethernet module 514 that is controlled over a USB connection 506 determines if there is an appropriate robotic device module 516 waiting. If the robotic device module 516 is waiting, the Ethernet module 514 sends the message to the robotic device module 516 via a BCS connection 515. An advantage to the system is that a module can be removed or relocated in a different position in the system and the system will adapt to this change. The system will allow the user to continue operation without interruption. In the system illustrated in
The system illustrated in
Each actuator 52 is connected to a computing device 2 over a wireless link 7 and each DyIO 1 is connected to the same wireless modules 7 illustrated in
An exemplary computing device for practicing the illustrative embodiment of the present invention may take many forms, including but not limited to a workstation, server, network computer, quantum computer, optical computer, bio computer, Internet appliance, mobile device, a pager, a tablet computer, and the like.
The computing device may be electronic and include a Central Processing Unit (CPU), memory, storage, an input control, a modem, a network interface, a display, etc. The CPU controls each component of the computing device. The memory temporarily stores instructions and data and provides them to the CPU so that the CPU operates the computing device. Optionally, the computing device may include multiple CPUs for executing software loaded in the memory, and other programs for controlling system hardware. Each of the CPUs can be a single or multi-core processor.
Embodiments of the present invention may be provided as one or more computer-readable programs embodied on or in one or more mediums. The mediums may be a floppy disk, a hard disk, a compact disc, a digital versatile disc, a flash memory card, a PROM, an MRAM, a RAM, a ROM, or a magnetic tape. In general, the computer-readable programs may be implemented in any programming language. Some examples of languages that can be used include FORTRAN, C, C++, C#, Python or Java. The software programs may be stored on or in one or more mediums as object code. Hardware acceleration may be used and all or a portion of the code may run on a FPGA, an ASIP, or an ASIC. The code may run in a virtualized environment such as in a virtual machine. Multiple virtual machines running the code may be resident on a single processor.
Since certain changes may be made without departing from the scope of the present invention, it is intended that all matter contained in the above description or shown in the accompanying drawings be interpreted as illustrative and not in a literal sense. Practitioners of the art will realize that the sequence of steps and architectures depicted in the figures may be altered without departing from the scope of the present invention and that the illustrations contained herein are singular examples of a multitude of possible depictions of the present invention.
The foregoing description of example embodiments of the invention provides illustration and description, but is not intended to be exhaustive or to limit the invention to the precise form disclosed. Modifications and variations are possible in light of the above teachings or may be acquired from practice of the invention.
This application claims the benefit of provisional patent application U.S. Ser. No. 61/304,107, filed Feb. 12, 2010, the contents of which are hereby incorporated by reference.
Number | Date | Country | |
---|---|---|---|
61304107 | Feb 2010 | US |