DEV Community

Cover image for Will Your AGV Make It Back to the Charger? Modeling Mission Energy and SOC Margin
NovaSolver
NovaSolver

Posted on Originally published at novasolver.jp

Will Your AGV Make It Back to the Charger? Modeling Mission Energy and SOC Margin

An AGV that dies mid-route is worse than one that's slightly slow. A slow AGV costs you throughput; a dead one blocks an aisle, stalls a line, and needs a human to go rescue it. So before a fleet planner commits to a route, a payload, or a charging schedule, the question that actually matters isn't "can this vehicle theoretically carry this load" — it's "will it still have charge left when it gets back." That's a straightforward energy balance, but it has enough moving parts that doing it in your head reliably is harder than it looks.

Building the energy balance from the wheels up

Start with what the vehicle has to fight against to move at all. On a level floor, the dominant resistance for a wheeled AGV is rolling resistance, and the force it has to overcome is:

F_roll = Crr * m * g
Enter fullscreen mode Exit fullscreen mode

where Vehicle mass m is the loaded vehicle weight (chassis plus payload — this is where forgetting to add payload mass is the single most common input error) and Rolling resistance is the coefficient Crr, typically in the 0.01–0.03 range for rubber or polyurethane wheels on a smooth concrete or epoxy floor, higher on rough or debris-covered surfaces.

The mechanical energy needed to cover the Mission distance d is force times distance:

E_mech = F_roll * d = Crr * m * g * d
Enter fullscreen mode Exit fullscreen mode

That's the energy delivered at the wheels. It's not the energy the battery has to supply, because nothing in a drivetrain is perfectly efficient — motor losses, gearbox friction, controller switching losses all eat into the chain. Drive efficiency η folds all of that into one number:

E_battery = E_mech / eta
Enter fullscreen mode Exit fullscreen mode

A typical AGV drivetrain runs somewhere around 70–85% efficiency end to end, so this division is not a rounding correction — it can add 20-30% on top of the pure mechanical energy requirement, and it's the term most often left out of a rough back-of-envelope estimate.

From energy to the number that actually decides the mission

Once you know Energy used, everything else is bookkeeping against Battery capacity:

SOC_remaining = SOC_start - (E_battery / Battery capacity) * 100%
Enter fullscreen mode Exit fullscreen mode

The State of charge at mission end is the number a fleet operator actually cares about — not because SOC itself matters physically, but because it's the proxy for "does this vehicle need to detour to a charger before starting its next task." A common operational rule of thumb is to keep a margin (often 20–30% SOC) in reserve at all times, treating anything below that as effectively "empty" for planning purposes, since batteries degrade faster and voltage sags more aggressively in the lower part of the discharge curve.

Two more outputs round out the picture. Average power, which is really just energy divided by mission time (itself derived from Mission distance divided by Travel speed), tells you whether you're anywhere near the drivetrain's continuous power rating — useful for checking that a route with a steep ramp or a heavy payload segment isn't asking the motor for a burst it can't sustain. And Remaining runtime extrapolates the current discharge rate forward to answer "how much longer can this vehicle keep doing what it's doing right now" — genuinely useful for a dispatcher deciding whether to send a vehicle on one more loop or route it to charge first.

A worked example: a warehouse tugger run

Take an AGV with Vehicle mass = 450 kg (chassis plus a typical payload), rolling on polyurethane wheels over sealed concrete with Rolling resistance Crr = 0.02, running a Mission distance of 800 m at a Travel speed of 1.0 m/s, with a Drive efficiency of 78%, and a Battery capacity of 2.0 kWh starting at 90% SOC.

Rolling resistance force:

F_roll = 0.02 * 450 kg * 9.81 m/s^2 ≈ 88.3 N
Enter fullscreen mode Exit fullscreen mode

Mechanical energy for the route:

E_mech = 88.3 N * 800 m ≈ 70,640 J ≈ 0.0196 kWh
Enter fullscreen mode Exit fullscreen mode

Battery-side energy after drivetrain losses:

E_battery = 0.0196 kWh / 0.78 ≈ 0.0252 kWh
Enter fullscreen mode Exit fullscreen mode

That's a small fraction of a 2.0 kWh pack for one 800 m run — as it should be, since a single mission is a small slice of a full duty cycle. The State of charge drop:

delta_SOC = (0.0252 / 2.0) * 100% ≈ 1.26%
Enter fullscreen mode Exit fullscreen mode

So this vehicle finishes the mission at roughly 88.7% SOC — comfortably fine on its own. The number that actually matters operationally is what happens after the AGV repeats this loop for a full shift. At roughly 1.26% SOC per 800 m loop, an 8-hour shift running continuous loops (mission time here is 800 m / 1.0 m/s = 800 s ≈ 13.3 min per loop, so about 36 loops in 8 hours) would consume 36 * 1.26% ≈ 45% SOC — landing the vehicle around 45% SOC at end of shift, which is a believable number for a lightly loaded route but starts to explain why fleet planners run this exact per-mission math before committing to a duty cycle rather than eyeballing "should be fine."

Average power over the mission:

P_avg = E_battery / t_mission = 0.0252 kWh / (800 s / 3600 s/h) ≈ 0.113 kW
Enter fullscreen mode Exit fullscreen mode

A little over 100 W average — well under what a typical AGV drive motor is rated for continuously, confirming this route isn't power-limited, only energy-limited over the course of a shift.

Where the simple model understates reality

This flat-ground energy balance is the right starting point, but real warehouse floors aren't flat, and grade resistance can dwarf rolling resistance on even a modest ramp. A 3% grade adds a force of m * g * sin(theta) ≈ m * g * 0.03, which for the 450 kg vehicle above is about 132 N — already larger than the entire rolling resistance force computed for the flat case. Any route with dock ramps or grade changes needs that term added in explicitly; leaving it out will make the mission look far cheaper in energy than it actually is.

The model also treats Drive efficiency as a single constant, when in reality efficiency varies with load and speed — it's typically worse at very low speeds (frictional losses dominate) and can dip under heavy acceleration. For a route with frequent stop-start cycling rather than steady cruising, using a single average efficiency will tend to underestimate real energy consumption, because acceleration events are systematically less efficient than the cruise phase the average is usually measured against.

Finally, don't treat SOC as linear with remaining energy at the low end of the curve. Lithium battery discharge curves flatten in the middle and drop off increasingly steeply below roughly 20% SOC, and internal resistance rises as the cell empties — meaning the last 10-15% of nominal capacity delivers less usable energy than the linear model above assumes, and voltage sag under load gets worse right when you can least afford it. This is exactly why the 20-30% reserve margin convention exists operationally, and it's worth padding any mission-energy estimate with that margin rather than trusting SOC all the way to zero.

Try it yourself

Route planning for a real fleet means running this balance across dozens of mission profiles, payloads, and grade combinations rather than one clean flat-ground case. You can adjust mass, distance, rolling resistance, and drive efficiency together and watch SOC margin and remaining runtime update instantly on the AGV battery mission energy simulator here. If your facility is also evaluating longer-term battery health under repeated cycling, the battery calendar aging (Arrhenius) tool covers the degradation side of the same pack.

Top comments (0)