User Tools

Site Tools


UNC Charlotte VisionLab Documentation Project

We document our experiences developing software and systems for vision, pattern recogntion and imaging in this wiki.

These articles describe things we've worked on related to the Robot Operating System (ROS).


netbeans-ros-pack : Netbeans Modules/IDE for work on ROS Projects

I've developed some modules to facilitate my coding experience with the Robot Operating System (ROS). My work on this sub-project is documented in the Netbeans/ROS integration section of the wiki.

The project had reached the point where I can release it for testing. To do so, I needed to publish the project source to a public location. I decided to publish the source at, I learned how to push your code to github.

I then included the GPL v2 license in the source code files using the handy Netbeans module for inserting source code licenses into your files ( I also cleaned up some of the config files a bit.

I then went to the Netbeans Plugin Portal to offer these plugins/modules to anyone who might want to use them ( I tried to upload the modules but quickly found I hadn't set all the proper fields. I had to set the license, Author, and website home for each of the modules (as listed here: One can do this by opening the project of each module and setting these fields under the “Properties→Build→Packaging” option for the project.

Finally, you must “sign” your Netbeans module. This was actually a bit of work and I wanted to automate this process. The procedure at the plugin portal ( may have worked at one time (for an older version of netbeans than 8.0.2) but this process does not work now. I then triaged and fixed up their out-of-date process for how to sign your Netbeans modules automatically when you build your modules.

To facilitate the release I created a public github repository ( for this project. I've also uploaded the compiled netbeans modules (3 modules) as a .zip file to the Netbeans Plugin Portal ( This is still a work in progress but these initial tools have helped me develop/debug ROS code more efficiently. I hope they do the same for others.

Camera Calibration and ArUco - Augmented Reality library from the University of Cordoba

For odometry and SLAM performance evaluations it was necessary to calibrate the robot on the camera. Calibration in this context requires two things: (1) solving for the unknown variables that govern how the camera takes pictures (referred to as intrinsic parameters), and (2) solving for the unknown variables that specify the position and orientation of the camera in the world/global coordinate frame (referred to as extrinsic parameters). In this circumstance, the extrinsic parameters we needed to compute relate the camera pose, i.e., the position and orientation of the camera, to the motion capture system in the laboratory (made by Optitrack). Detailed discussion on how we did this is on the ROS and Camera Calibration page.

Notes on C++ Optimizations to make ROS nodes faster

I've been working on making efficient CPU-based code for execution on an ARM embedded system. I discuss some design decisions and coding methods and their cost/benefits from my experiences. Optimizing C++ Code for ROS nodes on embedded systems

ROS on Linux-arm (armhf)

If you are developing on an embedded ARM platform, e.g., ODroid XU3, you might want to quickly read these notes to avoid some time consuming problems before they happen to you.

Notes on ROS for the ARM

Compile your own version of OpenCV

I describe my experiences compiling OpenCV 2.4 and OpenCV 3.0 for use with ROS. I also re-compile important ROS packages which depend upon these libraries to allow development of OpenCV 3.0 packages using ROS Indigo which is tied to the OpenCV 2.4 library distribution.

Compile OpenCV with nonfree & Java Support

Compile your own version of the Point Cloud Library (PCL)

Setup your own Git Server for remote access Repositories

A short description of how to deploy your own private git server. Useful while developing projects that aren't appropriate for public release.

Setup Git Server

Install OpenCL and Run unit tests

Describes how to install OpenCL bindings for your GPU. OpenCL is a fast-growing programming language for General-Purpose-Graphical-Processing-Unit (GPGPU) programming. Now you can write code that GPU-accelerates your application that translates across devices. OpenCL is supported by AMD (Radeon) / Intel and Nvidia chipsets and even on embedded systems such as the Mali GPU included in ARM Cortex chipsets, e.g., the ODroid XU3 (Mali T628).

Getting the Xbox One Kinect to Work in ROS

Install OpenCL

Install the Mesa Imaging SR4000 Drivers and access the sensor from ROS

I found it difficult to install the drivers for this Time-Of-Flight (TOF) distance camera. I detail how I made this camera function on my Linux amd64 system (Ubuntu 14.04) and how I got it to work with ROS in this article.

Using the Mesa SR4000 with ROS Indigo

Install the Softkinetic DS325 Drivers for the Creative Senz3D Sensor and access the sensor from ROS

Installing and using ROS Java bindings: rosjava

This article details my process for installing and using rosjava. Install rosjava

MATLAB / Gazebo and ROS Java bindings: rosjava_messages

If you have compatibility problems running MATLAB and Gazebo try this: MATLAB rosjava_messages

Java Projects from our Lab for 2D Image Processing and 3D Surface Processing

ShaRP 3D Java Application

ShaRP is a java application for viewing, and processing 3D objects. It allows users to edit, deform, align, and fit 3D surface meshes and 3D point clouds.

Shape Grammars for Modeling 3D Architecture

Work in the visionlab explores development of volumetric procedural models that enable users to specify complex 3D shapes using a small set of basic rules referred to as a procedure.

ImageRover Java Application

ImageRover is an plugin-centric application for processing either local or remote data. It uses generic Universal Resource Locations (URLs) to load files which may contain data of any type. Visualization plugins allow the data to be displayed by the application and can plot 1D or 2D functions, curves, surfaces and images. Additional supplied plugins or custom-built plugins may then be used to modify the visualization, process the data, or perform high-level processing of the data.

Running Applications with Java Web Start

Java Web Start enables users to install and run these applications with a single mouse click and is the suggested method of launching these applications.

uCLinux on Analog Devices Blackfin Devices

uCLinux on the BF537 EZLite

I have started documenting my experiences in getting Blackfin DSP evaluation boards to run uClinux. See uclinux_bf537setup.

To setup linux on the Ubuntu 7.04 Feisty Fawn for the Blackfin DSP evaluation boards. See uclinux_bf537setup_ubuntu for details.

To setup AD1836A Blackfin add-on card for the Blackfin DSP evaluation boards. see uclinux_bf537setup_ad1836 for details.

To setup SPI-MMC Blackfin add-on card for the Blackfin DSP evaluation boards. see uclinux_bf537setup_spimmc for details.

To setup CF/IDE/NAND Extender Blackfin add-on card for the Blackfin DSP evaluation boards. see uclinux_bf537setup_nand for details.

To setup MT9T001 camera sensor for the Blackfin DSP evaluation boards. see uclinux_bf537setup_camera for details

You can change the size of your linux image to be larger by increasing the BLOCKS variable with the uClinux/vendors/AnalogDevices/BF537-STAMP/Makefile.

Programs must be compiled with the “-Wl,-elf2flt” parameter for gcc to generate a “flat ELF” binary format file. Otherwise you will get an “applet not found” error from uClinux.

uCLinux on the BF561 EZLite

I have started documenting my experiences in getting Blackfin DSP evaluation boards to run uClinux.

For details, See

Lab-Developed Linux Driver for the Acuity Laser Rangefinder AR4000

Nathan Conrad has developed a linux driver for the Acuity laser rangefinder model AR4000. The driver was initially compatible with linux kernel 2.6.18 and is likely compatible with 2.6.17-2.6.12. Work continues on the driver to keep it current with Linux kernel modifications present in 2.6.20. See linux_driver for details.

Lab User Maintenance and System Install/Configuration Notes

Adding a new workstation to the Lab

Installing a new workstation to the lab system.

  1. Configure the Network Information System (NIS) and Network File System (NFS) networkconfig.
  2. Configure the login screen lightdm.
  3. Configure the Common Unix Printing Service (CUPS) printerconfig.
  4. Configure workstation logging logging.
  5. Add mediabuntu for non-free packages such asAdobe Acrobat Reader mediabuntu.
  6. Configure email email.
  7. If you are doing FPGA programming, install the Xilinx parallel port programming driver fpga_parallel_programmer.
  8. Configure the computer to have access to MOSAIC files MOSAIC.

Adding a new user to the Lab

How to add a new user to the lab system. For these instructions username will be used in place of the actual user's name.

  1. Run adduser on the nis master (root# adduser username)
  2. Add the user to the vision group if appropriate (root# adduser username vision)
  3. Enable a link to the MOSAIC filesystem adduser
  4. Copy icons from the server to your desktop (user$ cp /server/apps64/icons/* ~/Desktop)

New Computer Install Directions

Raspberry Pi Setup

start.txt · Last modified: 2018/03/13 22:02 by arwillis