Autonomous mobile robot

An autonomous mobile robot includes a robot body, a drive system, a sensor system, and a controller. The drive system supports the robot body and maneuvers the robot over a floor surface. The sensor system includes an inertial measurement unit for measuring a pose of the robot and issues a sensor signal including data having information regarding a pose of the robot. The controller communicates with the drive and sensor systems and executes a behavior system. The behavior system receives the sensor signal from the sensor system and executes a behavior. The behavior system executes an anti-stasis behavior in response to sensor signals indicating that the robot is constrained to evaluate a state of constraint. In addition, the behavior system executes an anti-tilt behavior in response to sensor signals indicating that the robot is tilted with respect to a direction of gravity to evaluate a state of tilt.

TECHNICAL FIELD

This disclosure relates to autonomous mobile robot stairs detection.

BACKGROUND

A vacuum cleaner generally uses an air pump to create a partial vacuum for lifting dust and dirt, usually from floors, and optionally from other surfaces as well. The vacuum cleaner typically collects dirt either in a dust bag or a cyclone for later disposal. Vacuum cleaners, which are used in homes as well as in industry, exist in a variety of sizes and models, such as small battery-operated hand-held devices, domestic central vacuum cleaners, huge stationary industrial appliances that can handle several hundred liters of dust before being emptied, and self-propelled vacuum trucks for recovery of large spills or removal of contaminated soil.

Autonomous robotic vacuum cleaners generally navigate, under normal operating conditions, a living space and common obstacles while vacuuming the floor. Autonomous robotic vacuum cleaners generally include sensors that allow them to avoid obstacles, such as walls, furniture, or stairs. The robotic vacuum cleaner may alter its drive direction (e.g., turn or back-up) when it bumps into an obstacle. The robotic vacuum cleaner may also alter drive direction or driving pattern upon detecting exceptionally dirty spots on the floor.

SUMMARY

One aspect of the disclosure provides an autonomous mobile robot including a robot body, a drive system, a sensor system and a controller. The robot body defines a forward drive direction. The drive system supports the robot body and is configured to maneuver the robot over a floor surface. The sensor system includes wheel encoders and an inertial measurement unit for measuring a pose of the robot, and issues a sensor signal. The sensor signal is indicative of the pose of the robot. The controller is in communication with the drive system and the sensor system, and has a computing processor executing a behavior system. The behavior system receives the sensor signal from the sensor system and executes at least one behavior based on the sensor signal. The behavior system executes an anti-stasis behavior in response to sensor signals indicating that the robot is constrained to evaluate a state of constraint. In addition, the behavior system executes an anti-tilt behavior in response to sensor signals indicating that the robot is tilted with respect to a direction of gravity to evaluate a state of tilt. In some examples, the behavior system executes an anti-wedge behavior in response to sensor signals indicating that the robot is wedging under an obstacle.

Implementations of the disclosure may include one or more of the following features. In some implementations, the control system executes on a computing processor and includes a control arbitration system that issues commands to resources of the robot. The control system may cause execution of a wiggle command having a wiggle angle. The wiggle command includes drive commands to drive in alternating left and right drive directions angled with respect to each other by the wiggle angle. Additionally, if the controller receives a sensor signal indicating that the robot is not executing a first wiggle command having a first wiggle angle, then the controller causes execution of a second wiggle command having a second wiggle angle greater than the first wiggle angle. Additionally, the controller issues an anti-stasis command to the drive system when signals of the inertial measurement unit and/or the wheel encoder are not within an allowable tolerance for indicating robot movement.

In some examples, the constraint state includes the robot entering or being in a wedged position with respect to an object. Additionally, the sensor signals may include a bump signal indicating contact of the robot with the object, and a wheel drop signal indicating movement of a wheel of the drive system away from the robot body.

In some implementations, the anti-stasis behavior causes execution of a drive command that backs the robot away from an impediment or turns the robot away from a side of the robot experiencing constraint (e.g. in a slewing state). Additionally, the anti-stasis behavior may further cause execution of a drive command that drives the robot in an accurate trajectory.

In some implementations, the behavior system executes the tilt behavior when the robot is tilted with respect to the direction of gravity for at least a threshold period of time. The anti-tilt behavior may cause execution of a forward drive command when the robot is pitched up with respect to the direction of gravity and the forward drive direction. Moreover, the anti-tilt behavior may cause execution of a reverse drive command when the robot is pitched down with respect to the direction of gravity and the forward drive direction.

In some implementations, the behavior system executes the anti-tilt behavior when the robot is tilted with respect to the direction of gravity at an angle greater than a threshold angle. The anti-tilt behavior may cause execution of a forward drive command when the robot is pitched up with respect to the direction of gravity and the forward drive direction, and may cause execution of a reverse command when the robot is pitched down with respect to the direction of gravity and the forward drive direction. In some implementations, the sensor system includes at least one of obstacle-detection obstacle-avoidance (ODOA) sensors, communication sensors, navigation sensors, proximity sensors, contact sensors, a camera, sonar, radar, a LIDAR, or a LADAR.

In some implementations, the autonomous mobile robot further includes a mechanical switch disposed on a bottom surface of the robot and forward of a driven wheel of the drive system. The mechanical switch activates upon contact with an obstacle or object. The behavior system may execute the stairs behavior when the mechanical switches are activated and the sensor system detects a stationary robot.

In some examples, the autonomous mobile robot further includes a cleaning system for cleaning or treating the floor surface. The behavior system may execute an anti-ingestion behavior when the mechanical switches are activated and the sensor system detects motion. The anti-ingestion behavior causes issuance of a cleaning stop command for stopping a cleaning behavior and issuance of a wiggle command having a wiggle angle. The wiggle command includes drive commands to drive in alternating left and right drive directions angled with respect to each other by the wiggle angle. Additionally or alternatively, the behavior system may execute a wheel-jam behavior when the controller receives a signal from the sensor system indicating that the wheels of the robot are stalling at a stalling rate less than a stalling threshold. The wheel-jam behavior causes issuance of the wiggle command for releasing a stalled wheel of the robot. The robot may further include a driven roller brush extending parallel to a transverse axis X and rotatably supported by the robot body to contact a floor surface. The driven roller brush rotates in a first direction about the X axis. The anti-ingestion behavior causes biasing of the roller brush to passively rotate in a second direction opposite the first direction, for example, to allow a wound cord to unwind from the roller brush as the robot backs away or drives away.

Another aspect of the disclosure provides a control system for an autonomous mobile robot. The control system includes a control arbitration system, a drive system, a sensor system, and a controller. The control arbitration system executes on a computing processor and issues commands to resources of the robot. The drive system includes right and left drive wheels. In addition, the drive system supports the robot body and is configured to maneuver the robot over a floor surface. The sensor system includes wheel encoders that track revolution of both dive wheels and an inertial measurement unit measuring a pose of the robot. The sensor system issues a sensor signal indicative of the pose of the robot. The controller is in communication with the drive system and the sensor system. In addition, the controller has a computing processor that executes a behavior system. The behavior system receives the sensor signals from the sensor system and executes at least one behavior based on the sensor signals. The behavior system executes an anti-stasis behavior in response to sensor signals indicating that the robot is constrained to evaluate a state of constraint and executes an anti-tilt behavior in response to sensor signals indicating that the robot is tilted with respect to a direction of gravity to evaluate a state of tilt.

Another aspect of the disclosure provides a method of operating an autonomous mobile robot. The method includes receiving, at a computing processor, a sensor signal from a sensor system. The sensor signal includes an inertial measurement or an angular orientation of the robot. The method also includes executing on the computing processor a behavior system. The behavior system receives the sensor signal from the sensor system and executes at least one behavior based on the sensor signal. The behavior system executes an anti-stasis behavior in response to sensor signals that indicate that the robot is constrained to evaluate a state constraint. In addition, the behavior system executes an anti-tilt behavior in response to sensor signals that indicate that the robot is tilted with respect to a direction of gravity to evaluate a state of tilt.

In some implementations, the anti-stasis behavior includes issuing a wiggle command having a wiggle angle. The wiggle command includes drive commands to drive in alternating left and right drive directions angled with respect to each other by the wiggle angle. The method may further include receiving, at a computing processor, a second sensor signal from the sensor system. If the second sensor signal indicates that the robot is stationary not executing after executing a first wiggle command having a first wiggle angle, the anti-stasis behavior drive system issues a second wiggle command having a second wiggle angle greater than the first wiggle angle, and the sensor system monitors sensors for robot inertia pose and wheel rotation. If the sensor signals are not within tolerance, the robot executes an anti-stasis behavior.

In some examples, the method includes executing the anti-tilt behavior when the robot is tilted with respect to the direction of gravity for at least a threshold period of time. The method may include executing a forward drive command when the robot is pitched up with respect to the direction of gravity and the forward drive direction, and executing of a reverse drive command when the robot is pitched down with respect to the direction of gravity and the forward drive direction.

In some examples, the method includes executing the anti-tilt behavior when the robot is tilted with respect to the direction of gravity at an angle greater than a threshold angle. The method may include executing a forward drive command when the robot is pitched up with respect to the direction of gravity and the forward drive direction, and executing of a reverse command when the robot is pitched down with respect to the direction of gravity and the forward drive direction.

In some implementations, the method further includes activating a mechanical switch disposed on a bottom surface of the robot forward of a drive wheel of a drive system, the mechanical switch activated when an obstacle contacts the mechanical switch. Additionally, the method may include executing the stairs behavior when the mechanical switches are activated and the sensor system detects a stationary robot.

In some implementations, the method includes cleaning or treating the floor surface using a cleaning system. The method may include executing an anti-ingestion behavior when the mechanical switches are activated and the sensor system detects motion. The anti-ingestion behavior causing issuance of a cleaning stop command for stopping a cleaning behavior and issuance of a wiggle command having a wiggle angle. The wiggle command includes drive commands to drive in alternating left and right drive directions angled with respect to each other by the wiggle angle. In some examples, the method includes executing a wheel-jam behavior when the controller receives a signal from the signal system indicating that a wheel of the robot is stalling at a stalling rate less than a stalling threshold. The wheel-jam behavior causes issuance of the wiggle command for releasing a stalled wheel of the robot.

DETAILED DESCRIPTION

An autonomous robot movably supported can navigate a floor surface. In some examples, the autonomous robot can clean a surface while traversing the surface. The robot can remove debris from the surface by agitating the debris and/or lifting the debris from the surface by applying a negative pressure (e.g., partial vacuum) above the surface, and collecting the debris from the surface.

Referring toFIGS. 1-3, in some implementations, a robot100includes a body110supported by a drive system120that can maneuver the robot100across the floor surface10based on a drive command having x, y, and θ components, for example. The robot body110has a forward portion112and a rearward portion114. The drive system120includes right and left driven wheel modules120a,120b. The wheel modules120a,120bare substantially opposed along a transverse axis X defined by the body110and include respective drive motors122a,122bdriving respective wheels124a,124b. The drive motors122a,122bmay releasably connect to the body110(e.g., via fasteners or tool-less connections) with the drive motors122a,122boptionally positioned substantially over the respective wheels124a,124b. The wheel modules120a,120bcan be releasably attached to the body110and forced into engagement with the cleaning surface10by respective springs. In some examples, the wheel module120a,120bincludes a wheel encoder121a,121b, which converts the rotational motion of the wheels124a,124bto an analog or digital signal indicative of the rotation and/or position of the wheels124a,124b. In some examples, the wheels124a,124bare releasably connected to the wheel modules120a,120brespectively. The wheels124a,124bmay have a biased-to-drop suspension system, which improves traction of the wheel modules120a,120bover slippery floors (e.g., hardwood, wet floors). The robot100may include a caster wheel126disposed to support a forward portion112of the robot body110. The robot body110supports a power source102(e.g., a battery) for powering any electrical components of the robot100.

The robot100can move across a cleaning surface through various combinations of movements relative to three mutually perpendicular axes defined by the body110: a transverse axis X; a fore-aft axis Y; and a central vertical axis Z. A forward drive direction along the fore-aft axis Y is designated F (sometimes referred to hereinafter as “forward”), and an aft drive direction along the fore-aft axis Y is designated A (sometimes referred to hereinafter as “rearward”). The transverse axis X extends between a right side R and a left side L of the robot100substantially along an axis defined by center points of the wheel modules120a,120b.

The robot100can tilt about the X axis. When the robot100tilts to the south position it tilts towards the rearward portion114(sometimes referred to hereinafter as “pitched up”), and when the robot100tilts to the in a north position it tilts towards the forward portion112(sometimes referred to hereinafter as a change “pitched down”). Additionally, the robot100tilts about the Y axis. The robot100may tilt to the east of the Y axis (sometimes referred to hereinafter as a “right roll”), or the robot100may tilt to the west of the Y axis (sometimes referred to hereinafter as a “left roll”). Therefore, a change in the tilt of the robot100about the X axis is a change in its pitch, and a change in the tilt of the robot100about the Y axis is a change in its roll. In addition, the robot100may either tilt to the right, i.e., an east position, or to the left i.e., a west position. In some examples the robot100tilts about the X axis and about the Y axis having tilt positions, such as northeast, northwest, southeast, and southwest. As the robot100is traversing a floor surface10, the robot100may make a left or right turn about its Z axis (sometimes referred to hereinafter as a change in the yaw). A change in the yaw causes the robot100to make a left turn or a right turn while it is moving. Thus the robot100may have a change in one or more of its pitch, roll, or yaw at the same time.

A forward portion112of the body110carries a bumper130, which detects (e.g., via one or more sensors) one or more events in a drive path of the robot100, for example, as the wheel modules120a,120bpropel the robot100across the cleaning surface during a cleaning routine. The robot100may respond to events (e.g., obstacles18, cliffs, and/or walls20) detected by the bumper130by controlling the wheel modules120a,120bto maneuver the robot100in response to the event (e.g., away from an obstacle18). While some sensors are described herein as being arranged on the bumper130, these sensors can additionally or alternatively be arranged at any of various different positions on the robot100including but not limited to the bottom surface116of the robot (e.g., mechanical switches530).

The robot100may include a cleaning system160for cleaning or treating a floor surface10. The cleaning system160may include a dry cleaning system160aand/or a wet cleaning system160b. The dry cleaning system160amay include a driven roller brush162(e.g., with bristles and/or beater flaps) extending parallel to the transverse axis X and rotatably supported by the robot body110to contact the floor surface10. The driven roller brush162agitates debris off of the floor surface10and throws or guides the agitated debris into a collection bin163. The cleaning system160may also include a side brush164having an axis of rotation at an angle with respect to the floor surface10for moving debris into a cleaning swath area of the cleaning system160. The wet cleaning system160bmay include a fluid applicator166that extends along the transverse axis X and dispenses cleaning liquid onto the surface. The dry and/or wet cleaning systems160a,160bmay include one or more squeegee vacuums168(e.g., spaced apart compliant blades having a partial vacuum applied therebetween via an air pump) vacuuming the cleaning surface.

A user interface140disposed on a top portion of the body110receives one or more user commands and/or displays a status of the robot100. The user interface140is in communication with a robot controller150carried by the robot100such that one or more commands received by the user interface140can initiate execution of a cleaning routine by the robot100. The controller150includes a computing processor152(e.g., central processing unit) in communication with non-transitory memory154(e.g., a hard disk, flash memory, random-access memory).

The robot controller150(executing a control system210) may execute behaviors300that cause the robot100to take an action, such as maneuvering in a wall following manner, a floor scrubbing manner, or changing its direction of travel when an obstacle18(e.g., chair18a, table18b, sofa18c, etc.) is detected. The robot controller150can maneuver the robot100in any direction across the cleaning surface by independently controlling the rotational speed and direction of each wheel module120a,120b. For example, the robot controller150can maneuver the robot100in the forward F and reverse (aft) A directions, or turn the robot100in the right R or left L directions.

Referring toFIGS. 4 and 5, to achieve reliable and robust autonomous movement, the robot100may include a sensor system500having several different types of sensors510, which can be used in conjunction with one another to create a perception of the robot's environment sufficient to allow the robot100to make intelligent decisions about actions to take in that environment. The sensor system500may include one or more types of sensors510supported by the robot body110, which may include obstacle detection/obstacle avoidance (ODOA) sensors, communication sensors, navigation sensors, etc. For example, these sensors510may include, but are not limited to, proximity sensors, contact sensors, a camera (e.g., volumetric point cloud imaging, three-dimensional (3D) imaging or depth map sensors, visible light camera and/or infrared camera), sonar, radar, LIDAR (Light Detection and Ranging, which can entail optical remote sensing that measures properties of scattered light to find range and/or other information of a distant target), LADAR (Laser Detection and Ranging), etc. In some implementations, the sensor system500includes ranging sonar sensors, proximity cliff detectors, contact sensors, a laser scanner, and/or an imaging sonar.

In some examples, the sensor system500includes an inertial measurement unit (IMU)510din communication with the controller150to measure and monitor the acceleration of the robot100and the orientation of the robot100with respect to the overall center of gravity CGRof the robot100. The IMU510dincludes one or more gyroscopes (hereinafter “gyro”) and one or more angular and/or linear accelerometers to measure the relative orientation of the robot100in space. The controller150may monitor any deviation in feedback from the IMU510dfrom a threshold signal corresponding to normal unencumbered operation. For example, if the robot100begins to pitch away from an upright position, it may be beached, high centered, slewing, wedged or otherwise impeded, or someone may have suddenly added a heavy payload. In these instances, it may be necessary to take urgent action (including, but not limited to, evasive maneuvers, recalibration, and/or issuing an audio/visual warning) in order to assure safe operation of the robot100.

When accelerating from a stop, the controller150may take into account a moment of inertia of the robot100from its overall center of gravity CGRto prevent robot tipping. The controller150may use a model of its pose, including its current moment of inertia. When payloads are supported, the controller150may measure a load impact on the overall center of gravity CGRand monitor movement of the robot moment of inertia. If this is not possible, the controller150may apply a test torque command to the drive system120and measure actual linear and angular acceleration of the robot100using the IMU510d, in order to experimentally determine safe limits.

The IMU510dmay measure and monitor the pitch, roll, and yaw of the robot100based on relative values. In some implementations, and over a period of time, constant movement may cause the IMU510dto drift. The controller150executes a resetting command to recalibrate the IMU510dand reset it to zero. Before resetting the IMU510d, the controller150determines if the robot100is tilted, and issues the resetting command only if the robot100is on a flat surface.

In some implementations, the robot100includes a navigation system600configured to allow the robot100to navigate the floor surface10without colliding into obstacles18or falling down stairs, and to intelligently recognize relatively dirty floor areas for cleaning. Moreover, the navigation system600can maneuver the robot100in deterministic and pseudo-random patterns across the floor surface10. The navigation system600may be a behavior based system stored and/or executed on the robot controller150. The navigation system600may communicate with the sensor system500to determine and issue drive commands to the drive system120. The navigation system600influences and configures the robot behaviors300, thus allowing the robot100to behave in a systematic preplanned movement. In some examples, the navigation system600receives data from the sensor system500and plans a desired path610for the robot100to traverse.

In some implementations, the controller150(e.g., a device having one or more computing processors152in communication with non-transitory memory154capable of storing instructions executable on the computing processor(s)) executes a control system210, which includes a behavior system210aand a control arbitration system210bin communication with each other. The control arbitration system210ballows robot applications220to be dynamically added and removed from the control system210, and facilitates allowing applications220to each control the robot100without needing to know about any other applications220. In other words, the control arbitration system210bprovides a simple prioritized control mechanism between applications220and resources240of the robot100.

The applications220can be stored in memory or communicated to the robot100, to run concurrently on (e.g., on a processor) and simultaneously control the robot100. The applications220may access behaviors300of the behavior system210a. The independently deployed applications220are combined dynamically at runtime and to share robot resources240(e.g., drive system120and/or cleaning systems160,160a,160b). A low-level policy is implemented for dynamically sharing the robot resources240among the applications220at run-time. The policy determines which application220has control of the robot resources240as required by that application220(e.g. a priority hierarchy among the applications220). Applications220can start and stop dynamically and run completely independently of each other. The control system210also allows for complex behaviors300, which can be combined together to assist each other.

The control arbitration system210bincludes one or more application(s)220in communication with a control arbiter260. The control arbitration system210bmay include components that provide an interface to the control arbitration system210bfor the applications220. Such components may abstract and encapsulate away the complexities of authentication, distributed resource control arbiters, command buffering, coordinate the prioritization of the applications220and the like. The control arbiter260receives commands from every application220, generates a single command based on the applications' priorities, and publishes it for its associated resources240. The control arbiter260receives state feedback from its associated resources240and may send it back up to the applications220. The robot resources240may be a network of functional modules (e.g., actuators, drive systems, and groups thereof) with one or more hardware controllers. The commands of the control arbiter260are specific to the resource240to carry out specific actions. A dynamics model230executable on the controller150is configured to compute the center for gravity (CG), moments of inertia, and cross products of inertia of various portions of the robot100for assessing a current robot state.

In some implementations, a behavior300is a plug-in component that provides a hierarchical, state-full evaluation function that couples sensory feedback from multiple sources, such as the sensor system500, with a-priori limits and information into evaluation feedback on the allowable actions of the robot100. Since the behaviors300are pluggable into the application220(e.g. residing inside or outside of the application220), they can be removed and added without having to modify the application220or any other part of the control system210. Each behavior300is a standalone policy. To make behaviors300more powerful, it is possible to attach the output of multiple behaviors300together into the input of another so that you can have complex combination functions. The behaviors300are intended to implement manageable portions of the total cognizance of the robot100.

In the example shown, the behavior system210aincludes an obstacle detection/obstacle avoidance (ODOA) behavior300ffor determining responsive robot actions based on obstacles18perceived by the sensor510(e.g., turn away; turn around; stop before the obstacle18, etc.). Another behavior300may include a wall following behavior300gfor driving adjacent a detected wall20(e.g., in a wiggle pattern of driving toward and away from the wall20). Other behaviors300may include a dirt hunting behavior300h(where the sensor(s) detect a dirty spot on the floor surface10and the robot100veers towards the spot for cleaning), a spot cleaning behavior300e(e.g., the robot100follows a cornrow pattern to clean a specific spot), a cliff behavior300j(e.g., the robot100detects stairs and avoids falling from the stairs), an anti-stasis behavior300a, an anti-tilt behavior300b, an anti-ingestion behavior300c, and a wheel-jam behavior300d.

In some examples, the behavior system210aincludes status behaviors310that detect a status of the robot100and may trigger an escape behavior300ito help the robot100overcome an object that was sucked in its vacuum168or when the robot100is getting wedged and tilted, beached, or slewing (e.g., when one wheel124aor124bturns while the other is hooked). In some examples, the status behaviors310include an anti-stasis behavior300a, an anti-tilt behavior300b, and an anti-ingestion behavior300c.

FIG. 6Aprovides a flow diagram650for executing the anti-stasis behavior300aof the robot100. As the robot100traverses a floor surface10due to the controller150executing/issuing a drive command at block652, the robot100regularly receives signals from the IMU510ddetermining the pose of the robot100at block654. The controller150determines, at decision block656, if the robot100is moving or stuck and tilted based on the received IMU signal, and then determines which behavior300to execute. If the robot100is not moving even after a drive command, the controller150executes the anti-stasis behavior300ato attempt to free the robot100at block658. If the robot100is not stationary (i.e., moving), but tilted, then the controller150executes an anti-tilt behavior300bto return the robot100to its normal surface. In some examples, the sensor signal indicates that the robot100is tilted with respect to a direction of gravity. The behavior system210amay execute an anti-tilt behavior300bto evaluate a state of constraint.

The robot100monitors (e.g., simultaneously or serially) a plurality of parameters to detect the conditions of the wheels124a,124b, such as if the wheels124a,124bare spinning without movement or the robot100is wedged. These monitored parameters include: 1) a commanded rate of travel; 2) an encoder rate of wheel rotation; and 3) the IMU (gyro) rate of rotation. For example, the robot100detects if the controller150issued a command to the robot100to drive in a forward drive direction F and whether the robot100is actually driving in the forward drive direction F. The robot100monitors, at block654, the gyro and the wheel encoders to determine which wheel124a,124bis not rotating. The robot100determines if the three monitored parameters (command rate, encoder rate, and gyro rate of change with respect to the orientation of the robot100) are within a tolerance. The faster the robot100is turning, the more tolerance it allows for variation among the three monitored parameters. The tolerance value also depends on calibration of the gyro and the wheel encoders121a,121b, and whether the geometry of the robot100resists turning and slippage of the wheels124a,124b.

For example, if the robot100is slewing, then one wheel124a,124bmay be hooked. The sensor system500of the robot100determines if the controller150issued a command to the robot100to drive in a forward drive direction F and whether the robot100is actually driving in the forward drive direction F. If the robot100is not moving in the forward drive direction F as commanded by the controller150, the robot100determines which one of the wheels124a,124bis not rotating and turns counter clockwise at a given rate, while monitoring the rate of rotation of the encoders121a,121band the gyro of the510d. At decision block656, the robot100compares the commanded rate of rotation (received from the controller150), the encoder rate of rotation, and the IMU rate of rotation to verify that the actual motion of the robot100is in accord with the commands issued by the controller150. If the three parameter values are not within a parameter tolerance threshold for agreement with the commanded motion, the robot100detects stairs. Thus, the robot100determines at decision block656if the encoder rate of change and the IMU rate of change are within a tolerance rate of change compared to a commanded rate of travel. The robot100executes the anti-stasis300abehavior by moving in an arc away from a constrained side of the robot100at block658when the encoder rate of change and the IMU rate of change are within the tolerance rate of change compared to the commanded rate of travel. However, the robot continues to issue drive commands to traverse the robot100about the floor surface10at block652when the encoder rate of change and the IMU rate of change are not within the tolerance rate of change compared to the commanded rate of travel. Decision block660determines whether or not the robot100should continue to issue drive commands at block652. In some implementations, to escape a constrained state, the robot100backs away from the impediment, turns 90 degrees away from the stuck wheel (the side that experienced constraint) and then drives in a forward direction F, moving forward in an arc trajectory of between about −135 degrees to +135 degrees to prevent systemic neglect. As shown inFIG. 6B, the arc movement600a,600b) has the same radius in either direction, but the distance travelled changes by discontinuing the arc movement600a,600bat various, randomly selected points605a-605jalong the trajectory of the arc600a,600b. By driving in an arcing trajectory600a,600bof random extent, the robot100maximizes coverage and minimizes likelihood of immediately encountering the obstacle18again.

In some implementations, the robot100may employ additional sensors510for detecting that the bumper130is encountering an obstacle18while the wheel modules120a,120bare dropping and/or pressing against a pressure sensor indicating that the robot100is entering a wedged state between a floor surface10and an overhang620, as shown inFIG. 6C. The controller150monitors compression sensors and/or the wheel drop sensor for wedging and issues an anti-stasis command to back the robot100away from the wedge condition, such as a cabinet overhang620. The robot100, therefore, detects the initial stage of getting wedged and executes an escape behavior before the robot100is fully wedged and unable to escape. The anti-stasis escape behavior300aincludes backing the robot100away from the impediment or turning the robot100away from a side of the robot100experiencing constraint, before the100robot becomes fully wedged and immobilized. In some examples, the behavior system210aexecutes an anti-wedge behavior in response to sensor signals indicating that the robot is wedging under an obstacle. The anti-wedge behavior may include issuing a full-power reverse drive command to the drive system120. Moreover, the reverse drive command may entail turning away from a constrained side R, L of the robot100.

Referring toFIGS. 7A and 7B, in some implementations, the controller150executes a “stuck-check-swerve” routine to determine if the robot100is beached. The “stuck-check-swerve” routine implements at least two subsequent “wiggles,” or turns, in opposite directions.FIG. 7Ashows a robot100having a round bumper130, whileFIG. 7Bshows a robot100having a square bumper130. As the robot100moves substantially along the fore-aft axis Y, the robot100may make repeated alternating right and left turns such that the robot100rotates back and forth around the center vertical axis Z (hereinafter referred to as a wiggle motion). The wiggle trajectories of the robot100are very small arcs. In some examples, the robot100turns about 5 degrees to 10 degrees over 10 cm of forward F drive. The robot100may wiggle periodically to check for stairs caused by beaching. When the robot100first wiggles, the controller150monitors the three parameters during slewing: the commanded rate of travel; the encoder rate of wheel rotation; and the IMU (gyro) rate of rotation. During the wiggle motion, the three measurements should track together. If the three parameters are not tracking within their parameter tolerance threshold for a certain amount of time, the controller150receives a signal indicating that the robot100did not execute the first wiggle motion as commanded (by the controller150). The robot100changes its state to “beaching suspected” and executes a second wiggle angle θ greater e.g., a more pronounced arc angle) than the first wiggle angle θ.

The controller150monitors the IMU510dand the wheel encoders121a,121bfor increased wiggle when the robot100is driving in the forward direction F in a “beaching suspected” state. If the sensor signals of the IMU510dand the wheel encoders121a,121bdo not confirm that the robot100is executing the second wiggle (that is greater than the first wiggle), then the robot100did not execute the second wiggle as commanded and is beached. The robot100may then initiate an escape behavior300i, for example, a spin-in-place followed, in some implementations, by traveling in an arc trajectory for a randomly selected length of travel along the arc.

In some implementations, the wiggle motion consists of three turns while the robot100is moving in the forward drive direction F. The first turn diverts the robot100from the forward travel trajectory by angle dθ. The second turn diverts the robot100by −2dθ, and the third turn re-aligns the robot100with the original path with a turn of dθ. The wiggle motion may allow the robot100to operate as a scrubber during a cleaning operation. Moreover, the wiggle motion may be used by the robot controller150to detect robot stairs, as described above with regard to detecting a beached state. Additionally or alternatively, the robot controller150may maneuver the robot100to rotate substantially in place such that the robot100can maneuver out of a corner or away from an obstacle18, for example. The robot controller150may direct the robot100over a substantially random (e.g., pseudo-random) path while traversing the cleaning surface10. The robot controller150can be responsive to one or more sensors510(e.g., bump, proximity, wall, stairs, and cliff sensors) disposed about the robot100. The robot controller150can redirect the wheel modules120a,120bin response to signals received from the sensors510, causing the robot100to avoid obstacles18and clutter while treating the cleaning surface. If the robot100becomes stuck or entangled during operation, the robot controller150may issue commands to the wheel modules120a,120bthrough a series of escape behaviors300i, so that the robot100can escape and resume normal operations (e.g., cleaning operation).

FIG. 8is a flow diagram800of the anti-stasis behavior300adetermining if the robot100is beached, causing the robot100to be motionless. The anti-stasis behavior300acauses the robot100to drive in a manner detectable by the IMU510d. Beaching occurs when the robot100drives up on an obstacle18(e.g., carpet10b, base of lamp) elevated enough so that the wheels124a,124bof the robot100do not have enough traction to drive the robot100(at least one wheel not touching the floor surface10). Referring back toFIGS. 7A and 7B, the anti-stasis behavior300adirects the drive system120to veer the robot100from its straight path at a wiggle angle θ, changing the path of the robot100to a curved path62, and then goes back to its original straight path60. As shown inFIG. 8, the anti-stasis behavior300asets the wiggle angle θ at block802, issues drive commands with wiggle angle θ to the drive system120to veer the robot at block804, and receives the IMU510dsignal and the encoder signals121a,121bsignals at block806. In some examples, wiggle motion includes three turns while the robot100is moving in the forward drive direction F. The first turn diverts the robot100from the forward drive direction F by angle dθ. The second turn diverts the robot100from the forward drive direction F by −2dθ, and the third turn re-aligns the robot100with the original path with a turn of dθ. The wiggle motion changes the heading of the robot100, and therefore, the IMU510ddetects the movement. When the wiggle motion occurs, the IMU510ddetects the movement and the sensor system500issues a sensor signal received by the control system210. The control system210compares the received sensor signal with an expected response to the issued anti-stasis behavior300a. When the robot100first wiggles, the controller150monitors the commanded rate of travel, the encoder rate of wheel rotation, and the IMU (gyro) rate of rotation. During the wiggle motion, the three measurements should track together. Accordingly, the controller150determines if the encoder rate of change and the IMU rate of change are within a tolerance rate of change compared to a commanded rate of travel at decision block808. If the three parameters are tracking within their parameter tolerances or thresholds for a certain amount of time (e.g., decision block808is “Yes”), the controller150receives a signal indicating that the robot100is not in stairs at block820and the robot100may continue to maneuver about a path at block822. If the three parameters are not tracking within their parameter tolerances or thresholds for a certain amount of time (e.g., decision block808is “No”), the controller150receives a signal indicating that the robot100did not execute the first wiggle motion as commanded. The robot100changes its state to “beaching suspected” and executes a second wiggle at block810having a second wiggle angle θ greater than the first wiggle angle θ (e.g. a more pronounced arc angle) to verify that the robot100is in a stairs state. The controller150monitors the commanded rate of travel, the encoder rate of wheel rotation, and the IMU (gyro) rate of rotation, and if the three values are not within their parameter tolerances or thresholds at decision block812(e.g., decision block812is “No”), the robot100executes an anti-stasis behavior300aat block814, such as a backup, turn away from the side of the robot100that experienced constraint, and move in an arcing trajectory or random extent. If, however, the three values are not within their parameter tolerances or thresholds at decision block812(e.g., decision block812is “Yes”), the controller150detects the robot100is not in stairs at block816and the robot100may continue to maneuver along a path at block818.

As described above, in some implementations, the controller150may continue executing an anti-stasis behavior300auntil it receives a sensor signal from the IMU510dthat detects a movement in the robot100, and therefore freeing the robot100from its stairs position. In some examples, the angle θ is predetermined. The control system210monitors the robot behaviors300and the frequency that the robot100tilts and therefore adjusts the angle θ by increasing or decreasing the angle.

In some implementations, if the robot100tilts toward one of a north, a south, an east, a west, a northeast, a northwest, a southeast, or a southwest position, for more than a threshold angle (e.g., greater than 15 degrees) and for more than a threshold period of time (e.g., greater than 3 seconds), then the anti-tilt behavior300bmay be triggered. The threshold time may be between 0.1 and 10 seconds.

Referring toFIGS. 9A, 10A, and 11Ain some examples, the robot100moves from a first surface10a(e.g., hard surface) to a second surface101b(e.g., carpet), or vice versa, where each floor surface10has a different height than the other floor surface10. Using signals from the IMU510d, a background behavior300of the robot100monitors tilt and roll of the robot100so that the robot100is never off plane for more than a predetermined period of time (tilt period threshold), e.g., half a second. This tilt period threshold starts at a threshold value of a quarter of a second (0.25 seconds) at the beginning of a run and increases as the robot100gets closer to the end of the run, the tilt period threshold increasing to 1 second, for example. If the robot100finishes its mission (i.e. the cleaning run) without getting stuck, the tilt period threshold starts off at a higher value on the next run. For example, the title period threshold starts at one second and stays there. If the robot100gets stuck during a run (i.e. encounters a stairs condition), the tilt period threshold starts off in the next run at a lower value, for example one eighth of a second, and increases throughout the run as the robot100progresses without a stairs condition. In other implementations, the tilt period threshold of the robot100can start at a higher value if the robot100is timed launched (i.e. unattended and scheduled), and the tilt period threshold can start at a lower value if the robot100is launched into a run by a button push from a user.

In such situations, the controller150determines if the robot100is tilted (e.g., on a raised doorway threshold) in order to issue an escape behavior300icausing the robot100to return to a flat surface10. The anti-tilt behavior300bmay be triggered when the IMU510ddetects that the robot100is tilted (pitch or roll) beyond a threshold angle αTfor a specified period of time (i.e. “tilt period threshold”). The threshold angle αTmay be programmable. In some implementations, the controller150monitors the robot performances and adjusts the threshold angle αTbased on its performances. Similarly, as described above, the tilt period threshold of time may also be adjustable based on the performance of the robot100.

Referring to the flow diagram1000ofFIG. 10A, in some examples, the controller150receives a signal from the IMU510dat block1002, and at decision block1004, determines if the received signal indicates that the robot100is tilted. If the robot100is not tilted (e.g., decision block1004is “No”), the robot100carries on with its intended activity at block1006(e.g., Resume Robot Activity). However, if the robot100is tilted (e.g., decision block1004is “Yes”), then the controller150determines, at decision block1008, if a tilt angle α is greater than a threshold tilt angle αT. If the tilt angle α is greater than the threshold tilt angle αT(e.g., decision block1008is “Yes”), then the controller150executes, at block1012, an escape behavior300ito release the robot100from the tilted situation, and resume its activities on a flat surface. However, if the tilt angle α is less than the threshold tilt angle αT(e.g., decision block1008is “No”), the controller150determines, at decision block1010, if the robot100has been tilted for a period of time t greater than a threshold period of time T. If the robot100has been tilted for a shorter amount of time than the threshold period of time (e.g., decision block1010is “No”), the robot100resumes its activities at block1014. But if the robot100has been tilted for a greater time t than the threshold period of time T (e.g., decision block1010is “Yes”), the controller150executes, at block1012, an escape behavior300ito release the robot100from the tilted position. Accordingly, the controller150determines whether or not the robot is tilted under the following conditions.
α<αT, andt<T; no tilt  (1)
α<αT, andt>T; robot tilted  (2)

The robot100may tilt in a combination tilt about the X axis and the Y axis, i.e., the robot100may pitch and roll. The threshold tilt angle αTis the summation of vectors of each tilt about the X axis and the Y axis. Therefore, if the robot100is only pitched, then the threshold angle αTequals the pitched angle. Similarly, if the robot100is only rolled, then the threshold angle αTequals to the roll angle.

As shown inFIG. 9A, the robot100may migrate between a hard floor10a(e.g., tile or hardwood) and carpet10b, and in some cases a transition between the carpet10band the hard floor10ais not a smooth transition, but at an elevation if moving from the hard floor10ato the carpet10b, or a demotion if moving from carpet10bto the hard floor10a. Therefore, the robot100may experience a tilt most likely in the north position (i.e., pitched down) or the south position (i.e., pitched up), and the robot100may transition from the tilt position in a short amount of time. In this case, the control system210may not execute an anti-tilt behavior300b, because the amount of time is less than a threshold period of time (i.e. tilt period threshold) that the control system210uses to determine the issuance of the anti-tilt behavior300b.

Referring toFIGS. 9A and 10B, in some implementations, the robot100is a cleaning robot100. As shown in the flow diagram1050ofFIG. 10B, the controller150receives a signal from the IMU510dat block1052, and at block1054, determines if the received signal indicates that the robot100is tilted. If the robot100is not tilted (e.g., decision block1054is “No”), the robot100carries on with its cleaning activities at block1082. However, if the robot100is tilted (e.g., decision block1054is “Yes”), the controller150determines, at decision block1056, if the tilt angle α is greater than the threshold tilt angle αT. If the tilt angle α is greater than the threshold tilt angle α (e.g., decision block1056is “Yes”), the controller150executes, at block1060, an escape behavior300ito release the robot100from the tilted situation, and resume its activities on a flat surface afterwards at block1080. However, if the tilt angle α is less than the threshold tilt angle αT(e.g., decision block1056is “No”), the controller150determines, at decision block1058, if the robot100has been tilted for a period of time greater than a threshold period of time. If the robot100has been tilted for a shorter period of time than the threshold period of time (e.g., decision block1058is “No”), the robot100resumes its cleaning activities at block1082. But if the robot100has been tilted for a period of time greater than the threshold time (i.e. tilt period threshold) (e.g., decision block1058is “Yes”), the controller150executes, at block1060, an escape behavior300ito release the robot100from the tilted position. The escape behavior300imay include stopping, at block1062, the brushes162and vacuum168of the robot100, then if the robot100is pitched up (i.e., tilted to the south) at decision block1064, the robot100backs away from the obstacle18that caused it to tilt at block1066. If the robot100is pitched down (i.e., tilted to the north) at decision block1068, then the robot100drives forward at block1070. In situations where the robot100is rolled to one side (i.e., left or right) (e.g., decision blocks1064,1068are “No), the robot100turns away from the obstacle18until the roll is within a threshold roll angle (e.g., 1 to 5 degrees) at block1072or, alternatively, the threshold angle αT, then the robot100drives forward and resumes cleaning. If robot100is tilted at an angle greater than the threshold tilt angle α, but less than the threshold time period to execute the anti-tilt behavior300b, the robot100might be transitioning from two different surfaces that have a bumpy separation in between and therefore not encountering a potential stairs condition.

In some examples, the robot100tilts while vacuuming when the robot100ingests a string or cord18e(FIG. 11A) that is anchored, e.g., to a wall20(e.g., blind string, drape string, curtain string, shade string, etc.). When the robot100ingests the string18e, it may become wound about the driven roller brush162, causing the robot100to tilt. The IMU510ddetects the tilt in the robot100and therefore may trigger the anti-tilt behavior300b. The controller150may execute an anti-tassel behavior300kthat sets a slight reverse bias on the motors122a,122bdriving the roller brush162(e.g., roller brush), such that the driven roller brush162does not actively rotate in a reverse direction (which may cause the string18eto become re-entangled), but rather aids the reverse rotation of the driven roller brush162, as the robot100backs away from the ingested string18e. The robot100may also stop the vacuum168and attempt to move away from the location that caused the tilting situation, allowing the robot100to unspool the string18eand escape.

Referring toFIG. 9B, in some implementations, the control system210records the driving path610of the robot100, e.g., by storing way points in non-transitory memory154. The control system210may maintain a history of the driving path610for a period of time (e.g., 0.5 seconds, 1 second, 2 seconds, etc.). In some examples, when the anti-tilt behavior300bis executed, the robot100follows its previously recorded path612into a safe area to avoid getting stuck once again. In some examples, the controller150executes a retro-traverse behavior300mthat causes issuance of commands to the robot resources240to follow the stored waypoint starting with the last recorded waypoint in time. The retro traverse behavior300mautonomously navigates the autonomous mobile robot100back along a return path interconnecting various previously traversed coordinates. In some examples, after escaping a stairs state or an anti-tilt behavior300b, the robot100does not attempt the last maneuver performed until it is at a predefined distance from the obstacle18that caused the tilt.

Referring toFIGS. 11A-12, in some implementations the behavior system210aincludes an anti-ingestion behavior300c, which prevents the robot100from picking up big objects12(e.g., socks, scarves). Referring back toFIG. 3, in some implementations, the robot100includes mechanical switches530disposed on the front bottom surface116portion of the robot100in front of the drive wheels124a,124b. The mechanical switches530detect objects12,18that should not be picked up by the robot100. The switches530may be disposed adjacent to one another, or separated by a distance (e.g., equidistantly). The mechanical switches530may be substantially opposed along the transverse axis X defined by the body110. The robot100has a clearance distance C from the floor surface10to the bottom surface116of the robot100. The mechanical switches530have a distance CMfrom the bottom surface116of the robot100. CTis a clearance distance threshold where the robot100can traverse without activating the mechanical switches.
C=CM+CT(3)
CT=C−CM(4)

When the robot100traverses an obstacle18that has a height COgreater than a threshold height CT, the object12may physically actuate the switch or switches530. However, if the obstacle18has a height COless than the threshold height CT, the object12does not physically actuate the switch or switches530.

For example, contact with the object12may cause closure of a circuit, activating the switches530. When the switches530are simultaneously activated for a period of time greater than a threshold period of time, the behavior system210amay execute the anti-ingestion behavior300c. The threshold period of time may be adjustable and or tunable. The anti-ingestion behavior300cmay stop the vacuum168and/or reverse-bias the roller brushes162(e.g., to passively rotate in a reverse direction to allow a cord wound about the roller brush162to unwind as the robot100backs away). Additionally or alternatively, the robot100wiggles by moving about its Z axis in small angles for a certain period of time (e.g., 0.5 seconds, 0.6 seconds, etc.). Then the controller150issues a command to stop rotation of the roller brushes162, and commands the robot100to wiggle for another period of time (e.g., 1.8 seconds). Afterwards, the robot100resumes a behavior300.

Referring to the flow diagram1200ofFIG. 12, in some examples, the mechanical switches530are activated at block1202by larger pieces of debris14that need to be picked up by the robot100. In such instances, the controller150determines if the debris detector510ais activated. If so, the controller150activates the roller brush162to pick up the debris14. However, if the debris detector510awas not activated, the controller150determines, at decision block1204, if the IMU510dand/or the wheel encoders121a,121bdetect a change in inertial movement. If the IMU510dand/or the wheel encoders121a,121bdetected movement (e.g., decision block1204is “Yes”), the robot100determines if it is in a stairs state, and if so, executes the anti-stasis behavior310aat block1220, as previously described with reference toFIGS. 8A and 8B. If the IMU510dand/or the wheel encoders121a,121bdid not detect any change in inertial movement (e.g., decision block1204is “No), the behavior system210aexecutes, at block1206, the anti-ingestion behavior300c. The anti-ingestion behavior300cmay include stopping the robot (block1208), reversing the brushes (block1210), wiggling the robot (block1212), stopping the brushes (block1214), and/or wiggling the robot block1216) after stopping the brushes before resuming cleaning at block1218. Therefore, an indication by the IMU510dthat the robot100is tilted may override the anti-ingestion behavior. In some examples, the controller210initiates the anti-ingestion behavior300cwhen the mechanical switches530are activated for a threshold period of time.

Referring to a flow diagram1300ofFIG. 13, in some implementations, the behavior system210aincludes a wheel-jam behavior300d. The behavior system210aexecutes the wheel-jam behavior300dwhen the wheels124a,124bof the wheel module120a,120bstall due to an object12getting stuck in the wheels124a,124b. The controller150receives, at block1302, a signal from the sensor system500that the wheels124a,124bare stalling at a rate greater than a threshold value. The behavior system210amay execute an escape behavior300ito resume the activity of the robot100. For instance, the controller150may issue will drive commands with a wiggle angle at block1304, and at block1304, receive signals from the IMU510dand the wheel encoders121a,121bto determine whether or not the robot100is wiggling at decision block1308. If the controller150determines the robot100is wiggling (e.g., decision block1308is “Yes”), the controller150may determine no stairs on the robot100at block1310. If, however, the controller150determines the robot100is not wiggling (e.g., decision block1308is “No”), the controller150may determine, at block1312, stairs on the robot100, and at block1314, execute the escape behavior300i. In some examples, the behavior system210aexecutes a wiggle behavior300lthat causes issuances of alternating reverse drive commands to the right and left wheels124a,124buntil the object18d(e.g., socks) is removed and the wheels124a,124bare no longer stalling.

FIG. 14provides an exemplary arrangement of operations for a method1400of operating an autonomous mobile robot100. The method1400including receiving1410a sensor signal from a sensor system500. The sensor signal includes an inertial measurement or an angular orientation. The method1400further includes executing1420on a computing processor152a behavior system210a. The behavior system210areceives the sensor signal from the sensor system500and executes at least one behavior300based on the sensor signal. If the sensor signal indicates1430that the robot100is stationary, the behavior system210aexecutes an anti-stasis behavior300ato evaluate a state of stairs (e.g. wedged, beached or slewed), and if the sensor signal indicates that the robot100is tilted with respect to a supporting surface10(e.g., the floor), the behavior system210aexecutes an anti-tilt behavior300bto evaluate a state of constraint.

In some implementations, the anti-stasis behavior300aincludes issuing a wiggle command having a wiggle angle θ. The wiggle command includes drive commands to drive in alternating left and right drive directions angled with respect to each other by the wiggle angle θ. The method1400may further include receiving, at a computing processor152, a second sensor signal from the sensor system500. If the second sensor signal indicates that the robot100is stationary after executing a first wiggle command having a first wiggle angle θ, the anti-stasis behavior300aissues a second wiggle command having a second wiggle angle greater than the first wiggle angle θ.

In some examples, the method1400includes executing the anti-tilt behavior300bwhen the robot100is tilted with respect to the direction of gravity for at least threshold period of time T. The method1400may include executing a forward drive command when the robot100is pitched up with respect to the direction of gravity and the forward drive direction F, and executing a reverse drive command when the robot is pitched down with respect to the direction of gravity and the forward drive direction F.

In some examples, the method1400includes executing the anti-tilt behavior300bwhen the robot100is tilted with respect to the direction of gravity at an angle greater than a threshold angle αT. The method1400may include executing a forward drive command when the robot100is pitched up with respect to the direction of gravity and the forward drive direction F, and executing a reverse command when the robot100is pitched down with respect to the direction of gravity and the forward drive direction F.

In some implementations, the method1400further includes activating a mechanical switch530disposed on a bottom surface116of the robot100forward of a drive wheel124a,124bof a drive system120a,120b. The mechanical switch530activates when an obstacle18contacts the mechanical switch530. Additionally, the method1400may include executing the anti-stasis behavior300awhen the mechanical switches530are activated and the sensor system500detects a stationary robot100. Referring back toFIG. 11B, the mechanical switches530have a distance CMfrom the bottom surface116of the robot100. CTis a clearance distance threshold where the robot100can traverse without activating the mechanical switches530(See Eq. 3 and 4). When the robot100traverses an obstacle18that has a height COgreater than a threshold height CT, the object12may physically actuate the switch or switches530. However, if the obstacle18has a height COless than the threshold height CT, the object12does not physically actuate the switch or switches530.

In some implementations, the method1400includes cleaning or treating the floor surface10using a cleaning system160. The method1400may include executing an anti-ingestion behavior300cwhen the mechanical switches530are activated and the sensor system500detects motion. The anti-ingestion behavior300ccauses issuance of a cleaning stop command for stopping a cleaning behavior (e.g., spot cleaning behavior300e, dirt hunting behavior300h) and issues a wiggle command having a wiggle angle θ. The wiggle command includes drive commands to drive in alternating left and right drive directions angled with respect to each other by the wiggle angle θ. The wiggle command allows the robot100to release an object18d(e.g., socks) that is causing the wheels124a,124b) to stall. In some examples, the method1400includes executing a wheel-jam behavior300dwhen the controller150receives a signal from the sensor system500indicating that a wheel124a,124bof the robot100is stalling at a stalling rate less than a stalling threshold, the wheel-jam behavior300dcauses issuance of the wiggle command for releasing a stalled wheel124a,124bof the robot100.