Menu
The robot E-wanna riding the twin steel cables of a mock high-tension power line at night, headlights on, during the UNETBots 2015 competition

E-wanna — a Power-Line Inspection Robot

  • October, 2015

Real high-tension transmission lines run for kilometers through terrain that's slow and dangerous for a person to walk, so keeping them running means either sending a lineman to climb the towers or renting a helicopter. E-wanna is a robot built by team FutBot USB (Universidad Simón Bolívar) for the DESAFÍO category of UNETBots 2015, a national robotics competition whose challenge was exactly that: build an autonomous robot that rides the cable itself, finds hot spots and encroaching vegetation, reports how far each one is from the start, and physically cuts the vegetation off the line — all while two electric fans blow simulated wind at it.

Close-up of E-wanna's electronics stack: a PIC perfboard, a Raspberry Pi, ribbon cable, four stepper motors and two headlight LEDs, mounted on pink foam padding

A small home-built mock power-line tower with a wooden mast, twin steel cables, and foam blocks standing in for roadside vegetation, used to test the robot before the real rig was available

The finished electronics stack (left), and the improvised test rig the team built at home so the vision code had something to practice on before the official one existed (right).

E-wanna semi-assembled on the lab's cable rig, with a FutBot USB team poster visible on the wall behind it

The team's own classroom test rig: a single cable strung between two welded towers, with a hand-drawn system architecture diagram on the whiteboard behind it

From the team's own paper on E-wanna: the semi-assembled robot, and the single-cable classroom rig they eventually built to test it — note the system-architecture diagram sketched on the whiteboard behind it.

The Challenge

UNETBots is Venezuela's national robotics competition, hosted by Universidad Nacional Experimental del Táchira (UNET) together with AVERD (Asociación Venezolana de Robótica y Domótica) and FUNDELEC, the government's electrical-service development foundation. The 2015 edition's DESAFÍO category asked teams to automate exactly the kind of inspection real utility linemen do by hand or by helicopter.

Official diagram of the competition rig: five towers carrying twin steel cables with ceramic insulators, marked hot points, tissue-paper vegetation knots on the wires, foam vegetation blocks below, and two wind fans

The official course (from the competition rulebook): 5 towers, twin 1/4″ steel cables 25 cm apart, white-tape "hot points," paper-tissue vegetation knots on the wire, foam blocks simulating roadside brush, and two 3-speed fans for wind.

Robots had to weigh 1500 g or less and fit in a 30×30×30 cm cube. Points were awarded per hot point found (more if its distance from the start was also reported correctly), per tower cleared, per dangerous weed detected within 40 cm of a conductor, and per piece of on-wire vegetation actually removed — with a penalty for any left behind. Running with the wind fans on paid a speed bonus. The event ran classification → quarterfinals/semifinal → a single-attempt final over three days (Oct 28–30, 2015) in San Cristóbal.

System Architecture

E-wanna splits the work across three boards, each doing only what it's best suited for:

BoardRoleWhy
Raspberry PiMain controller — runs the state machine and the computer-vision pipeline, makes all high-level decisionsOnly board in the stack with enough headroom to run OpenCV on camera frames in real time
Arduino Mega 2560Sensor controller — reads the IR/line sensors, talks to the motor board, validates sensor data before passing it upHuge pin count for the sensor fan-out, plus a custom shield soldered directly to it
PIC16F877AMotor controller — generates the step/direction signals and drives five ULN2003 Darlington arrays that provide the actual motor powerA dedicated, interrupt-driven board keeps motor timing precise regardless of what the Pi/Arduino are doing

The Pi talks to the Arduino over a plain serial link; the Arduino talks to the PIC over I²C. Both hops use small, fixed-format text/byte commands rather than anything heavier — see Communication below.

The team's own writeup is explicit about why: a plain microcontroller wouldn't have had the headroom to run computer vision, so the Pi does all the high-level decision-making through a state machine and treats every other board as a subordinate that only hands up already-processed sensor data. That state machine is also what decides how long the robot pauses at each hot point or vegetation cluster to show its reading before moving on.

A Raspberry Pi in a case with a red 3D-printed pan-tilt camera mount, connected by ribbon cable to the Arduino shield perfboard

The Raspberry Pi with its 3D-printed camera mount, wired to the Arduino shield.

Mechanical Design

The chassis is welded from thick steel wire rather than sheet metal or 3D-printed plastic — lighter, and its open lattice doesn't catch much wind. Getting a clean weld on wire that thick took a few failed attempts; the fix that worked was wrapping each joint with a thin wound wire before soldering, so the joint closed around something instead of trying to bridge bare wire to wire.

The robot's welded steel-wire chassis frame, with a sheet-metal deck riveted on top and a cutout for the camera

A side view of the assembled chassis showing the stepper motors and wheel mounts at the rear

The welded frame under construction, and the finished chassis with motors mounted.

Top-down view of the finished chassis mounted on all four wheels on the cable, showing the sheet-metal deck cutout with wiring passing through

The finished chassis riding the cable on all four wheels, from the team's paper.

Four 3D-printed wheels carry the robot: the rear two are keyed directly to the stepper motor shafts (a friction-fit adapter clamps each wheel on with a single screw) and provide all the driving force; the front two spin freely on a bearing axle and are only along for balance. Every wheel has a machined groove sized to ride the 1/4″ cable while still clearing the ceramic insulators bolted to each tower ring — a couple of millimeters of tolerance is the difference between rolling through cleanly and getting stuck on every single insulator.

A hand-drawn design sketch dimensioning the wheel groove against the cable diameter (0.65 cm) and the insulator diameter (1.1 cm)

Close-up of the robot's front axle and bearings, which let the front wheels spin freely while being pushed by the rear stepper motors

Working out the wheel-groove clearance by hand — the groove has to pass a 0.65 cm cable and the 1.1 cm insulators bolted along it — and the free-rolling front axle and bearings themselves.

Vegetation removal borrows straight from a string-trimmer: a small DC motor spins two twisted lengths of thin copper wire fast enough to shred the paper-tissue "weed" bundles clipped to the line, and switches on only when the vision system has actually flagged vegetation ahead — it doesn't run continuously.

Electronics

SensorPurpose
Camera (Pi Camera)Finds the wire and towers ahead, and is the primary way the robot measures how far it's traveled from the start
IMUTracks the robot's tilt relative to the cable, to correct the camera-based distance estimate on sloped sections (the center tower sits higher than the rest, so the line isn't flat)
2× line sensorsTell the robot which side is riding correctly on a conductor
Sharp analog IRRanges the corridor below the line for waist-height vegetation encroaching on the right-of-way

Everything runs on +12 V and +5 V from a single 12 V/4.8 Ah battery, stepped down to 5 V with a switching regulator. An LCD on the chassis shows the live distance reading, three status LEDs (green/red/blue) report what the robot last found, and a physical switch is the only way to power it on.

An Arduino Uno wired to a custom PIC perfboard with terminal blocks, alongside two unipolar stepper motors, during bench testing

Hand-soldering the motor driver perfboard

Bench-testing the motor driver with an Arduino stand-in before the real Mega 2560 shield was ready, and hand-soldering the board itself.

The underside of the Arduino Mega shield perfboard, showing the hand-soldered tin traces connecting all the sensor headers

The motor driver board and the distance-readout LCD mounted on the chassis, with a stepper motor visible on each side

The Arduino shield's hand-soldered underside, and the motor driver board with the distance-readout LCD mounted on the chassis — both from the team's paper.

Schematic of the motor driver board: a PIC16F877A driving ULN2003A Darlington arrays, communicating over I2C and serial to the Arduino

The motor driver board: a PIC16F877A plus five ULN2003 Darlington arrays for the drive and cutter motors.

Power distribution diagram showing which components connect to the GND, 12V and 5V rails

Power distribution across the three rails — motors and headlights on 12 V, logic and sensors on 5 V.

The Sharp IR sensor needed its own calibration curve, since the raw ADC reading isn't linear with distance. A quick bench measurement and curve fit gave a clean exponential relationship that the firmware could invert cheaply:

A plot of measured distance versus ADC reading for the Sharp IR sensor, with a fitted exponential curve y = 147.5 e^(-0.01x) + 10.36

Distance vs. ADC-conversion curve for the Sharp sensor, fitted to y = 147.5·e−0.01x + 10.36. The PIC firmware carries the same relationship baked into a lookup table.

Computer Vision

Rather than anything ML-based, the vision pipeline is a deliberately simple, deliberately robust color-blob detector — the team's own postmortem specifically flags lighting sensitivity as the main risk with camera-based approaches at a competition where you don't control the room. The Pi Camera runs with auto white balance locked off and a fixed "sports" (fast-shutter) exposure mode, so frame-to-frame color doesn't drift while the robot is moving:

  1. Crop a window around the expected tower location in the frame.
  2. Convert to HSV and threshold for the tower's known color range.
  3. Clean up the mask with a morphological opening and take the largest contour.
  4. Estimate distance to the tower from the contour's bounding-box width, using the classic similar-triangles relationship: distance = (real_width × focal_length) / pixel_width.
  5. A sudden jump in that distance means the robot just passed under a tower — increment the tower counter.

A debug recording from development: raw camera feed (left) next to the detected-contour overlay (right) used to tune the color thresholds on the bench before the real rig existed.

The team describes the finished module as able to tell apart the three things the rig actually throws at it — hot points, insulators, and vegetation — once it's running on the real course. Hot points on the official rig are marked with white tape, which shows up clearly in this annotated frame from their paper: several white and yellow markers, each labeled and carrying its own measured distance from the start, overlaid directly on the image.

An annotated camera frame from the vision system showing several detected markers labeled 'blanco' (white) and 'amarillo' (yellow), each tagged with its own measured distance in centimeters

The vision system's own output, from the team's paper: detected markers labeled by color, each carrying its measured distance in centimeters.

On the Raspberry Pi, vision runs in its own OS process (Python's multiprocessing), separate from the process driving the OLED status display and the one handling serial I/O to the Arduino, connected by pipes. That way a slow camera frame never stalls the serial link or freezes the display.

Communication Protocol

Both hops in the control chain use small, fixed-format messages instead of anything heavier:

Arduino → PIC (I²C, address 0x61) — a 6-byte frame per command:

ByteMeaning
1Mode: 0 move N steps, 1 set each coil pin directly, 2 move continuously
2Which motor (03)
3Step type: single / double / half
4Direction: derecha / izquierda
5Number of steps
6Delay between steps, in ms

On the PIC, all of this runs entirely from interrupts (Timer0 steps the motors, SSP handles I²C, RB-change reads the line sensors, RDA reads serial) — main() itself is just an empty while(true) loop. The step sequencing itself is a straightforward set of lookup tables for single/double/half-step unipolar drive, one table per direction.

Raspberry Pi → Arduino (serial) — short, human-readable ASCII commands, each character sent 5× in a row for reliability, e.g. MON/MOFF (drive motors on/off), CON/COFF (cutter on/off), RON/ROFF, VON/VOFF, ZON/ZOFF (red/green/blue status LEDs), and MFREC30MFREC90 for seven preset drive speeds.

Problems Along the Way

  • Welding the chassis — thick wire wouldn't take a clean joint until they started wrapping each junction with a thin coiled wire first, giving the solder something to close around.
  • Motor selection — DC motors were prototyped first, but steppers won out because step count gives distance-traveled for free. Getting enough torque to carry the robot's weight over the whole course took more than one redesign of the driver circuit for higher current.
  • Vision under real lighting — development started before the real test rig existed, using an improvised home-built stand-in, so the color thresholds were tuned somewhat blind to the actual competition lighting. Locking the camera's white balance and exposure was the main mitigation.

What They'd Do Differently

  • Build (or borrow) a course rig at the very start of the project, not near the end — it's the only way to test vision honestly, and it also gives a fast, concrete way to check whether the robot is even sized correctly.
  • Consider dedicated color sensors instead of a camera, if the mission allows it — a lot of complexity in this build exists purely to compensate for camera/lighting variability.
  • Work out the actual power the motors need to consume for good performance before picking them, not after — guessing low cost the team multiple motor swaps mid-project.
  • Many mechanical parts, and even the rig's own insulators, were 3D-printed; find an affordable commercial partner for that ahead of time rather than during the crunch.
  • Budget at least three months, full-time, for a project with this many interacting sensors and subsystems.

In the team's own words, the goal was never just to win the category: they built E-wanna hoping the approach could genuinely be extrapolated to real high-tension lines, and to help push the national maintenance problem it's modeled on a little further along.

Team

Team FutBot USB posing with E-wanna mounted on the display rig at the UNETBots 2015 competition

Team FutBot USB at UNETBots 2015, San Cristóbal.

E-wanna was designed and built by Jorge Pérez, Said Alvarado, Néstor Sánchez and Leonardo Ward — team FutBot USB, Universidad Simón Bolívar — for the DESAFÍO category of UNETBots 2015.

Posted In:
Robotics