Patent Description:
Robotic devices may be used for many applications, and may operate in a variety of environments. Unfortunately, during operation, a robotic device may fall or tip over, preventing the robotic device from moving normally. Controlling the robotic device to successfully right itself can be a difficult and time-consuming task for operators. For instance, those controlling the robotic device generally need to determine how to re-orient the robotic device to a desired position, if it is even possible.

<CIT> discloses a CPU <NUM> that detects that the posture of the apparatus main body has been shifted from the normal posture into an abnormal posture on the basis of the acceleration information obtained as detection output of the acceleration sensor <NUM>. Then, it restores the normal posture by means of a playback technique for controlling various drivers 3D through 7D, using route planning data stored in advance in the memory <NUM> for restoring the normal posture from a falling posture.

The video "aibo fall" shows a robot dog (<NPL>).

<CIT> describes a walking apparatus for a robot.

The present application discloses embodiments that relate to self-right procedures for legged robotic devices. In one example, the present application describes a method operable by a computing device. The method may include determining an orientation of a bottom surface of a legged robotic device with respect to a ground surface. The legged robotic device may further include two or more legs extending from a body of the legged robotic device. The method may also include determining that the legged robotic device is in an unstable position based on the determined orientation, wherein the legged robotic device is unable to maintain a stance in the unstable position. The method may also include performing a first action configured to return the legged robotic device to a stable position such that the legged robotic device is able to maintain a stance in the stable position, wherein the first action includes moving a first leg of the legged robotic device from a first position to a second position, such that a distal end of the first leg is further away from the ground surface in the second position than in the first position. A proximal end of the first leg may be coupled to a first side of the legged robotic device. The method may also include extending at least two of the two or more legs of the legged robotic device, if the first action causes the legged robotic device to return to the stable position. The method may also include performing a second action configured to return the legged robotic device to the stable position, if the legged robotic device is in the unstable position after the first action. The second may include extending the distal end of the first leg of the legged robotic device away from the body of the legged robotic device such that a gravitational potential energy of the legged robotic device is increased.

In another aspect, the present application discloses a robotic device. The robotic device may include a body, two or more legs extending form the body, at least one processor, and data storage comprising program logic executable by the at least one processor to cause the robotic device to perform functions. The functions may include determining an orientation of a bottom surface of a robotic device with respect to a ground surface. The functions may also include determining that the robotic device is in an unstable position, based on the determined orientation, wherein the robotic device is unable to maintain a stance in the unstable position. The functions may also include performing a first action configured to return the robotic device to a stable position such that the robotic device is able to maintain a stance in the stable position, wherein the first action includes moving a first leg of the robotic device from a first position to a second position, such that a distal end of the first leg is further away from the ground surface in the second position than in the first position. A proximal end of the first leg may be coupled to a first side of the robotic device. The functions may also include extending at least two of the two or more legs of the robotic device, if the first action causes the robotic device to return to the stable position. The functions may also include performing a second action configured to return the robotic device to the stable position, if the robotic device is in the unstable position after the first action. The second may include extending the distal end of the first leg of the robotic device away from the body of the robotic device such that a gravitational potential energy of the robotic device is increased.

In yet another aspect, the present application discloses a non-transitory computer-readable storage medium having stored thereon instructions, that when executed by a computing device, cause the computing device to carry out functions. The functions may include determining an orientation of a bottom surface of a legged robotic device with respect to a ground surface. The legged robotic device may further include two or more legs extending from a body of the legged robotic device. The functions may also include determining that the legged robotic device is in an unstable position based on the determined orientation, wherein the legged robotic device is unable to maintain a stance in the unstable position. The functions may also include performing a first action configured to return the legged robotic device to a stable position such that the legged robotic device is able to maintain a stance in the stable position, wherein the first action includes moving a first leg of the legged robotic device from a first position to a second position, such that a distal end of the first leg is further away from the ground surface in the second position than in the first position. A proximal end of the first leg may be coupled to a first side of the legged robotic device. The functions may also include extending at least two of the two or more legs of the legged robotic device, if the first action causes the legged robotic device to return to the stable position. The functions may also include performing a second action configured to return the legged robotic device to the stable position, if the legged robotic device is in the unstable position after the first action. The second may include extending the distal end of the first leg of the legged robotic device away from the body of the legged robotic device such that a gravitational potential energy of the legged robotic device is increased.

These as well as other aspects, advantages, and alternatives, will become apparent to those of ordinary skill in the art by reading the following detailed description, with reference where appropriate to the accompanying figures.

Example methods and systems are described herein.

In some example operations, a legged robotic device may need to be capable of autonomously picking itself up from a wide variety of starting positions. For example, a robotic device may encounter an obstacle, trip, and subsequently fall to its side. The robotic device may be configured with a self-right procedure designed to place the robotic device in an upright, stable position prior to standing. The self-right procedure may initially involve determining that the robot is in an unstable position, such as on its side for example. In one example, such a determination may be made by one or more sensors on the robotic device. In another example, the robotic device may determine the position of its center of mass and compare the determined position with the position of the feet of the robotic device. If the center of mass is outside of a polygon defined by the position of the feet, the robotic device may determine it is in an undesirable position and cannot stand up. If the center of mass of the robotic device is within the polygon defined by its feet, the robotic device may determine it is in an upright and stable position and may proceed to stand up.

If the robotic device determines that it is in an unstable position, the robotic device may then initiate one or more actions designed to return the robotic device to a stable position. After each action, the robotic device may make a determination whether or not the robotic device is still in an unstable position. If the robotic device determines that it is no longer in an unstable position, the robotic device may extend its legs to stand up and return to a fully functional mode of operation. If the robotic device determines that it is still in an unstable position, the robotic device may move on to a new action designed to return the robotic device to a stable position. The robotic device may continue to perform self-right actions until a determination is made that it is no longer in an unstable position.

Referring now to the figures, <FIG> illustrates a functional block diagram illustrating a robotic device <NUM>, according to an example embodiment. The robotic device <NUM> may include various subsystems such as a mechanical system <NUM>, a sensing system <NUM>, a control system <NUM>, as well as a power supply <NUM>. The robotic device <NUM> may include more or fewer subsystems and each subsystem could include multiple elements. Further, each of the subsystems and elements of robotic device <NUM> could be interconnected. Thus, one or more of the described functions of the robotic device <NUM> may be divided up into additional functional or physical components, or combined into fewer functional or physical components. In some further examples, additional functional and/or physical components may be added to the examples illustrated by <FIG>.

The mechanical system <NUM> may include several components, including a body <NUM>, one or more robotic legs <NUM>, and one or more robotic feet <NUM> coupled to the one or more robotic legs <NUM>. The mechanical system <NUM> may additionally include a motor <NUM>, which may be an electric motor powered by electrical power, or may be powered by a number of different energy sources, such as a gas-based fuel or solar power. Additionally, motor <NUM> may be configured to receive power from power supply <NUM>. The power supply <NUM> may provide power to various components of robotic device <NUM> and could represent, for example, a rechargeable lithium-ion or lead-acid battery. In an example embodiment, one or more banks of such batteries could be configured to provide electrical power. Other power supply materials and types are also possible.

The sensing system <NUM> may determine information about the environment that can be used by control system <NUM> (e.g., a computing device running motion planning software) to determine whether the robotic device <NUM> is in an upright and stable position or in an unstable position. The control system <NUM> could be located on the robotic device <NUM> or could be in remote communication with the robotic device <NUM>. In one particular example, the sensing system <NUM> may use one or more body-mounted sensors <NUM> attached to the body <NUM> of the robotic device <NUM>, which may be 2D sensors and/or 3D depth sensors that sense information about the environment as the robotic device <NUM> moves. For example, the body-mounted sensors <NUM> may determine a distance between the body <NUM> of the robotic device <NUM> and the ground surface on which the robotic device <NUM> operates. In further examples, one or more robotic leg sensors <NUM> may be located on the robotic legs <NUM> of the robotic device <NUM>. The robotic leg sensors <NUM> may be contact sensors configured to alert the robotic device when the robotic legs <NUM> are in contact with the ground surface. In another example, the robotic legs <NUM> may be coupled to robotic feet <NUM> that contact the ground surface. In such a case, the robotic device <NUM> may include one or more robotic feet sensors <NUM> positioned on the robotic feet <NUM> of the robotic device <NUM>. The robotic feet sensors <NUM> may be contact sensors configured to alert the robotic device <NUM> when the robotic feet <NUM> are in contact with the ground surface. The information from the robotic legs sensors <NUM> and/or the robotic feet sensors <NUM> may be used to determine whether the robotic device <NUM> is in a stable position or an unstable position, as discussed in more detail below.

The sensing system <NUM> may further include an inertial measurement unit (IMU) <NUM>. In an illustrative embodiment, IMU <NUM> may include both an accelerometer and a gyroscope, which may be used together to determine the orientation, position, and/or velocity of the robotic device <NUM>. In particular, the accelerometer can measure the orientation of the robotic device <NUM> with respect to gravity, while the gyroscope measures the rate of rotation around an axis. IMUs are commercially available in low-cost, low-power packages. For instance, an IMU <NUM> may take the form of or include a miniaturized MicroElectroMechanical System (MEMS) or a NanoElectroMechanical System (NEMS). Other types of IMUs may also be utilized. The IMU <NUM> may include other sensors, in addition to accelerometers and gyroscopes, which may help to better determine position and/or help to increase autonomy of the robotic device <NUM>. Two examples of such sensors are magnetometers and pressure sensors.

Many or all of the functions of the robotic device <NUM> could be controlled by control system <NUM>. Control system <NUM> may include at least one processor <NUM> (which could include at least one microprocessor) that executes instructions <NUM> stored in a non-transitory computer readable medium, such as the memory <NUM>. The control system <NUM> may also represent a plurality of computing devices that may serve to control individual components or subsystems of the robotic device <NUM> in a distributed fashion.

In some embodiments, memory <NUM> may contain instructions <NUM> (e.g., program logic) executable by the processor <NUM> to execute various functions of robotic device <NUM>, including those described below in relation to <FIG>. Memory <NUM> may contain additional instructions as well, including instructions to transmit data to, receive data from, interact with, and/or control one or more of the mechanical system <NUM>, the sensor system <NUM>, and/or the control system <NUM>.

<FIG> is a flow chart of an example method for self-righting a robotic device, in accordance with at least some embodiments described herein. Method <NUM> shown in <FIG> presents an embodiment of a method that, for example, could be used with the systems shown in <FIG>, for example, or may be performed by a combination of any components of in <FIG>. Method <NUM> may include one or more operations, functions, or actions as illustrated by one or more of blocks <NUM>-<NUM>. Although the blocks are illustrated in a sequential order, these blocks may in some instances be performed in parallel, and/or in a different order than those described herein. Also, the various blocks may be combined into fewer blocks, divided into additional blocks, and/or removed based upon the desired implementation.

In addition, for the method <NUM> and other processes and methods disclosed herein, the flowchart shows functionality and operation of one possible implementation of present embodiments. In this regard, each block may represent a module, a segment, or a portion of program code, which includes one or more instructions executable by a processor for implementing specific logical functions or steps in the process. The program code may be stored on any type of computer readable medium, for example, such as a storage device including a disk or hard drive. The computer readable medium may include a non-transitory computer readable medium, for example, such as computer-readable media that stores data for short periods of time like register memory, processor cache and Random Access Memory (RAM). The computer readable medium may also include non-transitory media, such as secondary or persistent long term storage, like read only memory (ROM), optical or magnetic disks, compact-disc read only memory (CD-ROM), for example. The computer readable media may also be any other volatile or non-volatile storage systems. The computer readable medium may be considered a computer readable storage medium, a tangible storage device, or other article of manufacture, for example.

In addition, for the method <NUM> and other processes and methods disclosed herein, each block in <FIG> may represent circuitry that is wired to perform the specific logical functions in the process.

Functions of the method <NUM> may be fully performed by a computing device, or may be distributed across multiple computing devices and/or a server. The computing device may be incorporated into a robotic device, or the computing device may be an independent component in wireless communication with the robotic device. In some examples, the computing device may receive information from sensors or other components coupled to the computing device, or where the computing device is a server the information can be received from another device that collects the information. The computing device could further communicate with a server to determine information that may facilitate the performance of the method <NUM>.

Referring again to <FIG>, at block <NUM>, the method <NUM> includes determining an orientation of a bottom surface of a robotic device with respect to a ground surface. The robotic device may include two or more legs extending from its body, which may be used to maneuver the robotic device. As discussed above in relation to <FIG>, the robotic device may include a sensing system including an IMU. The IMU may include an accelerometer and a gyroscope, as examples. The IMU may be configured to output data for determining the orientation of the robotic device. One or more processors of the robotic device may receive the data from the IMU, and make a determination of the current orientation of the robotic device. The IMU may detect the current rate of acceleration using one or more accelerometers, and may further detect changes in rotational attributes like pitch, roll, and yaw using one or more gyroscopes.

In another example, the robotic device may include one or more body-mounted sensors attached to the body of the robotic device. Such body-mounted sensors may be 2D sensors and/or 3D depth sensors that sense the ground surface and determine an orientation of the bottom surface of the robotic device. In yet another example, the bottom surface of the robotic device may include one or more contact sensors, such that when the robotic device is in the unstable position, there is not contact between the ground surface and the contact sensors on the bottom surface of the robotic device.

The bottom surface of the robotic device may be shaped such that the gravitational potential energy of the robotic device is reduced based on the robotic device being in a stable position with respect to the ground surface. For example, the bottom surface may be shaped in a semi-circular fashion, such as an egg or domed tortoise shell. Further, the robotic device may have a low center of mass positioned near the bottom surface. The robotic device may accomplish this by positioning its hardware components near its bottom surface. In such a configuration, when the robotic device is on its side the robotic device naturally tends to roll to a stable position. Other arrangements are possible as well.

At block <NUM>, the method <NUM> includes determining that the robotic device is in an unstable position. Such a determination may be made by one or more processors of the robotic device, using the determined orientation of the bottom surface as an input. The unstable position may include the robotic device positioned on its side in a lying position such that the robotic device is unable to maintain a stance in the unstable position. In the unstable position, the robotic device is unable to maintain a stance, meaning the robotic device is unable to extend its legs to cause the robotic device to stand. In one example, the robotic device may determine that it is in an unstable position by determining a position of its center of mass, and subsequently determining a position of the feet of the robotic device. The robotic device may project the position of the center of mass vertically onto the ground surface. As discussed above, the robotic device may include sensors positioned on the feet to determine a given position of each of the feet. The robotic device may then compare the determined position of the feet with the determined position of the center of mass. If the center of mass is outside of a polygon defined by the position of the feet, the robotic device may determine that it is in an unstable position and cannot stand up. If the center of mass is within the polygon defined by the position of the feet, the robotic device is in an upright and stable position and may proceed to stand up.

In yet another example, as discussed above, the bottom surface of the robotic device may include one or more contact sensors. In such an embodiment, when the robotic device is in the unstable position, there is not contact between the ground surface and the contact sensors on the bottom surface of the robotic device. Therefore, the robotic device may determine that the robotic device is in an unstable position if there is no contact between the ground surface and the contact sensors on the bottom surface of the robotic device. Other examples are possible as well.

At block <NUM>, the method <NUM> includes performing a first action configured to return the robotic device to a stable position. As discussed above, the robotic device may be in an unstable position lying on a first side of the robotic device. In such a case, the first action may include moving a first leg of the robotic device from a first position to a second position. The first leg may include a distal end that is positioned near the ground surface, and a proximal end that is couple to the first side of the robotic device. In one example, the distal end of the first leg may be coupled to a foot. The distal end of the first leg is further away from the ground surface in the second position than the first position. As such, the first leg may be cleared out of the way such that the gravitational potential energy and shape of the robotic device may return the robot to a stable position. In some examples, the robotic device may include four or more legs. In such an example, the first action may include moving each of the legs positioned on the first side of the robotic device from the first position to the second position.

At block <NUM>, the method <NUM> includes determining whether or not the first action returns the robotic device to a stable position. In the stable position, the robotic device is able to maintain a stance, meaning the robotic device is able to extend its legs to cause the robotic device to stand. As discussed above, the robotic device may use one or more body-mounted sensors, one or more contact sensors, and/or the IMU system to make this determination. In particular, after performing the first action, the robotic device may receive an indication from the one or more processors of the robotic device of a current position of the bottom surface.

If it is determined that the first action returned the robotic device to a stable position, method <NUM> continues at block <NUM> with extending at least two legs of the robotic device. When the robotic device returns to a stable position, it may proceed to any number of postures, including but not limited to sitting, standing, or crawling. For example, in a bipedal robotic device, the robotic device may extend both of its legs to cause the robotic device to stand. In a quadruped robotic device, the robotic device may extend all four of its legs to cause the robotic device to stand. In another example, the quadruped robotic device may only extend two of its four legs. In such an example, the robotic device may extend one leg on a first side of the robotic device and another leg on a second side of the robotic device. Other examples are possible as well. Once the robotic device stands up, it may proceed in a fully functional mode.

If it is determined that the first action did not return the robotic device to a stable position, method <NUM> continues at block <NUM> with performing a second action configured to return the robotic device to a stable position. The second action may include extending the distal end of the first leg away from the body of the robotic device. The distal end of the first leg may contact the ground surface and push the robotic device further away from the stable position, thereby increasing the gravitational potential energy of the robotic device. The increased gravitational potential energy and shape of the robotic device may return the robot to a stable position. As discussed above, in some examples the robotic device may include four or more legs. In such an example, the second action may include extending each of the legs positioned on the first side of the robotic device away from the body of the robotic device to increase the gravitational potential energy of the robotic device. Additional actions configured to return the robotic device to a stable position are possible as well, as discussed in more detail below.

According to various embodiments, a self-right system for a legged robotic device is described. For instance, a robotic device may utilize a combination of self-right actions to cause the robotic device to move from an unstable position to a stable position. <FIG> illustrate the robotic device performing various self-right functions, according to an example embodiments.

<FIG> illustrates an example embodiment when the robotic device <NUM> is in a standing position in a fully functional mode. The robotic device <NUM> is shown as a quadruped, although other configurations are possible as well. As shown in <FIG>, the robotic device <NUM> may include a body <NUM>, and four legs 304A-304D extending from the body <NUM>. The legs 304A-304D are shown contacting a ground surface <NUM>. The center of mass is shown near the bottom surface of the robotic device <NUM>. The bottom surface of the robotic device is U-shaped, such that when the robotic device <NUM> is on its side the body <NUM> naturally tends to roll to a stable position.

<FIG> illustrates an example embodiment when the robotic device <NUM> is in an unstable position. As discussed above, the robotic device <NUM> may use one or more body-mounted sensors, one or more contact sensors, and/or an IMU system to determine if it is in an unstable position. As shown in <FIG>, the robotic device <NUM> is on its left side, with legs 304C and 304D on the ground side, and legs 304A and 304B on the sky side. The robotic device <NUM> is unable to maintain a stance in the unstable position shown in <FIG>.

<FIG> illustrates an example action configured to return the robotic device <NUM> to a stable position. As discussed above in relation to the first action, the robotic device <NUM> may move its ground side legs 304C, 304D from a first position (e.g.. , the position shown in <FIG>) to a second position (e.g., the position shown in <FIG>). The distal ends of the ground side legs 304C, 304D are further away from the ground surface in the second position than in the first position. By moving the ground side legs 304C, 304D out of the way, the gravitational potential energy and shape of the robotic device <NUM> may return the robot to a stable position.

<FIG> illustrates an example embodiment when the robotic device <NUM> is in a stable position. In the stable position, the robotic device <NUM> is stable and can extend its legs 304A-304D to stand and return to a fully functional mode of operation. The robotic device <NUM> may proceed to any number of postures from the stable position, including but not limited to sitting, standing, or crawling. As discussed above, the bottom surface of the robotic device <NUM> may include one or more contact sensors. In such an embodiment, when the robotic device is in the stable position, there is contact between the ground surface <NUM> and the contact sensors on the bottom surface of the robotic device <NUM>. Therefore, the robotic device <NUM> may determine that the robotic device <NUM> is in a stable position if there is contact between the ground surface <NUM> and the contact sensors on the bottom surface of the robotic device <NUM>.

<FIG> illustrates another example action configured to return the robotic device <NUM> to a stable position. As discussed above in relation to the second action, the robotic device <NUM> may move its ground side legs 304C, 304D away from the body <NUM> of the robotic device <NUM>. The distal ends of the ground side legs 304C, 304D may contact the ground surface <NUM> and push the robotic device <NUM> further away from the stable position, thereby increasing the gravitational potential energy of the robotic device <NUM>. The increased gravitational potential energy and shape of the bottom surface of the robotic device <NUM> may return the robotic device <NUM> to a stable position. In one example, the robotic device <NUM> may extend its ground side legs 304C, 304D to push the robotic device further away from the stable position, and then subsequently move its ground side legs 304C, 304D to the position shown in <FIG>. Other examples are possible as well.

In one embodiment, if the robotic device <NUM> is still in an unstable position after the second action, the robotic device <NUM> may perform a third action configured to return the robotic device <NUM> to a stable position. <FIG> illustrates yet another example action configured to return the robotic device <NUM> to a stable position. The robotic device <NUM> may extend its sky side legs 304A, 304B to lower the center of mass of the robotic device <NUM>. Further, the robotic device <NUM> may move its sky side legs 304A, 304B away from the ground surface <NUM> and/or towards the ground surface <NUM> so as to provide an angular momentum to the robotic device <NUM>. The robotic device <NUM> may alternate between moving its sky side legs 304A, 304B away from the ground surface <NUM>, and towards the ground surface <NUM> to rock the robotic device <NUM> in an attempt to return the robotic device <NUM> to the stable position.

<FIG> illustrates yet another example action configured to return the robotic device <NUM> to a stable position. The robotic device <NUM> may extend its ground side legs 304C, 304D away from the body <NUM> to push off of a potential obstruction (e.g., a rock, a wall, etc.) that may be preventing the robotic device <NUM> from returning to the stable position. In addition, the robotic device <NUM> may extend its sky side legs 304A, 304B to achieve the same goal.

The robotic device may perform one or more of the actions described above in relation to <FIG> to attempt to return the robotic device <NUM> to a stable position. After each action, the robotic device <NUM> may make a determination whether or not the performed action returned the robotic device <NUM> to the stable position. If the robotic device <NUM> determines it is in the stable position, the robotic device <NUM> may stand and continue to operate in a fully functional mode. If the robotic device <NUM> determines it is still in an unstable position, it may continue to perform the described actions until the robotic device <NUM> determines it is no longer in an unstable position.

<FIG> illustrates another example robotic device <NUM> configured to perform functions of the example method, in accordance with at least some embodiments described herein. In particular, <FIG> illustrates an example robotic device <NUM> having a body <NUM>, and four legs 404A-404D extending from the body <NUM>. The body <NUM> is shown with a low center of mass, and a bottom surface with a profile <NUM> such that the gravitational potential energy of the robotic device <NUM> is reduced based on the robotic device <NUM> being in a stable position. The robotic device <NUM> may be configured to perform the various self-right actions described above in relation to <FIG>.

<FIG> illustrates a computer-readable medium configured according to an example embodiment. In example embodiments, the example system can include one or more processors, one or more forms of memory, one or more input devices/interfaces, one or more output devices/interfaces, and machine-readable instructions that when executed by the one or more processors cause the system to carry out the various functions, tasks, capabilities, etc., described above.

As noted above, in some embodiments, the disclosed methods can be implemented by computer program instructions encoded on a non-transitory computer-readable storage media in a machine-readable format, or on other non-transitory media or articles of manufacture. <FIG> is a schematic illustrating a conceptual partial view of an example computer program product that includes a computer program for executing a computer process on a computing device, arranged according to at least some embodiments presented herein.

In one embodiment, the example computer program product <NUM> is provided using a signal bearing medium <NUM>. The signal bearing medium <NUM> may include one or more programming instructions <NUM> that, when executed by one or more processors may provide functionality or portions of the functionality described above with respect to <FIG>. In some examples, the signal bearing medium <NUM> can be a computer-readable medium <NUM>, such as, but not limited to, a hard disk drive, a Compact Disc (CD), a Digital Video Disk (DVD), a digital tape, memory, etc. In some implementations, the signal bearing medium <NUM> can be a computer recordable medium <NUM>, such as, but not limited to, memory, read/write (R/W) CDs, R/W DVDs, etc. In some implementations, the signal bearing medium <NUM> can be a communications medium <NUM>, such as, but not limited to, a digital and/or an analog communication medium (e.g., a fiber optic cable, a waveguide, a wired communications link, a wireless communication link, etc.). Thus, for example, the signal bearing medium <NUM> can be conveyed by a wireless form of the communications medium <NUM>.

The one or more programming instructions <NUM> can be, for example, computer executable and/or logic implemented instructions. In some examples, a computing device such as the processor <NUM> of <FIG> is configured to provide various operations, functions, or actions in response to the programming instructions <NUM> conveyed to the processor <NUM> by one or more of the computer-readable medium <NUM>, the computer recordable medium <NUM>, and/or the communications medium <NUM>.

The non-transitory computer-readable medium could also be distributed among multiple data storage elements, which could be remotely located from each other. The device that executes some or all of the stored instructions could be a client-side computing device. Alternatively, the device that executes some or all of the stored instructions could be a serverside computing device.

Claim 1:
A method operable by a computing device, the method causing the computing device to perform operations comprising:
determining (<NUM>) an orientation of a bottom surface of a robotic device (<NUM>) with respect to a ground surface (<NUM>), wherein the robotic device comprises a body (<NUM>) and four legs (304A ... 304D) extending from the body;
based on the determined orientation, determining (<NUM>) that the robotic device is in an unstable position, wherein the robotic device that is in the unstable position is unable to maintain a stance; and
providing instructions to perform an action configured to return the robotic device that is in the unstable position to a stable position such that the robotic device that is in the stable position is able to maintain a stance, wherein:
the action comprises moving a first leg of the robotic device from a first position to a second position;
moving (<NUM>) the first leg from the first position to the second position comprises extending the first leg away from the body such that a distal end of the first leg contacts the ground surface and pushes off of the ground surface to push the robotic device from the unstable position and further away from the stable position, thereby increasing the gravitational potential energy of the robotic device.