Wiki Index
3D Printers
This article is a technology overview of the fundamentals of 3D Printers, especially “Fused Filament Modeling” (FFM) & “Fused Deposition Modeling” (FDM). It explains the fundamentals of 3D Printer technology and applications. It should be useful for those considering working with, designing, or modifying a 3D printer. It is not...
Design considerations for ROS Architectures
Overview Over the past few months we have dicussed various ROS architectures, changed it at least two times in a major way and have come to appreciate the importance of designing a good architecture. We have also realized there are several important factors which need to be considered before...
NDT Matching with Autoware
Normal Distribution Transform (NDT)
Oculus Prime Navigation
There are multiple techniques to carry out way-point navigation on the Oculus Prime platform using the navigation stack.
Spawning and Controlling Vehicles in CARLA
This is a short tutorial on using agents and traffic tools in CARLA. This wiki contains details about: Spawning Vehicles in CARLA Controlling these spawned Vehicles using CARLA’s PID controllers.
Adaptive Monte Carlo Localization
What is a particle filter? Particle filter are initialized by a very high number of particles spanning the entire state space. As you get additional measurements, you predict and update your measurements which makes your robot have a multi-modal posterior distribution. This is a big difference from a Kalman...
Altium Circuit Maker
Altium Circuitmaker is a Community Driven PCB Design Application. Circuitmaker can be downloaded here. It requires a user account since most of its features are cloud-based.
AprilTags
AprilTags is a visual fiducial system, useful for a wide variety of tasks including augmented reality, robotics, and camera calibration. The tags provide a means of identification and 3D positioning, even in low visibility conditions. The tags act like barcodes, storing a small amount of information (tag ID), while also...
Arduino
This tutorial covers the basics of different Arduinos, and how to implement common functions with them.
Asctec Pelican UAV Setup Guidance
This document acts as a tutorial on how to set up a Asctec Pelican UAV for autonomous waypoint navigation using ros pakage asctec_mav_framework. We are setting up an Asctec Quadrotor Pelican running with Ubuntu 14.04 and pre-installed ROS-jade.
A* Implementation Guide
Introduction This wiki aims to serve as a brief introduction and implementation guideline for A* search, specifically applied to robot motion planning. This will discuss how the algorithm functions, important design aspects in the pipeline, common knobs to tune, and efficiency considerations. The specific guidance and notes will be...
Amazon Web Services Quickstart
This article will cover the basics of remote login on an Ubuntu machine. More specifically this will help you set up your AWS machine and serve as a tutorial to launch, access and manage your AWS Instance. Launching an EC2 Instance First, we will have to sign up on...
Blink(1) LED
Introduction Using an LED indicator is an extremely useful troubleshooting technique. The Blink(1) USB RGB LED makes this very easy and straightforward. Using this product can help determine the state of the robot without needing to have a direct data link. This can be useful on mobile robots,...
Bluetooth Socket Programming using Python PyBluez
This tutorial is intended at providing a primer into Bluetooth programming in general and getting started with PyBluez, a Python Bluetooth module. Bluetooth socket programming is similar to socket programming used by network developers for TCP/IP connections and familiarity with that paradigm will certainly aid understanding although it is not...
Iterations in maps and vectors using boost libraries
Using Boost libraries for maps and vectors in C++ for ROS.
Cable Management
Effective cable management is essential for servicing, debugging and creating reliable robotic systems. Cabling is often regarded as one of the less glamorous parts of electrical engineering, but it is an essential and an extremely important part of creating a complete system.
Camera Calibration
It is quite common for projects to involve vision systems, but despite this most teams working with cameras ignore the basic advantages of calibrating a camera properly. Not only does a good calibration lead to better quality of data in form of images captured but also reduces overall errors in...
IMU-Camera Calibration using Kalibr
This tutorial will help you in setting up the Kaliber library developed at ETH Zurich for combined IMU-Camera calibration. For better understanding, we have also included an example of Pixhawk (IMU) and ZED camera (stereo camera) calibration procedure.
CLion IDE
CLion (pronounced “sea lion”) is a cross-plateform IDE for C and C++ framework developed by JetBrains.
CMake and Other Build Systems
Build systems are scripts that automate the compilation process. It will be most frequently encountered when compiling software in Linux Understanding how they are configured can help you write custom scripts and fix compatibility issues.
Code Editors - Introduction to VS Code and Vim
This article will provide you with some basic features for both VS Code and Vim, and perhaps it helps you decide which to start with!
Computer Vision for Robotics- Practical Considerations
Things to take care of when working with vision in robotics:
Building Prototypes in CubePro
Cube Pro is a 3D printing alternative to the popular MakerBot Replicator Series. This is a step-by-step tutorial to using CubePro for developing prototypes and parts. CubePro is available to Carnegie Mellon University Students in Mechanical Engineering cluster.
Custom data-set for segmentation
Image segmentation can be useful in a lot of cases, for example, suppressing pedestrains, cars for your SLAM system so the extracted features belong to static scene only. This tutorial covers the procedure to create annotations for semantic segmentation task. This is useful when you want to outsource the labeling...
DJI Drone Breakdown for Technical Projects
DJI is one of the best selling drone companies in the world. Considering also the fact that a DJI Matrice M100 costs $3500 and a M210 costs $12000, compared to a couple hundred dollars for most other manufacturers, it is obvious that they have some of the best drones in...
Docker
Docker Setup
Drone Flight Permissions
This article discusses the laws and regulations of flying small drones for the MRSD project. It details the process to fully certify your drone and obtaining flight permissions from the Federal Aviation Administration (FAA) and Carnegie Mellon University (CMU). Furthermore, the article disucsses the rules for two registration categories. For...
How to use Eigen Geometry library for c++
The Eigen Geometry library is a C++ libary useful for robotics. It is capable of the following operations: Declare Vectors, matrices, quaternions. Perform operations like dot product, cross product, vector/matrix addition ,subtraction, multiplication. Convert from one form to another. For instance one can convert quaternion to affine pose...
Fabrication Considerations for 3D printing
There is more to 3D printing than designing components and parts and replicating those 3D solid models into useful assemblies. When beginning a design, one must take into account the 3D filament to use, the 3D printing equipment, the model’s final resolution and the limitations of each 3D CAD software...
Guassian Process and Gaussian Mixture Model
This document acts as a tutorial on Gaussian Process(GP), Gaussian Mixture Model, Expectation Maximization Algorithm. We recently ran into these approaches in our robotics project that having multiple robots to generate environment models with minimum number of samples.
Gazebo Simulation
This is a tutorial for Gazebo, including how to customize a model and use a sensor plug-in.
Git
Git is a distributed revision control and source code management system with an emphasis on speed. Every Git working directory is a full-fledged repository with complete history and full version tracking capabilities, and is not dependent on network access or a central server. Git is free software distributed under the...
Using an RTK GPS
Introduction Position information can be critical for achieving high accuracy localization and one way to get this information is through the use of a GPS. It is possible to put a GPS only on the robot, but to get the centimeter level accuracy provided by RTK GPS systems a...
Husky Interfacing and Communication
This excerpt covers the basic methodologies to set up communication channels with the Clearpath Husky and make sure the hardware is receiving commands that are input by the user. The article will cover the hardware used for Husky’s onboard processing, additional hardware needed for better Localization and a brief description...
Contribute
Contribution Quickstart Guide The Robotics Knowledgebase is hosted on Github. You are welcome to edit and improve this project. You can find a link to the repository here.
State Estimation
This page is a stub. You can help us improve it by editing it.
Networking
This page is a stub. You can help us improve it by editing it.
Datasets
This page is a stub. You can help us improve it by editing it.
Common Platforms
This page is a stub. You can help us improve it by editing it.
Programming
This page is a stub. You can help us improve it by editing it.
Project Management
This page is a stub. You can help us improve it by editing it.
Actuation
This page is a stub. You can help us improve it by editing it.
System Design & Development
This page is a stub. You can help us improve it by editing it.
Tools
This page is a stub. You can help us improve it by editing it.
Interfacing
This page is a stub. You can help us improve it by editing it.
Sensing
This page is a stub. You can help us improve it by editing it.
Computing
This page is a stub. You can help us improve it by editing it.
Planning
This page is a stub. You can help us improve it by editing it.
Fabrication
This page is a stub. You can help us improve it by editing it.
Actuation
**This page is a stub.** You can help us improve it by [editing it](https://github.com/RoboticsKnowledgebase/roboticsknowledgebase.github.io). {: .notice--warning}
Actuation
**This page is a stub.** You can help us improve it by [editing it](https://github.com/RoboticsKnowledgebase/roboticsknowledgebase.github.io). {: .notice--warning}
Linear Actuator Resources and Quick Reference
Linear movement is necessary for many types of robotics and automation, from simple 3D Printers with belts and threaded rod to complex high precision stages for Industrial Automation equipment, there always is a need to move something in a straight line.
Machining and Prototyping
https://www.youtube.com/user/dgelbart/videos - 18 incredible videos on basic machining and prototyping of mechanical components
Makerbot Replicator 2x Overview
[Makerbot Replicator 2x](https://store.makerbot.com/printers/replicator2x/) is a popular 3D printer used by hobbyists. This page is for information on the Makerbot Replicator 2x.
Mechanical Design
This section will provide you some of the design criteria’s and consideration you should keep in mind when developing a mechanical system: - If possible, develop a mathematical model before ordering parts and prototyping. This will help you determine whether the values you have in mind are suitable enough or...
Milling Process
Milling is one of the most important machining processes. Knowledge of milling would be very helpful in prototyping. Almost all mechatronic design projects would require milling at one time or the other.
Motor Controller with Feedback
In most of the applications for a DC geared motor speed control or position control might be important. This is achieved by implementing feedback control.
Multithreaded Programming as an Alternative to ROS
As a software framework for robotics, ROS is an an obvious choice. Having said that, sometimes ROS can be an overkill or can cause trouble due to the amount of abstraction it has. The option of using ROS should be carefully evaluated, especially when you have all your processing on...
Getting Started with the Myo
Here are some resources that are useful if you want to get started quickly with the [Myo Gesture Control Armband](https://www.myo.com/). The learning curve is not too steep if you want to make simple apps. It should take you just a couple of days (maybe even less) to get working. However,...
OpenCV Stereo Vision Processing
For a stereo vision camera, there are multiple operations that can be done like tracking, detection, position estimation, etc. OpenCV has lot of libraries which are much faster than MATLAB's computer vision toolbox.
ORB SLAM2 Setup Guidance
This tutorial will help you in setting up the ORB SLAM2 on SBC. We will start with the installation procedure for the stereo mode and then we will discuss the changes required in the stereo camera's yaml configuration file. Since the ORB SLAM2 code doesn't publish pose output, we have...
PCB Design Notes
## Software Tools - [Eagle CAD](http://www.cadsoftusa.com/download-eagle/freeware/?language=en) - Freemium CAD software package - Free version limited to 4" X 3.2" board sizes w/ two layers - [CAD Soft Tutorials](https://www.cadsoftusa.com/training/tutorials/) - [Spark Fun Tutorials](https://www.sparkfun.com/tutorials/108) - [GerbMerge](http://ruggedcircuits.com/gerbmerge) - Free Python program for panellizing generated PCBs - [Ubuntu install instructions](http://eliaselectronics.com/installing-gerbmerge-on-ubuntu/) - [GerbMerge Tutorial](http://pauljmac.com/projects/index.php/Gerbmerge) -...
Point Cloud Library (PCL), 3D Sensors and Applications
# Point Cloud Library
Photometric Calibration
## Background Digital cameras of today have CMOS based sensors to convert the light incident (irradiance) on them into digital values. These sensors have a characteristic Inverse Camera Response Function (ICRF) which maps the irradiance to the pixel value generated (typically between 0-255). In the cameras we use, the ICRF...
PID Control on Arduino
The main idea behind PID control is fairly simple, but actually implementing it on an Arduino can be tricky. Luckily, the Arduino IDE comes with [a standard library for PID](http://playground.arduino.cc/Code/PIDLibrary).
Pixhawk UAV Platform
This guide is meant for people using UAVs with the Pixhawk hardware and looking to control the UAV through a computer/microprocessor.
Overview of Motion Planning
The problem of motion planning can be stated as follows: to find an optimal path for the robot to move through gradually from start to goal while avoiding any obstacles in between, given - a start pose of the robot a desired goal pose a geometric description of the robot...
Product Development in Complex System Design
## History (Waterfall Model) Before iterative design became an industry standard in product development the waterfall model was largely popular. The waterfall model originated in industries that are highly structured physical environments such as manufacturing and construction where changes to the design after building are incredibly expensive if not physically...
Programming Interviews
## Google tips
Python Construct Library
Sending data over serial communication channels in robotic systems that need real time updates between multiple agents calls for ensuring reliability and integrity. Construct is a Python library that comes to the rescue for building and parsing binary data efficiently without the need for writing unnecessary imperative code to build...
Python libraries for Reinforcement Learning
**Reinforcement Learning (RL)** is a machine learning approach for teaching agents how to solve tasks by trial and error. More specifically, RL is mostly concerned with how software agents should take actions in an environment in order to maximize its cumulative reward. The application of RL, as it seeks a...
Sensor Fusion and Tracking
Fusing data from multiple sensor is an integral part of the perception system of robots and especially Autonomous Vehicles. The fusion becomes specially useful when the data coming from the different sensors gives complementary information. In this tutorial we give an introduction to Radar-Camera sensor fusion for tracking oncoming vehicles....
Rapid Prototyping
One of the biggest challenges a designer faces is validating their design works. The more complex the system design becomes, the more difficult it becomes to accurately predict the behavior of the system. Development of full scale prototype takes time and could prove costly both in terms of time and...
Realsense RGB-D camera
This article serves as an introduction to the Intel Reansense D400 series RGB-D cameras. It details the SDK installation process, ROS intergration, sensor calibration and sensor tuning. Following the intructions in the SDK and the ROS Package section, readers should be able to launch the sensor through ROS and browse...
Registration Techniques in Robotics
Absolute orientation is a fundamental and important task in robotics. It seeks to determine the translational, rotational, and uniform scalar correspondence between two different Cartesian coordinate systems given a set of corresponding point pairs. Dr. Berthold K.P. Horn proposed a closed-form solution of absolute orientation which is often a least-squares...
Resolved-rate Motion Control
For several real-world applications, it may be necessary for the robot end-effector to move in a straight line in Cartesian space. However, when one or more joints of a robot arm are moved, the end-effector traces an arc and not a straight line. Resolved-rate[1] is a Jacobian-based control scheme for...
Risk Management
Risk management is an important process, but can easily turn into an exercise in making a list of items that people think about once and never look at again. There can be little accountability and - if only listed by name with a nebulous category - no real grasp of...
ROCON Multi-master Framework
ROCON stands for *Robotics in Concert*. It is a multi-master framework provided by ROS. It provides easy solutions for multi-robot/device/tablet platforms. Multimaster is primarily a means for connecting autonomously capable ROS subsystems. It could of course all be done underneath a single master - but the key point is for...
ROS Arduino Interface
The Arduino Microcontroller is a versatile piece of hardware that can be used in various applications to integrate hardware and software components in a short span of time. Fortunately, It can also be used with Robot Operating System (ROS) without much effort. The following tutorial will guide you through the...
Cost Maps in ROS
## Package to Use - ROS Package: http://wiki.ros.org/costmap_2d - Git Code: https://github.com/ros-planning/navigation/tree/jade-devel/costmap_2d
ROS Cost Maps
## Package to Use
Running ROS over Multiple Machines
Multirobot systems require intercommunication between processors running on different computers. Depending on the data to be exchanged between machines, various means of communication can be used. - **Option 1:** Create Python server on one machine and clients on the rest and use python for communication on a locally established network....
ROS Global Planner
There are 3 global planners that adhere to `nav_core::BaseGlobalPlanner` interface: `global_planner`, `navfn` and `carrot_planner`. The `nav_core::BaseGlobalPlanner` provides an interface for global used in navigation.
ROS Introduction
From ROS's homepage:
ROS Mapping and Localization
## Mapping To map the environment, there are many ROS packages which can be used: 1. #### [Gmapping](http://wiki.ros.org/gmapping) - Gmapping requires odometry data from the mobile robot. So, if one has odometry data coming from the robot, Gmapping can be used. 2. #### [Hector Mapping](http://wiki.ros.org/hector_mapping) - The advantage of using...
ROS Mapping and Localization
## Mapping
ROS Motion Server Framework
This tutorial will help you in setting up the ROS motion server framework developed at the University of Pittsburgh. This framework is built around the ROS Simple Action Server. For better understanding, we have also included an example of a high-level task running on Pixhawk with ROS motion server framework....
Setting up the ROS Navigation Stack for Custom Robots
## Dealing With Transforms Setting up the ROS navigation stack on a robot that is not officially supported by ROS/3rd party is little bit tricky and can be time consuming. The [robot setup guide](http://wiki.ros.org/navigation/Tutorials/RobotSetup) is informative and helpful but can be confusing to many simply because it goes over a...
ROS Navigation
## Dealing With Transforms Setting up the ROS navigation stack on a robot that is not officially supported by ROS/3rd party is little bit tricky and can be time consuming. The [robot setup guide](http://wiki.ros.org/navigation/Tutorials/RobotSetup) is informative and helpful but can be confusing to many simply because it goes over a...
Rosbags In MATLAB
Sometimes you would rather analyze a rosbag in MATLAB rather than within the ROS environment. This page describes how to set up the Matlab infrastructure and includes a script example.
Web-Based Visualization using ROS JavaScript Library
This tutorial will give you an introduction to the ROS JavaScript Library (`roslibjs`) and how you can use it in your own projects to interface with web-based platforms or GUIs.
SBPL Lattice Planner
This tutorial covers implementing the Search Based Planning Lab's Lattice Planner in ROS indigo
Series A Pro
The Series A Pro 3-D printer is a reliable platform that offers a large build volume, flexible controls (including the option to add custom G-code), print monitoring, a large range of print materials. Compared to more beginner-friendly but restrictive options, like the MakerBot, the Series A allows more control and...
Setup your GPU Enabled System for Computer Vision and Deep Learning
This tutorial will help you setup your Ubuntu (16/17/18) system with a NVIDIA GPU including installing the Drivers, CUDA, cuDNN, and TensorRT libraries. Tutorial also covers on how to build OpenCV from source and installing Deep Learning Frameworks such as TensorFlow (Source Build), PyTorch, Darknet for YOLO, Theano, and Keras....
Simulating Vehicles Using Autoware
## Simulating and controlling an Ackermann drive chassis
Single-Board Computers
This article is out of date and should not be used in selecting components for your system. You can help us improve it by [editing it](https://github.com/RoboticsKnowledgebase/roboticsknowledgebase.github.io). {: .notice--warning}
Soldering
A complete and comprehensive 'How to' guide on soldering. A complete set of tutorials has been provided to guide students on effective soldering techniques, the caveats, and other relevant information.
Getting started with Solidworks
[SolidWorks](https://www.solidworks.com/) is a 3D Computer Aided Design program commonly used for mechanical design. The following guide introduces a tutorial series from SolidWorks, in addition to offering some basic tips for setting up your environment.
Speech Recognition
Speech Recognition can be a very efficient and powerful way to interface with a robot. It has its downsides since it requires a parser to do something intelligent and be intuitive to use. Also, it is not the most reliable mode of communication since it is plagued with background noise...
Stream Rviz Visualizations as Images
This tutorial will help you stream live Rviz visualizations as `Image` topics in ROS. The tutorial will cover how one can setup multiple virtual cameras and virtual lighting within the Rviz environment. Streaming Rviz visualizations has several applications such as, one can record multiple views simultaneously for off-line analysis or...
System-Subsystem-Interface Modeling
A useful tool in system engineering is the system model, which can drive development, requirements generation, design, and just about anything else to do with your project. While the WBS, schedule, and other tools are good for their particular area, the system model has the potential to be useful in...
TMUX
TMUX is a useful tool to open multiple tabs in the terminal especially while using SSH. [This video](https://www.youtube.com/watch?v=BHhA_ZKjyxo) give a nice over view to use TMUX.
Traffic Modelling Datasets
Traffic modelling is a hot topic in the field of autonomous cars currently. Here you will find a list of open datasets which can be used as source for building a traffic model. The list will include data captured from a variety of sources as listed below: - UAV/Drones -...
Tracking vehicles using a static traffic camera
Tracking vehicles using static camera is a useful tool for various use cases pertaining to both macro/micro traffic flow. We present a system where we extract vehicle trajectories using a monocular camera mounted at an intersection.
Turning Process
Turning process is done on lathe machines and is ideal for creating components with rotational symmetry. Components such as shafts, sleeves, pulleys etc can be manufactured/modified on a lathe. This two part tutorial gives in a good insight into the usage of the lathe machines.
General Tutorials and Programming Resources
### Online resources
Installing stable version of Ubuntu 14.04 on Chromebook
Installing Linux on Chromebook Acer C-720 (stable version)
udev Rules
[udev](https://en.wikipedia.org/wiki/Udev) is the system on Linux operating systems that manages USB devices. By default, when you plug in a USB device, it will be assigned a name like `ttyACM0`. If you are writing code and need to communicate with that device, you will need to know the name of the...
Using ULN 2003A as a motor controller

Upgrading the Ubuntu Kernel
Following are the steps to be followed for upgrading the Ubuntu kernel:
Vedder Open-Source Electronic Speed Controller
This page provides resources for the open-source electronic speed controller designed by Benjamin Vedder.
Vim text editor
Vim text editor greatly helps speed-up your programming workflow. It has a fairly big learning curve but the shortcuts and macro functions can easily double your productivity. Vim is also modular, enabling you to easily customize it. ## Resources Links to help you get started: 1. Vim Cheat Sheet: http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html...
Visual Servoing
## Visual Servoing Motivation
Making Field Testing Easier Through Visualization and Simulation
If you have an outdoor system, field testing is going to make or break your validation demonstration. No amount of testing in the lab will expose as many issues with your system as 10 minutes of testing outside. Picking up your system and taking it somewhere else is difficult but...
Webots
[Webots](https://cyberbotics.com/) is a free open source robot simulator used for a variety of purposes and applications. It was previously a paid software developed by Cyberbotics and became open source in December 2018. It is still being developed by Cyberbotics with association from Industry and Academia. It is compatible with ROS...
Setting up WiFi Hotspot at the Boot up for Linux Devices
Most of the mobile robot platform uses Linux based Single board computer for onboard computation and these SBCs typically have WiFi or an external WiFi dongle can also be attached. While testing/debugging we need to continuously monitor the performance of the robot which makes it very important to have a...
XBee Pro DigiMesh 900
XBee-PRO 900 DigiMesh is useful for setting up your own low bandwidth mesh network. These adapters are great for Mesh Networks and implementations of networks such as VANETs. This tutorial is intended to help you with configuring these adapters and writing a simple python script to initiate bi-directional communication on...