The Indoor Autonomous Navigation System (IANS) is a senior thesis project at the University of California Santa Cruz. IANS' purpose is to create a self driving robotic car solution in an indoor environment where GPS systems are not feasible. By researching recent developments in probabilistic robotics and leveraging existing open source Robot Operating System software we implemented a cost efficient and extendable solution to be used in systems where autonomous navigation is required.
Our prototype uses off the shelf hardware such as the RPLidar, Raspberry Pi, and Teensy microcontroller, as well as general purpose motor encoders and controllers.
The Indoor Autonomous System Software is contained within three repositories.
The cloud repository contains code to run the front facing Flask server on GCE. This presents the user with a control panel containing destinations inside the floor plan, and a kill switch.
The high level repository contains ROS code that runs on a Raspberry Pi. This deals with the ROS navigation stack, manual control of the robot, interfacing with the LiDAR, the cloud server, and the low level micro.
The low level repository contains C++ code that interfaces directly with the sensors and motors to control the direction of the robot and read wheel odometry and IMU data. This data is then passed back to the Raspberry Pi where it is processed by ROS.
map_server: sudo apt-get install ros-kinetic-map-server
differential-drive package: git clone https://github.com/jfstepha/differential-drive.git
rplidar_ros: sudo apt-get install ros-kinetic-rplidar-ros
navigation stack: sudo apt-get install ros-kinetic-navigation
- Clone this project.
cd
into this project andcatkin_make
cd
into devel, andsource setup.bash
rosrun beginner_tutorials <module.py>
- Add
@/home/ubuntu/indoor-autonomous-system-highlevel/scripts/on_boot.sh
to~/.config/lxsession/Lubuntu/autostart
Search on Google before asking for help.
- Every file, the first line should be your name, and date
- Every file, the second line should be a short description purpose of the code written
- Reserve 3-4 lines (multiline comment) for any links, resources, or help that you get while writing your code. The purpose is to keep tracks of links you use in case we run into similar problems again.
- For step 3, do this for every file, or for blocks of code where the links are relevant.
- Make comments short, but with good explanation. Nothing too long, nothing too short. Comments are for things that are not obvious, or to highlight and explain salient (relevant) lines of code.
-
Use relevant names for variables. Unless it is an obvious abbreviation, or letter (ex. int "i" in a for loop, you don't need to name it "iterator".). Names will be snake case for local or global variables, but classes will be all capitalized camel case.
-
USE PARENTHESES. Do not rely on your knowledge of operator precedence. Use parentheses in complex logical structures (Logical, Boolean, Arithmetic operators).
Example: This is BAD: (var1 && var2 || var3 ^ var4) This is GOOD: ( (var1 && var2) || (var 3 ^ var4) )
-
Everytime that you edit a file, please use SPACES, not TABS. Make sure UNIX line endings.
-
USE K&R braces and indentation style
https://en.wikipedia.org/wiki/Indentation_style#K&R C/C++ Single line if statement should always have braces
-
Use single quotes for python strings.
-
Make a branch for any features that you need to add. (Git checkout -b kelvin.new_feature)
-
The proper naming for a branch:
first_name.feature_name kelvin.adding_slam_module
-
Git pull before you start writing code.
-
Write a sensible commit statement.