An autonomous robot can perceive its environment, make decisions based on what it perceives and/or has been programmed to recognize and then actuate a movement within that environment. Enabling autonomous movement for Misty was a given based on our belief that many of the most useful personal robot skills would be those in which she is able to move. This is especially true of those skills you’ll build where Misty may not have human oversight at all times; she must be able to start, stop, and maneuver around objects when she is performing tasks such as monitoring a room or equipment.

While it was a given to enable autonomous movement for Misty, this “easy” decision led to harder questions about what systems would best enable this movement. We considered Misty’s size and high center of gravity, the types of environments she will roam, and her competing needs of high-grip (for climbing over objects) and low-grip (for turning on high surfaces). What we landed on is a track drive robot that is able to navigate over a variety of surfaces.

In this post, we’ll cover the systems (i.e. the hardware, firmware, and software) that enable Misty to autonomously move plus we’ll cover where she can go and how fast she can get around.

It takes a village to make Misty go

In order for Misty to move as gracefully as she (usually) does, three systems must work together: hardware, firmware, and software. We use standard brushed DC motors which are driven through motor drivers called H-bridges. The H-bridges are controlled by one of the microcontrollers in her base; on that microcontroller, we use a variant of a Proportional, Integral, Derivative (PID) controller, which is a standard motor control algorithm. Our PID variant is called a PPI or “cascade controller”; it allows us to have control over both the velocity and the position of the robot’s drive.

The motor is connected to a gearbox to give us the appropriate amount of torque, and the gearbox is connected to the main drive wheel that pulls the track around. Autonomous driving only works if the microcontroller understands what is going on. This is called “feedback”. We have two types of sensors that provide the necessary feedback: Encoders and IMUs.

Encoders attach directly to the shaft of the motor, and as they rotate, they give us electrical “ticks” that we can count with the microcontroller. This gives us both a distance (the number of ticks) and the velocity (the time between ticks). Based on that information, we can control how far the robot moves as well as how fast it moves. When you’re coding Misty’s locomotion in her skills, the driving commands that you can call through her JavaScript and REST APIs abstract the data from Misty’s encoders to provide a simplified interface for moving Misty from point A to point B at the desired speed. You can also register for DriveEncoder events, which stream encoder data directly to your skills and robot applications.

Encoders work really well for linear driving, but there are some sticky points to using them for rotational movements by themselves. This is where Misty’s Inertial Measurement Unit (IMU) sensor comes in.

We recently mentioned Misty’s IMU sensor but we’ll take a closer look now. This sensor gives us very accurate information about Misty’s heading (ie direction) as well as how fast she is rotating.

Potential problems relative to autonomous movement happen during pivot turns when she is spinning in place, but if she has more linear velocity and less sharp turns, she tends to do really well on all surfaces. Some of the surfaces we’ve tested Misty on include concrete, tile, wood flooring, linoleum, glass, and carpet. She performs well on concrete, tile, and linoleum. She can get a bit bogged down in thicker carpets (although she still does well) and some of the wood floorings get a little grippy so she can have issues there, too. If this happens, you may observe Misty trying to “hop”. To avoid this, we suggest having Misty make turns with larger radii and, if she does “hop”, adding forward motion which will result in less of the sideways rubbing that’s causing the “hopping”.

Just as with Misty’s encoders, we use the IMU to be able to control the heading to which she is turning, as well as to control the velocity of her turn. In addition, we watch the IMU in linear motions to ensure we track on a straight line. With any driving mechanism, it is possible for the mechanism (wheel or track) to slip on the surface it’s on. If only one side slips, then the robot can get off course. The IMU allows us to detect that we are off-course and make the necessary correction.

Cool rider

Misty’s treads are considered part of her hardware but there’s so much to share that we’re giving them their own section. The treads are made of a material called Nitrile Rubber (NBR). The hardness of Misty’s track NBR has a significant effect on the resistance in the drivetrain and surface friction, both of which contribute to how well (and sometimes, not well) Misty drives. Ultimately, we went with an NBR hardness level of 75 Shore A (75A). At this level, Misty has the widest range of surfaces on which she can drive without getting stuck, yet still be able to grip well enough so she doesn’t slip.

Just like the tires on your car or bike, Misty’s treads can wear with time and can be damaged through use. This “damage” has less to do with the surfaces she’s going over – she’ll be fine if you stick to those we listed above – and more to do with the fact that the shape of each little stretch of track changes as it moves through the robot, going from a sharp radius to a flatter radius and back. Like a rubber band being stretched, this constant bending over time can slowly break down the tread. However, it’s not something you need to be worried about within even a couple of years of use in most indoor climates.

Fortunately, if you do need to replace them, you can easily do so by unscrewing four screws, removing the sidewall, pulling the track off the rollers, and putting a new one on. You will be able to purchase new tracks on our website as a Field Replaceable Unit (FRU). We don’t recommend that you 3D-print your own treads unless it’s for a specific application (and in which case we’d ask that you reach out to us to help you troubleshoot).

Misty: the tortoise or the hare?

Depending on the skill, you can select how fast or slowly Misty needs to move. Misty’s speed parameters are set at 5 mm/second to 1 m/second linear velocity (with a top hazard speed of 450mm/second) and a rotational velocity of 100 degrees/second. We have found these settings to be the best balance of performance and stability.

Within those limits, you control the speed to be in line with the skill you are running. For example, in the small business assistant use case, Misty needed to roam slowly enough to be able to capture image data from the distillery equipment she was monitoring. Or, when you use Misty to map a room – which uses Misty’s Occipital Core Processor – you’ll want to set her at a slower speed so she has time to reach every nook and cranny of the space. However, if you need Misty to greet a guest and show them to your office, you’ll want her to keep up! Her fastest speed is the average human speed of walking so this should be no problem.

If she has a floor, Misty will roam it

From delivering a drink to monitoring equipment to being a great companion for your ball-loving pup, the ability to move effectively is integral to many of the skills you’ll build for Misty. Now that you know how she moves, buckle up for the next post where we’ll cover how Misty avoids obstacles and other hazards that may come into her path.

And last but certainly not least: A shout-out to Steven Kibbler, Misty Robotics’ Firmware Engineer, who lent us his time and knowledge for this post and is the master of movement!

Have ideas or questions about Misty’s movement in the meantime? We’re all ears – join the Misty Community and let us know!