Rowing Robot
Can a robot row? most cannot and most robot sink, too.
Can we teach a robot to row? yes, very likely, lets find out:
Why teach a robot to row? it’s fun, and we might learn a thing or two. About building robots for me personal, but perhaps also about rowing itself.
Should a robot row? no, but it’s fun, at the moment of writing this.
This project is, at the moment, a project for me to explore new subjects, software or other various concepts. So some components might feel like overkill for the above goal, there here because I thought it was fun.
Getting started:
To have a robot rowing in a boat we need to split to challenge in multiple parts.
We can make the split in hardware and software.
The hardware we split into the boat and to robot. The end goal is to build a robot to row in a real boat. Since very high goal, we first start small.
So at some point we need a miniature boat.
Project Components
Robotics is a mix of hardware, electronics and software [citation needed]. With all these three components I want to take a more or less software approach. This means I have simulation and testing for the hardware and electronic designs, just like for the software components.
Hardware Components
Overview of involved hardware components:
The robot
Collections of parts, motors, electronics and power source.
- FreeCAD to design the robot
- Steppenmotor or torque controlled motors
- PCB design with KiCAD
- Rechargeable battery from E-bike or power drill
Design
Although FreeCAD seem not to be the most feature rich editor, with plug-ins is so far enough for a simple design.
The intent is to model to following components:
- The legs
- The hip
- The body
- The shoulders
- The arms
- The hands
The boat
Assembly of a hull, riggers, ors, etc.
- Design in FreeCAD
- OpenFOAM can be used to simulator the behaviour of the board and blades in the water.
Test rig
Of course, we need to test.
- Design in FreeCAD
- build with 3D printer
Software components
Overview of involved software components
Robot brain
Controller for the robot, like running on some embedded board.
- grblHAL (like) embedded software on real time board.
- Raspbarry pi or alike for control loop
Based in First Pricibles
To derive a motion based on first principles. This can be done, and might be a valid solution. A comparison could be made here.
- Knowing the mass of the boat
- Knowing the mass of the rower
- Knowing the geometry of the rower
- Knowing the geometry of the boat
- Knowing the torque on each joint
The force of the blade on the water can be computed.
A rough estimate can be made about how much force the blade can excert on the water. It’s possible to revert the equestion and a optimilisation can be done on the torques of each joint for the length of the stroke. Till a optimal has been found.
Machine Learning
The last step above might be a very difficult one. Reversing the equations and optimize the inputs.
In computer science another method exist to work with these kind of challenges. The field of Machine Learning and then specific the one for Machine Learning.
Hardware testing (simulation, digital twin)
(unit) test the hardware, coalition detection and FEM for rigidity testing.
Electronic testing (simulation)
(unit) testing the electronics. Pulse propagation, etc
Use of KiCAD and QEMU.
Electronics
Overview of electronics
CPU
Hardware board selections, STM series?
PCB
Controller board.
Electric plan
Assembly of all PCBs, motors, sensors and wires.
Phases for Reinforced Learning
Simple mechanics
- Environment with mechanics to convert join angles to position of blade.
- Reward based on distance covered.
- Catching water is simply moving the blade underwater.
Kinematics
- Environment has notion of speed and total mass of boat+rower.
- Angle joint and torque per joint, results in force
- Penalty for using power.
- Total amount of power available.
- Reward for completing distance with max 2k (or 500 meter)
- Reward for high speed.
Advanced kinematics
- Mass split into individual parts with own velocity.
- Boat
- Lower leg
- Upper leg
- Body+head
- Upper arm
- Lower arm
Water interaction
- Blade gets a physical dimension, surface underwater affects efficiency
Note: possible side project for openFOAM. Blade+water interaction.
Multiple agents (side view)
- assuming sculling boats
- 2 individual agents in a boat (double)
- 4 individual agents in a boat (quad)
- competing boats for evolution
Multiple agents (top view)
- assuming sweeping boats
- 2 individual agent in a boat (2-)
- 4 individual agent in a boat (4-)
- 8 individual agent in a boat (8+), heavier boat due to cox
- add heading calculation, possible steering
- variation: agent learn from each other
Simple mechanics in 3D
- Switch to 3D environment
- Mechanics left and right independent (mostly)
- Add joints for shoulders
- Add joints for hip
- heading calculation
Kinematics in 3D
- same as Kinematics as before
Advanced kinematics in 3D
- body parts get volume
- body parts can collide
Water interaction in 3D
- All configurable parameters for rowing in model
- Oar length, inter/outer
- rowlock placement and angles
- Placement of rower in respect to rowlock
Multiple agents in 3D
- Single sculls competing
- Doubles, pair
- Quad, coxless four
- Eight.
The Workflow
Here is a description on how all component described above are combined and verified together.
flowchart LR
Geo(Geometry) -->|model for| B(RL agent)
B -->|computes movement| C(Reward)
C -->|input| B
B -->|model| D(controller)
D -->|controls| E(Robot)
E -->|specifies| Geo
Geo -->|specifies| Physics(Physisc Sim)
Future plans, and etc
Draft notes, possible chapters
- 1:10 scale.
- FreeCAD
- KiCAD
- Digital Twin
- OpenFOAM
- Blender Renders
- MachineLearning (Reinforced Learning)