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 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...


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 (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 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 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...


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.


This page is a stub. You can help us improve it by editing it.


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.


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.


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.


This page is a stub. You can help us improve it by editing it.


This page is a stub. You can help us improve it by editing it.


This page is a stub. You can help us improve it by editing it.


This page is a stub. You can help us improve it by editing it.


This page is a stub. You can help us improve it by editing it.


This page is a stub. You can help us improve it by editing it.


**This page is a stub.** You can help us improve it by [editing it]( {: .notice--warning}


**This page is a stub.** You can help us improve it by [editing it]( {: .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 - 18 incredible videos on basic machining and prototyping of mechanical components

Makerbot Replicator 2x Overview

[Makerbot Replicator 2x]( 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]( 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]( - Freemium CAD software package - Free version limited to 4" X 3.2" board sizes w/ two layers - [CAD Soft Tutorials]( - [Spark Fun Tutorials]( - [GerbMerge]( - Free Python program for panellizing generated PCBs - [Ubuntu install instructions]( - [GerbMerge Tutorial]( -...

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](

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: - Git Code:

ROS Cost Maps

## Package to Use

Running ROS over Multiple Machines

Multi­robot 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]( - 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]( - The advantage of using...

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]( 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]( 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]( {: .notice--warning}


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]( 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 is a useful tool to open multiple tabs in the terminal especially while using SSH. [This video]( 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.

Installing stable version of Ubuntu 14.04 on Chromebook

Installing Linux on Chromebook Acer C-720 (stable version)

udev Rules

[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

![Using ULN 2003A as a stepper motor controller](/wiki/actuation/assets/ULN2003AMotorController-8ee22.png)

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:

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]( 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...