Changes

Jump to navigation Jump to search
5,552 bytes added ,  02:06, 23 October 2020
no edit summary
<br />[[File:Neato-xvXV-11.jpg|alt=|thumb|Neato XV-11 Robotic Vacuum]]'''''The Neato XV-11([[wikipedia:Neato_Robotics|Wikipedia]]) is a robot which vacuum’s your house. It is unlike any other however because it includes a low cost 360 degree laser distance scanner (LIDAR See [[wikipedia:Lidar|Wikipedia]]). This content has been migrated can be removed from the old xv11hackingXV-11 and used in your own robotics projects or used within the XV-11 with the help of the Robot Operating System (ROS). The pages within this wiki document interfacing methods into the XV-11 and is open to anyone who wants to help. For $399 you can’t find a better robotics platform in my opinion, definitely worth the cost even if you do nothing more than strip it down for parts. You will find it is very well constructed by some people who definitely know about robotics.com website'''''
What is the Neato XV-11 you ask??  The Neato XV-11('''''This content has been migrated from [[wikipediahttps:Neato_Robotics|Wikipedia]]) is a robot which vacuum’s your house//web.archive. It is unlike any other however because it includes a low cost 360 degree laser distance scanner (LIDAR See [[wikipediaorg/web/20180721051927/http:Lidar|Wikipedia]]). This can be removed from the XV-11 and used in your own robotics projects or used within the XV-11 with the help of the Robot Operating System (ROS)//xv11hacking. The pages within this wiki document interfacing methods into the XV-11 and is open to anyone who wants to helpwikispaces. For $399 you can’t find a better robotics platform in my opinion, definitely worth the cost even if you do nothing more than strip it down for partscom/ xv11hacking. You will find it com] which is very well constructed by some people who definitely know about roboticsno longer available.'''''
==Connecting to ROS==
''The following procedure will help you install the Robot Operating System on Ubuntu 10.10 for use with the XV-11.''
I have tested this running Ubuntu 10.10 as a VMware virtual machine as well as installed on a system as the booted OS. Ubuntu is a very easy to use Linux release you can download from [http://www.ubuntu.com/ here ] Now lets get started! Open a terminal by clicking on '''Applications -> Accessories -> Terminal''' Enter the following commands by copying and pasting them into the terminal window. Use '''CTRL-C''' to copy and then '''CTRL-SHIFT-V''' to paste them in the terminal window.<br /># sudo sh -c ‘echo “deb <nowiki>http://code.ros.org/packages/ros/ubuntu </nowiki> maverick main” > /etc/apt/sources.list.d/ros-latest.list’# wget <nowiki>http://code.ros.org/packages/ros.key </nowiki> -O - | sudo apt-key add -# sudo apt-get update# sudo apt-get install ros-cturtle-base
The last command will install approximately 5GB worth of software so grab some coffee, a Rockstar, or your stimulant of choice! Once it is done installing run the commands below to install some more ROS software in your home folder.
<br /># cd; mkdir ros; cd ros# svn co <nowiki>https://brown-ros-pkg.googlecode.com/svn/tags/brown-ros-pkg/teleop_twist_keyboard</nowiki># svn co <nowiki>http://albany-ros-pkg.googlecode.com/svn/trunk/slam_coreslam/coreslam</nowiki># svn co <nowiki>http://albany-ros-pkg.googlecode.com/svn/trunk/neato_robot</nowiki># echo ‘. /opt/ros/cturtle/setup.sh’ >> ~/.bashrc# echo ‘export ROS_PACKAGE_PATH=~/ros:${ROS_PACKAGE_PATH}’ >> ~/.bashrc# source ~/.bashrc# sudo su# echo ‘. /opt/ros/cturtle/setup.sh’ >> ~/.bashrc# echo ‘export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}’ >> ~/.bashrc# exit# cd ~/ros/teleop_twist_keyboard; rosmake# cd ~/ros/coreslam; rosmake# cd ~/ros/neato_robot; rosmake
Now we will edit the /etc/modules file so the usbserial driver will be automatically loaded with the parameters needed. We also add the cdc_acm driver to the blacklist so it will not be used with the XV-11. On a Macbook Pro the system used this driver instead of usbserial.
<br /># sudo su# echo “usbserial vendor=0x2108 product=0x780B” >> /etc/modules# echo “blacklist cdc_acm” >> /etc/modprobe.d/blacklist.conf# modprobe usbserial vendor=0x2108 product=0x780B# rmmod cdc_acm# exit
Almost time to plug your XV-11 into the system!! For the sake of simplicity do not plug in any other USB to serial devices at this point. This will ensure your XV-11 appears as '''/dev/ttyUSB0''' and will simplify setup at this point.
# ls /dev/ttyU*
Once you plug in the XV-11 you should see '''/dev/ttyUSB0''' appear. Now lets load the XV-11 drivers.
# roslaunch neato_node bringup.launch
Entering the above command should initiate a connection to '''/dev/ttyUSB0''' and after a couple seconds you will hear the LIDAR start to spin on the XV-11. Don’t worry if you don’t hear it, press '''CTRL-C''' to exit the driver then enter the command again. I have found it does not seem to start properly upon first load. Now press '''CTRL-SHIFT-T''' while your terminal window is selected to open a new tab within that terminal window, just like a new web browser tab. We will open a few of these tabs to load the different ROS drivers/programs.
# roslaunch 2dnav_neato move_base.launch# (open a new tab before running the next command)# rosrun rviz rviz
Just to verify, you should have three tabs open now with these three commands simultaneously running. SWEET HUH!! Now you have the GUI application running, just a couple more steps and its play time! On the top menu bar click '''Plugins -> Manage''' then click the box next to '''Loaded''' and click '''OK'''. There is a video [http://www.ros.org/wiki/navigation/Tutorials/Using%20rviz%20with%20the%20Navigation%20Stack here] with details on setting up RViz. You can use this file with RViz and it has all those parameters already setup. Right click on the file and save it. Within RViz just go to '''File -> Open Config''' and select the XV11.vcg file. Now open a new terminal which we will use for keyboard control to manually navigate the XV-11.
# rosrun teleop_twist_keyboard teleop_twist_keyboard.py
You will see which keys are used to navigate on the screen once the program is running. The default speed settings are too fast for the XV-11 so you need to reduce the speed before it will respond to any input. Repeatedly press the '''“x”''' key to reduce speed when traveling in a straight line to about 0.10 and then do the same with the “c” key to reduce rotational speed to about 0.15. Now you can use the keyboard keys to navigate.
Runtime V2.6.15295
OK
<nowiki> #</nowiki>testmode off 
This is after the upgrade
<br />
Runtime V2.6.15295
OK
<nowiki> #</nowiki>testmode off
==Interfacing with LIDAR Sensor==
I created a board to interface the LIDAR sensor to a PC without the rest of the XV-11. The PCB consists of a PIC18F2221, and FTDI-232R, a 3.3V regulator, and a Fet for controlling the motor. The pic watches the data from the LIDAR and uses the speed information to control the PWM pin attached to the FET. In this way the correct speed can be maintained. The Firmware for the pic currently only supports the old LIDAR firmware ( that is what I have). Hopefully someone else can modify it to work with the other firmware as well. There are jumpers for configuring who talks to what between the PC, PIC, and LIDAR. There are also options for supplying your own 5V instead of getting it from USB and an option for using an XBEE for wireless communication. Schematics are posted below as well as the Eagle brd files. Source code for the PIC will be posted soon. I have spare boards for sale if anyone is interested. Ringo (dot) Davis (at) gmail (dot) com.
[[File:LIDAR mounted on PCB.jpg|none|thumb|533x533px|LIDAR mounter on interface board|alt=]][[File:LIDAR plugged in to Interface board.jpg|none|thumb|533x533px|LIDAR plugged in to Interface board|alt=]]
<br />
TestEncoder
Commands are case-insensitive, and can be entered incompletly incompletely : getversion, getvers, getv, GeTvErSiOn will all work alike. Be aware that one at least of these commands can brick your LDS... Here are the details of what is currently known about these commands: (To be completed!)
GetVersion
Draws a squirrel in a heart, in ASCII art...
Example:
[[File:Wanderer Screen Shot.png|none|thumb|400x400pxalt=]]
<br />
**You can get free samples of these parts from [https://tycoelectronics.com/ TE’s website]
2D CAD files of the XV-11’s LIDAR unit, in mm. Thanks goes to '''''chenglung''''' from the trossen robotics forums[https://www.trossenrobotics.com/ Trossen Robotics] Forums.
3D CAD model of the LIDAR unit. Note that I used the 2d cad files mentioned above along with my own measurements, so be warned that the following is not completely accurate. Also, I’m no CAD professional, so you won’t find much detail in the model - just enough to account for any significant design properties which may be useful to know when building the module into your own applicatio
*Data 0 to Data 3 are the 4 readings. Each one is 4 bytes long, and organized as follows :
<br />
byte 0 : Distance 7:0
byte 1 : “invalid data” flag : “strength warning” flag
byte 3 : Signal Strength 15:8
As [https://sites.google.com/site/chenglung /home/xv-11-open-lidar-project-matlab-script chenglung] points out, the distance information is in mm, and coded on 14 bits. This puts the tests made by Sparkfun in a room of around 3.3m x 3.9m (11ft x 13 ft ?), which seems reasonable.
The minimum distance is around 15cm, and the maximum distance is around 6m.
It is organized as follow :
<br />
5A A5 00 C0 XX XX  data
`` is composed of 360 group of 4 bytes, organized like this :
<br />
byte 0 : Distance 7:0
byte 1 :  “invalid data” flag : ”quality warning” flag : distance 13:8
byte 3 : Quality 15:8
As [https://sites.google.com/site/chenglung /home/xv-11-open-lidar-project-matlab-script chenglung] points out, the distance information is in mm, and coded on 13 or 14 bits. This would put the tests made by Sparkfun in a room of around 3.3m x 3.9m (11ft x 13 ft ?), which seems reasonable to me. 13 bits should be enough if the sensor is destined to work up to 6m. This needs some tests...
The bit 7 of byte 1 seems to indicate that the distance could not be calculated.
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|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 http://my-embedded.blogspot.com/2013/12/mini-4g-router-rt5350f.html) and suggested that we should try to embed it into my Neato.
The source contains few Neato specific bits related to the operation of the robot, however some intresting interesting details are disclosed:
*The unpopulated footprint (J2) on the PCB Rev 64 is indeed a SD Card footprint, and the source reveals that the kernel has SD Card support.
*The presense presence USB Gadget drivers of suggests that the Neato has USB OTG support and “Ethernet over USB” capabilities (unconfirmed)
*Mystery .raw file \LinuxSrc\rootfs\etc\test_map.raw (400KB). Could this be sample LIDAR data?
*Contents of the file \LinuxSrc\rootfs\etc\Issue: “Welcome hackers!”. :
*[[:File:Neato XV-11 Readme.txt|Readme.txt]] of the LinuxSrc folder
<br />
Accessing this device offers a limited console over USB serial with no local echo.
Contents of the folder LinuxSrc\boot indicate that [http://www.denx.de/wiki/U-Boot U-boot ] is, or was used as, bootloader on the Neato at some point “''Hopefully u-boot doesn’t make it to production, but if it does..'', LinuxSrc\boot\arch\arm\cpu\lpc313, line 453.
The Neato bootloader console does not support any of the standard U-boot commands.
[[File:Neato XV-11 Early PCB Version.jpg|thumb|'''Neato XV-11 Early PCB Version''']]
{| class="wikitable"
! colspan="34" |Neato XV-11 BOM and Parts identification||-||||
|-
|Ref. Desg.
[[File:Neato XV-11 Map bathroom1.gif|thumb]]
[[File:Neato XV-11 Map bathroom2.gif|thumb]]
[[File:Neato XV-11 capture.gif|thumb]]
Warning: This feature seems to be missing in the current (v2.6) firmware.)
[[File:Neato XV-11 Map capture-laser.gif|none|thumb]]
== XV-11 API Commands ==
=== Commands available through the USB port on the XV-11 ===
Neato Robotics currently has an list of commands accessible to people who want to tinker with their robots.
See their official site for information: http://www.neatorobotics.com/programmers-manual
=== Getting a list of Commands ===
Your first point of call is the Neato Robotics Programmers Manual listed above. Also if you have an established link to your Neato you can type:-
help
help getmotors
=== Enabling TestMode ===
A lot of the functions available to programmers can only be used if “TestMode” has been enabled on the Neato. Most functions displayed in the Help are listed as “TestMode Only” which will give you an idea as to what can be only be used when TestMode is enabled.
With TestMode enabled, you Neato will behave a little differently than normal.
* All buttons on the robot will NOT respond to input as it normally does* You may not be able to re-establish connection to your robot if you unplugged and reconnected in a short period of time. If you cant re-establish connection, wait a few mins before attempting again.
The following commands and examples listed below will assume you have TestMode enabled, (unless specified differently)
=== Issuing Commands to the Motors ===
When you are first experimenting with command, I recommend you turn Neato up-side-down so the wheels can free spin. Otherwise you may get instances where your robot drives away faster than you expected, crashing into things and generally making a mess of your room as it lacks logic to stop.
As I have been experimenting, my Neato seems to steer to the left a little as it drives along in a ‘straight’ line. I’ve also had differences in distance travelled depending on my speed setting. I have yet to sit down and measure the accuracy of these movement commands.
=== Problems You May Encounter ===
A little issue I found in my tinkering exploits, Neato would suddenly power off when issuing commands. This seems to be because I was issuing a large amount of commands within a short period of time. To give you an idea, I was issuing a set of three SetLED commands once every 20ms. Within about 2seconds, Neato would power off. To fix the issue, unplug your USB, power up Neato and reconnect the USB.
 
==LCD PCB Information==
[[File:Neato XV-11 LCD panel front labels.png|thumb|Neato XV-11 LCD panel front ]]
[[File:Neato XV-11 LCD panel back labels.png|thumb|Neato XV-11 LCD panel back ]]
'''IMPORTANT LCD INFORMATION!!!''' As you can see in the first image, the LCD is labeled “GVLCM128128G 13572A” on its backside. Googling this brings up the following LCD producer: [http://www.golden-vision.cn/ Golden Vision]. However, this exact LCD is not listed on their site, but [http://www.golden-vision.cn/productxs.asp?id=24 this similar one] is. All the measurable specs are similar (dimensions are approximately the same - the XV-11’s LCD measures approximately 61.6 mm x 55.1 mm x 4.36 mm, which is a bit thicker, probably due to the backlight; 128 x 128 resolution). The only differences I could find are the small white line above the ribbon cable at the bottom of the “similar” LCD isn’t present on the XV-11 LCD, and the ribbon cable of the “similar” LCD is 24 pins, not 25 (so the “similar” '''LCD CANNOT BE USED AS A REPLACEMENT - IT WOULDN’T BE PIN COMPATIBLE!'''). Anyway, the company only lists a few 128x128 LCD’s in production (none of which match the XV-11’s), so this narrows down the list of possible LCD controllers used in the XV-11’s LCD to just the [http://www.tstonramp.com/~pddwebacc/ics_app%20notes/sitronix/ST7541_12.pdf ST7541] (others are possible but you could say these are more likely since we know this is the only chip the company uses in their 128x128 greyscale LCD’s). We can’t be sure until we test out driving this LCD standalone (on my TODO list for the next 2 weeks - I’m waiting on a FFC Ribbon Cable Breakout to come in from New Haven Display ([http://www.newhavendisplay.com/index.php?main_page=product_info&cPath=91_123&products_id=1100 look here if interested]), but from what the datasheet says and the fact that only 2 of the LCD’s ribbon cable pins are appear to have data running thru them, it seems like the LCD is controlled by i2c from the main board (see below for pinouts).
 
 
The white FFC ribbon cable leading connecting the LCD board to the mainboard has a 1mm pitch.
 
 
The buttons on the LCD board have a pair of legs connected to ground, so it’s safe to deduce that the main board has these buttons’ signals pulled up (these pullups are not found on the LCD board) and expects to read a LOW signal when these buttons are pressed down. See table below for which button is which.
 
 
K1, K2, and K3 labeled in the second image are 3 of the 4 pins attaching the LCD backlight to the PCB. These pins go thru resistors to Q1, which appears to be a transistor driven by pin 10 of the white FFC ribbon cable (going to the mainboard). When a voltage is applied to Q1, it connects K(1-3) to GND, turning the backlight ON. K4, the last of the backlight’s pins, connects to pin 14 of the white FFC ribbon cable (see table below for appropriate voltages).
 
 
All 4 LED’s (2 per Double-LED) run fine at about 20mA @ 2V, with ~ 68 Ohm resistors each, so a 3.3V signal line that can source about 40mA should suffice for each color (each LED color pair has its own pin - see table below)
 
 
EagleCAD LCD PCB Files:
 
I’ve reverse engineered the LCD peripheral board into EagleCAD, just in case it comes in handy
 
'''IMPORTANT DISCLAIMER''': I did my best to determine all the dimensions, but there are likely some minor inaccuracies. Looking at the XV-11’s case, the LCD PCB fits snugly in the outline and all the buttons and LED’s have to line up nicely with the plastic to work properly. If for whatever reason you want to use these files to produce a custom LCD peripheral board, just be warned it may not work (but this is probably your best chance at a template for one).
 
*[[:File:Neato_XV-11_LCD_Board.zip|Neato_XV-11_LCD_Board.zip]]
*Contains:
**LCD_board_opensource.brd
**LCD_board_opensource.sch
 
 
16 Pin Main PCB FFC Ribbon Cable (white) Pinout (still working on it...):
{| class="wikitable"
|Pin #
|Signal Type
|Signal
|Notes
|-
|1 (*)
|OUTPUT
|SW1 - “SOFT”
|Pulled up on mainboard (internally in ARM?); LOW means button is pressed
|-
|2
|OUTPUT
|SW3 - “BACK”
|Pulled up on mainboard (internally in ARM?); LOW means button is pressed
|-
|3
|POWER/INPUT
|Green LED’s
|Run HIGH ~(3.3V) to turn on, make sure the pin can source ~40mA
|-
|4
|OUTPUT
|SW4 - “UP”
|Pulled up on mainboard (internally in ARM?); LOW means button is pressed
|-
|5
|POWER/INPUT
|Amber LED’s
|Run HIGH ~(3.3V) to turn on, make sure the pin can source ~40mA
|-
|6
|OUTPUT
|SW2 - “DOWN”
|Pulled up on mainboard (internally in ARM?); LOW means button is pressed
|-
|7
|OUTPUT
|SW5 - “START”
|Pulled up on mainboard (internally in ARM?); LOW means button is pressed
|-
|8
|
|LCD Pin 21
|
|-
|9
|
|LCD Pin 20
|
|-
|10
|INPUT
|Backlight Switch
|Run HIGH (~3.3v) to turn LCD backlight on; signal goes to transistor Q1
|-
|11
|
|LCD Pin 22
|
|-
|12
|POWER
|GND
|
|-
|13
|
|LCD Pin 10
|
|-
|14
|POWER
|5V
|Backlight Power; goes to K4; Measured at ~4.8V... K4 measured at ~3V
|-
|15
|
|LCD Pin 11
|
|-
|16
|POWER
|3.3V
|LCD Power
|}

Navigation menu