Watch: Single Leg Prototype - Test 2 (Smooth control, ground contact reaction)
As discussed in the previous post, smoothness is something I want to work on: it helps reduce vibrations that a clunky mechanical movement would otherwise cause. In addition, it is more visually appealing.
I used the pigpio library, and I controlled the motors smoothly using a function that I called servo_smooth(motor, angle, speed)
. The distance between the current servo angle and the target angle is subdivided into small steps that act as a time delay: by changing this value, it is possible to control the movement speed. Additionally, using the function servo_sync(motor1, angle1, speed1, motor2, angle2, speed2)
in multithreading, two threads run the servos (one each), allowing me to set a certain angle and the speed I want the motor to run, moving synchronously and smoothly. Finally, I implemented a simple ground contact check by snap-fitting a limit switch in the lower plastic linkage. The program I was running in the video lifts the leg as much as possible, reacting when a force is applied to the foot. This is just an "ON/OFF" configuration, which is quite not the best solution for sensing the ground correctly.
Watch: Single Leg Prototype - Test 1 (Synchronous movement)
I 3D printed and tested the first leg prototype: the structure is relatively strong, despite the thin thickness of the plastic joints. I used PVC tubes for the links high torque full-metal servo motors to power the leg. The control is achieved using basing sequential coding in forward kinematics.
I used the library pigpio to move the motors, without caring about the movement smoothness. Instead, I tried to define some points the leg had to reach to achieve a step cycle.
From the pigpio library, using pi.set_servo_pulsewidth(pin, angle)
, it is possible to control the servos easily. N.B.: The motors react immediately to the GPIO trigger, meaning that multiple commands can be sequenced, obtaining a parallel/simultaneous movement of the servos. However, this does not allow us to change their speed. This can be achieved by adding a delay between each leg position, even if the result is a bit clunky and definitely not smooth.
Background: The designs of already-existing quadruped robots are all quite similar, either similar to Boston Dynamics' Spot, MIT's Cheetah, Unitree Robotics' Laikago or Go1, or to the ANYbotics' ANYmal. The first group share a crucial aspect of the leg design: all leg motors are located in the shoulder joint, reducing the force that would be otherwise required if motors were located one in the shoulder and one in the elbow joint. In this design, the elbow is controlled using an extension linkage. ANYmal (and other similar designs), however, have one motor in the shoulder and one in the elbow, clearly visible due to a bulky round box on each leg of the robot. The only quadruped robot I could find that does not conform to these two design types is ETH's SpaceBok. Additionally, this is the only quadruped robot specifically designed for space exploration. Its leg design is fascinating since it is based on four parallel linkages controlled by two motors located on the shoulder joint. It strongly relies on energy conservation to jump using the back drive of brushless motors, simulating a spring.
Comment: By observing all of these designs, it is clear they cannot be considered "rovers": the majority of the robot body is occupied by the motors and the battery, and there's very little space available for cargo. Indeed, they can carry much weight, but it has to be stored on top of the robot, increasing the overall height of the centre of mass. Cameras are either located in front of the robot or on each side of its body, making them not ideal for observing the surroundings: they are suitable for finding obstacles but utterly useless for collecting imaging data of the surroundings. Expensive and custom motors are used to control the legs; brushless motors are usually relatively weak and require using a gearbox. This means increasing the overall robot weight and space occupied by the actuators inside the robot body.
I proposed a completely different approach that merges the valid aspects of existing designs with the peculiar characteristics of NASA/JPL's Mars Rovers. A mast tower is located on the top-front part of the body, raising the primary camera at a higher point, allowing it to rotate on the vertical axis (azimuth) and pitch rotation (elevation). Apart from other technical design choices discussed in the spacecraft section of this blog, it is visible that much space is available on the rover body: cargo is an essential part of Continuity and can be stored on the robot's upper deck or the side module located on the side of the mast tower. I decided to use high-torque full-metal servo motors instead of brushless motors because they guarantee an extremely high torque (about 25 Kg on the 1st cm of radius from the shaft) relative to their small scale and have incredibly high precision. Interestingly, Martin Marietta walking rover was designed with some of these elements, too: the mast tower and an upper deck are also present in that design!
Background: Nowadays, we are quite used to seeing walking robots. Both companies and independent engineers tried to build their own at various levels of complexity. Some of the most well-known are Boston Dynamics’ Spot, MIT’s Cheetah, Unitree Robotics’ Laikago, ANYbotics’ ANYmal, etc. They are all designed for on-Earth applications. Instead, the list of existing walking robots for Space exploration is limited to ETH’s SpaceBok, JPL’s LEMUR, FZI’s Lauron V, and a few others. Most of these robots are hexapods or other ways inspired by arthropods' shapes. Interestingly, before choosing wheeled rovers as a valid option for exploring Mars, it looks like NASA was interested in walking robots as well. In 1989, under a contract with NASA's Jet Propulsion Laboratory, Martin Marietta developed several alternative rover concepts for unmanned exploration of the planet Mars. One of those concepts, the 'Walking Beam', is the subject of this paper, also referred to as Martin Marietta beam walker rover. Unfortunately, only a few pieces of information are available about it online. According to the design, the walking rover used two platforms that alternately translate one with respect to the other, to propel it. There were seven legs, all of which actuate in the vertical direction only. The legs were grouped into two sets: a quadruped inner base supporting the lower payload assembly, and a tripod outer base supporting the beam assembly. In addition to the seven legs, there was a translation system for locomotion and a rotation system for steering. In total, there were nine actuators, one for each of the degrees of freedom.
Comment: Despite the clear absence of flexibility and natural dynamics, the Martin Marietta beam walker rover shows some interesting features. The body is suspended from the ground thanks to some legs that alternate their position keeping the robot in a mechanically stable position at each movement. A set of cameras (and presumably of sensors) is located on a tower much higher than the robot body. I found these images on an old JPL archive about the Pathfinder mission, together with a collection of pictures of the Sojourner rover. From this, I can deduce that NASA is (or at least, was) interested in walking robots for exploring Mars. What happened then? Maybe they realised wheels are much more manageable and ideal in terms of power consumption (a critical aspect of planetary exploration). So, there must be a great reason for using legs instead of wheels, a reason good enough to close an eye on its low efficiency in terms of energy.