Mowgli icon indicating copy to clipboard operation
Mowgli copied to clipboard

YardForce GForce Mainboard RE

Mowgli

About

This repo tracks my progress in reverse engineering the Yardforce GForce mainbord as used in the Yardforce 500 (and others) Mower Robots.

Mowgli is compatible with OpenMower but without having to use that projects mainboard, instead recycling as much hardware as possible from the original GForce mainboard. There should are no irreversible modifications to the GForce board required.

Looking for MowgliRover ?

MowgliRover is the part of this project that needs to be deployed on the Raspi.

see here

Looking for MowgliBase ?

MowgliBase is the repo that contains the IMU Magnetometer calibration tooling. It is meant to be deployed onto a Linux ROS Noetic installation.

see here

Updates

see Updates

Safety

The custom firmware has no protections - no tilt sensing, no stop buttons will work. If you stick your finger in the wrong place, you will lose it.

  • Remove the razor blades
  • Dont be stupid
  • Dont blame me for your lost finger

Whats done ?

  • Basic overview of the mainboard, Datasheets for ICs
  • Motor Drivers for both Drive Motors and Blade Motor can be controlled
  • Mainboard (GForce) Firmware dump and restore via an ST Link or other (e.g. JLink Segger) tools
  • Panel (GForce) Firmware dump and restore via an ST Link or other (e.g. JLink Segger) tools
  • Demo Python code to control the Mower via a Joystick (needs "test_code" STM32 code flashed)
  • ROS Serial node via CDC USB Port with full hardware support
  • Serial debugging on the unused (red) J18 header
  • Software I2C on the unusued (red) J18 header - used for external IMU
  • Raspi, IMU, GPS Mounting Options
  • onboard Buzzer
  • onboard IMU (accelerometer) for tilt protection
  • Safety switches (Hall Sensors) for STOP button
  • Rain Sensor
  • Mowgli is now compatible with the OpenMower software stack thanks to the [MowgliRover] Proxy software (https://github.com/cloudn1ne/MowgliRover)

TODO

  • Move all UART functions use DMA as HAL_IT is a seriously broken API
  • Publish Blade Motor state
  • LEDs should be controllable via a Topic or Service

rosserial node

This is the software that needs to be compiled and flashed onto the STM32 on the Geforce Mainboard

  • See here how to use the ROS serial node

Published Topics

  • /mowgli/status - Mowgli Status messages, simliar to Openmowers
  • /mowgli/odom - Mowgli ODOM (calculated onboard from wheel ticks)
  • /imu/data_raw - Mowgli IMU (the I2C attached one)
  • /imu_onboard/data_raw - Mowlgi (on YF Mainboard) IMU accelerometer only
  • /imu/mag_calibration - Mowgli IMU (the I2C attached on) - raw magnetometer data (uncalibrated)
  • /buttonstates - on supported panels

in case a supported I2C IMU is connected to J18

Currently only the Pololu IMU 10v5 is supported, but any I2C or SPI IMU should work.

Services

  • /mowgli/MowerControlSrv - enabled/disable blade
  • /mowgli/GetCfg - read SPI flash config var
  • /mowgli/SetCfg - write SPI flash config var
  • /mowgli/Reboot - reboot Mowgli
  • /mowgli/EnableTF - enable odom_dr -> base_link_dr transform (for /mowgli/odom) - used for Dead Reckoning - default ON
  • /mowgli/SetLed - enable LED (1-17), if the MSB is set (128), the bot will chirp too
  • /mowgli/ClrLed - disabled LED (1-17), if the MSB is set (128), the bot will chirp too

Subscribers

  • /cmd_vel - geometry_msgs::Twist (compatible with teleop twist messages, so you can drive the bot)

Serial Debugging

Serial Debug for ros_usbnode