TURTLEBOT ROBOTIC GUIDE Project Description Teach a robot to guide a person to a predefined destination. General requirements: 1. Use a Turtlebot as the robot 2. The robot must use a vision algorithm(s) as the main guidance. 3. Sensors such as bump, infra-red and ultra-sound could provide direction and safety for the robot. 4. First get the robot to follow someone somehow "remembering" the route so that it can take a turn leading. 5. The solution should be easily modified for alternative routes. 6. Check out Joseph Stawicki's 2013 project for techniques about driving the robot. Meet Turtlebot Hardware Breakdown • Kinect and Mobile Base Gyro combined so all sensor data can be read from one place • iRobot create listens for commands on a serial port, so serial port to USB converter required for communication. • Sensors send data to laptop, laptop sends commands to the mobile base. • Hardware requires software framework in order to receive, process, and send data The Robot Operating System(ROS) Services Provided by ROS: • Hardware abstraction • Low-level device control • Message passing service • Name and Parameter service • Package management + • Laptop’s main OS is Ubuntu which is then overlaid with ROS. • ROS also allows for Android connectivity to the robot Developing Apps with ROS • Workspace allows for packages to be installed and edited easily • Very easily pulls from repositories for quick installs • Symbolically linked to main ROS install • Workspace set up based on directory structure • ROS incorporates a lot of different programming languages • C, C++, Python, Java, and more • The catkin workspace allows for building and debugging across all languages • ROS created ROS specific API’s for Python and C++ (rospy & roscpp) • Makes it extremely easy to call ROS functions • Also allows for cross-language communication ROS Limitations and Frustrations Open Source – does not necessarily mean “FUNCTIONING” Sources, Documentation, and Support not easily obtained Newest ROS distribution designed for newest Turtlebot base (Kobuki) The ROS Wiki – instructions misleading For the first time ever, Google.com was not my friend How it Works Remote communication to the Turtlebot required Workstation Computer connects via SSH Applications are also run locally on Workstation Computer for monitoring, information processing, and visuals These applications receive info via HTTP Android connectivity via HTTP • Incorporated the Wifi Pineapple • Allows for a portable and private Local Area Network Wireless Communication Services, Nodes, Parameters, Messages, Topics Nodes are processes that perform computation Topics are named busses over which nodes exchange messages Communicate with one another via topics, services, and parameters Nodes either subscribe or publish to relevant topics Services handle requests and replies Defined by a pair of messages Messages are simply data structures comprising of typed fields ROS Parameter server is a dictionary accessible via network APIs Nodes use this to retrieve parameters at runtime Software & Hardware Communication Kinect Example Sound Demo • Keyboard inputs command • Keyboard node processes command • Parameters obtained from server • Word node processes the sound to play based on parameters • Sound node processes sound • Output to speakers The Puzzle Pieces Teleoperation Room mapping (SLAM Algorithm) Autonomous Navigation of Known Map Following Voice Commands Color Blob Tracking Its all here! But why is it in pieces? • Applications are limited by the way they interact with the robot • Publishing/Receiving information cannot be done on the same node at the same time Room Mapping with the SLAM Algorithm Autonomous Navigation of a Known Map The Problem: Communication Interrupts Both Nodes need to publish movement commands to the mobile base The Voice Command Node is designed to continually publish directly to the mobile base node The mobile base node sees the Voice Command messages as priority and blocks movement commands from the Follower node The Pivot Node/Dynamic Subscriber Could also be considered ‘nested nodes’ Subscribing node is dynamic If multiple messages received simultaneously then prioritize My Solution (Follower with Voice Commands) The node needs help prioritizing Processing and movement become slowed when subscribing to commands from multiple nodes Using multiple pivot nodes helps speed and processing Created new voice commands that correspond to OS commands Bringing the process down to the OS level allows for universal actions across all applications The use of shell scripts allows the ability to talk to ROS via command line OS helps flag enabled nodes Mobile base will then only listen for commands from enabled nodes Command Recognition Process for enabling follow mode • This particular command effects the follower node the most. Little is done inside the Voice Command Node. Command Recognition Process for disabling follow mode • This particular command corresponds to actions in both the Voice Command Node and the Follower Node Testing/Methodology Alter launch files to see how nodes react Adjust Node publishing target Shows which nodes are capable of handling certain applications or combinations of applications Try as much hardware as possible On screen messages are given when things go wrong Different laptops, headsets, graphics cards, etc. respond and process very differently from one another Experiment on EVERYTHING If I didn’t know what it was, I played with it until I understood how it worked Follower with Voice Commands Live Demo Learning and Development Process RESEARCH – find as much information from as many different sources as possible Run it and see what happens Try everything that’s available, watch and see how the Robot reacts and then connect what’s seen to what sources say Guess, check, and actually read the error messages Make alterations and see what kind of errors come up, helps to correlate what broke to what was changed Project Continuation & Advice UNDERSTAND ROS!!! Follow the link trail Google.com is not your friend for this project. Scimming google search results will get you almost no where. In order to find good information follow links in forums and on web pages that indicate they might be helpful. Eventually you will find something actually useful Consider upgrading mobile base to the Kobuki Not understanding how ROS is working makes it extremely difficult to try and make any changes Gyro is built in allowing for more efficient processing and little calibration Attempt to break Kinect data apart The Kinect has many separate sensors, learning how to get data from each sensor individually would allow for efficient visual application multitasking