Tuesday, May 19, 2015

Final Milestone Report

End of week 4:  Get OpenROV / hardware / software working in a development platform.  Familiarize ourselves with the OpenROV software and ROS

Status:  Completed  (see previous report below)

End of Week 6:  Create 2-way interface that can communicate between ROS and the javascript that is running the OpenROV.  This required getting roslibjs installed and communicating with the OpenROV on the beaglebone black, and having rosbridge installed and running on the host laptop.

Status:  In the Final Stages - This task took longer than expected due to a number of small setbacks that all added up.  We missed the end of week 6 goal, and just got roslibjs communicating with the OpenROV at the beginning of week 8.

The major setback was the difference between javascript run a browser vs. javascript run in a node.js environment.  We had a working prototype of roslibjs that could interface with Firefox running quite quickly and we figured that it would be relatively simple to modify the code into something that ran with node.js.  This was not the case and we encountered several setbacks:

  • All of the instructions that we found for installing roslibjs in node included using npm (node package manager) and grunt (a javascript task runner).  Following these installation and build instructions caused us several problems.
    • npm installations failed when using the proxy of the OpenROV, forcing us to shut off the proxy and get a different physical setup to connect to the internet
    • We also found that npm installations using sudo can become problematic.  After following instructions some of which included the use of sudo and others that did not, we ended up corrupting the installation of grunt.  We learned that it is better to change the ownership of /usr/local before using npm and then do installations without sudo.
  • The installation instructions were based on the use of grunt as a task runner, and made the assumption that a client side installation of grunt was already in place.  This led to a sidetrack of how to install and use grunt - which ended up being unnecessary for the installation of roslibjs.

After much time spent on researching how to install roslibjs and debugging problems, we have communication between the OpenROV and ROS.  Our simple example code is in a git repository:


Although we are behind schedule, we feel that we have finally made the most important step in this project.  We now have a decent understanding of ROS, the OpenROV plugin structure, and a communication between the two and are optimistic that progress can be made much more quickly now.

End of Week 8:   Test, clean, and document our work so that it is easy to follow for a general purpose audience.

Status:  In progress - With the amount of work that it took to finally install roslibjs we went through many iterations and hit a number of pitfalls.  After the first couple of setbacks, we started taking detailed notes of the process and feel that this is a good start to the documentation.  

We plan to go through a clean installation starting from scratch following our notes to verify that it works and to grab screenshots along the way.  We also have some notes of potential errors and how to avoid them. We feel confident that we will have a clean, step-by-step procedure documented by the end of the week.

Final Project:  Publish an easy to follow tutorial to the OpenROV community on how to integrate with ROS.  

Status:  In progress - We hoped to have an integration of ROS that includes the video stream from the OpenROV in a clean, homogeneous setup.  We thought that using the high level computer vision libraries of ROS would be a flashy example to demonstrate the potential benefit of the ROS integration.  At this point, we have yet to find a feasible way to transmit video with our roslibjs - rosbridge implementation.  We will do a little more research on this topic, but likely will have to find other ROS examples that would bring value to OpenROV.  This will require a bit of research into existing ROS packages, and some dialog with our OpenROV contacts to find what might be the most beneficial.

Monday, May 4, 2015

Milestone Report

End of Week 4:  Get OpenROV hardware / software working in a development platform.  Familiarize ourselves with the OpenROV software and ROS.

Completed - we are running just the Arduino and the Beaglebone Black with software image 3.0

The ROS community provides several tutorials to get people up and running with basic ROS functionality.  Since David is new to ROS, he has gone through the basic and intermediate tutorials while Connor has used the material as a refresher.

Multiple forum posts have been helpful in better understanding the OpenROV software architecture.  While the entirety is not fully understood, the ability to interact with the software via plugins is understood.  This applies to both the node.js software on the BBB and the Cockpit software that runs in a browser.

End of Week6:  Create a 2-way interface that can communicate between ROS and the javascript that is running the ROV.

Uncertain - we still have some work before this is working.  We have spent some time to familiarize ourselves with the roslibjs library that we will likely use as the main interface. 

Last week we got sidetracked by researching a stretch goal that involved a way to get the video stream from the mjpeg stream that is native to OpenROV into a format that ROS can access and use with its computer vision libraries.  At this point we do not have a good solution in mind, but plan to have a conference call with the OpenROV people in the next day or two.

The goal of having a 2-way communication interface between ROS and the OpenROV is not unachievable by the end of the week, but it will require a solid effort this week.

Final Stretch:  Polish interface, and create clear documentation to be published to the OpenROV community. 

This is still very much the goal, and within reason.  We listed a generous 2 weeks for this task which should be ample and even provide a modest cushion for overflow from the End of Week 6 goals if necessary.

We would still like to provide an example of ROS integration that includes a computer vision algorithm because we think that it would be visually appealing and could create excitement for the project.

Thursday, April 16, 2015

Project Specification

OpenROV Project Description

OpenROV is an open source underwater robotics platform. It is designed to be a kit to help people quickly and easily get a working robot that is capable of navigating in lakes and oceans. The target audience of OpenROV is scientist and explorers that are interested in studying underwater environment.

ROS is a another open source project that creates a standard tool set for people developing robotics. It is a larger community than OpenROV and includes many sophisticated tools that can be applied to robotics. The addition of ROS software tools would be a valuable addition to the OpenROV community.

Our project for the Embedded Systems class is to develop an interface between the operating system running on OpenROV to an installation of ROS that is running on the control station. The interface will have to communicate with the native OpenROV operating system that uses node.js and socket.io, and convert communications into the ROS bag format. This will give access to high level libraries in ROS which could be useful for robotics applications (libraries that work with computer vision, object classification, contextual awareness, and navigation for example).

Specific libraries ROS that we will need to implement are roslibjs and rosbridge.  Roslibjs gives support for interacting with ROS from a browser at the OpenROV control station, and Rosbridge which is an API that will allow communication from the OpenROV via JSON messages.

Milestones and Schedule
  • Familiarize ourselves with the native OpenROV operating system and with ROS.  Get newest version of OpenROV software running on our ROV.  (by the end of week 4)
  • Create an interface that can convert between the javascript events and ROS events to enable two way communication between ROS and OpenROV.  (by the end of week 6)
  • Test, clean, document, and publish our work to the OpenROV community in order to get feedback and suggestions.  (by the end of week 8)
  • If time permits, integrate with one or more ROS application that would demonstrate the value that is added by having ROS functionality. One such stretch goal would be to get the ROS 3D visualization tool, rviz, working.  This could be extremely beneficial for future navigation projects.  (during weeks 9 and 10, time permitting)

Group Management

Connor Brew is a 5th year Computer Science student that is about to graduate in the fall.  He has some ROS experience from previous classes.

David Lane is a first year Computer Science Master’s student whose background is in Mechanical Engineering.  He is new to ROS, but looks forward to learning it and contributing to the OpenROV community.

We plan to work on aspects together, rather than each specializing on a particular aspect.  We think that will provide a better overall perspective as the project progresses.  For the inevitable times when we are doing individual work, we plan to follow up and provide the other partner at least a quick summary / tutorial of the work that was done.

With just two members, communication should be easily accomplished with a mix of phone, email, and meetings.  Major decisions should be made by a manor of consensus, however for external help, Eric Lo (UCSD Engineers for Exploration) and Jim Trezzo (OpenROV) are both available for counsel.  We will seek their advice whenever there is an issue that we cannot resolve ourselves.  In addition, we will provide them with status updates that correspond to the major milestones.

Project Development

We have hardware from a rev. 2.6 OpenROV available to us but as some of the electronics housing is missing will not be constructing a watertight ROV.  We will mostly be working with the controller board and BeagleBone which we have separated from the rest of the ROV.  The OpenROV team has requested that we use the beta rev. 3.0 software as the base for our integration.  For testing we will begin with sending data from the IMU to ROS.  As the IMU we currently have is not assembled we will need to assemble the IMU and connect it to the controller board before we can begin testing.