text:
The Unicyclopedia/Muni

Introduction
Muni is an abbreviation for mountain unicycling, and is a description for the practice of unicycling on any sort of rough terrain. You don't necessarily need a mountain for Muni - it's the terrain that makes it Muni, not where the terrain is.

Basic techniques
It is important to lower the seat and to lower the tire pressure. These two simple adjustments make a tremendous difference. Try to keep one hand on the saddle and stand up over the saddle when you go through difficult sections, as this will make it easier to exert more force through the pedals. It is important to have sufficient balance in order to stay on top of the wheel without changing your riding direction too much. The tire will go its own way; you will have to learn to follow it. An excellent exercise is to practice riding a rail. This will force you to stay on top of the wheel without any adjustments in the riding direction.

Rolling out of drops
Big drops may put tremendous stress on the axle if you do them wrong. To reduce the stress, you may roll out of the drop. The point of this is to transform the downward force into a forward and downward force on the muni. To do this you will need some forward momentum as you go off into the drop, and then fold slightly at the waist, and the muni will try to shoot out in front of you instead of getting compressed under your weight. It is easiest to drop from a stillstand, but as you get more confident it is better to just roll the edge into the drop. Try to land with the cranks horizontal and absorb the shock by first flexing your legs, then at your waist and followed by your upper body and arms. If you have practiced hopping in both pedal orientations it may not matter in what orientation you are when you hit the ground, otherwise you can try pedaling the wheel half a revolution or so into the right position before you land. It is important to stand up on the pedals, and it may help to lower your saddle.

It is easiest to roll out a drop on a downhill slope. If there isn't any slope below, you may still use an angled rock or a bump, by aiming for the far side. Try to scan the area below for a good place to roll out a landing.

Hopping in any pedal orientation
If you ride in rough terrain with roots and rocks, the tire oftentimes gets stuck behind some obstacle. A solution is to put in a small hop, just enough to clear the obstacle, to regain balance and get going again. Things get more complicated if you are in the middle of a climb. Depending on the riding surface it may not be possible to get going again once you stop. If you are riding in mud or loose dirt, the tire may lose its grip as you put pressure on the pedals. With practice it becomes natural to put in a forward hop to regain momentum every time you start from stillstand. Mounting to stillstand and then doing a forward hop is actually the easiest way to start on a steep hill.

Since it is difficult to anticipate when the tire will become stuck behind something, it is important to practice hopping out of difficult situations in both pedal orientations, that is with either foot back. Also try to practice holding the seat with either hand.

1

Riding in snow
Living in Norway, I have some experience with snow. It is difficult if the snow is deep and if there is ice underneath it, but it can also offer great amounts of fun!

If we assume that there is no ice and that the snow is not very deep, your only challenge is that you do not know anything about the surface you are riding on- where the bumps are and how big they are. This factor makes riding in snow quite exciting.

Riding on tracks made for skiing on is even more fun, because you can ride on top of the snow quite the same as if you were riding on a normal road. It is, however, often a problem to idle or do quick turns as you easily may fall.

Riding on ice, especially ice for ice-skating, is also a huge challenge. You need to sit right on top of your unicycle and do as few moves as possible. If you need to move it should be slow and controlled. Riding on ice is a potential risk to your wrist as you easily may fall backwards.

A studded tire will help you keep in control over the unicycle on ice, see the instructions for instructions on making a studded tire.

Northshore riding
When it comes to riding the "Ewok Village," keep these things in mind:
 * Wood can be slick- gently slow down.
 * Pay attention to the feature, not the 15 foot chasm below it.
 * Most drops from bridges should be done as a rolling hop because the trannys bikers build are usually too far to static hop.
 * Look before you ride and use a spotter- bikers come flying down trails and over structures very fast and aren't going to be looking for a unicyclist going a third the speed he is.
 * Avoid sketchy features, even if they look really cool. I have had a teeter-totter collapse on me 10 feet up!

Nightrides
It is possible to ride your unicycle offroad even if it's dark outside with a headlight. This can be a very memorable or even eerie experience if you're all by yourself! With a good light source, the riding itself is not that much more challenging, although it may be slightly more difficult to correctly estimate the size of rocks and other obstacles in the riding surface.

To ride on gravel a cheap LED headlight may be sufficient, but if you want to ride technically challenging singletrack you will need a better light source. Unfortunately a good halogen headlight is rather expensive. Fortunately these can be built at home at a far lesser expense.

A powerful configuration for unicycling features a 20 W halogen light with a 38 degree spread together with NiMH batteries.

Effective braking
Pedal slower and try to carve sideways if possible. Much like skiing.

title: The Unicyclopedia/Muni


text:
The Unicyclopedia/Street

Basically, street is doing various tricks, preferably while tackling various obstacles. If you only occasional use obstacles, what you do may be considered flatland, but if you lack tricks in your riding, instead of obstacles, it may be considered trials. The crankflip, unispin and their variations are the most used tricks for street, but as only you set the rules, you may even do the most difficult freestyle tricks if you feel the urge to.

Street styles
Even though street itself is a riding style, there is different kinds of street, which I will try to explain here:

Big street
Big street is generally when you do scary things. Like jumping down a huge flight of stairs. One can argue that tricks on flat can be scary as well, but I don't think they are, at least compared to big street. But you are dearly welcome to edit this good page. Anyway, big street often doesn't contain the more technical tricks, like sejflip and such, but it doesn't have to be like that. The opposite of big street would be small street. Watch this video if wondering what that would look like. http://www.youtube.com/watch?v=eqwb6WD8Tmk

Technical street
This is going big, not obstacle-wise, but trickwise. Landing as difficult tricks as possible. The opposite of this would be simple street, but just like small street, this term isn't used.

Oldschool street
The difference between old-school and new-school is, roughly, the crankflip. Oldschool is when you ride like people rode before Mike Clark invented the crankflip. This includes tiregrabs, no- and one-footers and shifties. Newschool is the style most people ride today, with lots of flips.

Feel free to add more street styles

Stair sets
This is my way of jumping stairs, it may not be the best way, but I can do 5 sets with it so, here we go. Basically I place my pedals in my preferred hopping position at the edge of the top stair. Ride backwards or roll the uni back around 2-6 revolutions, depending on what you like best and the length of the sets, so that if you were to ride forward, toward the stairs, when you reach them you would be in your preferred hopping position. From there get on the uni and ride forward at a comfortable pace and rolling hop the stairs. You may want to speed up if the stairs are particularly long. Hopefully you will clear them. Remember that you can still land on the stairs and ride them out, if you're lucky. Remember to BE CAREFUL because you will not only fall, you will fall down the stairs.

Zeroplant Crankflip
This is the first step to learning a crankflip. You basically ride forward, jump, kick the cranks, plant one foot on the ground and jump back onto the uni once the cranks have done one or more rotations. You may want to learn the rolling jump mount before trying this as it teaches you how to land on moving cranks/pedals. Firstly you ride forwards at a reasonably slow pace (go faster as you get more confident). Then lean forward slightly over the uni, jump and kick the front pedal downward and quickly suck your foot back up. Whilst doing this plant your other foot on the ground. Don't "camp" ont the foot. If you do, kick the cranks faster instead. Then jump back on the uni, land on the pedals and ride away.(By the time you land on the uni the cranks should be back where they started)How long you have your foot on the ground depends on how fast the cranks are spinning. This trick teaches you how to flip the cranks for the crankflip. Also, check out Shaun Johanneson's crankflip tutorial on youtube. it covers zeroplant and footplant crankflips as well as normal ones. Crankflip Tutorial Here (Video no longer available)

Footplant Crankflip
Same as above except do a footplant on an object. See above for video tutorial.

Crankflip
The crankflips is, as you may have guessed, is letting the wheel do a revolution, without your feet on the pedals, while in a jump. See above for tutorial.
 * 1) Ride slowly forwards.
 * 2) Lean over the uni, right before you plan to jump.
 * 3) Kick your front foot down while moving your backfoot away from it's pedal, and jump up in the air as high as possible. The kick is more important than the jump.
 * 4) For safety's sake, pull the uni slightly out in front of you while you are in the air.
 * 5) Spot the cranks (they should be attached to the pedals and hub).
 * 6) Plant your feet back on the cranks or pedals and ride away.

When I tried crankflips, my uni always landed in front of me. It was reaaally irritating, but I then I began experimenting with different ways to kick, different places to put my legs while in the air and such. It suddenly clicked when I put my feet way too high in the air. So the morale is, experiment, for God's sake! try to find what works best for you, not what works for everybody else!

180 Unispin
Firstly, you want to be comfortable hopping with the seat in front. Once you can do that learn the 180 jump mount. Simply jump, spin the unit 180 degrees, and land with your feet on the pedals. Once you can do both of these reasonably well you should be ready to try a 180 unispin. Get on with the seat out in front, holding the seat with one hand on the front and one on the back, and steady yourself. Some people like to do small bunnyhops in order to find their center of balance. Then, when you are ready, jump up while keeping the uni more or less on the ground. You do not want the uni to come up with you. Then spin the uni 180 in whichever direction you feel most comfortable, and then land with your feet on the pedals or cranks. If you are not sure that you are going to land correctly, try to land on the ground next to the pedals. One thing that really helped me was keeping the wheel on the ground and using the saddle to keep yourself in the air. This trick should take around 45 minutes, more or less, of solid practicing to learn. Even then, you may not be able to do it every time. Remember to wear shin guards in case you miss the pedals. Remember that your feet do not have to go out too much. I jarred my wrist really badly doing this, so wristguards or tape may be a good idea. The unispin is also in the freestyle section, but this is also a street skill, and this has more detail.

Here is a video tutorial. (This link is broken)

And in this video Leo Vandewoestijne shows how to do a 180 unispin without any needless hopping

360 Unispin
The 360 unispin is somewhat different to the 180 unispin. To do the 360 unispin you want to be able to do the 180 unispin well first. Unlike the 180 unispin the 360 jump mount is not necessary; I actually find the mount harder than the spin. Okay, there are a few things to learn. First, you want to figure out how you are going to spin the uni. Some people let go of the saddle when they spin the uni, some do not. I do not, I am not that coordinated. Once you figure this out practice practice practice. get comfortable doing this. then figure out whether to spin seat in or out. I spin seat in so that it stays under me. Then practice some more. One day it'll just come to you. Remember once your feet leave the uni it is key to snap them back in as quick as possible.

In this video Leo Vandewoestijne shows a 360 unispin to wheel-walk

Stances

 * Natural: The stance in which you feel most comfortable jumping and tricking. The natural stance comes in two varieties: left or right foot forward. Both are self-explanatory. On average, a larger percentage of riders hop left foot forward.
 * Switch: Switch stance is the opposite to your natural stance; a regular footed unicyclist tricking with their right foot forward is riding in switch. This is difficult because your feet need to switch roles.
 * Fakie: In fakie, you're in your natural stance, but travelling backwards. From a difficulty perspective, it's slightly uncomfortable, but because your feet still perform the same roles as they naturally would, fakie is only slightly more difficult than riding normally.
 * Switch Fakie: In this stance, one must ride backwards whilst performing all tricks with the opposite foot forward. It is commonly accepted as the most difficult stance to hop and pull tricks from, because it combines the difficulties of the other stances.

Trick Descriptions & Tips

 * Body Varial: Jump up, rotate your body 180 degrees in reference to the unicycle, and land.
 * Hoptwists: A basic trick consisting of a hop and rotating with the unicycle before landing. They include: 180's, 360's and 540's.
 * Shifty: In a jump, the rider tweaks the uni 90 degrees to one side and returns it to normal.
 * One-footer: A self-explanitory trick consisting of a high hop and extending the front foot off the pedal and placing it back on before landing.
 * No Footer: During a jump, the rider takes both feet off the pedals before landing back on and absorbing the impact.

Unispins
Eli Brill recently landed a rolling 1080 to be the third person to land a 1080 unispin
 * 180 Unispin: A basic trick for street unicyclists. To perform this trick, one must jump up and spin the unicycle 180 degrees on a vertical axis and land back on.
 * 360 unispin: Similar to the regular unispin, the rider must jump high and spin the unicycle 360 degrees on its axis. It is much more difficult, though. In order to have it spin all the way around, most people find that they must let go of the seat before landing back on; this makes it harder to control while learning.
 * 540 unispin: Exactly like other unispins, except the unicycle spins 540 degrees before the landing. Most would agree this is the most degrees it can rotate and still look well in a line or combo.
 * 720 Unispin: As you can guess, a 720 unispin is the same as other unispins, but the unicycle spins 720 degrees before landing. First done by Andy Schwarz in the late 90's.
 * 900 Unispin: More and more people are landing 900 unispins
 * 1080 Unispin Adrien Delacroix landed a 1080 unispin first and it was on a spring board, but later landed one flat, Forrest Rackard did one off of a picnic table,
 * 1260 UnispinEli Brill landed the worlds first and only 1260 unispin at unicon 16.
 * 270/450 unispin: Unispins which are landed into/out-of hop on wheel. Many variations exist.
 * Inward unispin: An awkward trick in which the rider combines a body varial with a unispin; the body rotates in the opposite direction of the unicycle, making it a difficult trick to pull off.

Varial Tricks

 * Varial: A trick combining the 180 and a unispin starting with seat-in, in the same direction. This is easier than a 360 unispin to most, and helps in the learning process.
 * Smallspin: A smallspin is performed by starting the trick with the seat-out (holding the seat out in front) and then simultaneously doing a 180 unispin and a 180 degree jump twist.
 * Bigspin: A bigspin is performed by starting the trick with the seat-out (holding the seat out in front) and then simultaneously doing a 360 unispin and a 180 degree jump twist.
 * Full varial: The full varial, or whippersnapper as Dan Heaton jokingly calls it, is a combination of a 180 and 360 unispin with seat-in, in the same direction. It is a smooth-looking street skill named after the whip-snap motion of the tire.

Flip tricks
a donkey kick and a hickflip combined. accredited to one of Shaun J's friends.
 * rev*: The rider jumps into the air and pedals one rotation forwards.
 * Crankflip: The crankflip is a challenging trick to learn and is a great skill to have. To do this trick, one must lean over the unicycle and jump up with pressure on the front foot. As the feet are pulled up high, the cranks spin 360 degrees around the hub before the person catches the spinning pedals and lands.
 * Doubleflip: A trick similar to the crankflip; except in the doubleflip, the cranks spin two full revolutions before landing instead of one.
 * Tripleflip: An extremely rare trick where the cranks spin three revolutions before landing back on.
 * Crankbackflip: The crankbackflip is a rolling hop combined with a kick from the back foot that causes the cranks to spin a full revolution backwards. This skill is easier to learn if you have one-footers down.
 * Doublebackflip: An advanced flip trick consisting of flipping the cranks two revolutions backwards.
 * Triplebackflip: An pro flip trick consisting of flipping the cranks three revolutions backwards.
 * 180 flip: This trick is combination of a 180 hoptwist and a crankflip. To execute this trick, the legs need to be out higher but is relatively quick to learn nonetheless. '"180 doubleflips'" are becoming more common and 180 tripleflips are rare, but heard of.
 * 180 backflip: This is a combination of a 180 hoptwist and backcrankflip.
 * A hickflip consists of a unispin and crankflip. Named for Kelly Hickman. This is one of the first flip tricks people learn. Shaun J. has been known to land hickdoubleflips, which have an added revolution of the cranks.
 * donkey hick*
 * Hickbackflips are a hop, unispin and backcrankflip before landing. Few, including Kelly Hickman can do this difficult trick.
 * 360-unispin flips, also known as trey flips consist of a 360 unispin and a crankflip. It is difficult to land and is a very smooth trick.
 * An inward flip is a variation on the inward unispin when there is a crankflip added in. (180 unispin + reverse body varial + crankflip)
 * Varial flips are composed of a crankflip and a varial. (180 hoptwist + unispin + crankflip)
 * Varial backflips are another rare trick that are difficult to pull off. It has a backcrankflip and a varial. (180 hoptwist + unispin + backcrankflip)
 * Sex-change flips are a smooth trick that consists of a body varial and a crankflip. To make this trick easier, I find that if you tilt the front foot inwards whilst flipping it makes the body varial easier.
 * The Donkey Kick, a term coined by Dan Heaton, consists of jumping up with one foot on the frame and the other on the back of the tire. After gaining your balance, one must jump and push the back foot away, causing the cranks to spin a full rev backwards. It is a fun trick, to see and to do.
 * Footplants are a fairly simply trick. The unicyclist rides up to an obstacle, jumps off the unicycle, plants the front foot on it, lands back on and continues rolling. The footplant has countless variations such as the 'zero plant' where it is done on flat ground.

Flatland Tricks
Flatland tricks are peculiar because there are so many of them and so many different variations that many of the tricks do not have names. Style and creativity can be added to these tricks to make them original and look better. Here are a few:

 * The Superman differs from the generic use of the trick. In unicycling, the rider bends down, placing their chest on the seat and extends the legs parallel to the ground. Before the balance is lost, the feet are placed back on the pedals.
 * The Seatdrop is one of the most basic flatland skills. The rider hops on the cranks, making sure to point the front foot inward. They drop the seat down until the toe catches it. To get it back up, one can either grab it with their hand, or kick it up with the foot.
 * The Wrap is a stationary trick when the rider wraps the seat in a circle around each leg before they continue riding. Excellent street rider such as Dan H. and Xavier Collos have been known to do Double or Triple Wraps and even Superwraps in which they wrap each leg around twice before they continue.

Note about tricks - all tricks that rotate on a vertical axis (hoptwists, unispins, etc.) can be spun in the opposite direction to which you are comfortable. In street unicycling terms, the trick is known as 'blind'.

Street skill levels
These skill levels are in no way official. They are intended to help the street rider develop a basic set of skills, and to rate those skills after difficulty. When you feel confident with the skills in this list, only your imagination is the limit of what can be done!

If you are are just beginning to learn how to ride a unicycle, it is recommended that you familiarize yourself with at least level 1-5 in the IUF Skill Levels first.

Level 1

 * Rolling hop down a curb
 * Rolling hop up a curb
 * Ride forward down a 2-stair.
 * 180 hoptwist (static)

Level 2

 * Ride forward down a 4-stair
 * Rolling hop down a 2-stair
 * 180 hop twist (rolling)
 * Tire grab (static)

Level 3

 * Ride forward down 6 stairs
 * Rolling hop down a 4-stair
 * Backwards rolling hop
 * 180 hop twist down 2 stairs
 * leg around (static)
 * Crank Stall on a ledge (like a crank grab but not going to rubber)
 * No footer (static)
 * Tire grab down 2 stairs
 * Ride with seat out
 * Hop with seat out

Level 4

 * Rolling hop down a 6-stair
 * Backwards rolling hop off a curb
 * Rolling 180 hop twist down a 2-stair
 * No footer (rolling)
 * Shifty
 * Grind a 1 meter ledge or rail
 * 180 unispin (static)

Level 5

 * Backwards rolling hop a 2-stair
 * 180 hop twist down a 4-stair
 * Rolling hop down a 3-stair with right and left foot forward
 * Grind down a rail
 * Rolling hop up a 3-stair
 * Shifty down a 4-stair
 * 180 unispin (rolling)

Level 6

 * 360 hop twist down 2 stairs
 * backwards rolling hop a 4 stair
 * No-footer down a 2 stair
 * 180 hop twist to the right down 6 stairs
 * 180 hop twist to the left down 6 stairs
 * Rolling hop up a 3 stair
 * crankflip
 * 360 unispin (static)
 * 180 unispin a 2 stair (rolling)

Level 7

 * backwards rolling hop down a 4 stair
 * crankflip down 2 stairs
 * crankbackflip (riding forward, and then crank flipping backwards)
 * Hick or outflip a 2 stair
 * rolling hop up a 4 stair
 * grind a handrail of any size

Level 8

 * backwards rolling hop down a 6 stair
 * backwards 180 hop twist down a 2 stair
 * 360 hop twist to the right and left down 4 stairs
 * 180 hop twist to the right and left down 6 stairs
 * crankflip down 4 stairs
 * backwards crankflip down 2 stairs
 * backwards backward crankflip (riding backwards and flipping the cranks backwards)
 * backwards forward crankflip (riding backwards and flippimg the cranks forward)
 * Hick or outflip a 4 stair
 * 360 unispin(static) a 2 stair
 * grind a 6 stair handrail

Level 9

 * backwards rolling hop down a 4 stair
 * backwards 180 hop twist down a 6 stair
 * 180 hop twist to the right and left down 6 stairs
 * crankflip down 6 stairs
 * backwards crankflip down 4 stairs
 * 180 crankflip down 2 stairs
 * hick or outflip a 4 stair
 * Treyflip a curb
 * grind a 6 stair handrail

Level 10

 * backwards suck hop down an 6 stair
 * backwards 180 hop twist down a 6 stair
 * 360 hop twist down 6 stairs
 * crankflip down 6 stairs
 * backwards crankflip down 6 stairs
 * 180 unispin crank flip down 4 stairs
 * 180 crankflip down 4 stairs
 * 360 unispin crankflip(treyflip) down 4 stairs
 * 180 unispin(hick/out-flip) a 6 stair
 * grind a 6 stair hand rail
 * shifty
 * Uniwhip

Combinations

 * Footplant 360 unispin
 * Unispin down 5 stair

 * Unispin down 10 stair
 * Footplant 180/180
 * One foot down 5 stair
 * One foot down 10 stair
 * 180 no footer
 * Wall plant 180/180
 * Uni spin 180/180
 * Uni spin 180 /crank flip

 * Onefoot tiregrab
 * Nofooter tiregrab
 * 180 flips
 * Footplant flips (Dutches, Negitives)
 * Footplants to grind
 * 180 tiregrab
 * Footplant unispin
 * Grind 180 out
 * Backslide 180 out
 * Unispin Crankflips (Hickflips)
 * crankflip to grind
 * matrix plant
 * 180 no-footer
 * Revert 180 backflip
 * 90/270/450/630 unispin
 * Revert to backslide
 * bluntslide to 180 out
 * footplant to bluntslide
 * Revert backflip (Revert crankflips are pointless)

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/

title: The Unicyclopedia/Street


text:
The Unicyclopedia/Trials

Trials is about controlling where you are and where you want to be.
 * -- Kris Holm

Practicing trials
When you practice trials, it is important that you have a good unicycle. It should be able to stand your riding. It is also important that you do not hurt yourself. Dropping huge heights will only hurt you and your unicycle. I personally feel that your trick should not be somewhere where the risk of getting hurt is very high: The challenge should be the obstacles and not your fear!

When practicing trials, also try to have somebody to watch you and see if you are doing it right. It helps a lot to watch movies or learn from a friend. Rest is also as equally valuable as practice when it comes to learning new moves. Give yourself plenty of time for both, and take breaks if you need to.

Essentially, to ride trials requires an intensively focused state of mind. An individual's ability to perform various trials moves stems not from the limits of what has or hasn't been done, but from what their imagination, and body will permit.

Crank grabs
A crank grab typically consists of two steps

 * 1) Hop to crank grab position, where you jump and land on the edge of something (table, bench, etc.) but instead of landing on your wheel land on your crank
 * 2) Hop from crank grab position to rubber, jumping from the first position and landing on your wheel

It is important to lean far into the object you are grabbing onto. The second foot may or may not leave the pedal. Practice doing small hops from the crank before trying to go fully to rubber, and it will follow naturally. It may take a while before you learn to land on the crank in balance.

A good way to learn crank grabbing is to practice just from the part after the crank has been caught on the ledge. First, just try to get the wheel over without focusing on landing on the pedals with balance. Next, focus more on landing with control over the unicycle. Continue this method until you can land the crank grab easily. Now is the time to learn the actually grab section of the crank grab. Finally, you can put it all together!

Pedal grab
A pedal grab is typically made seat out and consists of two steps

 * 1) Hop to pedal grab position
 * 2) Hop from pedal grab position to rubber.

It is important to lean far into the object you are grabbing onto. This is more difficult for the pedal grab than the crank grab since the seat isn't as stable. The second foot may or may not leave the pedal. Practice doing small hops from the pedal before trying to go fully to rubber, and it will follow naturally. It is in fact easier to go from pedal grab to rubber than from crank grab to rubber once you know it.

Try to think of it as a skateboard ollie. This was the tip that made me go to rubber for the first time. Lift your free pedal (the one not on the object) a little bit up in the air and then in one single motion swing the other pedal up. The key to succes is to practice. If you follow these steps you will learn to pedalgrab in hardly any time.

High hop seat in
It is difficult to hop high seat in (other than using seat in rolling hop). Accept it to be difficult to get higher than 30 cm unless you use pre-hops. Practice bending at the waist and pulling the unicycle up as you hop. For higher seat in hops, a pre-hop is necessary. You would typically also run a higher tire pressure and lower seat height than normal. It is possible to get up and over 60cm seat in side hops, however the majority of unicyclists will either switch to seat out or to rolling hops.

Seat-In hops are essential to learn before seat-out hops, since the seat provides an extra point of contact, and therefore more control for beginners. After the seat begins to limit hopping height it is recommended that one develops his/her seat out control.

High hop seat out
When hopping seat out, it helps to have the seat at a comfortable height. It should be just high enough to let you stand almost straight while holding the saddle in front of you. Holding the saddle in the back makes it easier to pull it up. Practice hopping on angled surfaces, or doing natural trials to learn controlling rotational force on the wheel. The key to comfortable hopping seat out is even pedal pressure distribution. If one is unable to apply even pressure, then the wheel will roll uncontrollably.

Hopping seat-out requires several different aspects in order to attain maximal height. This technique can be broken down into the following: 1. Prehop 2. Jump 3. Landing (tuck) 4. Recovery

1. Practice pre-hops by bunny hopping seat out and focus on the timing, you will develop a sense for when force should be applied. Prehops can be transferred from hopping seat-in, since it is the exact same action, and will transfer directly. To execute the prehop, back off a bit from the object, stand still, make a hop towards it, and as you hit the ground, apply pressure at the right instant, and the force will bring you up while you pull up the unicycle beneath you.

2. The jump is where you're actually jumping. One's ability to perform high hops depends on one's vertical jump, but only to a certain degree. Vertical jump is the height an individual can jump off the ground(measured from where you can touch a wall, arm fully extended to where you can touch the same wall when you jump up) It makes sense that vertical jump affects hopping height, however this isn't the only factor, and one's Vertical Jump can be improved through fitness and just practice.

3. The Landing is the most important part of the high hop. This requires a tucking off the wheel up underneath you as much as possible. Make sure you pull the tire up as far as possible to get maximum height. When you reach the top of the object you're aiming for, you should almost be able to feel the tire hitting your butt. Using this technique with a static hop it is possible to get over 85 cm (2.77 feet). With a prehop done properly, you should be able to add 15cm (6 in.) to your static hop. Using this technique hops of over 100cm (3.25 feet) have been accomplished.

4. Recovery is basically standing up from that super-tucked position that you used to get onto the object which you just made it up. This seems like an unimportant step, but if you can't stand up, that massive wall you just cleared doesn't mean anything, except that you can "Almost make that hop" Finally put it all together.

Also check Ryan Atkins video tutorial on how to hop somewhat high.

Gapping seat out
Stand perpendicular to where you want to go. Lean to the side you with to go, and make the hop. Gapping seat out will allow you to pull the tire up as you jump, and this can be used to achieve a greater distance in your gaps much the same way as in regular seat out hops. It is a lot easier to gap to the sides than it is to gap forwards. You will develop a sense for how much you need to lean before jumping; it is usually not that much. It may help to twist in the air, meaning to take off to the side and twist in the air so that you land facing the direction in which you jumped. If you are gapping onto a narrow object, try to gap somewhat less than you think you have to and use the momentum from the jump and shift your hips to find balance. It is somewhat easier to do the adjustments when you jump too short than when you overshoot.

Gapping seat in
Similar to gapping seat out but with some more control.

High rolling hops
Initiation: When working out how far you need to be before starting a rolling hop, take the height of the object onto which you wish to hop, and turn this into the distance from which you will initiate the hop. Add a little bit more to the distance at which you initiate the hop. Start riding backwards about 3-8 revolutions (depending on personal preference and situation) from where you wish to initiate the hop.

E.g. Bob wants to rolling hop onto an 80cm high table. He works out where he would initiate the hop, about 90-100cm from the table to (horizontally). He then puts the center of his wheel onto the spot, rides backwards 6 revolutions and stops. He puts a rock at where he has stopped so that he can adjust how far he needs to be if further attempts are made. Bob then rides as quickly as he can to the initiation point, holding his seat and preparing himself as he approaches. He then pulls up on the seat, using his other hand for balance and stability, and launches himself up as hard as he can. As he approaches the table top he bends at the stomach, bringing the wheel up in line (vertically) with his head. The continuing horizontal momentum will carry his body onto the table with the unicycle.

The key to Bob's success however, was in the fact that he had progressively practiced the rolling hop everyday. It doesn't just happen!!! Also, when doing a rolling hop, the majority of people bail (pull-out) because they feel that they cannot make the hop. The key is, just do it. If you stack it, make sure you have safety equipment on, but in the scheme of things, you must make yourself do it.

"I recently made a couple of 80cm rolling hops, and I found that the first attempt that I made it was a complete surprise, because I just forced myself to do it! Also, if you feel like after about 15-30 minutes that you are still not making it because you are too afraid/scared/unwilling etc... leave it for a day, or a couple of hours, go and do some wheel walk/gliding/backwards riding/backflips for a while and come back to it later. Also, if you keep trying rolling hops at the same place and still get scared, try doing it somewhere else. And remember, once you have made it, convince yourself that you can make it every time from now on. Also, it is a good idea to measure the height, and compare it to other situations of the same height when in doubt of whether you can make it or not." - UR

Dropping seat in
Dropping seat in is the easiest way of dropping. The most common way to drop seat in is to just approach the edge and then "kaboom" down to the ground. This produces tremendous stress on the axle. Instead you should try to hop forward, bending your body slightly at the waist to help the wheel roll forward with you as you hit the ground. It is important to have some forward motion, so as not to end up on your butt as the wheel shoots forward.

Having the seat lower than you may help when attempting seat-in drops by avoiding the squishing of gentleman's bits. Soaking up some of your downward momentum upon landing with flexing of the upper body downward is a good technique to take load off of the axle and the knees and ankles.

As you get better you may roll off the obstacles instead. It is good to practice dropping in both stances.

Dropping seat out
If it is not possible to roll out a drop, dropping seat out is an effective technique. Seat out drops can also be combined with a roll out if the surface allows. Seat out dropping provides a way to drop onto objects like fire hydrants or gapping bars since you may bend down to absorb the downward forces. One crucial thing is to keep the wheel stable through the drop.

Riding down stairs
When you ride down stairs, you want the unicycle to be slightly in front of you while at the same time you want to lean forward. It is easiest to bend a bit at the waist. If you lean backwards chances are that you will fall on your back, and if you lean forward, you are likely to leave the unicycle behind. Also, stairs are easier to ride and much less intimidating if you think of them only as a bumpy hill.

The next thing is that you should keep some distance to the seat so you do not hurt yourself. Suspend in your knees if needed, but the need to suspend is not as big in steep stairs.

Riding down stairs is a little dangerous if you do not use a helmet and other protective gear. Protect your back as well as you can, the chances of falling backwards are quite high. Also be aware that you might end up running down the stairs instead of cycling.

The biggest thing that helped me was pulling up on the seat! This keeps the pedals stuck securely to your feet preventing you from simply coming off your uni.

Mounting on skinnies
If the rail is low enough, put the wheel of your uni up first, then one leg (the one that will be on the rail as you mount). Hold the seat with one hand and keep the other out wide for balance. Step up and regain your balance. Then get your pedals where you want them (I've found the static mount is easiest so have the pedals horizontal) and put one foot on the back pedal.

It's easiest to balance if the back foot that's still on the rail is at about 30 degrees or less to the direction of the rail. If your foot is at more of an angle there won't be as much shoe in contact with it and you won't be able to correct your balance as easily, plus depending on your shoe type, you might get stuck in the arch of the shoe and that will make it even more difficult to balance.

When you're in that position have the seat between your legs as you'll be much more balanced that way, and stand there for a few seconds making sure your weight is directly over the uni and the uni is directly over the rail. This is a very important step. Have one hand on the seat when you mount so you're absolutely sure it goes where you want it and you don't have to fix it later while you're trying to ride the rail.

You MUST completely ignore the terrain below the rail. That is what's most likely to make you mount and lose balance to one side even if it doesn't intimidate you.

Then mount and bring the other hand out wide for balance, and ride the rail.

Riding on skinnies
Once you are steadily mounted, pedal forward slowly. It is important to look at the end of the skinny, not directly down at the tire. Try thinking about pushing on the pedals as lightly as possible, so your wheel does not wobble. Like almost any other skill, it helps to keep your weight on the saddle.

title: The Unicyclopedia/Trials


text:
The Unicyclopedia/Maintenance

General
Nuts and bolts do not like being assembled dry, especially if they are tightened firmly. Depending on the parts involved, use either grease (e.g. white lithium or Phil Wood), anti-seize, or threadlocker (Loctite or equivalent) on the threads. It may also be a good idea to take everything apart once in a while to make sure everything is OK and get a chance to put on some more anti-seize. When you put on the pedals don't forget that the left pedal goes on in the opposite direction (counter-clockwise). Keep your wheel true and your bolts tight!

Cutting the seatpost
If you buy a muni, chances are that the seat post will be too tall for you. The procedure of cutting a seat post is trivial and can be done by anyone with access to a metal saw. Do NOT put any part of the unicycle in a vice! Hold the seat post in your hand and cut. File away the sharp edges. Finally put on some grease (anti-seize may not be a good idea here).

Noises
There may be many different sources of noise on a unicycle. The most common are the cranks, the pedals and the spokes.

It is very common that there is a creaking noise from the spokes. If you tighten your spokes evenly with a spokes wrench however, the noise level will most likely subside.

Loose pedals
Hold the pedal and wiggle it around. If it moves it may be loose. Look for movement where the pedal attaches to the crank. If it is loose, remove it and apply anti-seize or Loctite and tighten it - hard. Notice that the left pedal goes on in the other direction!

A pedal may also be loose on its spindle. Resolving this is somewhat more difficult. See the pedal section below.

If you hop often, the pedal may start to feel loose. This isnt because it is loose, it is the bearing breaking down.

Loose cranks
Hold the crank arm and wiggle it. If you feel a click then the crank arm may be loose. It is easy to detect this if you idle with the pressure on one foot.

Splined hub/crank maintenance
It is very hard to actually break a set of splined cranks but unless they are regularly maintained they will wear and show movement on the spline. This goes for all types and makes of splined crank sets. This is because the splines are not tapered but are straight and rely on the precision of the fit to keep them from moving.

Onza Hub Kris Holm Hub, Summit Hub QuAx Hub Profile Hub Refurbishing Hubs

Other cranksets can be maintained in a very similar fashion depending on design.

Loose spokes
The spokes make a characteristic sound when they are loose.

To tighten the spokes you will need a spoke wrench. It is of utmost importance to have a high quality spoke wrench that fits snugly onto the nipples! High quality spoke wrenches are made by Park Tools. If you have a low quality spoke wrench it will round your nipples and make it impossible to further adjust the nipples without removing the tire. If you notice that the wrench slips, stop immediately!

To tighten a spoke you have to turn the wrench in the opposite to the direction that would be intuitive, i.e. counterclockwise. Think of the nipple as a screw going onto the spoke and you will understand why. If the wheel is true it may be sufficient to go around the wheel and tighten the spokes one by 1/2 a revolution, or in case they are very loose by a whole revolution or more.

Popped spoke
If you have a weak rim, a spoke can sometimes gradually enlarge its hole until it pops out of the rim. The spoke will not stay in place if you try to put it back into the rim. A good temporary fix until you can purchase a better rim is to take the nipple off, insert a washer over the hole, replace the nipple, and tighten the spoke again.

The wheel is not centered in the frame
Several things could be wrong.

1. One side of your fork could be longer than the other, this is unusual, more often the fork legs are not correctly aligned but these can be straightened quite easily. If the fork legs are different lengths this can be easily fixed by putting shims between the top of the bearing and the bottom of the fork. One could use strips of aluminum soda can as shims. The basic idea is to use shims to add length to the shorter side of the frame. Here are the step by step instructions:

Remove the main caps, but leave the wheel in the frame. Spin the wheel. If the wheel is closer to one side of the frame consistently, than try removing the wheel and putting it back in the other direction. If it's off center to the other side, than your wheel is dished, and that's a different problem. If it wobbles back and forth while it spins, than it's out of true. If it looks just like it did before you turned the frame around, than you need to shim it.
 * Diagnosis

Remember the shorter side where the frame is closer to the wheel. Remove the wheel from the frame. Cut out pieces off soda can to fit in the top of the bearing holder. Depending on how bad it is, you could need 7 or 8 pieces. Put the shims in the bearing holder attached to the shorter side of the frame. Put the wheel in the bearing holders on top of the shims.
 * Fix

You may have to bolt the main caps back on to the frame before you know if you've put the correct number if shims in, because they compress a little when you tighten the main caps. Add or remove shims to get the wheel as close to centered as possible.

This been used on several unicycles and it has not caused problems.

2. Your bearings aren't centered on the axle. If your bearings have a press fit like on a Suzue hub, they may have slipped. If you have a Profile hub or something with a similar design, having a different number of spacers on each side of the axle will cause this also. This will probably be addressed by John Childs if you ask him.

3. Your frame could be bent. This is not very common. You may be able to bend you frame back, or possibly use the shim fix. If not, buy a new frame.

Wheel truing
Instructions on wheelbuilding

Bearing holder tightness
It is important not to overtighten the bearing holders since this may damage the bearings. It is easiest to do this by trial and error. Tighten the bolts on both sides equally using the fingers only and then turn the wheel by hand and observe how freely it spins. Now continue to tighten the bolts evenly until the wheel comes to a stop more quickly. Now loosen the bolts slightly on both sides just to make the wheel spin freely again.

If you have a heavy wheel, the wheel may spin even though the bearings are too tight. If you can flex the frame, then you need to tighten the bolts more.

Instructions on maintenance of bearings

Pedals
It is surprisingly easy to damage the threads on the pedals. To avoid this you should always use only your hands for the first few turns as you put on the pedal. Make sure that there is some grease or even better some anti-seize or Loctite on the threads. If the pedal does not go in easily, you may be on your way to crossthreading it! If you have crossthreaded the cranks or the pedal you will most likely need to replace these parts. The pedals should stay tight once they are on.

In case the pins fall out of the pedal you may use regular screws that you get from a hardware store, or real replacement pins from a bike shop. Use Loctite if they get loose. Sometimes the threads take damage when a pin falls out, and there is not much one can do about that, except avoiding pedal grabs.

If you suspect that the pedal is getting loose on its axle, i.e. clicking and feeling loose, it may fall apart any second, and you may not be able to find the balls if they happen to fall out.

Unsealed pedals may become filled with water and mud. In case this happens you have to take off the plastic cap and remove the nuts. As you bring the axle out of the pedal, keep an eye an the balls as they tend to fall out. Fill the pedal with grease and put it back together. It is very easy to overtighten the nuts, check that the pedal spins freely as you tighten the nuts. Most pedals come with little grease since they spin better that way.

Instructions on maintenance of pedals

Saddle
A saddle usually either breaks at the seat base or the seat cover develops rips that cause the padding to fall out.

If you know that you are likely to hit the side of the saddle onto concrete, it would be wise to be able to protect it. Either you can buy a KH Fusion seat cover or simply cut off a section a tube and stretch over the saddle. Segments from used 2.125" tubes are known to work. Cut off a segment, and heat it, stretch it, repeat a few times and then try it on. The front sides of the saddle take the most damage, so putting just in front of the seat post is a good idea. It is good if the tube goes all the way to the handle, that way it won't slide back as easily. The tubes will break eventually, but they are easy to replace. Trying to fix a rip in the may not be worth the effort. Maybe glue would work.

If the seat base fails, you either live with it, buy a new seat base or save up for a Carbon Fibre seat base. The Carbon Fibre seat base will in addition make the seat a lot stiffer, so you can exert force directly to the frame.

Removing stubborn Miyata saddla nuts Miyata seat reconstruction

title: The Unicyclopedia/Maintenance


text:
The Unicyclopedia/Armour and clothing

Helmets
Although most people hardly ever hit their head, a helmet is recommended especially if you're doing something crazy! Remember that you cannot afford to bash up your head a few times before deciding to buy a helmet.

If you want to ride over gaps and other odd-shaped obstacles, a skate helmet offers better protection than a bike helmet. For general riding the lighter and better-vented bike helmets are probably more adequate. A good helmet can be pretty cheap.

Shin protection
If you don't mind the occasional bloody leg, then shin guards with plastic pedals aren't necessary, but if you are using pinned pedals, then shin protection is a requirement. The gash from a pinned pedal is rather painful, and it may take a month for it to heal completely. Particularly bad gashes may need stitching.

After a while you get used to them and forget they are there. They have saved my legs a couple of times from nasty roots and stones.

Kris Holm designed and sells shin guards specifically for unicycling.

Other companies that produce shin guards are TSG, Roach, KHE, and sixsixone. Sixsixone knee/shin armor is very popular among unicyclists, and gives good protection.

Knee Guards
If you fall forward enough that your hands touch the ground, odds are that your knees aren't far behind. Part of learning how to ride a unicycle is knowing how to fall. Many beginners take serious falls on their knees during this process. If you are new to the sport, are an adult, or attempt difficult stunts, knee protection is a good idea.

Many knee guards are available and some come with shin protection attached for complete "Leg Protection". Popular leg armor is available from Kris Holm and Sixsixone.

Shoes
Most unicyclists prefer low shoes with a flat sole. Boots tend to infringe on the ankle movements and heels may make adjustments of foot placement difficult.

Sneakers, or skate shoes are good. If it is wet and cold and you can afford it, low Gore-Tex boots are also nice. If you use pinned pedals or practice gliding, expect your shoes to wear out in no-time. Soles that are made from one piece of rubber may hold up better. Take notice of how well the sole is attached to the shoe. If you have the money to buy a cycling specific shoe, the Five Ten Impact is highly recommended. (Go to ->Footwear -> Freeride) It comes in high and low top, and has a very grippy sole. Vans skate shoes have a great sole for gripping on pinned pedals, because of how the indentations in the sole fit around pins. Another shoe that is great is The North Face's A5s. They have a one-piece Vibram sole that is nearly indestructible, and the tread in the sole is perfect for gripping pinned pedals.

Many riders wear Converse All-Stars, both high and low top, but mostly for freestyle riding because they are soft and the rider gets a good feel for the pedals. Keep in mind All-Stars purchased in the U.S.A. have a felt lining glued to the bottom of the rubber sole which makes them slippery on the pedals (why, I don't know). Look on the web for a store in Canada then purchase from there to avoid this "feature". The high-tops also provide a small degree of protection for those exposed ankle bones so close to the cranks!

Wrist guards
Breaking your wrist is bad and it happens more than you may think.

Wrist guards are especially important in unicycling, because riders tend fall forward onto their hands.

Kris Holm designed and sells wrist support gloves specifically for unicycling. These wrist guards cover the fingers, have palm padding and a wrist splint on the back of the wrist to allow easier seat grabs. Full finger covering is also important when constantly grabbing your seat in trials and muni. http://www.krisholm.com/products/productpics/index-Pages/Image16.html

Many other companies sell wrist guards designed for inline skating or skateboarding. Harbinger wrist wraps are excellent, because they allow for flexibility while keeping your wrist stable.

Ankle Guards
Bloody ankles are not uncommon for trials and muni riders. Depending on the Q of the cranks, your ankles can become dangerously close to the hub. This often happens when a rider loses control of their unicycle during a big drop because the ankle of the forward foot is located next to the hub. If you don't have high-top shoes with ankle padding, ankle guards that insert into shoes are available.

Many people had this problem with the Summit and Kris Holm 2003-2004 trials uni. The 2005 Kris holm cranks have a larger Q and don't suffer from that problem as much

In addition, some riders wear ankle braces designed to prevent sprained ankles and torn tendons, and to protect them while recovering from an injury. These range from neoprene rubber tubes that fit over the ankle, to plastic sided braces which work in a similar fashion to wrist guards.

A cheap and easy solution to protect ankles is by cutting a (soft) computer-mouse mat in 4 pieces, round the corners, and put those in your socks.

title: The Unicyclopedia/Armour and clothing


text:
User talk:Karlsson.ulf

To make a new page, first make a link to it on a bookshelf (such as the Miscellaneous bookshelf) or on your user page then follow the link. Please don't go around moving the main page. r3m0t (cont) (talk) 07:16, 27 Jan 2005 (UTC)

Copyright problem with Image:Simme.jpg
--Derbeth 23:26, 5 November 2005 (UTC)

title: User talk:Karlsson.ulf


text:
User talk:24.17.236.63

Hi.

I moved the pages around and it got reverted in the skills section when you saved. I'll try to move your latest version of handride to the freestyle section. Please check that it's ok! -- Karlsson.ulf 07:30, 27 Jan 2005 (UTC)

title: User talk:24.17.236.63


text:
Serial Programming/Serial Java

Introduction
Because of Java's platform-independence, serial interfacing is difficult. Serial interfacing requires a standardized API with platform-specific implementations, which is difficult for Java.

Unfortunately, Sun didn't pay much attention to serial communication in Java. Sun has defined a serial communication API, called JavaComm, but an implementation of the API was not part of the Java standard edition. Sun provided a reference implementation for a few, but not all Java platforms. Particularly, at the end of 2005 Sun silently withdrew JavaComm support for Windows. Third party implementations for some of the omitted platforms are available. JavaComm hasn't seen much in the way of maintenance activities, only the bare minimum maintenance is performed by Sun, except that Sun apparently responded to pressure from buyers of their own Sun Ray thin clients and adapted JavaComm to this platform while dropping Windows support.

This situation, and the fact that Sun originally did not provide a JavaComm implementation for Linux (starting in 2006, they now do) led to the development of the free-software RxTx library. RxTx is available for a number of platforms, not only Linux. It can be used in conjunction with JavaComm (RxTx providing the hardware-specific drivers), or it can be used stand-alone. When used as a JavaComm driver the bridging between the JavaComm API and RxTx is done by JCL (JavaComm for Linux). JCL is part of the RxTx distribution.

Sun's negligence of JavaComm and JavaComm's particular programming model gained JavaComm the reputation of being unusable. RxTx - if not used as a JavaComm driver - provides a richer interface, but one which is not standardized. RxTx supports more platforms than the existing JavaComm implementations. Recently, RxTx has been adopted to provide the same interface as JavaComm, only that the package names don't match Sun's package names.

So, which of the libraries should one use in an application? If maximum portability (for some value of "maximum") is desired, then JavaComm is a good choice. If there is no JavaComm implementation for a particular platform available, but an RxTx implementation is, then RxTx could be used as a driver on that platform for JavaComm. So, by using JavaComm one can support all platforms which are either directly supported by Sun's reference implementation or by RxTx with JCL. This way the application doesn't need to be changed, and can work against just one interface, the standardized JavaComm interface.

This module discusses both JavaComm and RxTx. It mainly focuses on demonstrating concepts, not ready-to-run code. Those who want to blindly copy code are referred to the sample code that comes with the packages. Those who want to know what they are doing might find some useful information in this module.

jSSC (Java Simple Serial Connector) should also be considered

There is also another library called jSerialComm that includes all its platform specific files in its jar, this makes it truly portable as there is no installation necessary.

Getting started

 * Learn the basics of serial communication and programming.
 * Have the documentation of the device you want to communicate with (e.g. the modem) ready.
 * Set up all hardware and a test environment
 * Use, for example, a terminal program to manually communicate with the device. This is to be sure the test environment is set up correctly and you have understood the commands and responses from the device.
 * Download the API implementation you want to use for your particular operating system

 * Read
 * the JavaComm and/or RxTx installation instruction (and follow it)
 * the API documentation
 * the example source code shipped

General Issues
Both JavaComm and RxTX show some installation quirks. It is highly recommended to follow the installation instructions word-for-word. If they say that a jar file or a shared library has to go into a particular directory, then this is meant seriously! If the instructions say that a particular file or device needs to have a specific ownership or access rights, this is also meant seriously. Many installation troubles simply come from not following the instructions precisely.

It should especially be noted that some versions of JavaComm come with two installation instructions. One for Java 1.2 and newer, one for Java 1.1. Using the wrong one will result in a non-working installation. On the other hand, some versions/builds/packages of RxTx come with incomplete instructions. In such a case the corresponding source code distribution of RxTx needs to be obtained, which should contain complete instructions.

Many linux distributions offer a RxTx package in their repositories (ArchLinux - 'java-rxtx', Debian/Ubuntu - 'librxtx-java'), these packages include only the platform specific parts of the library, but are generally ready to use.

It should be further noticed that it is also typical for Windows JDK installations to come with up to three VMs, and thus three extension directories. Some even claim to have a fourth JRE somewhere in the \Windows directory hierarchy.
 * One as part of the JDK,
 * one as part of the private JRE which comes with the JDK to run JDK tools, and
 * one as part of the public JRE which comes with the JDK to run applications

JavaComm should at least be installed as extension in the JDK and in all public JREs.

JavaComm
A general problem, both for JavaComm and RxTx is, that they resist installation via Java WebStart:

JavaComm is notorious, because it requires a file called javax.comm.properties to be placed in the JDK lib directory, something which can't be done with Java WebStart. This is particularly sad, because the need for that file is the result of some unnecessary design/decision in JavaComm and could have easily been avoided by the JavaComm designers. Sun constantly refuses to correct this error, citing the mechanism is essential. Which is, they are lying through their teeth when it comes to JavaComm, particular, because Java for a long time has a service provider architecture exactly intended for such purposes.

The contents of the properties file is typically just one line, the name of the java class with the native driver, e.g.:

The following is a hack which allows to deploy JavaComm via Web Start ignoring that brain-dead properties file. It has serious drawbacks, and might fail with newer JavaComm releases - should Sun ever come around and make a new version.

First, turn off the security manager. Some doofus programmer at Sun decided that it would be cool to again and again check for the existence of the dreaded javax.comm.properties file, even after it has been loaded initially, for no other apparent reason than checking for the file.

Then, when initializing the JavaComm API, initialize the driver manually:

RxTx
RxTx on some platforms requires changing ownership and access rights of serial devices. This is also something which can't be done via WebStart.

At startup of your program you could ask the user to perform the necessary setup as super user.

Further, RxTx has a pattern matching algorithm for identifying "valid" serial device names. This often breaks things when one wants to use non-standard devices, like USB-to-serial converters. This mechanism can be overridden by system properties. See the RxTx installation instruction for details.

jSerialComm
jSerialComm in contrast to both RxTx and JavaComm is ready to use on many operating Systems and Platforms (e.g. Windows x86/x86_64, Linux x86/x86_64, ARM, and even android - full list in the specific library jar) without any changes. However it still needs permissions to access the device (more information on the jSerialComm Homepage).

SerialPundit

SerialPundit is another feature rich library for accessing serial port in Java. It includes features like detecting when a USB-UART device like FTDI232 has been plugged into system, automatically identifies operating system and CPU architecture, does not require any installation, comprehensively documented, well tested and have a support/discussion group as well.

Introduction
The official API for serial communication in Java is the JavaComm API. This API is not part of the standard Java 2 version. Instead, an implementation of the API has to be downloaded separately. Unfortunately, JavaComm has not received much attention from Sun, and hasn't been really maintained for a long time. From time to time Sun does trivial bug-fixes, but doesn't do the long overdue main overhaul.

This section explains the basic operation of the JavaComm API. The provided source code is kept simple to demonstrate important point. It needs to be enhanced when used in a real application.

The source code in this chapter is not the only available example code. The JavaComm download comes with several examples. These examples almost contain more information about using the API than the API documentation. Unfortunately, Sun does not provide any real tutorial or some introductory text. Therefore, it is worth studying the example code to understand the mechanisms of the API. Still, the API documentation should be studied, too. But the best way is to study the examples and play with them. Due to the lack of easy-to-use application and people's difficulty in understanding the APIs programming model, the API is often bad-mouthed. The API is better than its reputation, and functional. But no more.

The API uses a callback mechanism to inform the programmer about newly arriving data. It is also a good idea to study this mechanism instead of relying on polling the port. Unlike other callback interfaces in Java (e.g. in the GUI), this one only allows one listener listening to events. If multiple listeners require to listen to serial events, the one primary listener has to be implemented in a way that it dispatches the information to other secondary listeners.

Download
Sun's JavaComm web page points to a download location. Under this location Sun currently (2007) provides JavaComm 3.0 implementations for Solaris/SPARC, Solaris/x86, and Linux x86. Downloading requires to have registered for a Sun Online Account. The download page provides a link to the registration page. The purpose of this registration is unclear. One can download JDKs and JREs without registration, but for the almost trivial JavaComm Sun cites legal and governmental restrictions on the distribution and exportation of software.

The Windows version of JavaComm is no longer officially available, and Sun has - against their own product end-of-live policy - not made it available in the Java products archive. However, the 2.0 Windows version (javacom 2.0) is still downloadable from here.

Installation
Follow the installation instructions that come with the download. Some versions of JavaComm 2.0 come with two installation instructions. The most obvious of the two instructions is unfortunately the wrong one, intended for ancient Java 1.1 environments. The information referring to the also ancient Java 1.2 (jdk1.2.html) is the right one.

Particularly Windows users are typically not aware that they have copies of the same VM installed in several locations (typically three to four). Some IDEs also like to come with own, private JRE/JDK installations, as do some Java applications. The installation needs to be repeated for every VM installation (JDKs and JREs) which should be used in conjunction with the development and execution of a serial application.

IDEs typically have IDE-specific ways of how a new library (classes and documentation) is made known to the IDE. Often a library like JavaComm not only needs to be made known to the IDE as such, but also to each project that is supposed to use the library. Read the IDE's documentation. It should be noted that the old JavaComm 2.0 version comes with JavaDoc API documentation that is structured in the historic Java 1.0 JavaDoc layout. Some modern IDEs are no longer aware of this structure and can't integrate the JavaComm 2.0 documentation into their help system. In such a case an external browser is needed to read the documentation (a recommended activity ...).

Once the software is installed it is recommended to examine the samples and JavaDoc directories. It makes sense to build and run one of the sample applications to verify that the installation is correct. The sample applications typically need some minor adaptations in order to run on a particular platform (e.g. changes to the hard-coded com port identifiers). It is a good idea to have some serial hardware, like cabling, a null modem, a breakout box, a real modem, PABX and others available when trying out a sample application. Serial_Programming:RS-232 Connections and Serial_Programming:Modems and AT Commands provide some information on how to set up the hardware part of a serial application development environment.

Finding the desired serial Port
The first three things to do when programming serial lines with JavaComm are typically

 * 1) to enumerate all serial ports (port identifiers) available to JavaComm,
 * 2) to select the desired port identifier from the available ones, and
 * 3) to acquire the port via the port identifier.

Enumerating and selecting the desired port identifier is typically done in one loop:

Once a port identifier has been found, it can be used to acquire the desired port:

Initialize a Serial Port
The initialization of a serial port is straight forward. Either individually set the communication preferences (baud rate, data bits, stop bits, parity) or set them all at once using the setSerialPortParams(...) convenience method.

As part of the initialization process the Input and Output streams for communication will be configured in the example.

Simple Writing of Data
Writing to a serial port is as simple as basic Java IO. However there are a couple of caveats to look out for if you are using the AT Hayes protocol:

 * 1) Don't use println (or other methods that automatically append "\n") on the OutputStream. The AT Hayes protocol for modems expects a "\r\n" as the delimiter (regardless of underlying operating system).
 * 2) After writing to the OutputStream, the InputStream buffer will contain a repeat of the command that was sent to it (with line feed), if the modem is set to echoing the command line, and another line feed (the answer to the "AT" command). So as part of the write operation make sure to clean the InputStream of this information (which can actually be used for error detection).
 * 3) When using a Reader/Writer (not a really good idea), at least set the character encoding to US-ASCII instead of using the platform's default encoding, which might or might not work.
 * 4) Since the main operation when using a modem is to transfer data unaltered, the communication with the modem should be handled via InputStream/OutputStream, and not a Reader/Writer.

Simple Reading of Data (Polling)
If you correctly carried out the write operation (see above) then the read operation is as simple as one command:

Problems with the simple Reading / Writing
The simple way of reading and/or writing from/to a serial port as demonstrated in the previous sections has serious drawbacks. Both activities are done with blocking I/O. That means, when there is the read or write method ( or   in the previous example) do not return, and the application comes to a halt. More precisely, the thread from which the read or write is done gets blocked. If that thread is the main application thread, the application freezes until the blocking condition is resolved (data becomes available for reading or device accepts data again).
 * no data available for reading, or
 * the output buffer for writing is full (the device does not accept (any more) data),

Unless the application is a very primitive one, freezing of the application is not acceptable. For example, as a minimum some user interaction to cancel the communication should still be possible. What is needed is non-blocking I/O or asynchronous I/O. However, JavaComm is based on Java's standard blocking I/O system, but with a twist, as shown later.

The mentioned "twist" is that JavaComm provides some limited support for asynchronous I/O via an event notification mechanism. But the general solution in Java to achieve non-blocking I/O on top of the blocking I/O system is to use threads. Indeed, this is a viable solution for serial writing, and it is strongly recommended to use a separate thread to write to the serial port - even if the event notification mechanism is used, as explained later.

Reading could also be handled in a separate thread. However, this is not strictly necessary if the JavaComm event notification mechanism is used. So summarize:

The following sections provide some details.

Introduction
The JavaComm API provides an event notification mechanism to overcome the problems with blocking I/O. However, in the typical Sun manner this mechanism is not without problems.

In principle an application can register event listeners with a particular  to be kept informed about important events happening on that port. The two most interesting event types for reading and writing data are
 * and

But there are also two problems:

 * 1) Only one single event listener per  can be registered. This forces the programmer to write "monster" listeners, discriminating according to the event type.
 * 2)  is an optional event type. Well hidden in the documentation Sun states that not all JavaComm implementations support generating events of this type.

Before going into details, the next section will present the principal way of implementing and registering a serial event handler. Remember, there can only be one handler at all, and it will have to handle all possible events.

Setting up a serial Event Handler
Once the listener is implemented, it can be used to listen to particular serial port events. To do so, an instance of the listener needs to be added to the serial port. Further, the reception of each event type needs to be requested individually.

Setting up a separate Thread for Writing
Using a separate thread for writing has one purpose: Avoiding that the whole application blocks in case the serial port is not ready for writing.

A simple, thread-safe Ring Buffer Implementation
Using a separate thread for writing, separate from some main application thread, implies that there is some way to hand off the data which needs to be written from the application thread to the writing thread. A shared, synchronized data buffer, for example a  should do. Further, there needs to be a way for the main application to determine if it can write to the data buffer, or if the data buffer is currently full. In case the data buffer is full it could indicate that the serial port is not ready, and output data has queued up. The main application will have to poll the availability of new space in the shared data buffer. However, between the polling the main application can do other things, for example updating a GUI, providing a command prompt with the ability to abort the sending, etc.

At first glance a  pair seems like a good idea for this kind of communication. But Sun wouldn't be Sun if the a piped stream would actually be useful. blocks if the corresponding  is not cleared fast enough. So the application thread would block. Exactly what one wants to avoid by using the separate thread. A  suffers from the same problem. Its blocking behavior is platform dependent. And adapting the classic I/O used by JavaComm to NIO is anyhow not a nice task.

In this article a very simple synchronized ring buffer is used to hand over the data from one thread to another. In a real world application it is likely that the implementation should be more sophisticated. E.g. in a real world implementation it would make sense to implement OutputStream and InputStream views on the buffer.

A ring buffer as such is nothing special, and has no special properties regarding threading. It is just that this simple data structure is used here to provide data buffering. The implementation is done so that access to this data structure has been made thread safe.

.     * @return       Amount of data actually written */    int write(byte data[], int off, int n) { if(n <= 0) return 0; int remain = n;        // @todo check if off is valid: 0= <= off

With this ring buffer one can now hand over data from one thread to another in a controlled way. Any other thread-safe, non-blocking mechanism would also do. The key point here is that the write does not block when the buffer is full and also does not block when there is nothing to read.

Usage of OUTPUT_BUFFER_EMPTY Event in Writing
Referring to the skeleton event handler presented in the section Setting up a serial Event Handler, one can now use a shared ring buffer from section A simple, thread-safe Ring Buffer Implementation to support the   event. The event is not supported by all JavaComm implementations, therefore the code might never be called. However, in case the event is available it is one building block for ensuring best data throughput, because the serial interface is not left idle for too long.

The skeleton event listener proposed a method, which could be implemented as it follows.

Reading of Data
The following example assumes that the data's destination is some file. Whenever data becomes available it is fetched from the serial port and written to the file. This is an extremely simplified view, because in reality one would need to check the data for an end-of-file indication to, for example, return to the modem command mode.

Modem Control
JavaComm is strictly concerned with the handling of a serial interface and the transmission of data over that interface. It does not know, or provide, any support for higher-layer protocols, e.g. for Hayes modem commands typically used to control consumer-grade modems. This is simply not the job of JavaComm, and not a bug.

Like with any other particular serial device, if the control of a modem is desired via JavaComm the necessary code has to be written on top of JavaComm. The page "Hayes-compatible Modems and AT Commands" provides the necessary basic generic information to deal with Hayes modems.

Some operating systems, e.g. Windows or certain Linux distributions provide a more or less standardized way how modem control commands for a particular modem type or brand are configured for the operating system. Windows modem "drivers", for example, are typically just registry entries, describing a particular modem (the actual driver is a generic serial modem driver). JavaComm as such has no provisions to access such operating-system specific data. Therefor, one either has to provide a separate Java-only facility to allow a user to configure an application for the usage of a particular modem, or some platform-specific (native) code needs to be added.

Overview and Versions
Due to the fact that Sun didn't provide a reference implementation of the JavaComm API for Linux, people developed RxTx for Java and Linux. RxTx was then further ported to other platforms. The latest version of RxTx is known to work on 100+ platforms, including Linux, Windows, Mac OS, Solaris and other operating systems.

RxTx can be used independent of the JavaComm API, or can be used as a so called provider for the JavaComm API. In order to do the latter, a wrapper called JCL is also needed. JCL and RxTx are usually packaged together with Linux/Java distributions, or JCL is completely integrated into the code. So, before trying to get them separately, it is worth having a look at the Linux distribution CD.

There seems to be a trend to abandon the JavaComm API, and using RxTx directly instead of via the JCL wrapper, due to Sun's limited support and improper documentation for the JavaComm API. However, RxTx's documentation is extremely sparse. Particularly, the RxTX people like to make a mess of their versions and package contents (e.g. with or without integrated JCL). Starting with RxTx version 1.5 RxTx contains replacement classes for the public JavaComm classes. For legal reasons they are not in the  package, but in the   package. However, the two currently available RxTx versions are packaged differently:

 * RxTx 2.0:RxTx version supposed to be used as a JavaComm provider. This one is supposed to have its roots in RxRx 1.4, which is the RxTx version before the  package was added.
 * RxTx 2.1:RxTx version with a full  package replacement for  . This version is supposed to have its roots in RxTx 1.5, where   support started.

So, if one wants to program against the original JavaComm API one needs

 * 1) Sun's generic JavaComm version. As of this writing this is in fact the Unix package (which contains support for various Unix versions like Linux or Solaris). Even when used on Windows, the Unix package is needed to provide the generic  implementations. Only the part implemented in Java is used, while the Unix native libraries are just ignored.
 * 2) RxTx 2.0 in order to have a different provider below the generic generic JavaComm version than the ones coming with the JavaComm package

However, if one just wants to program against the  replacement package, then
 * only RxTx 2.1 is needed.

Converting a JavaComm Application to RxTx
So, if you belong to the large group of people who have been let down by Sun when they dropped Windows support for JavaComm, you are in need to convert a JavaComm application to RxTx. As you can see from the above, there are two ways to do it. Both assume that you manage to install a version of RxTx first. Then the options are either

 * 1) Using RxTx 2.0 as a JavaComm provider
 * 2) Porting the application to RxTx 2.1

The first option has already been explained. The second option is surprisingly simple. All one has to do to port some application from using JavaComm to using RxTx 2.1 is to replace all references to  in the application source code with references to. If the original JavaComm application was properly written there is nothing more to do.

RxTx 2.1 even provides the tool  to perform the global replacement on a source tree under Unix. On other platforms such a global replacement is easy to do with IDEs supporting a decent set of refactoring features.

title: Serial Programming/Serial Java


text:
User:The bellman/Cookbook

 * create an infobox similar to the species one for animals and plants on the 'pedia. Either write or get someone to write a search script for the ingerdients, so that you can say. I have a frog, a bannana, and some thime, what can i cook?

title: User:The bellman/Cookbook


text:
Movie Making Manual/To Do

Little things to be getting on with:

Technical and layout

 * 1) Go through each page and make sure we're cross-linking properly.  For example, make sure that the writing page has a link through to the software section and vice-versa.
 * 2) Find other wikibooks which relate to the MMM (e.g. photography, sound recording etc).

Spreading the word

 * 1) Link to our wikibook from as many websites as possible to nudge up our Google ranking (but don't go overboard - we don't want to be blacklisted!)
 * 2) Encourage people from on- and off-line filmmaking communities to contribute to the MMM

WikiPedia

 * 1) Go through the MMM and make as many links as possible to WikiPedia
 * 2) Go through the filmmaking content on WikiPedia and - where appropriate - add a link to the MMM

Content

 * 1) Keep hacking away at creating new content.
 * 2) More pictures!  Film makers like visuals. (but make sure the pictures are not copyrighted)

Cinematography

 * Change all the entries in the Table of Cameras to be like the Genesis camera entry
 * Create a template camera page
 * Write a brief how-to-edit-this-table in the table
 * Edit the links from the "format" section of the "table of cameras" to point to the correct part of table of formats.

title: Movie Making Manual/To Do


text:
Cookbook:Space Cake

| Dessert | Cake

Ingredients

 * 1 cup finely-ground pure cannabis
 * 1 cup flour
 * 1 cup water
 * 1 tsp baking powder
 * 1 tbsp cocoa powder
 * 5 tbsp butter or margarine
 * 1 cup white granulated sugar

Procedure

 * 1) Preheat oven to 200°C.
 * 2) Grease a non-stick baking tray or line with parchment paper.
 * 3) Place butter and sugar in a bowl, and combine till you have a thick batter.
 * 4) Add flour, baking powder, cannabis, and cocoa powder, and combine with small amounts of water at a time until smooth. If adding any additional ingredients, add them now.
 * 5) Using a tablespoon, dollop scoops of batter on the tray, ½ inch apart from each other and sides of the tray.
 * 6) Place tray in preheated oven, and allow to bake for 10–20 minutes, until center is cooked. Pricking a toothpick in the center will let you know—if the batter sticks to the pick, it's not ready yet.
 * 7) Remove from oven, and allow to cool.

Notes, tips, and variations

 * You may wish to replace the standard butter or margarine with THC butter.
 * The cocoa powder may be omitted from the recipe if you prefer a chocolate-free version.
 * Try adding one or more of the following to the dry ingredients before adding the water:
 * 1 capful mint essence
 * ½ cup chocolate chips (goes well with the mint)
 * ½ cup coconut flakes (an additional 2 tbsp of butter and ¼ cup water may be needed here)
 * 1 dash of Kahlua, rum, or sweet brandy

title: Cookbook:Space Cake


text: Template:The Unicyclopedia/TOC1

title: Template:The Unicyclopedia/TOC1


text:
Robotics/Navigation

What is Navigation?
Navigation comprises everything a robot needs to get from point A to point B as efficient as possible without bumping into furniture, walls or people.

This problem breaks down in several sub-problems:
 * It needs to know where (Localization) it is.
 * It needs to detect and avoid obstacles (Collision Avoidance).
 * It needs memory of its surroundings (Mapping).
 * It has to be able to plan a route (Trajectory Planning) to point B.
 * It has to be able to explore (Exploration) new terrain.

title: Robotics/Navigation


text:
Robotics/Navigation/Localization

Localization involves one question: Where is the robot now? Or, robo-centrically, where am I, keeping in mind that "here" is relative to some landmark (usually the point of origin or the destination) and that you are never lost if you don't care where you are.

Although a simple question, answering it isn't easy, as the answer is different depending on the characteristics of your robot. Localization techniques that work fine for one robot in one environment may not work well or at all in another environment. For example, localizations which work well in an outdoors environment may be useless indoors.

All localization techniques generally provide two basic pieces of information:
 * what is the current location of the robot in some environment?
 * what is the robot's current orientation in that same environment?

The first could be in the form of Cartesian or Polar coordinates or geographic latitude and longitude. The latter could be a combination of roll, pitch and yaw or a compass heading.

Current Location
The current location of a robot can be determined in several very different ways:

Dead Reckoning
Dead reckoning uses odometry to measure how far the robot moves. Trigonometry and the equations of kinematics are all that is needed to calculate its new position.

This method has 2 requirements:
 * It needs a way to determine its initial location.
 * Its accuracy usually decreases over time as every measurement has an error and errors accumulate.

Dead reckoning is often used with other methods to improve the overall accuracy.

Least Mean Squares
There are numerous solutions to the localization robotics problem. These range from simple Dead Reckoning methods to advanced algorithms with expensive radar or vision system. The most important factor is picking an algorithm to find the robotic location is the availability of accurate relative and global position data. For simple systems with basic relative position sensors and some form of a global position sensor, the most practical and easiest to implement localization method is that of Least Mean Squares.

See Least Squares: http://en.wikipedia.org/wiki/Least_squares for more information on using the method of Least Squares to find solutions for over determined systems.

To look at the Least Mean Square (LMS) algorithm in a general sense first, it is important to look at the general principles that govern it. The goal of all localization methods is to minimize the error between where the robot is and where the robot should be. The algorithm must be able to follow a preset track or find the least error in the robot location (Adaptive Algorithms and Structures, p. 97). These goals for robot localization are applied to the LMS algorithm by adaptively adjusting weights to minimize the error between the actual function and the function generated by the LMS algorithm. As a subset of the Steepest Descent Algorithm (http://en.wikipedia.org/wiki/Gradient_descent), this method was created to minimize the error by estimating the gradient (http://en.wikipedia.org/wiki/Gradient) and is known as the simplest localization method with global position output.

Derivation of LMS Algorithm
The LMS algorithm can be applied to two cases:

•	Parallel multiple inputs

•	Series single input

Figure 1: Linear Combiner Configuration [1]

Figure 2: Curve Fit to Data to Minimize Error [3]

Figure 3: Transversal Combiner Configuration [1]

In both cases, the gradient is calculated as

εk = dk - XTkWk

where ‘Yk’ is the desired output, ‘XTk’ is the actual input, and ‘Wk’ for the kth input element. Next, the gradient estimate is calculated as Now that we have the gradient estimate, the weights can be updated by

Wk+1 = Wk - μdelk = Wk + 2μεkXk

to minimize the error through iterative change. ‘μ ’ is the gain constant for training the algorithm. The use of training is to adjust how fast the error is corrected for by the weight update function [1]. If the training constant is too high, the system will oscillate and never converge to the minimal error value.

To illustrate the process other than in mathematical format, the LMS algorithm can be demonstrated through the use of pseudo code. The purpose of the code below is for illustration purposes only. This example is intended to provide a step-by-step visualization tool for beginning the coding process.

Procedure LMS
Initialize the Weights repeat choose training pair (x,d) for all k do   yk = WkXk end for all k do   εk = Yk - dk end for all k do   Wk(j+1) = Wk(j) + μεkXk end until termination condition reached

Various Variations
Modified LMS Method

For problems with sequentially arriving data, the Modified LS method can be used to add or delete rows of data. In various time-series problems, a moving ‘window’ can be employed to evaluate data over a predefined timeframe. This method is useful in LMS problems that arise in statistics, optimization, and signal processing [2].

Constrained LMS Method

For curve and surface fitting application problems, the Constrained LMS method is very useful. Such problems require satisfying linear equations systems with various unknowns. This method only provides a useful solution if and only if each input can be scaled by some magnitude and still remains a constant [2].

Direct Methods for Sparse problems

A sparse LMS problem involves solving the LMS problem when the matrix has ‘relatively few’ nonzero elements. “J. H. Wilkinson defined a sparse matrix to be ‘any matrix with enough zeros that it pays to take advantage of them’” [2]. A more precise definition is more difficult to provide. Such problem usually involve large to enormous size and involve numerous unknowns. The following are examples of problem that can be classified as sparse problems: pattern matching, cluster analysis, and surface fitting [2].

Iterative Methods for LMS problems

A second method for solving sparse problems (in addition to the Direct Method mentioned above) is the Iterative Method. In general, the Iterative Method is used for analysis of under-determined, sparse problems to compute a minimum solution based on the norm of the input data [2].

Nonlinear LMS Method

For problems with nonlinear systems, the Nonlinear LMS method is useful for iteratively calculating the relative LMS solution to the problem. This method can be used for unconstrained optimization and various survey methods [2].

Additional Sources for Application and Theory
For further reference and additional reading, the following resources can be used for a more extensive overview of the subject.

 * Adaptive Antenna Control by LMS

 * LMS Estimation Techniques

 * Least Squares

 * Least Squares Filter

GPS Global Positioning System
On large terrains GPS can provide more or less accurate coordinates, dead reckoning and the data from its other sensors can fill in the gaps. However on small terrains or indoors the GPS's inaccuracy becomes a problem and the dead reckoning and sensor data becomes the dominant factor in determining the location.

GPS-like Systems
Although GPS isn't very useful indoors, similar techniques as those used in GPS can be used indoors. All a robot needs is to measure it's distance to 3 fixed beacons. Each of these distances describe a sphere with the beacon in its center. 3 spheres will only intersect in one point.

Line following
Probably the easiest way: Draw a line on the ground and use IR reflection sensors to follow it. Useful as a track or to mark the edges of the robot's work area.

This can also be done by putting an electric cable in the ground and sending a modulated signal through it. The robot can detect this cable with magnetic sensors (Hall-sensors or coils).

The complex versions of line-following involves using sensors like vision (camera) which helps reducing overall cost of sensors and implementation and also provides versatility to detect lines of various colours. It allows a great scope for autonomy in the system too.

Landmarks
Placing landmarks is another way to help your robot to navigate through its environment. Landmarks can be active beacons (IR or sound) or passive (reflectors). Using bar code scanners is another possibility.

A special trick, if the environment is known beforehand, is to use collision detection (i.e. sensor bumpers or similar) with known objects. Together with dead reckoning the precision can be extraordinary even when using cheap equipment.

In new environments landmarks often need to be determined by the robot itself. Through the use of sensor data collected by laser, sonar or camera, specific landmark types (e.g. walls, doors, corridors) can be recognised and used for localization.

Current Heading
Determining a robot's heading can be done with a compass sensor. These sensors usually consist of 2 magnetic field sensors placed at a 90° angle.

These sensors measure the earth's magnetic field and can be influenced by other magnetic fields. Speakers, transformers, electric cables and refrigerator magnets can reduce the accuracy of the compass. Compass sensor modules can have built-in filtering for the magnetic fields of AC.

title: Robotics/Navigation/Localization


text:
Robotics/Navigation/Collision Avoidance

Collision avoidance, in comparison to collision detection, is what is done after a possible collision is detected. Possible collisions will depend on the shape and size of both the object and robot as well as the position and motion projection of the object and the robot. When making an attempt to avoid an obstacle, there are many decisions to face. The decisions available depend on the available paths the robot can take to avoid the obstruction. These paths can either be determined upon the robot’s realization of the obstruction or, in case all of the obstructions’ positions are known, once the map is loaded. Finding the “correct” path to use can be troublesome depending on which algorithm is used and the granularity associated with it.

Basic Idea
If there is an object in the robot’s way, avoid it.

Essentially, this is the basic idea in collision avoidance. However, this simple matter to humans is incredibly complex in the computer world. Which algorithm is best in avoiding obstacles? Which is least complex, most efficient? Which algorithm can utilize the robot’s full capabilities effectively? All of these are questions one should ask when searching for a valuable collision avoidance algorithm.

Example Algorithm

In the figure to the right, a simple “tank-drive” robot is presented making it’s way to three pre-determined waypoints. The robot’s algorithm is a dignified version of the simple one-liner given at the beginning of this section:

 * 1) Turn to the nearest waypoint if there is one left.
 * 2) If there is no waypoint left, stop.
 * 3) Move toward the nearest waypoint.
 * 4) If there is something in the way:
 * 5) Go around it.
 * 6) After every 1.5 body lengths, go to step 1.
 * 7) If the robot has reached the waypoint:
 * 8) Remove the reached waypoint from the list.
 * 9) Go to step 1.

Albeit this algorithm works well for an over-simplified map where all obstacles are simple geometric shapes, in more complex scenarios it may not fare as well. For instance, nestling a waypoint in the middle of a U-shaped obstacle would cause this algorithm to never end.

Major Problem
With robots having greater and greater importance in our everyday lives, it is no wonder that collision avoidance (particularly dealing with human safety) is becoming an increasingly greater concern. Such concerns are not to be taken lightly. There is already one death associated with roboticide.

In addition to safety, other concerns can be generated:
 * Collision Avoidance Algorithmic Complexity
 * Computer Power
 * Sensor Accuracy / Throughput
 * Sensor Data Interpretation

Of course, as the algorithmic complexity of the collision avoidance algorithm increases, so does the required computer power. Some researchers are even finding it beneficial to use multiple processors in parallel (parallel processing) to “divide and conquer” such problems.

Sensor accuracy and throughput is becoming less a threat to successful collision avoidance. However, this doesn’t mean it is non-existent. During the process of engineering a collision-avoiding robot, trade-offs can be made that could potentially compromise the effectiveness of the sensors in how the robot behaves.

Detection vs. Avoidance
Collision detection is simply the act of surveying the known vicinity of the robot and detecting the presence (or absence) of a possible collision. In order for a robot to avoid a collision, a collision must first be detected. Without collision detection, it doesn’t seem reasonable to have collision avoidance because there wouldn’t be anything to avoid (in the robot’s scope).

Collision avoidance is the plan for action the robot takes to evade the oncoming collision. As previously stated, there is no need for collision avoidance if there are no collisions to avoid.

Quad Trees
The use of quad trees allows for a simple collision avoidance algorithm. An approximation technique used here uses a type of data structure called a quad tree. A quad tree is similar to that of a binary tree except that a quad tree has four child nodes for each parent instead of just two.

Each child node is represented by a square of pixels in a “top-down” image of the robot’s surrounding landscape. Each square simply acts as a binary answer to the question, “Is there any possibility for a collision inside of this square?” If the answer is yes, then the square is avoided, otherwise, the square is noted for safe travel. An example of this is given in the figure below.

Advantages
An advantage to using this algorithm is that retreating can be done fairly easily – by climbing back up the tree and trying a different approach. Of course, in a case where all of the obstacles have been found, a minimal path can easily be created using simple distance algorithms.

Disadvantages
A disadvantage to using this algorithm is that, due to the granularity of each square of pixels, it is possible for the obstacles to be close enough such that a robot wouldn’t notice that it could actually fit through a gap.

title: Robotics/Navigation/Collision Avoidance