EECE 5554
Robotics Sensing and Navigation

Lecture 10: Battery, Power
Design, System Design

Dr. Xian Li
Assistant Teaching Professor
Department of Electrical and Computer Engineering

Inspiration

CES 2026: WheelMove (NosillaCast interview)
Open on YouTube
WheelMove
  • Clips onto a manual wheelchair
  • 250 W motor, up to 10 km/h
  • About 25 km per charge
  • Swappable battery
  • About 8 kg

Think about it: what battery would you pick for it, and how big?

2
Source: CES 2026, WheelMove. Facts: Engadget, NosillaCast, wheelmove.eu

Biweekly Agenda

Deadlines

3

Today

  1. Robots as Systems
  2. Li-ion Battery
  3. Battery Management System (BMS)
  4. System Design
4

Robots as Systems

5

Robots as Systems

FRC Control System

FRC: FIRST Robotics Competition

6
TurtleBot 4

Robots as Systems

TurtleBot 4 Architecture

TurtleBot 4 software and hardware stack: TurtleBot Desktop and other software on ROS, on Ubuntu Linux, on a Raspberry Pi computer, with sensors and the Create 3 controllers and iRobot platform
7

Common Sensors for Robotics

Proprioceptive
Sensors
Encoders (rotary)Encoders (linear)IMUTorque SensorProximity Sensor
Exteroceptive
Sensors
LiDARGPS / GNSSUltrasonic SensorUWB Beacons
Interaction and
Contact Sensors
Tactile SensorBump / Contact
Switches
Environmental
Sensors
Temperature
Sensor
Humidity sensorPressure SensorLight SensorGas Sensor
Other Sensors
MicrophoneEMG SensorECG SensorEEG SensorEye-Tracking
Sensor
8
Click any box to open a short reference (Wikipedia).

Common Sensors for Robotics

ASIC =
Application Specific
Integrated Circuit
Proprioceptive
Sensors
AS5600AS5304HX711VL53L0X
Exteroceptive
Sensors
HC-SR04DW1000
Interaction and
Contact Sensors
FSR 402SS-5GL2-F
Environmental
Sensors
Other Sensors
MyoWare 2.0
9
Click a part number to open its product page or datasheet.

Common Compute Unit for Robotics

Robot Controller
ARM+FPGA
roboRIO 2.0
ARM+PLC
Beckhoff’s
CX7000
Microcontrollers
(MCUs)
AVR/ARM
Arduino Uno
ARM
STM32
Xtensa/RISC-V
ESP32
RISC-V
WCH Ch32V203
Single-Board
Computers
(SBCs)
ARM
ARM
X86
LattePanda IOTA
mini-PCs
X86
12+ cores CPU/
32GB+ RAM/
Ubuntu etc.
ARM
Mac Mini M4
Control
Planning
RISC =
Reduced Instruction
Set Computer

FPGA =
Field Programmable
Gate Arrays
10
Click a box to open its product page.
roboRIO 2.0Beckhoff's CX7000Arduino UnoSTM32ESP32WCH Ch32V203Raspberry Pi 4 / 5Jetson Nano/ Jetson Orin NanoLattePanda IOTA12+ cores CPU/ 32GB+ RAM/ Ubuntu etc.
Robot Controller
Microcontrollers
(MCUs)
Single-Board
Computers
(SBCs)
mini-PCs

Common Compute Unit for Robotics

11
Click a photo to open its product page.

Common Actuators for Robotics

Motion Actuators
DC motorBrushless DC
motor
Servo motorStepper motor
Information
Actuators
LEDDisplaysBuzzerSpeaker
Haptic Actuators
Vibration motorPiezoelectric
actuator
Fluidic Actuators
PumpsValves
Other Actuators
Thermal actuator
Pneumatic and Hydraulic
12
Click any box to open a short reference (Wikipedia).
DC motorBrushless DC motorServo motorStepper motorLEDDisplaysBuzzerSpeakerVibration motorPiezoelectric actuatorPumpsValvesThermal actuator
Motion Actuators
Information
Actuators
Haptic Actuators
Fluidic Actuators
Other Actuators
Pneumatic and Hydraulic

Common Actuators for Robotics

13
Click a photo to open a short reference (Wikipedia).

Robots as Systems

Power sources

14

Where the energy goes

A mobile robot

Battery pack
8S LiFePO4
25.6 V, 20 Ah
512 Wh
BMS and fuseprotection,
sensing, SOC
Drive motorsdirect from pack, 60 W average
DC-DC converters90% efficient, 6.4 W lost as heat
Electronics: 57.5 W delivered
Computer25 W
Lidar15 W
Cameras7 W
Radio4 W
GNSS, IMU3.5 W
BMS, fans3 W
TOTAL DRAWN FROM THE PACK
123.9 W. Half goes to wheels, half to sensing and thinking. We turn this into a runtime later today.
15

How batteries work

TED-Ed: How batteries work (Adam Jacobson)
Open on YouTube
Adam Jacobson
16

How a battery works

Battery cell: anode and cathode in an electrolyte, split by a separator, joined by an outside wire through a load Load your robot Charger outside energy e⁻ e⁻ e⁻ e⁻ − + Electrolyte Separator (no short) + + Ions cross inside Anode negative electrode Cathode positive electrode Oxidation: gives up e⁻ Reduction: takes in e⁻ Reduction: takes e⁻ back Oxidation: gives up e⁻

Discharge: powering the robot

  • The anode gives up electrons (oxidation).
  • Electrons flow through the wire and do work.
  • The cathode takes them in (reduction).
  • Ions cross the electrolyte to balance the charge.
  • Runs on its own (spontaneous).

Charge: rechargeable cells only

  • A charger pushes the electrons back.
  • Both reactions run in reverse.
  • Needs outside energy (not spontaneous).
Cell voltage comes from the difference between the two electrode materials.
17
Source: [[ SOURCE_CITATION ]]

Lithium-ion battery

Read more: https://ul.org/research-updates/what-are-lithium-ion-batteries/

Lithium-ion cell: current collectors, anode, separator, electrolyte with lithium ions, cathode
18
Image: UL Research Institutes, What are lithium-ion batteries?

Lithium-ion battery

How does it work?

Lesics: How does a lithium-ion battery work?
Open on YouTube
19

Common kinds of batteries

Battery
18001850190019502000
Where you see it today
Voltaic pileZn/Cu, about 1 V, not rechargeable
1800 never sold as a product
Classroom demos, such as coin or lemon batteries
Lead-acidAbout 2 V, first rechargeable
18591881
Car starter batteries, UPS backup, forklifts
Nickel-cadmium (Ni-Cd)1.2 V, rechargeable
18991906*
Aircraft, railways, emergency lighting; EU bans most consumer use
Nickel-iron (Ni-Fe)1.2 V, rechargeable
18991903
Off-grid solar storage; lasts decades but wastes energy
Nickel-metal hydride (Ni-MH)1.2 V, rechargeable
19671989
AA and AAA rechargeables, hybrid cars, older Roomba robots
Discovered or first demonstrated First commercial production * Sources give 1904 to 1910
From lab to product often took about 20 years: lead-acid 1859 to 1881, Ni-MH 1967 to 1989.
20
Sources: [[ SOURCE_CITATION ]]; dates from Wikipedia and Battery University. Click a name to read more.

How Li-ion reached the market

1WhittinghamExxon, USA, 1976
about 2 V Anode (−) Lithium metal Cathode (+) TiS₂

Layered TiS₂ cathode stores lithium ions in its gaps (intercalation).

Problem: lithium whiskers grow on charging, short the cell, start fires.

2GoodenoughOxford, UK, 1980
about 4 V Anode (−) Lithium metal Cathode (+) LiCoO₂

Cobalt oxide cathode (LiCoO₂) nearly doubles the voltage.

Gain: about 4 V; cells can be built uncharged, then charged.

3YoshinoAsahi Kasei, Japan, 1985
about 4 V Anode (−) Carbon Cathode (+) LiCoO₂

Carbon anode (petroleum coke) holds the lithium as ions too.

Gain: no lithium metal, so it survives a drop-weight test.

New in this step Lithium metal, a fire risk
1976Lithium-metal cells for solar watches
19804 V cobalt oxide cathode
1985First viable lithium-ion cell
1986Passes drop-weight safety test
1991First lithium-ion cells on sale
The oil crisis pushed it, Japan's electronics pulled it, and removing lithium metal made it safe to sell.
21
Source: Royal Swedish Academy of Sciences, "They developed the world’s most powerful battery", Nobel Prize in Chemistry 2019

Li-ion vs LiPo

Lithium-ion (hard case)

Also sold as Li-Ion, LiIon, or LiCo
  • Cylinder or rectangle with a strong shell
  • A bit heavier, often higher capacity
  • Hard to puncture
  • Used in laptops and large packs

Lithium polymer (soft pouch)

Also sold as LiPoly, Li-Poly, or LiPo
  • Thin rectangle in a silvery bag
  • Lighter, often smaller capacity
  • Easy to dent or puncture
  • Fits thin devices and small drones
Click a battery to see a real one. One more Adafruit photo with both types: asset 977 (CC BY-SA)
Same chemistry, same safety rules. Choose the package for the job.
22
Source: adapted from Adafruit, "Li-Ion & LiPoly Batteries" by lady ada, CC BY-SA

Know your voltages

4.23.73.43.0 Full About 3.7 V for most of the run Nearly empty Protection cuts off Volts per cell Capacity used (schematic shape, not measured data)
Printed on cellFull chargeNotes
3.7 V4.2 VAlmost all LiPo cells today
3.6 V4.1 VOlder chemistry
Newer cells4.35 VA little more energy, mostly laptop cylinders
  • Match the charger to the cell.
  • A 4.2 V charger on a 4.1 V cell overcharges it: damage or fire.
  • A 4.35 V cell on a 4.2 V charger is safe, just not quite full.
A 4-cell pack swings from about 16.8 V full to about 12 V at cutoff. Every regulator on the robot must handle that whole range.
23
Source: adapted from Adafruit, "Li-Ion & LiPoly Batteries" by lady ada, CC BY-SA

Five rules for every lithium cell

  1. Never charge above the maximum voltage (about 4.2 V)Protection board
  2. Never discharge below the minimum voltage (about 3.0 V)Protection board
  3. Never draw more current than it can supply (about 1 to 2C)Protection board
  4. Never charge faster than it can take (about 1C)Protection board Charger
  5. Charge only in a safe temperature range (about 0 to 50 °C)Charger, sometimes
board Protected Board under the tape checks V and I, disconnects Raw cell Bare tabs, no board Not protected PhotoPhoto
Check the datasheet: the safe limits vary from cell to cell.
24
Source: adapted from Adafruit, "Li-Ion & LiPoly Batteries" by lady ada, CC BY-SA

Break Time

5 Minutes

What a BMS does

Cell 4 Cell 3 Cell 2 Cell 1 Pack + shunt switch Pack − T BMS measureprotectbalanceestimatereport sense wire on every cell Robot computer /battery_state data link: SMBus, CAN, or UART
  • MeasureEvery cell voltage, pack current, temperature
  • ProtectOpen the switch on over- or under-voltage, over-current, or heat
  • BalanceKeep all cells at the same charge level
  • EstimateState of charge (SOC) and state of health (SOH)
  • ReportSend the numbers to the robot over a data link
A BMS is the five rules from Slide 24, applied to every cell, plus balancing, estimation, and reporting.
26

How does a BMS work?

How does a battery management system (BMS) work?
Open on YouTube
27

Bigger packs: don’t build your own

Parallel: capacity adds 3.7 Vfuller 3.7 Vemptier One cell can discharge into the other Damage or fire Series: 3.7 + 3.7 = 7.4 V 3.7 V 3.7 V +− +− Cells cannot be charged in balance One cell ends up over- or under-charged PhotoPhoto

What to do instead

  • Need more capacity? Buy one bigger cell.
  • Need a pack? Buy one factory-assembled.
  • Factories test and sort cells by machine, so every cell in a pack matches in capacity and internal resistance.
  • Hobbyists can't match cells that well.
Click a drawing or "See a real pack" for a picture. Adafruit pictures are CC BY-SA; factory packs: asset 998
Don't build your own lithium packs. Buy a bigger battery, not a second one.
28
Source: adapted from Adafruit, "Li-Ion & LiPoly Batteries" by lady ada, CC BY-SA

Try it: build a battery pack

Cells

Robot

Try a problem

Example cells, typical values: NMC 3.6 V, 3.0 Ah, 10 A, 47 g each. LiFePO4 3.2 V, 3.0 Ah, 9 A, 85 g each. Runtime ignores converter losses.

29

Cell balancing

Top of charge 100% Cell 1 94% Cell 2 97% Cell 3 91% Cell 4 charging stops: Cell 1 is full End of run 9% Cell 1 3% Cell 2 6% Cell 3 0% Cell 4 discharge stops: Cell 4 is empty
Passive balancingActive balancing
HowBurns extra charge from the fullest cells as heat in a resistorMoves charge from fuller cells to emptier ones
CostSimple and cheapMore parts, more cost
EnergyWastes the extra energyKeeps most of it
Used inMost small and medium packsLarge packs, such as EVs
The weakest cell sets the limit: Cell 4 ends the run while the others still hold charge.
30

How full? How worn out?

State of charge (SOC): how full now

  • Voltage lookup: simple, but the curve is flat in the middle (very flat for LiFePO4).
  • Coulomb counting: add up current over time. Small errors build up, like dead reckoning.
  • Fuel gauge chips combine both, resetting the count when the cell rests.

State of health (SOH): how worn out

  • Full capacity today divided by capacity when new.
  • Packs are often called worn out near 80%.
  • Aging also raises internal resistance, so voltage sags more.
BatteryState.msg
# sensor_msgs/msg/BatteryState (excerpt)
float32   voltage          # V
float32   temperature      # deg C, NaN if not measured
float32   current          # A, negative when discharging
float32   charge           # Ah left right now
float32   capacity         # Ah when full, today
float32   design_capacity  # Ah when full, when new
float32   percentage       # 0 to 1, not 0 to 100
uint8     power_supply_status
uint8     power_supply_health
float32[] cell_voltage     # one entry per cell
Full definition: ros2 interface show sensor_msgs/msg/BatteryState. SOH ≈ capacity / design_capacity.
31
Sources: MathWorks; Battery University BU-903 and BU-602; ROS 2 sensor_msgs

Try it: how long will it last?

Robot

Battery

Charge each cell to

Simple model of NMC-type cells from Battery University BU-808 trends: cycles to 70% depend on depth of discharge (300 at 100%, 1,000 at 40%, 2,000 at 20%); each 0.1 V lower charge roughly doubles cycles but stores less; aging about doubles per 10 °C above 25 °C (rule of thumb). Calendar aging is ignored.

32
Data: Battery University BU-808. Illustrative model, not a prediction for a specific cell.

Charging and handling

Charging

  • Use a lithium charger. A 4.2 V charger fits almost every Li-ion and LiPo cell.
  • Keep the charge rate at or below 1C: no more than 500 mA for a 500 mAh cell.
  • Simple USB chargers deliver about 500 mA, and their rate is set by a resistor.
  • Hobby chargers have no temperature sensor. Above 0.5C, or when charging outdoors, use a temperature-aware charger.

Handling

  • Keep cells away from heat, direct sun, and hot cars.
  • Never short, puncture, crush, or solder directly to a cell.
  • Don't carry loose cells with keys, coins, or other metal.
  • Tape the terminals before storage or disposal.
  • If a cell smells, heats up, swells, or changes color, stop using it and unplug it.
Click "See a real charger" for a photo. Adafruit Micro-Lipo charger guide: learn.adafruit.com (CC BY-SA)
Hot, swollen, or smelly: stop, unplug, and move it somewhere safe.
33
Source: adapted from Adafruit, "Li-Ion & LiPoly Batteries" by lady ada, CC BY-SA

Thermal runaway

UL FSRI: lithium-ion thermal runaway test
Open on YouTube
  1. Damage, overcharge, or heat
  2. The cell heats itself
  3. Gas, smoke, and fire
  4. Neighbor cells follow
You can’t stop it once it starts. You can only prevent it.

Interactive: UL Xplorlabs thermal runaway

34
Video: UL Fire Safety Research Institute

Regular vs RC batteries

Regular cellsPhones, cameras, most projects"RC" cellsRC cars, planes, drones
ProtectionBuilt-in protection circuitOften raw cells, no protection
CurrentAbout 1 to 2CUp to about 20C
Life500+ charge cyclesShorter when pushed hard
When emptyCuts off to save itselfNever cuts off, to keep the vehicle flying
PriceHigherLower, since there is no circuit
No cutoff in the battery means the robot must watch the voltage itself.
35
Source: adapted from Adafruit, "Li-Ion & LiPoly Batteries" by lady ada, CC BY-SA

Choosing a Li-ion chemistry

Lithium-ion typeVolts per cellEnergy (Wh/kg)Cycle lifeRunaway onsetStrong pointTypical use
Cobalt (LCO)3.6 V150 to 200500 to 1,000150 °CHigh energyPhones, laptops
NMC3.6 to 3.7 V150 to 2201,000 to 2,000210 °CGood all-rounderE-bikes, EVs, many robot packs
NCA3.6 V200 to 260500150 °CHighest energySome EVs
Iron phosphate (LFP)3.2 to 3.3 V90 to 1202,000+270 °CSafety and long lifeFleets, energy storage
Titanate (LTO)2.4 V50 to 803,000 to 7,000Very safeCold and fast chargeSpecial uses, high cost
  • LiPo is a package (Slide 22), not a separate chemistry. Most use a cobalt or NMC-type mix inside.
  • Don't charge any Li-ion below freezing. Cold charging plates lithium on the anode.
No chemistry wins on everything. Pick the one whose weak point your robot can live with.
36
Source: Battery University BU-205 (average estimates) and BU-107

From mission to battery

  1. Mission: runtime, distance, payload, temperature
  2. Power: average and peak watts (power budget)
  3. Energy: watt-hours, with margins for usable range and aging
  4. Voltage: cells in series to suit motors and regulators
  5. Current: peak amps, then check the C-rate
  6. Chemistry: mass, cycle life, safety, cost
  7. Recharge plan: dock, swap, or charge by hand

Example: indoor delivery robot

4 h shift, 60 W average, 300 W peak, 24 V motors
Energy60 W × 4 h = 240 Wh
Margins÷ 0.9 usable ÷ 0.8 aging = 333 Wh
VoltageLFP 8S = 8 × 3.2 V = 25.6 V
Capacity333 / 25.6 = 13 Ah → buy 15 Ah (384 Wh)
Peak current300 / 25.6 ≈ 11.7 A ≈ 0.8C, fine
Cell massLFP 3.2 to 4.3 kg; NMC 1.7 to 2.6 kg
Daily cycling and mass that doesn't matter much: pick LFP for its 2,000+ cycles.
37
Energy ranges: Battery University BU-205

Drones: the mass spiral

0102030 0123456 1 kg: 25 min peak ≈ 32 min at 3.2 kg +0.6 kg, 12 W sensor: 18 min Battery mass (kg) Hover time (min)

Why more battery stops helping

  • Hover power grows faster than mass (about mass1.5).
  • Each extra kilogram of battery must also lift itself.
  • Tripling the battery from 1 to 3 kg adds only about 27% (25 to 32 min).
  • Past about twice the airframe mass, more battery means less flight time.
  • A 0.6 kg lidar drawing 12 W cuts 25 min to 18 min.
On a drone, every sensor is paid for twice: its own power, plus the power to carry it.
38
Simple hover model: airframe 1.6 kg, 150 Wh/kg usable, hover power grows with mass to the 1.5 power

Battery-aware robots

How much to keep in reserve?

Usable energy369 Wh (an aged pack)
Driving cost124 W at 1 m/s → 34 Wh per km
Trip home2 km × 34 Wh × 1.5 margin = 103 Wh
Reserve103 / 369 ≈ 28%, so set 30%
  • The reserve depends on distance to the dock, so a fixed threshold is only a start.
  • Nav2 has a docking server for the final approach.
battery_watch.py
import rclpy
from rclpy.node import Node
from rclpy.qos import qos_profile_sensor_data
from sensor_msgs.msg import BatteryState

RESERVE = 0.30   # head home below 30 %

class BatteryWatch(Node):
    def __init__(self):
        super().__init__('battery_watch')
        self.create_subscription(BatteryState, '/battery_state',
                                 self.on_battery, qos_profile_sensor_data)

    def on_battery(self, msg):
        if msg.percentage < RESERVE:
            self.get_logger().warn(f'Low battery: {msg.percentage:.0%}')

def main():
    rclpy.init()
    rclpy.spin(BatteryWatch())

if __name__ == '__main__':
    main()
39
Sources: ROS 2 Jazzy; Nav2 docking; BU-811

Match the battery to the robot

RobotEnergy sourceRuntimeHow it rechargesWhat drives the choice
Small quadrotorLiPo, high C-rateAbout 15 to 30 minSwap packs by handMass above all
TurtleBot 426 Wh Li-ion, 14.4 V2.5 to 4 h (manual)Drives onto its dockLow cost, simple to use
Boston Dynamics SpotLi-ion packAbout 90 minSelf-charging dockHigh power for walking
UBTECH Walker S2Swappable Li-ion packsAbout 3 min down per swapSwaps its own batteryUptime in a factory
NASA PerseveranceNuclear MMRTG (about 110 W) plus two 43 Ah Li-ion batteriesYearsMMRTG charges the batteries nonstopNo sun needed; batteries cover peaks up to 900 W
Videos
The battery choice follows the job: mass for flying, cost for teaching, uptime for factories, independence for Mars.
40
Sources: TurtleBot 4 user manual; Boston Dynamics; UBTECH; NASA/JPL Mars 2020 power

Two ways to keep robots running

Dock: the robot drives to a charger

Swap: the robot changes its own battery

Neobotix: autonomous docking
Open on YouTube
UBTECH Walker S2: battery swap
Open on YouTube

Simple, but the robot is idle while it charges. Nav2 has a docking server for the last meter.

Only about 3 minutes of downtime, but you pay for extra packs and the swap station.

41

Cost per cycle, not per pack

Cost per kWh delivered

Formulaprice ÷ (kWh × depth used × cycles)
Pack A, NMC$250, 0.5 kWh, 80%, 1,000 cycles → $0.63 per kWh
Pack B, LFP$300, 0.5 kWh, 80%, 2,000 cycles → $0.38 per kWh
  • The pricier pack is cheaper to own if you really use the extra cycles.
  • Example prices only. Plug in real quotes.

Free ways to make any pack last longer

  • Shallow cycles: using less of the range per cycle adds cycles.
  • Keep it cool: heat ages cells fastest.
  • Store it half charged in a cool place, not full.
  • Don't sit at 100% longer than needed.
  • Buy known cells with real datasheets from trusted sellers.
Judge a battery by cost per cycle, not price per pack.
42
Sources: Battery University BU-107, BU-205, BU-702, BU-808, BU-810

Three takeaways

1Runtime = usable Wh / total W. Usable is always less than the label: depth of discharge, aging, cold, and weak cells all cut it.
2Every sensor and processor costs runtime. Build the power budget before you buy hardware, and on drones count the mass too.
3The BMS protects the battery; the robot protects the mission. Read the battery state, keep a reserve, and plan the trip home.
43