I wanted the robot arm to be a bit autonomous from the computer, and I thought the bifferboard should be powerful enough to drive it. So I wanted to install ROS onto it. My bifferboard runs debian squeeze, and that means it’s not just a matter of installing the packages as with ubuntu. There is a dedicated wiki page about installing ROS on debian, so I was of the opinion that it can’t be that hard. Actually, I once tried to install ros electric already when the bifferboard was still running debian lenny, and I ran into an infinite loop. I was full of hope that this bug had been fixed now with the release of debian squeeze and ros fuerte. But in fact, the first infinite loop was even earlier this time. And after circumventing an issue in pip with the help of a pip dev, I ran into the one I experienced earlier. I was able to find a workaround this time and reported the issue to pyyaml. The bifferboard has no FPU, and from what I can observe in python no inf and strange handling of nan.
Finally, I got to the compilation step. It uses cmake: nice! First I started the build as suggested with make -j8 but the tiny little board was so overwhelmed, that I couldn’t even ssh in any more. Issuing make -j1 was much better, this way instead of 8 parallel jobs, only one job would be executed at a time. Still it got hot, the flash stick blinked like crazy, and the device was compiling for a day. At about 15% progress it hit a compiler error. I thought about adding more swap space, but then decided to compile the stuff on a computer. To have it authentic, I followed the description with the tailored qemu, but I got a strange error when trying to power up the emulator. So I booted an old squeeze 32bit virtual box. Even the virtual machine was a looooooooooot faster than the bifferboard at installing and compiling. What seemed to take a week on the bifferboard was a matter of 15 minutes at max in the VM. So I just copied the folder /opt/ros from the VM to the bifferboard, and prepared ~/.bashrc so that all the stuff could be found. Then I checked out my robotloader project which only needs to run python.
Running roscore on the board was less pleasant again. Usually I was greeted with three screens full of error messages and only occasionally did it work. The errors were amongst the following, but each time different. The one thing that always appeared at the end was KeyboardInterrupt, as if I pressed ctrl-c which I didn’t.
bifferboard:~/# roscore &  1742 bifferboard:~/# ... logging to /root/.ros/log/cc5b871a-c6d2-11e1-ba29-6ab3f60006b9/roslaunch-bifferboard.localdomain-1742.log Checking log directory for disk usage. This may take awhile. Press Ctrl-C to interrupt Done checking log file disk usage. Usage is <1GB. started roslaunch server http://bifferboard.localdomain:46404/ ros_comm version 1.8.9 SUMMARY ======== PARAMETERS * /rosdistro * /rosversion NODES auto-starting new master process[master]: started with pid  ERROR: could not contact master [http://bifferboard.localdomain:11311/] [master] killing on exit Traceback (most recent call last): File "/opt/ros/fuerte/bin/rosmaster", line 5, in <module> pkg_resources.run_script('ros-comm==1.8.12', 'rosmaster') File "/usr/lib/python2.6/dist-packages/pkg_resources.py", line 467, in run_script self.require(requires).run_script(script_name, ns) File "/usr/lib/python2.6/dist-packages/pkg_resources.py", line 1200, in run_script execfile(script_filename, namespace, namespace) File "/opt/ros/fuerte/lib/python2.6/dist-packages/ros_comm-1.8.12-py2.6.egg/EGG-INFO/scripts/rosmaster", line 34, in <module> import rosmaster File "/opt/ros/fuerte/lib/python2.6/dist-packages/ros_comm-1.8.12-py2.6.egg/rosmaster/__init__.py", line 35, in <module> from .main import rosmaster_main File "/opt/ros/fuerte/lib/python2.6/dist-packages/ros_comm-1.8.12-py2.6.egg/rosmaster/main.py", line 43, in <module> import rosmaster.master File "/opt/ros/fuerte/lib/python2.6/dist-packages/ros_comm-1.8.12-py2.6.egg/rosmaster/master.py", line 47, in <module> import rosmaster.master_api File "/opt/ros/fuerte/lib/python2.6/dist-packages/ros_comm-1.8.12-py2.6.egg/rosmaster/master_api.py", line 72, in <module> from rosmaster.validators import non_empty, non_empty_str, not_none, is_api, is_topic, is_service, valid_type_name, valid_name, empty_or_valid_name, ParameterInvalid File "/opt/ros/fuerte/lib/python2.6/dist-packages/ros_comm-1.8.12-py2.6.egg/rosmaster/validators.py", line 35, in <module> """Internal-use Python decorators for parameter validation""" KeyboardInterrupt Unhandled exception in thread started by Error in sys.excepthook: Original exception was:
And the following was proof that the above were not just warnings:
bifferboard:~# rosnode list ERROR: Unable to communicate with master!
So, my best guess is that it’s a timing issue where my device is just too slow at booting roscore and rosmaster. I’ll have to check if there are any parameters, I need to adjust.