IP Library Granted Patent US 8,996,168
Granted Patent B2
US 8,996,168 · App. 13/084,350 · Granted Mar 31, 2015

Hardware abstraction layer (HAL) for a robot

Inventors: Thomas J. Murray, IV (Fullerton, CA); Baoquoc N. Pham (Pasadena, CA); Paolo Pirjanian (Glendale, CA)
Assignee: iRobot Corporation
G06N3/008B25J9/161B25J9/1661B25J9/1666G06F9/455G05B2219/40389G05B2219/40397
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 8,996,168
App. No.
13/084,350
Granted
Mar 31, 2015
Kind
B2
Abstract

Methods and apparatus that provide a hardware abstraction layer (HAL) for a robot are disclosed. A HAL can reside as a software layer or as a firmware layer residing between robot control software and underlying robot hardware and/or an operating system for the hardware. The HAL provides a relatively uniform abstract for aggregates of underlying hardware such that the underlying robotic hardware is transparent to perception and control software, i.e., robot control software. This advantageously permits robot control software to be written in a robot-independent manner. Developers of robot control software are then freed from tedious lower level tasks. Portability is another advantage. For example, the HAL efficiently permits robot control software developed for one robot to be ported to another. In one example, the HAL permits the same navigation algorithm to be ported from a wheeled robot and used on a humanoid legged robot.

Claims (48)

1. An electronically-implemented method of activating devices in a robot, the method comprising:

programmatically determining a device configuration for each of a plurality of devices of the robot, wherein each device configuration comprises:

a) a unique device identifier, and

b) a device type specifying a device class;

programmatically instantiating a resource driver for each of the plurality of devices of the robot based, in part, on its associated device type, wherein at least one resource driver corresponds to a compound resource driver that abstracts more than one device including a first device and a second device;

programmatically retrieving information regarding the first device's location and orientation on the robot, wherein the resource driver utilizes the information regarding the first device's location and orientation to properly abstract the first device;

programmatically generating a dependency list for at least two of the plurality of the resource drivers, each dependency list identifying a plurality of other resource drivers and an order in which the other resource drivers at least for the first device and the second device must be activated prior to activation of the compound resource driver associated with the dependency list; and

programmatically activating the plurality of other resource drivers including individual drivers for the first device and the second device prior and activating the compound resource driver after the individual drivers for the first device and the second device are activated in accordance with the order specified in the associated dependency lists such that at least the first device and the second device of the robot are activated;

whereby the resource drivers identified in each dependency list are activated prior to activation of the resource driver associated with the dependency list, for each device.

2. The method of claim 1 , wherein programmatically determining a device configuration further comprises:

programmatically retrieving at least one resource configuration file, wherein the at least one configuration file specifies the devices on the robot and the connectivity of those devices; and

programmatically parsing the at least one resource configuration file.

3. The method of claim 1 , further comprising programmatically generating a driver table, wherein the driver table comprises a reference to each instantiated resource driver.

4. The method of claim 3 , wherein the reference to each instantiated resource driver comprises a memory address.

5. The method of claim 1 , further comprising storing computer readable instructions for all device types in a shared library.

6. The method of claim 1 , further comprising:

programmatically determining a device group configuration for each of a plurality of device groups, wherein each device group configuration comprises:

a) a unique device group identifier, and

b) a device group type specifying a device group class;

programmatically instantiating a second resource driver for each of the plurality of device groups based, in part, on its associated device group type;

programmatically generating a second dependency list for at least two of the plurality of the resource drivers, each dependency list identifying a plurality of other resource drivers and an order in which the other resource drivers must be activated prior to activation of the resource driver associated with the dependency list; and

programmatically activating the plurality of second resource drivers associated with device groups in accordance with the order specified in the associated dependency lists such that the plurality of devices are activated;

whereby the resource drivers and second resource drivers identified in each dependency list are activated prior to activation of the resource driver or second resource driver associated with the dependency list, for each device and device group.

7. An apparatus comprising a robot, the apparatus comprising:

computer hardware; and

a tangible, non-transitory computer-readable medium having stored therein a computer program executable by the computer hardware, wherein the computer program is configured to activate devices in the robot, the computer program comprising:

program instructions configured to determine a device configuration for each of a plurality of devices of the robot, wherein each device configuration comprises:

a) a unique device identifier, and

b) a device type specifying a device class;

program instructions configured to instantiate a resource driver for each of the plurality of devices of the robot based, in part, on its associated device type, wherein at least one resource driver corresponds to a compound resource driver that abstracts more than one device including a first device and a second device;

program instructions configured to retrieve information regarding the first device's location and orientation on the robot, wherein the resource driver utilizes the information regarding the first device's location and orientation to properly abstract the first device;

program instructions configured to generate a dependency list for at least two of the plurality of the resource drivers, each dependency list identifying a plurality of other resource drivers and an order in which the other resource drivers at least for the first device and the second device must be activated prior to activation of the compound resource driver associated with the dependency list; and

program instructions configured to activate the plurality of other resource drivers including individual drivers for the first device and the second device prior and activating the compound resource driver after the individual drivers for the first device and the second device are activated in accordance with the order specified in the associated dependency lists such that at least the first device and the second device of the robot are activated;

whereby the resource drivers identified in each dependency list are activated prior to activation of the resource driver associated with the dependency list, for each device.

8. The apparatus of claim 7 , wherein the program instructions configured to determine a device configuration further comprise:

program instructions configured to retrieve at least one resource configuration file, wherein the at least one configuration file specifies the devices on the robot and the connectivity of those devices; and

program instructions configured to parse the at least one resource configuration file.

9. The apparatus of claim 7 , wherein the computer program further comprises program instructions configured to generate a driver table, wherein the driver table comprises a reference to each instantiated resource driver.

10. The apparatus of claim 9 , wherein the reference to each instantiated resource driver comprises a memory address.

11. The apparatus of claim 7 , wherein the computer program further comprises program instructions configured to store computer readable instructions for all device types in a shared library.

12. The apparatus of claim 7 , wherein the computer program further comprises:

program instructions configured to determine a device group configuration for each of a plurality of device groups, wherein each device group configuration comprises:

a) a unique device group identifier, and

b) a device group type specifying a device group class;

program instructions configured to instantiate a second resource driver for each of the plurality of device groups based, in part, on its associated device group type;

program instructions configured to generate a second dependency list for at least two of the plurality of the resource drivers, each dependency list identifying a plurality of other resource drivers and an order in which the other resource drivers must be activated prior to activation of the resource driver associated with the dependency list; and

program instructions configured to activate the plurality of second resource drivers associated with device groups in accordance with the order specified in the associated dependency lists such that the plurality of devices are activated;

whereby the resource drivers and second resource drivers identified in each dependency list are activated prior to activation of the resource driver or second resource driver associated with the dependency list, for each device and device group.

Assignments (6)
RELEASE OF SECURITY INTEREST Recorded Jul 31, 2023
From: BANK OF AMERICA, N.A., AS ADMINISTRATIVE AGENT
To: IROBOT CORPORATION
Reel/Frame 064430/0001 →
SECURITY INTEREST Recorded Nov 3, 2022
From: IROBOT CORPORATION
To: BANK OF AMERICA, N.A., AS ADMINISTRATIVE AGENT
Reel/Frame 061878/0097 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded May 23, 2013
From: EVOLUTION ROBOTICS, INC.
To: IROBOT CORPORATION
Reel/Frame 030486/0104 →
CHANGE OF NAME Recorded Aug 22, 2012
From: EVOLUTION ROBOTICS, INC.
To: FUTURE VISION HOLDINGS, INC.
Reel/Frame 028828/0646 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Aug 22, 2012
From: FUTURE VISION HOLDINGS, INC.
To: EVOLUTION ROBOTICS, INC.
Reel/Frame 028831/0824 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Aug 21, 2012
From: MURRAY, THOMAS J., IV; PHAM, BAOQUOC N.; PIRJANIAN, PAOLO
To: EVOLUTION ROBOTICS, INC.
Reel/Frame 028820/0568 →
Continuity (8)
Continuation 11945893 · Nov 27, 2007
Continuation 11485637 · Jul 11, 2006
Continuation 10924100 · Aug 23, 2004
Division 10307199 · Nov 27, 2002
Provisional Application 60374309 · Apr 19, 2002
Provisional Application 60355624 · Feb 8, 2002
Provisional Application 60334142 · Nov 28, 2001
Related Publication 20120041592A1 · Feb 16, 2012