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.