Welcome to WebmasterWorld Guest from

Forum Moderators: buckworks

Message Too Old, No Replies

Warehouse Automation - Transformed in 6 weeks

Apple iPad Pick List, Barcodes, Camera & Inventory Systems

12:06 pm on Sep 23, 2010 (gmt 0)

Junior Member

10+ Year Member

joined:May 25, 2003
votes: 0

Warehouse Automation, iPad Pick List, Barcodes, Camera & Inventory Systems

Inspired by a couple guys from this 2007 topic: warehouse management [webmasterworld.com]

Last year
Hard to imagine, just a year ago, we were in a cramped, dark, messy, and animal infested warehouse. Bats (yes, found multiple bats!), snakes, and black widows. And the metal roof was crazy. Just the tiniest drizzle sounded like a hail storm inside. At least it was cheap (for California standards).

Now, after a huge round of improvements
But now, we're in an amazing new Colorado warehouse (for the last 10 months). Radiant heat throughout, 3800 square feet, motorized roll up doors, and three bathrooms. In a beautiful little town, surrounded by mountains.
  • Mobile Pick Cart with Apple iPad
  • Automatic Label Printers
  • 15 Network Video Cameras
  • Updated Packing & Shipping Process
  • Custom Bright Green Shipping Labels
  • Tighter API Integration
  • Inventory Cycle Count System
  • Randomized Inventory Locations
  • Actual Packing Photos Available Immediately on Customer's "My Account" page
  • Custom Shipping Table from a Master Carpenter
  • Wireless Network Stainless Steel Scale
  • Future Ideas: Voice Picking, Pick to Light

Been a whirlwind six weeks at my Colorado warehouse with the latest round of improvements.


Mobile Pick Cart with iPad

Old method:
Pull up an order on the computer. Memorize the order's items. Walk around, picking the products. Bring them back to the packing table. Pack and ship. Go to next order / repeat process again.

NEW method:
30 Barcoded Bins + Apple iPad

On the iPad, tap a button to "create a new pick list". An algorithm assigns each customer order to a unique barcoded & numbered bin on the pick cart. We use three different bins sizes, and the algorithm uses dimensional product info to assign bins.

Since the computer knows the exact location of each product in our warehouse, it maps a pick route from start to finish. There's no back-tracking.

The iPad now displays the first pick "step". For example, it tells the user to pick a quantity of 3 from inventory location C-5-E and put a quantity of 1 into pick bin 17, and a quantity of 2 into pick bin 22.

The user taps the "next" button, and moves onto the next step.

(Our iPad app just runs in Safari. JavaScript caches the page-to-page pick steps, and AJAX handles the printing commands).

Automatic Label Printer
Whenever the user gets to a product that needs a barcode label (mostly items that are cut from a spool), there's a Zebra GX420d wireless printer on the pick cart that instantly spits out a barcode label. Along with our logo and phone number, the label shows the product name, quantity, and of course a scannable barcode. The label printer has an auto peeler mechanism to save time.

If for some reason the user wants to print a label manually, they can simply tap a button on the iPad.

Fish-eye Network Camera
An Axis 212 network camera with fish-eye lens is mounted to a custom welded aluminum arm which positions the camera directly over the pick cart. It gives us a perfect view of the picker, the pick bins and either side of aisle / inventory bins. We archive video of the pick process. This helps us analyze each motion to figure out ways to optimize even further. It also provides an audit trail if there's a problem with an order.

Time-lapse video from the fish eye camera. Sample pick list of me filling just five orders. Trippy huh!?

Battery Power
We obviously need to power the label printer and camera, so we use a $100 battery backup / power supply that gives us about an hour of run-time. We just plug it in whenever we're not picking orders.

Packing & Shipping Process
Once the pick list is complete, the user brings the cart to the packing and shipping table.

Each bin is labeled on all sides with a barcode, and a number (1 to 30). We simply scan a bin, and the order pops up on the computer screen. We empty the contents of the bin, scan them with our wireless barcode scanner (to verify everything is correct), and then pack them. We place the package on the scale, and scan the barcode on the package which tells the computer exactly what type of package it is (for example, large priority mail box, flat rate priority envelope, padded mailed, etc.)

Some packages don't have barcodes. We automatically snap photos from three angles, and feed these photos to proprietary image recognition software. It figures out exactly which package is on the scale with almost perfect accuracy. This process is still in beta, but I've gotten it down to about six-tenths of second.

We record which package was used to ship the order for a variety of reasons. The main reason is to automate re-ordering of packaging supplies. We keep inventory levels of all packaging supplies.

Label Printing

Custom Bright Green Shipping Labels
Our standard shipping labels are 4" x 6". We re-arrange the label layout a bit so we can fit a 3/4" bright green color bleed on the top of the label with our logo and phone number pre-printed. Its an inexpensive and easy way to add a little more branding to our packages. 95% of our labels print with this, while certain international labels print on a larger format laser printer. We've got an auto-peeler, so the label pops out pre-peeled, all ready to be applied.

Automatic Pick List Labels
Small barcode labels automatically come out whenever the picker gets to a product that needs a label. Or they can be generated manually by tapping a button on the iPad.

Raw ZPL II Printer Code
To optimize print spool speed, and print quality, we send raw ZPL code to the printer. An image file (PDF, PNG, etc) could be 60k, whereas the ZPL text is just 1k. We don't have to worry about resolution.

Direct Label API Integration with USPS & UPS
We used to run a convoluted method to send XML files to Endicia/Dazzle on our shipping PC. And we used to have a messy ODBC link with UPS Worldship. Now we generate shipping labels using Endicia's Label Server API, and UPS Shipping API. This gives us a deeper level of control, and makes things faster / more reliable.

Pre-generated & Cached Labels
It can take anywhere from one second, to sometimes 15 seconds to get the label back from Endicia's Label Server API. One second isn't too bad, but every bit of time savings helps. We try to pre-generate as many labels as possible (where we are pretty sure of the weight and shipping method). We run this process in the background, and cache the labels. If a cached label exists when the order is shipped, the label is instantly fed to the printer. If we mis-calculated the weight or method, and the cached label isn't used, we'll just automatically refund/cancel it.

UPS Paperless Invoices (EDI)
We ship worldwide, and most countries already support paperless invoices, so its just one less thing we have to worry about printing and affixing to the package. We can just put a single 4x6 label on the box.

Warehouse Layout & Organization

Inventory Location Method
We've got a handful of aisles, each named with a letter (A, B, C…)
Each aisle has columns, named with a number (1, 2, 3…) Just like street numbers, one side is even, and the other side is odd.
Each column has six rows, named again with a letter (A through F)

So location C-3-D would be on aisle C, column 3, and the 4th bin up.
Location C-2-D would be across from C-3-D.

If we have excess inventory that doesn't all fit in a bin, we have back-stock locations too.

Randomized Inventory Locations
Logically, you'd group ducks with ducks, and trees with trees. It works OK to group similar products together, but once you give every part number its own unique inventory location, it doesn't really matter where they are placed. We find that, by having similar products physically separated, and placed in seemingly random places, it greatly improves picking accuracy. The pickers now don't even think about what product they are picking, they just go to a certain location and pick from that bin.

If you have yellow ducks and orange ducks right next to each other, eventually a yellow duck will find its way into the orange duck bin by mistake. Perhaps a friend comes into your warehouse and wants to look at a duck. They grab the yellow duck, look at it, and then carelessly put it back into the orange duck bin.

Now imagine, if you had yellow ducks next to green shrubberies, and on the complete opposite side of the warehouse, had orange ducks next to green trees. Your friend is much less likely to put that yellow duck back into the bin of trees. And if he did, it would be pretty obvious.

We generate a list of all our part numbers, sorted by the most commonly picked items. Using this list, we generate inventory locations for each product. We put the most popular items on the first aisle, and the least popular items furthest away on the last aisle.

Camera System
15 Network Cameras
We are using 10 x 2MP Vivotek cameras, 2 x 10MP Arecont cameras, 1 Axis 215 PTZ dome camera, and 1 Axis 212 fish-eye camera.

I'm hardly ever in the warehouse (so far only 6 weeks this year), so its really good to have piece of mind while I'm away. I can check in to make sure things are staying clean and organized. We can use the recorded video as an audit trail if there's a problem with an order to pinpoint exactly what went wrong. And hopefully prevent it in the future.

Photos Available to Customer (of their actual order)
This one's really cool! We've got five cameras pointed at our shipping table from various angles. Our system automatically snaps a handful of photos while the customer's order is being packed. We make these instantly available to the customer, so they can see how their exact order was packed (on the My Account page).

Here's what we show on the My Account page along with the three photos:

Why Photos?
At the precise moment your order is weighed, photos are automatically snapped by three fixed-position cameras. These photos are labeled with your order ID and instantly fed into our proprietary software. We then measure the package in 3-D and analyze color composition in order to categorize the delivery medium. Once the order's information is processed, a shipping label is automatically printed and placed on your package.

In addition to the photos, we record shipping sequence videos for every order. If any problems should arise, this documentation becomes part of the audit trail used in researching your order. And we regularly review video footage of our shipping center, to continually look for ways to improve our operations.

We provide these photos to you, because we think that such transparency makes for good customer service, and hey--we think the technology is somewhat cool.

Shipping Table
We've made a custom ship table that conveniently holds the most popular packaging supplies. The ship table also houses:
  • Cheap PC
  • 24" LCD Screen
  • 12" x 12" Stainless Steel Doran Scale, with wifi adapter (Model: 7000XL)
  • 2 x Direct Thermal Label Printers (Model: Zebra GX420d)
  • 2 x Wireless Laser Printers
  • 1 x Symbol Barcode Scanner (Model: LS9208)
  • 1 x Wireless Honeywell 2D Barcode Scanner (Model: 4820SR)
  • Handful of routers and power backups

Network Scale
Really complicated to set up. Their tech support didn't even know what Linux was… So I was pretty much on my own. Using a DIGI Connect RS232 Serial to Wifi adapter, I gave the adapter/scale its own IP address. Played with a bunch of configuration settings, and finally figured out a way to communicate with the scale from a custom perl script.

The scale averages weights 12 times a second, and sends current weight to my perl script 3 times a second. The perl script maintains a constant connection with the scale, and re-connects automatically if needed.

I save the last stable weight reading to a file, which can then be used from my backend systems. I've made some triggers available too, for example, I can have the perl script "ping" a certain URL if the weight changes (and motion stops). This will be useful for further automating the auto image recognition system. The user could place a package on the scale. As soon as the scale has a stable weight, the perl script would ping a URL to begin the image snaps / recognition process. And about 1 second later, an appropriate shipping label would automatically print.

Inventory Cycle Count System
Rather than be overwhelmed with a massive inventory count at year end, we try to count a few items per day, each day of the year. This way we can count each product at least twice a year, and it doesn't take more than 15 or 20 minutes a day. A system keeps track of who counted what, and when. It then queues up the most urgent part numbers that need to be counted next.

Barcode System
Linear vs. 2D
Its a brand new implementation, and so far working really well. Before, we didn't have barcodes on anything, and stupid mistakes were common. For example, we'd accidentally send the customer a blue duck instead of a red duck.

I've experimented with a handful of symbologies and originally liked the 2D datamatrix style because it didn't take up too much space on a label. But it seems the linear Code 128 is overall the best choice. Readability with our scanners is quick. We aren't encoding much data, and can fit the barcode into about 1/4" x 1 1/2"

Data Format & Barcode Tracking
We have full control over the design process, manufacture 95-something percent of our products, and are only one selling them. We don't have to worry about UPC codes. We've made up our own simple data format:

x = quantity in pack
y = unique part number (auto increment database field, so far from 1 to 1500 or so)
z = unique purchase order id

An example could be: 10-556-345
Which would mean there's 10 red duck beaks in the package and they are from purchase order 345.

We use the purchase order to track supplier defects. For example, we can see if defects are coming from a certain purchase order / manufacturing batch.

I've thought about using a unique serial number for each label, where no two barcode labels would be the same. This would allow us to track a few more things, but I don't think its really necessary now. From what I understand, Zappos does this, and they call it a "license plate".

Scanning User Interface
The entire backend system runs through a browser (rather than a desktop app). Of course, a barcode scanner just plugs in to a USB port and simulates a keyboard. If you scan a barcode, the data is "typed" into the computer.

To handle barcode scanning in our web interface, I programmed our scanners to send an open bracket "[" + the actual barcode data + a closing bracket "]".

There's a couple hidden form fields and a javascript event watcher that looks for an open bracket keystroke, and then starts writing the barcode data to another hidden field. Once it sees a close bracket, it knows it just got a barcode, and then handles it.

The system automatically displays a confirmation indicator next to each line item on the order as it is scanned. If partial quantity is scanned, it shows up orange. If the exact amount is scanned, it shows up green, and if too much is scanned, it shows up red.

It obviously won't let the user proceed if there's an error. If a completely wrong product is scanned, we do an AJAX call with the part number scanned, and get the name back.


There's more to do, but I'll save it for next year.
For example...

Voice Picking
I whipped up a super beta version of this just to test the concept. It works fine.
Basically, the picker can wear a headset, and receive voice directed commands.
Something like: "Go to location E-40-D and pick 2 quantity. Put them in bin 12."
Then with voice recognition, they can say, "OK", and it'd move on to the next step. Or they could say "repeat"…

Pick to Light / Put to Light
Each inventory bin will have an LED light that will be individually controllable from our web server. When the picker is on a certain step, the bin will light up.

And the bin on the pick cart that they are supposed to put the product into will light up.

And when they are back at the shipping table, we will use a dimensioning algorithm to suggest a box/envelope size to be used for the order. A light next to those boxes/envelopes will turn on, thus visually directing them to the appropriate package.

With some training and optimization, the algorithm will be able to make better decisions than the shippers. So we won't waste oversized boxes.

Infrared Beam Trip Sensors
Think of the sensors on the bottom of your garage door. One is an infrared emitter, the other is an infrared receiver. Same thing your TV remote uses.

In the same device that holds the LED to light up the bin, there will be infrared emitters/receivers.

As soon as someone sticks their hand into a bin, the infrared beam will be broken. We'll be able to tie this in with the pick system. If for example, they accidentally grabbed something from the wrong bin, or put something into the wrong bin, a buzzer would go off, and the bin could flash. When they grab from the correct bin, and place into the correct bin, the lights would turn off, and the next step would appear.


I was halfway across the world, in Kyoto, Japan for a month or so. I got a nasty email from my main shipping guy at 2 am. He "went off the deep end" and was about to quit half-way through a busy Monday. I begged him to stay on and ship orders at least until I could find and train a replacement.

I hadn't been back to the US in eight months, and things were starting to slip. Someone who is angry and quitting isn't the best person to train a new employee. Plus, I hadn't even met this person yet! I was on a plane the next day.

On the way back from Japan, I stopped in Beverly Hills, and just when I thought it couldn't get any worse, a bad lightning storm took out most of our electrical equipment. We had battery backups / surges, but pretty much everything was fried: computers, printers, routers.

There were too many orders piled up and a brand new person running around with no clue what to do. A bit of a mess! We're known for shipping orders within hours. Customers were upset when it took two to three days.

Anyways, I hit the ground running, and have been working crazy hours, 6 to 7 days a week. Rewarding to see all this progress. And now able to hang out in far-away places again without worrying :)

Would love to hear your comments: if you have any ideas for further optimization, or other warehouse tips.
1:32 am on Mar 14, 2011 (gmt 0)

Junior Member

10+ Year Member

joined:May 25, 2003
posts: 194
votes: 0

Yep, everything is photographed from multiple angles as it is scanned.

And also photographed when the sealed package is on the scale / weighed.

Haven't thought to put a photo inside the package, but certainly could!

Don't actually include any paperwork. No packing list, no invoice. Trying to be environmentally friendly.

Only occasionally do people seem irked about no paperwork, but most don't seem to care.
2:21 pm on Mar 14, 2011 (gmt 0)

Senior Member

WebmasterWorld Senior Member 5+ Year Member

joined:June 20, 2006
votes: 4

so how much fun is it when a customer claims that an item wasn't in their shipment?
4:20 pm on Mar 14, 2011 (gmt 0)

Junior Member

10+ Year Member

joined:May 25, 2003
posts: 194
votes: 0

::priceless:: hehe

There are actual legitimate cases though where the item may have fallen out in transit. Perhaps it wasn't sealed properly. Or one recent case where the item was so tiny that the customer didn't even notice it was in the package until they looked again.
5:15 pm on Mar 16, 2011 (gmt 0)

Junior Member

10+ Year Member

joined:Feb 13, 2005
votes: 0

philbish, from a technology standpoint, it's an interesting process. But, what is the problem that you are solving with multiple photographs of each and every product going into a package? Do you really have that many dishonest customers who claim you didn't send something? Are your chargebacks high? Are you warehouse workers picking the wrong products that often?

The tradeoff in slowing down the packing process versus the benefit of (?) is what?
5:37 pm on Mar 16, 2011 (gmt 0)

Junior Member

10+ Year Member

joined:May 25, 2003
posts: 194
votes: 0

The photographs are all automatic, so the employees don't have to even think about them. They just scan the item as normal, and the photographs are triggered automatically from the barcode scanner.

We don't have many dishonest customers, and there's virtually no chargebacks. Warehouse workers are already picking with 99.9% accuracy.

Its just another useful auditing mechanism, so I can go back easily and see exactly how the products looked. I'm hardly ever in the warehouse (maybe a few weeks a year). The rest of the time is spent travelling, and so I don't get to see the products much. I still want to keep an eye on it, and make sure the packaging is OK. The photos help me see whats going on.

There are cases where the customer claims they didn't get something. Before, we'd really have no idea what happened. Now with the photos, we can go back and see what happened. Perhaps we did indeed send it, but it fell out of the container in transit.
5:49 pm on Mar 16, 2011 (gmt 0)

Senior Member

WebmasterWorld Senior Member 10+ Year Member

joined:Dec 28, 2002
posts: 1763
votes: 0

Corbing, I asked pretty much the same question. His ingenious technology fixes things that aren't problems for most online sellers.

Preposterous to blame USPS for such high loss levels. Our losses run around .01%.
5:56 pm on Mar 16, 2011 (gmt 0)

Senior Member

WebmasterWorld Senior Member 10+ Year Member

joined:Dec 28, 2002
posts: 1763
votes: 0

Philbish: "Perhaps we did indeed send it, but it fell out of the container in transit."

nearly 2% of your shipments fall out of containers?

And if they fell out, wouldn't the package arrive anyway?
8:55 pm on Mar 16, 2011 (gmt 0)

Senior Member

WebmasterWorld Senior Member 10+ Year Member

joined:May 8, 2003
votes: 0

I installed a similar system recently. Not a single item that has been shipped wrong since I introduced it 10 weeks ago. I did all the programing myself - and I was so excited about the possibilites I nearly went over the top. I got this idea that I could send customers SMS notifications when their parcel would be packed and they could then see live video footage. However my employees didn't like that very much so I skipped the idea.

Since every item has to be scanned anyway I can be sure that it was on the packing table and that's enough for me. One problem we had: We have a lot of small items and we use paper as packing material. It sometimes happened that customers claimed they did not receive anything - and then it turned out they had thrown out the item with the packing material. We now use colored paper for wrapping the items, and white paper for padding the box and this has solved this problem.
2:32 pm on Mar 22, 2011 (gmt 0)

New User

joined:Mar 22, 2011
posts: 1
votes: 0

Philbish: How do you send raw ZPL code to the printer from within a browser? This is something I've been trying to get right.
3:02 pm on Mar 22, 2011 (gmt 0)

Junior Member

10+ Year Member

joined:May 25, 2003
posts: 194
votes: 0

I basically use a dedicated computer in the warehouse as a server. I send an http request to this computer with the name of the printer and the zpl code. The computer is running apache. The php file that is hit then runs an exec() command to send the text via the unix LPR command. I actually save the zpl to a temp file, and then include that file path in the LPR command. It might make a difference how you add the printer to the computer. I did it on a Mac, and just set it up using CUPS, by going to localhost:631

Hope this helps, and let me know if you're still stuck.
10:26 am on May 8, 2011 (gmt 0)

New User

joined:May 8, 2011
posts: 1
votes: 0


Thank you for a great post indeed. I run a website in Dublin, Ireland and I have implemented the weighing scales and 2 IP cameras that automatically capture images as the closed parcel is weighed, since we implemented this 2 weeks ago there has not been a case of anything missing in a parcel, we also send the weight to the customer as part of the dispatch email.

The images allow us to audit quality of packaging, they also help track a parcel if one was to go missing, we do not yet email the image to the customer but I think we might do this very soon

Thank you for your help on this.

[edited by: lorax at 12:38 pm (utc) on May 8, 2011]
[edit reason] snipped URL [/edit]

8:11 pm on May 17, 2011 (gmt 0)

Senior Member

WebmasterWorld Senior Member 10+ Year Member

joined:Nov 12, 2003
votes: 0

Sounds like a great system, however the weakest link is the human side.

We cut down on the number "wrong item, wrong count, missing item" type problems, with an employee incentive.

If they could keep their mistakes below 1 in a 1000, they got a nice little bonus in their paycheck. It worked miracles.

The problem with most shipping departments, is they go for maximun speed, and never double check the contents.

If you add up the cost of the return, and the reshipment, and the customer service, plus the upset customer; it more than pays for the financial incentive and the time it takes to double check a shipment.

Keep your monkeys happy, and also make quality management a priority.
This 42 message thread spans 2 pages: 42