"Assisted Teleop"

A project log for "Tenacity": Yet-Another-Sawppy-Project

Inspired by Roger and others, I'm making a SAWPPY-Alike rover, adding my own tweaks and mods.

steveSteve 07/02/2021 at 18:050 Comments

I've been lucky enough to be able to spend some time with the Boston Dynamics "Spot" quadruped robot and one thing I noticed right away was that it does obstacle avoidance even in teleop mode. On many robot platforms, "teleop mode" is a kind of dumb joystick control where the motors are being driven directly by joystick input. If the driver isn't paying attention or doesn't have sufficient skill, it's entirely possible to drive it into a wall or off the top of the stairs.  Not "Spot". It deftly weaves and jogs around posts and ducts in the middle of the room, stops in front of doors and halts at the edge of stairs.

This seemed like pretty low-hanging fruit to add to Tenacity, so I made a weekend project out of making some sensor mounts, installing them and writing up some code for an Arduino to talk to them and publish the data as a ROS Range message. There are two HC-SR04 sonars, left and right, on the front wheel pods and a V53L0X in the center for a "cliff sensor".  

I CAD-ed up a mount to fit on the brackets of the steering columns. They conform to the part and clip into the holes on either side. The part is mirrored for a left and right mount. I wanted something I could mount sonars or even a small camera like an ESP32-CAM to, so I left the attachment space purposefully flat and blank with the idea that they'd get mounted via double-sided tape or velcro.

A Python script subscribes to the ROS /ultrasonic topic(s)  and publishes turn decisions to /cmd_vel to do the obstacle avoidance logic. 
Here's a demo. I'm driving the rover forward here, deliberately aiming it at walls, shelves and other random obstacles. It's really doing quite well I think. I don't think I could cut some of these turns quite this close even if I tried. I'd love to hear your thoughts and comments.