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:
https://github.com/DCLane/OpenROV.git
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.