Mihirungs Ri3D 2025

Hi everyone,

We’re the Mihirungs - a new Ri3D team from Australia. Born from mentors from 4729 - EMU, 5876 - ARTEMIS, 10350 - Canberra CIPHER, and various volunteers down under, we’re excited for the new REEFSCAPE season!

Stay tuned for posts from our members below as we work through the next 3 days. Please feel free to drop any thoughts or questions in the thread and we’ll try our best to monitor and respond :slight_smile:

Thanks to 4729 EMU for being our gracious hosts! Stay tuned for livestream links over the next few days!

5 Likes

Hi all,

The Mihirungs, myself included, have done some scoring modelling for the 2025 REEFSCAPE season. So far, we’ve done some mathematical modelling based on the following assumptions:

  • We are not scoring in the top-most layer of the REEF.
    • With coopertition on offer requiring only the lower 3 layers for a potential RP, and with the extra effort required to score at both a different angle and on a higher rung, we decided this was not worth the effort. In the Australian competitive context, we predict that coopertition will be offered by the opposing alliance more often than not.
  • We are not scoring ALGAE in the net on the BARGE.
    • To place ALGAE accurately in the net, we predict it would require a pick-and-place rather than a launching mechanism to be reproducable. To keep the mechanisms that we construct bounded within the 3 day time limit, we’ve decided to skip this scoring element.

Further, we’ve made the following initial assessments:

  • The time required to complete scoring objectives can be modelled as a normal distribution. Here are our initial (conservative) estimates.
    • Time required to load a CORAL: N(4, 0.25)
    • Travel from CORAL collection → REEF: N(4, 0.5)
    • Place a CORAL on the REEF: N(6, 0.75) (multiplied by the level)
    • Travel from the REEF to the PROCESSOR and deposit an ALGAE: N(5, 0.5)

These assessments are just ballpark at the moment - when we assemble the field elements, we’ll give this a crack on the field and create more up-to-date distributions.

We’ve also identified a few possible strategies:

  • Coral-only, starting from the 2nd from the top level of the REEF and work down
  • Coral-only, starting from the bottom level of the REEF (not the trough) and working up
  • Coral + Processor, starting from the 2nd from the top level of the REEF and work down
  • Coral + Processor, starting from the bottom level of the REEF (not the trough) and working up

With these in mind, we’ve run some simulations (not accounting for Auto, not including endgame - we may still perform an endgame, we just haven’t modelled it here). We’ve swept the scoring simulation across the above four strategies, with a varying chance of the opponent human player “making the shot” once receiving an ALGAE from the PROCESSOR.

For no-ALGAE, our scoring potential is pretty low but consistent.

Including an ALGAE scoring mechanism into the PROCESSOR, our scoring potential doubles if the opposing HUMAN PLAYER has a 25% chance of making the shot into the BARGE.

This decreases a bit if the HUMAN PLAYER has a 50% chance of success.

With 75%, that decreases more…

And with a 100% chance of sinking the shot, we see that our scores revert to what they looked like with just CORAL, however shifted slightly up the scoring axis.

What this tells us is, even accounting for the extra time it takes to deposit an ALGAE in the PROCESSOR, it is almost always better to do CORAL + ALGAE rather than cycling just CORAL. Given that ALGAE has to be ejected for a CORAL to be placed, it is almost always worth it to tack on an extra simple mechanism to place ALGAE into the PROCESSOR after a CORAL is placed.

Of course, this is all contingent on the predicted cycle times we’ve got. We’ll continue running the numbers with more up to date estimates.

Hope this helps in your strategic planning!

Best,
Jaci

8 Likes

Hi everyone,

Please find our Day 0 recap video attached below!

We look forward to streaming our Day 1 fairly soon :slight_smile:

ReefScape Ri3d | DAY 0

1 Like

Hi everyone,

Apologies for the delay in getting a livestream going, OBS and YouTube were giving us issues. Please find our livestream link below!

Mihirungs Day 1 - Ri3D

Hi everyone,

We are pleased to present our Day 1 summary video below!

Additionally, as requested, we have linked the script used for the score modelling in Day 0.

Look forward to a livestream from us starting in ~seven hours and as always, please reach out with any questions, comments or suggestions :slight_smile:

Robot Concept and Code Tips | Ri3D DAY 1
estimate.py for score modelling

1 Like

Hi everyone!

Please join us for our Day 2 stream, link below :slight_smile:

Mihirungs Day 2 - Ri3D

1 Like

Livestream has now changed over to the actual Mihirungs YouTube channel as the 24 hour block has elapsed!

Mihirungs Day 2 - Ri3D

1 Like

In case you are not subscribed (in which case you totally should) here is our Day 2 recap video:

Deep in Engineering chaos | Ri3D DAY 2

1 Like

Hi everyone,

Our final day stream has started and there is a lot going on so please do tune in! :slight_smile:

Mihirungs Day 3 - Ri3D

2 Likes

A Little sneek peak

2 Likes

Hi everyone,

Although it has ended up being more like Ri2D with the amount of actual workshop time we had access to, we are happy to present our robot reveal video!

A Tech Binder and CAD release should be coming within a week.

As always, we are happy to answer questions even before those are released.

All the best in your 2025 season :slight_smile:

Ri3D 2025 Robot Reveal and Breakdown | Mihirungs

2 Likes

Linking our code repo

Particularly i would like to mention some custom code that that made our (code team’s) life easier.

Firstly, MotorSupplier is a standardised interface to create motors.
The simplicity of asking for a motor on ‘port’, inverted, etc without checking what the specific functions are for this motor saved time and reduced errors.

Also, i would like to poke my long term project RangeMath.
By default the included wpilib DifferentialDrive squares any drive commands sent to it. The intent with this is to increase low speed control by dedicating more of the axis to lower powers. This approach has it limits though and can even reduce control on simple robots which (in my experience) require at least 30% power to start moving. More of the range is thus dedicated to powers too low to start moving.
RangeMath is an ongoing effort to improve this by creating a more complex curve that can be tuned for driver preference.
Specifically,

  1. customisable minimum powers : using ‘outMin’ you can specify a starting minimum power that the signal will jump to after deadband. Simple tank drives can thus start immediately out of deadband.
  2. custom power curves : using ‘pow’ you can set a custom input^pow curve that will work for any power including decimal and even numbers.
  3. booster/limiter : with robots getting faster the latest feature added has been a system to adjust max speeds. By specifying a limitedMax < outMax < boostedMax you can pass two extra axes boostPercent and limitPercent letting the driver reduce or increase their max speed with triggers or buttons.
  4. tunable turn rates for tank drive : tank bases turn better when stopped since the inside wheels can run backwards leading to bots spinning like a top when stopped. With ModifierTurnRateBySpeed turning speed can be limited depending on how much power is applied.
  5. finally, proper deadbanding and curving on swerve : fitSwerve() will convert x/y power to polar coords, curve that, and convert back. Drive controls thus act close to the same in all directions.