The angle of the data is not aligned with the natural axis of the device. It seems that the first sample of the first packet is in fact looking at a -10° angle, not 0°. Needs confirmation.
===Data format for firmware V2.4 ===
(recent production units)
return int( checksum )
===Data format for firmware 2.1 ===
(Sparkfun scans, pre-production units)
Byte 2 and 3 are the LSB and MSB of the strength indication. This value can get very high when facing a retroreflector.
<br />
== Motors ==
Data on the drive motors, brush motor, and vacuum fan.
=== SetMotor Command ===
Motor speeds can be set using the SetMotor commands. This command is handled asynchronously, so you can query other commands while the robot is moving. The simplest way to set both the left and right motor speed is to use:
SetMotor left_dist right_dist speed
Where left_dist and right_dist are a distance to travel in millimeters, and speed is the speed to use for movement in millimeters per second. Speed must be positive, and at least one of left_dist or right_dist must be non-zero. Drive motor speeds are -300 mm/s to 300 mm/s. These max speeds also induce a rotational max speed of approximately +/- 2.25 radians/sec given the separation of the wheels.
It appears that when different distances are put in, the speed will be applied to the wheel moving the farther distance, and the other wheel will be scaled such that both wheels take the same amount of time to travel their complete distance. (Can someone confirm this on their bot? - Fergy).
Some examples:
* SetMotor 100 100 100 - will move the robot forward 100mm, in approximately one second
* SetMotor 100 -100 100 - will turn the robot to the right in place, for 1 second.
* SetMotor 100 200 100 - the robot will move forward and to the left, for 2 seconds.
The base width separation of the wheel is approximately 248 millimeters. Therefore, the circumference when turning in place is approximately 780 millimeters. Thus, we can turn the robot using:
* SetMotor 195 -195 100 - the robot will turn in place, 90 degrees to the right.
<br />
== Neato XV series WiFi remote control ==
Neato is great in cleaning by it self, it also has good “spot clean” algorithm! But, what if you want to clean just a certain spot? In other words - use it like a regular vacuum?
That was the basic idea which led to realization of the full wireless remote control.
As you may know, you can manually control Neato right out of the box by connecting it to any computer via usb and, through any terminal program, send commands to robot (for some reason article describing command list on official Neato site is unreachable at this moment, but you can get it by typing ‘help’). The way you can control Neato movements is described here: XV-11 API Commands
This is really great, but how can one use it for robot’s intended purpose if he or she is limited by the length of the wire? Of course you can take a laptop! But for me it was not the answer. Luckily, my friend recently has brought a compact (very compact) WiFi router (Commonly available from eBay as “2g/3g/4g wifi router”, also known as HAME MPR-A5 and MIFI-F5. MPR-A1 and clones are likely to work as well if you manage to fit them in. Some additional material is available on <nowiki>http://my-embedded.blogspot.com/2013/12/mini-4g-router-rt5350f.html</nowiki>) and suggested that we should try to embed it into my Neato.
So, it was obvious that all we needed was to find +5V power supply and connect usb from router to neato’s usb. All that sounds simple, so we did it. (i should say that my Neato has rev.64 main board)