After ensuring a strong enough structure and sufficient current to power the motors, efforts were dedicated to refining the walk cycle of a single leg. Until this point, legs moved along predefined coordinates defined manually, making the movements quite clucky. I decided to avoid inverse kinematics calculations to reduce processing time and resources: this should leave more available memory to the RPi4 for Computer Vision tasks. So, I preferred using forward kinematics, finding a relation between the angles and end effector of the legs. I decided to make the end effector move along a precisely defined curve. This curve comprises two interconnected segments: the upper curve (a), similar (but not) a parabola, and its counterpart below (b), completing a seamless loop.
One of the standout features of this approach lies in its adaptability. The parameters of the functions governing the two curves can be fine-tuned, allowing for the creation of diverse step shapes. Whether it's a stable, measured gait or a more dynamic stride, adjusting these parameters provides versatile options. Furthermore, the execution speed of each step is a customizable element, adding another layer of control to the robot's locomotion.
Watch: Walk cycle testing and pushups
Between the 6th and the 16th of November, I worked on the control of the legs. The first step was to ensure motors were actually powerful enough to lift the entire body of the rover. Motor strength, however, is not the only parameter affecting this test's success or failure: the length of the leg joints also plays an important role. If the femur or tibia is longer than the other, it can affect the torque required at the joint. Generally, a longer lever arm decreases the torque at the end of the joint. Therefore, if the femur is longer, it may require more torque to move the leg than in a situation where the femur and tibia are more balanced. A combination of the design I was initially using, plus a bottleneck caused by thin cables that were limiting the current draw, was not allowing the robot to lift itself. I use four motors that run between 5 -7 Volts and 1 - 2 Amps powered by a 20000 mAh power bank with an output current of 3 Amps. Nominally, this should not be enough to power four motors. However, good management of the current draw obtained through software allows motors to run anyway. Some suggestions for testing such a configuration are using suitable wires (possibly not jumper wires for connecting the motors to the battery), trying several iterations to find the best leg joint design, recording videos, and taking photos and notes about what you are doing. This helps keep track of your progress, as well as what is not working.
The Imager, that is to say, the top part (or head) of the Mast Tower is the key that justifies the existence of the tower itself: elevating the main rover camera, giving it rotation freedom in all directions. At its current state, Continuity's Imager is equipped with a 1080p camera and a couple of 10120 TOF sensors. A TOF (Time of Flight) is a sensor commonly used on drones due to its extremely low weight. It allows the rover to estimate in real-time the distance between the sensor and an object counting the time light takes to go back and forth from it. Since its precision is not always ensured, I installed a couple of them for redundancy and to get an average of their measurements, obtaining a more reliable value. There is still plenty of space inside the Imager, but this is fine because this will not be its final look, and many parts still need to be improved: for instance, the height of the Mast Tower, which risks being too high compared to the rover centre of mass.
Five days after assembling the first rough version of the rover body, I came up with a way to reduce the Mast Tower weight and improve, at the same time, its precision. The 3D-printed gearbox has had several backlash problems since the beginning. Additionally, it was heavy and unnecessarily complicated. As discussed, the giant steel bearing used as part of the azimuth rotation mechanism represented a severe issue due to its weight. I decided to try a completely different approach, using a 270-degree servo motor instead. This limits the azimuth rotation, but the precision is significantly increased since the servo uses a potentiometer to rotate to an always-known position. Moreover, there's no need to point the camera towards the side module, located on the LHS of the Mast Tower, since there's nothing to see there.
The rover body is fundamentally made of five parts: the upper and lower deck, the legs assembly, the mast tower and a side module. At the current state of things, the structure is very unbalanced due to the mast tower azimuth motor bearing. However, printing three out of five parts helped me better understand the rover assembly, all available spaces for electronic components, where to pass the cables to power the motors, etc. That said, the mast tower base must be lightened.
The motors I used for the hip joints are a serious weak point of the design since leave a lot of space between pieces and increase the overall weight of the robot. Surely, they are useful in increasing mobility, and adding a degree of freedom, but this might not be a sufficient reason to keep them in the final design.
After a week of testing, the mast tower v.1 was ready! I tested two versions of the head (with a slight variation in weight - the final version is the white one) and verified the precision of the 3D-printed gearbox: despite a backlash of < 0.5 cm, it performs smoothly and is visually precise. This is something that must be improved in v.2, possibly reducing the backlash to < 0.2 cm or lower. I also compared the mast tower of Continuity with Mimas' one: the difference is really impressive, but despite being shorter, Continuity's mast tower is much more capable! It will be equipped with a higher resolution camera (compared to Mimas' camera), laser distance sensors and other instruments!
The mast tower is a crucial element of Continuity: it is a tower-shaped component that elevates key camera systems and sensors, giving the rover a human-scale perspective on its environment. Because I decided to use only servo motors, where possible, I had to find a way to increase the rotation range of the motor. The servos I'm using are 25 Kg full-metal motors with a rotation range of 180°, meaning that they cannot be used directly for the azimuth rotation (along the z-axis). I decided to 3D print a 1:2 (2x) multiplier gearbox. You can see it in the LHS photo below. The design is probably not the best because the gears are very thick and not space-saving. I still decided to give them a chance, so I designed a holder for a bearing and an enclosure to keep everything tight and reduce vibrations. Now, when I rotate the servo by 180°, I get a 360° rotation. There is still an evident issue: 3D-printed gears are not 100% accurate, and backlash is not something I can ignore.
It might sound obvious, but keeping the design lightweight and simple, without unnecessary mass additions and frills can significantly reduce the production time and limit failures. Four months after the design of the first concept, I realised several parts were unnecessary, making the overall structure bulky and heavy. The figure below shows how the servo motor holder for one of the legs has been simplified, reducing the mass as much as possible, but still keeping it strong. 33g
On the LHS of the photo, the black piece shows a vertical part with five holes designed to hold a metal flange. The old design was 33g heavy, the new design shows an improvement of 51.5%, weighting just 16g.
Until the day of this post writing, the front and rear upper linkages of the leg were connected to the motors using aluminium flanges. Generally speaking, this component is great but performs poorly if an overhung stress is applied to the motor shaft, causing vibrations that tend to increase after intense testing of the leg. To (hopefully) fix the problem, I changed the design, substituting the flange with an aluminium bracket that can be secured to the motor shaft using small set screws. Additionally, this design increases the contact area between metal and plastic, improving the force distribution.
This configuration has been tested by running the same tests performed with the previous design. Results show that not only the vibrations are reduced (as well as the chance that screws get unscrewed due to vibrations), but also improve the stability of the leg when it was tested sideways and upside down.
Watch: Single Leg Prototype - Test 3 (Walk cycle, ground contact interaction)
Over the summer I worked on a simple walk cycle, ensuring the smoothness and precision of the movements. I installed an accelerometer that allows me to simulate a change in ground inclination: the algorithm changes the leg walking cycle, adapting it to the simulated terrain slope. The limit switch discussed in the previous post works simultaneously, raising the leg when an obstacle is encountered. This behaviour would not make sense in a real-world environment, but it is a good starting point for future more complex leg-ground contact interactions.