Jack Crossfire's blog View Details
Posted by Jack Crossfire | Sep 17, 2015 @ 11:09 PM | 2,672 Views
The haze of the atmosphere & the rise of the mountains above the horizon sell it, like a miniature Earth made of solid nitrogen. It was a miracle of a lucky shot, taken in total silence, as a completely silent world quickly passed below, 4.6 billion miles from the nearest human.

It could have just as easily been a featureless plain. There was no way to redirect the camera because of something interesting or plan for mountains to be in the shot. Only 1 brief flyby in 60 years of spaceflight was the limit of human capability.
Posted by Jack Crossfire | Sep 15, 2015 @ 11:26 PM | 2,755 Views
A simple surface classifier using variance didn't look any different than any other method. Among basic classifiers for surfaces, there's also comparing high frequency energy. Neural networks fall over when given data outside their training database. When looking at 16x16 blocks without the benefit of anything besides edges, it's hard to differentiate between materials.

Another idea for using multiple chromakey colors appeared. Regardless of the lighting conditions, the path has only 2 colors: the sunlit color & the shaded color. The trick is identifying color & threshold.
Posted by Jack Crossfire | Sep 14, 2015 @ 01:27 AM | 2,740 Views
Interesting comparison between the same window size from the 640x480 webcam & the 4k 'pro. That makes the idea of surface detection seem more practical. Unfortunately, a practical system would have to get by with a crummy webcam. It would have to use some kind of still photo mode that could go higher than 1080p.
Posted by Jack Crossfire | Sep 12, 2015 @ 11:05 PM | 2,517 Views
There was a theory that texture matching could be a better path detector, but it would require much higher resolution. Recorded 7 miles of 4k. Then the battery died. Did it at higher speed than the range test, with extra cargo. That's the only explanation. The battery only took 4444mAh, so it's lost a lot of capacity.

After walking the final 1.25 miles, finally viewed the footage.

The nearest part of the image had well defined differences between path & dirt.

Edge detecting makes it resistant to shadows, still leaving a well defined boundary. It would merely need to compare the amount of noise to find the path.

...Continue Reading
Posted by Jack Crossfire | Sep 09, 2015 @ 11:24 PM | 2,681 Views
10mph in slow motion (5 min 50 sec)

Another 95F outing yielded the 1st slow motion from truck cam. It was truck cam which revealed a lot of pectoralis flexing at a specific point in leg movement. It only happens during high speed.
Posted by Jack Crossfire | Sep 08, 2015 @ 11:30 PM | 3,137 Views
It was a really brutal RC truck drive in the 95F heat, set to 10 min/mile. Got cramps, nauseous, & dehydrated. The 1st charge with the accucell revealed it could probably go 12 miles on 5Ah. Consuming constant power instead of constant current would give slightly less range for the last 2 Ah.

The accucell uses the main power leads to measure voltage, so it measures slightly above the voltage from the balancing leads. The resistance in the balancing leads doesn't seem to impair it, though it could use a test to see how much current is going through the balancing leads.

The passive matrix display brings back memories of the very 1st laptops, 30 years ago. That was as good as it got.
Posted by Jack Crossfire | Sep 07, 2015 @ 06:41 PM | 2,392 Views
Not sure RC trucks were designed for this kind of distance off road, but by now, ground vehicles had gone hundreds of miles on pavement without issue.

6 mile offroad drive (12 min 24 sec)

Had to program for 9min/mile to get 10min/mile. Steering was quite manual on dirt. A wheel fell off when going in reverse at the end, but otherwise it did the business.

According to the internet, the reservoir was at 46% of capacity.

...Continue Reading
Posted by Jack Crossfire | Sep 07, 2015 @ 05:07 PM | 2,207 Views

So after 2 years, it was finally time to break out the Accucell 8150. It had the coveted capacity guage, very important for measuring the total range of a battery. It was always assumed it couldn't charge less than 3S because it only had balancing pins for 3S & the crummy Passport charger wouldn't charge unless the battery was plugged into the balancing pins.

It turned out the internet said it would charge all the way down to 1S & it didn't require the balancing pins to be plugged in. Balancing was optional. It would balance 2S by plugging the 1st 2 pins into any of the balancing headers. The ideal use was in balancing mode, so the next problem was moving the balancing header closer to the charge header & providing a pin strip which could plug into any battery.

Opening it the way the internet recommended broke 1 of the tact buttons. Half the circuit was dedicated to just balancing.

The balancing pins were all in parallel.

...Continue Reading
Posted by Jack Crossfire | Sep 07, 2015 @ 02:00 AM | 2,505 Views
Hill intervals (8 min 42 sec)

10min/mile uphill
7min/mile downhill

Did it 4 times in dry 85F with the truck. The motor was super hot after ascending, proving the hot glue holding the hall effect sensor was the problem rather than the glue holding the magnet.
Posted by Jack Crossfire | Sep 06, 2015 @ 01:13 AM | 3,305 Views
After 10 months, the tachometer broke & the truck flew down the mountain. The leading theory is motor heating made the hot glue soft. A hard crash pushed the tire into the hall effect sensor. The glue was soft enough for the hall effect sensor to slip into the path of the magnet. The magnet broke off.

The original magnet used hobby grade epoxy. The new bond used the last of the J-B Weld from 8 years ago which failed miserably at repairing landing gear. The duck's guts is now considered Loctite epoxy for metal.

It was an awful alignment, but this motor also shed a lot of brush dust. It's on its way out. The tire will impact this alignment a lot sooner.
Posted by Jack Crossfire | Sep 03, 2015 @ 11:34 PM | 3,243 Views

So Disney finally announced the fabled Star Wars themed quad copter to coincide with the movie. The quad copter is just a licensed Air Hogs toy, fully manual, no boundary sensors, sonar or camera.

The blog was told of plans for such a thing 2 years ago, but if we could make it autonomous, the license wouldn't have gone to Air Hogs but the one & only Jack Crossfire Inc. Of course, the level of autonomy was quite unattainable even by today's standards. They wanted the speed & accuracy of a vicon tracking system for the cost of a toy. It was still intriguing that the vision actually came to fruition & what Air Hogs shipped had the exact same size & propellers as the proof of concept we made.

This size was not big enough to lift the amount of electronics required for any kind of autonomy. As for the foam styling, there's probably a good market for flying prop replicas. No matter how long the fact that something looks like a historic artifact can keep their attention, they only have to buy it once.
Posted by Jack Crossfire | Sep 01, 2015 @ 11:01 PM | 3,956 Views
10mph intervals from oblique angle (11 min 47 sec)

This angle came out almost professional looking. It might still be an unseen angle in any movie, since no-one has ever run 3 miles with an RC car cam.

Running form is a lot more discernable from this angle, but it's much harder to avoid bikes going 15mph. The combined speed of an impact would be 25mph. Ran off the road once, so driving from this angle is still harder than driving from behind. A purely side view still requires an autopilot.

Unfortunately, the work done on path following would not allow a side view. The car would weave from side to side, manely staying in the center of the path. There is no algorithm which could hug the side of the path. It's another area where lookup tables or convnets differentiating materials could be the best option. It still needs a previous copy of the drive where the materials have been manually labeled.
Posted by Jack Crossfire | Aug 25, 2015 @ 01:37 AM | 2,232 Views
Running at 10mph (11 min 49 sec)

6 * 200m downhill intervals at 10mph
2 * 400m uphill intervals at 8.5mph
1 * 400m uphill interval at 8mph
Had to slow down due to nausea.

Steering gets real hard at 10mph. That's almost twice the cruising speed. Lately gave more thought to horizon detection & using only that for optical flow.
Posted by Jack Crossfire | Aug 22, 2015 @ 06:51 PM | 2,429 Views
The problem with convnets is they only work as classifiers, not position detectors. There are examples of another algorithm being used to find feature positions, then the convnet being used to identify the features. Even then, there was an example of road sign detection which was a lot worse than least squared differences.

The driving algorithm does pretty well finding the car's position in time, but falls over when looking for the path offset in the frame. Even 2 drives at the same time of day can't be aligned because the shadows changed slightly.

There was an idea of using a convnet as an expensive replacement for the least squared difference calculator. Use it to classify an image offset at multiple points. Pick the position which gives the best match. Convnets are supposed to be position independent, so they wouldn't work in this test.

Another idea is using a convnet to classify a material as path or not path. This might be more feasible. For every frame on a drive, a new set of weights for the kernel is calculated. The kernel could be passed over an unknown image, creating an output mask based on the material. The resolution might be too poor. The camera resolution isn't high enough to give much difference between materials.

Materials classification leads to the idea of horizon detection. The horizon is more invariant than the nearby path, so using just that or masking everything below it might give better optical flow. A variance calculation of each line might yield the horizon or it might be discernable for a convnet.
Posted by Jack Crossfire | Aug 19, 2015 @ 12:51 AM | 2,903 Views
Making Robots (1 hr 3 min 58 sec)

Good coverage of current topics in robotics. Most interesting was the lack of any work being done on flying machines. 5 years ago, Vicon guided quad copters were the only topic. Now, they're all gone.

The speed & strength of modern actuators compared to years ago. The gas driven hydrolic actuators driving Boston Dynamics creations are a lot faster than construction equipment. The electrically driven hydrolic actuators were amazingly strong for their speed. Much has been done to get powerful hydrolic pumps & valves from brushless motors. We're not far from lifelike human motion, but the problem of safety is going to keep any robot as strong & fast as a human from going near any human.

A way to make a robot aware of when it could break something must be found before it can interact with a human. There was some promise in robotic ability to sense resistance, but it has to know which way a joint can bend.

The mane find was a blurb about convolutional neural networks. They became prominent only after 2012. In 2008, I became disillusioned with neural networks because to truly become learning machines rather than expensive lookup tables, they needed to be recurrent. There was no easy way to train a recurrent network or model a pilot in a neural network. Lookup tables would do a better job.

Convolutional neural networks seem to be purely used in image recognition. The fundamental unit of the convnet is the convolutional kernel, a fixed matrix which is multiplied by every region of an image to produce blurring, edge detection, & sharpening.

Now, they apply several kernels with different parameters on the entire area of the same image. The different parameters of each kernel are trained using backpropagation. The output of an image which has been processed with these kernels can be fed into another set of kernels to process higher level features. Fortunately, there are already libraries which implement all this.
Posted by Jack Crossfire | Aug 13, 2015 @ 11:13 PM | 2,506 Views
The quest for machine vision moved to optimization, because it most likely will have to run on the 900Mhz Raspberry in a 1st test.

A quick test at 160x120 showed complete loss of synchronization at the lower resolution, with different lighting. There was definitely an advantage to 640x480 & above, with the bare minimum at 320x240. Using color for matching was hopeless, whether the color was 160x120 or 320x240. Color was required for decent motion searching. The optimum source image was 640x480, with downsampling to 320x240 for all processing, & further downsampling to 160x120 for the 1st pass of motion searching.

Synchronization of any kind between 2 videos during the shady time of day was impossible. The shadows changed position too much. Synchronization between a shady video & a full daylight video was still quite good, though optical flow was hopeless. Since the full daylight video had some compatibility with all the other videos, all the reference videos should be in full daylight. FLANN pair matching was identical but much slower than brute force matching.

Another drive slightly after full daylight but not sunset was pretty awful at optical flow, though it nailed keypoint matching. Reduced the reference frame window to 10 & reduced the reference frame rate to 1 frame every second. This didn't affect the keypoint matching.

Made a logarithmic motion search use a 2x downsampled image, which gave better results than either...Continue Reading
Posted by Jack Crossfire | Aug 09, 2015 @ 12:59 PM | 2,893 Views
The rumors that computer vision takes enormous amounts of clockcyles have proven true. Last week's theory that matching homography of keypoints would yield the most similar frames was absolutely wrong. The best match was revealed by the frames with simply the highest number of matched keypoints.

Next came detecting the optical flow of the matched frames. There was computing the average position change of the matched keypoints. This was terribly rough. The keypoints were terribly mismatched.

Better results came by old fashioned macroblock searches. It might be faster to apply the Lucas Kanade method to the keypoints, but the brute force method proved the feasibility.

Not sure Lucas Kanade would handle the large differences in position between the 2 frames. The objects don't move incrementally, but occupy totally different parts of the image & don't match well enough for feature matching to produce any points to track.

The optical flow got better when the search for best macroblock was exhaustive instead of logarithmic. Narrow objects like poles got missed in a logarithmic search. It got even better when the motion search used full color instead of greyscale. But using full color instead of greyscale for the keypoint matching actually made it worse.

Synchronizing video using SURF (4 min 59 sec)

A nifty video of the current & reference videos being synchronized by feature point matching but not optical flow emerged.

Drove another 6 miles, recording several drives of the same section of test track in smokey conditions. The battery can't go any farther. An SD card glitch caused the recording to stop. The web server was still running, but showed a 404 error, a sign the filesystem was gone. The lighting change did make a few more frames glitch, but it was still pretty good for no color correction. Color correction will add still more clockcycles.

The video had to be downscaled to 320x240 to get any reasonable processing speed. This didn't seem to degrade the results.
Posted by Jack Crossfire | Aug 06, 2015 @ 11:10 PM | 2,724 Views
The day job had no useful resistors for measuring current, so tried to add a 10mV/mA range by doing this.

Trimmed it to nearly 0.1R, but the result was a very noisy waveform which spilled noise into the other ranges. The wire was an antenna. The day job had a 1R 5%, so whacked that in. It was still noisy. Left the 10k tacked on the end of it & it acted like another antenna. Removed the 10k completely, which gave a useful but still noisy signal. The 0805 10R wasn't a perfect fit for the 10k position. Fortunately, the day job has many 0402 10R's.

The result was 1mV/1uA, 90mV/1mA, or 0.99mV/1mA, very useful ranges for measuring the coveted 2ma-10mA range. The full range was 0mA-20mA. The oscilloscope seemed to have been doing better with 90mV than 9mV & it skewed the other ranges less. Could finally see how much an interrupt handler was using.

Also, the switches started interrupting the circuit with more usage, so had to go into SHORT mode to change ranges. There was now little point in dual contact switches with all the problems of requiring parallel resistors & not being able to have more ranges. It's something Dave probably couldn't foresee. Fortunately the OFF mode still passes current while not powering the LED, so you needn't drain the battery to keep the DUT going.

After much testing, the mane advantages are changing ranges without interrupting the circuit & plotting transients. The mane limitations are lack of ranges...Continue Reading
Posted by Jack Crossfire | Aug 06, 2015 @ 01:36 AM | 2,718 Views
Reviewing the schematic for the uCurrent, the key to its ability to change settings without interrupting the circuit is switches with 2 contact points. The resistor network is always in the circuit path. Only the SHORT option gives the current a shorter path, so avoiding accidentally switching to nA requires being in SHORT mode.

The sacrifice in using dual contact switches is 2 resistors always have to be in parallel. Working around that requires the ranges to be powers of 1000. The resistances have to be in ascending order & all 3 resistors have to be populated. The output of each resistor is always amplified by 100x using the same amplifier chain.

It really is a bit of slight of hand that lets the uCurrent work the way it does. It was one of those unique inventions born from a once in a lifetime observation developed over a lifetime of experience.

The easiest way to get the coveted 2mA-10mA range is replacing the 10R with 0.1R & replacing the 10k with the 10R. This would create a new 10mA range with 9.9mV per mA. The mA range would then give 0.9mV per mA & the uA range would still give 1mV per uA. It might be good enough, but hard to read in the 10mA range.

Unfortunately, the 0.01R resistor can't be trimmed to get 1mV per mA again. It's a special resistor with sense terminals on the substrate.
Posted by Jack Crossfire | Aug 05, 2015 @ 01:02 AM | 2,773 Views

A nice bit of kit arrived at the day job. Modern gadgets live & die by their power management firmware. It's not like the old days when a power switch was the final word in whether the batteries drained or lived. Now, the typical gadget has a full power mode, low power mode, off mode, charging mode, all controlled by software with no direct user control. If the software doesn't work, the gadget bricks with no way out for the user.

Many a gadget has been instantly wiped off the face of the Earth because it didn't turn off properly, killing its batteries, or didn't turn on. History is littered with Gopro's draining their batteries in standby mode, iPad's going dark & never turning on again, Lipo's drained past their self destruct point or overcharged.

Keeping the day job gadget from becoming a statistic consumed a lot of testing. The mane problem was measuring current through the gadget's full range of hundreds of mA to tens of uA. The traditional "mowti"meter couldn't do it without shutting down to change ranges & faking the battery voltage with a bench supply set 2V higher than the battery voltage. Burden voltage was a big issue. There was no way to test transitions into charging mode with the bench supply.

As simple as it is, the uCurrent was the easiest way to do the job. It was a lot more reasonable than picking out the right resistors, op-amps, & switches, building up a circuit to test current ourselves. The...Continue Reading