I just wanted to share some details on a 4 Wheel Steering Robot I have been building which uses a Pimoroni Yukon for its wheel and joint controls.
The Yukon board has 6 modules attached
- 4xBig Motor + encoders for the wheels
- 1xDigital servo to control 4 LX-16A digital servos for the steering joints
- 1xWifi to allow me to introspect and tweek the configuration
It is also working as a i2c Controller to drive a small LCD screen and as an i2c peripheral to communicate with a Raspberry Pi 5 that runs the ROS2 stack.
I would like to thank some of the folks on the forum - particularly @ZodiusInfuser for their support in getting this project to happen - including creating a new firmware to enable the Yukon to work as an i2c peripheral allowing me to setup the comms between the Pi and the Yukon without having use a module slot on the Yukon.
A short video of the robot in action is here. And here is picture with a glimpse of the Yukon board on the bottom layer.
1 Like
That’s so awesome! Love seeing that steering in action!
I guess I should get a release made, since that I2C peripheral support is working reliably for you. Have you got the code linked somewhere? I’m curious what the setup on the Yukon side was for that. Sounds like it would benefit from a few examples added to the repo. Perhaps your WiFi too?
Also, as your other post mentioned, it would be great to get whatever AX-12 servo support you’ve got added to Yukon.
I haven’t added this to a public Github repo yet, but very happy to. The only challenge I had with the i2c peripheral side was what was allowed inside the interrupt handler as there are some reasonable restrictions on what an interrupt handler is allowed to do - so I have a shared memory block that the main processing loop and interrupt handler share.
This means that the interrupt handler is basically just returning the last values that have been read by the main processing loop, i.e. I regularly get the encoder positions in the main processing loop and write them to a shared memory block that the i2c peripheral simple responds from.
There are probably better ways of doing this - I might need to experiment more. E.g. using both of the pico cores.