I’ve been using the Ubiquity Robotics Raspberry Pi ROS image to run both the robot and controller, it seemed the easiest way to get ROS running, but now I’m trying to get low latency streaming working from the cameras it is proving tricky.
New Plan, use the Stereo Pi image with Docker to host ROS images/containers.
Some Mods Needed…
In order to lower the latency as much as possible the Stereo Pi image is a heavily modified version of Raspbian, this includes custom partitions and the file system set to read only. Here are the steps I followed to get it to a state where I can restart development.
1. Get and Modify the Image
Head here and follow the steps to get and install the image, follow the steps to get it on the wifi and under the Advanced section you’ll see details on how to SSH to the Pi afterwards. Once logged in you’ll need to temporarily set the file system to read/write then edit the fstab file.
Under the “SLP Structure Details” section you’ll find this command:
sudo mount -o rw,remount /
This will set the file system to read/write, at which point you can open the fstab and edit it to make this permanent by changing the ro to rw for the root.
2. Resize the Partitions
I was trying to figure out how to do this on Windows then realised I could just install gparted on the controller and remote to it… I put the micro-sd card in a USB card reader and followed these instructions. The 1.8G root partition was expanded to around 25GB and the recording drive slimmed down accordingly.
3. Install Docker
This next bit is trivial, run this command, as taken from the Raspberry Pi blog:
curl -sSL https://get.docker.com | sh
4. Get ROS Images
Next bit is easy too:
docker pull ros
One of the reasons StereoPi is very quick is because it is tailored not to use the filesystem on the SD card, to that end it may be worth moving all of the docker containers and images over to a USB drive. There’s more information on how to do that here but I’ve not tried it yet:
The next things I need to do is convert my code to work in a docker container, this shouldn’t be too tricky but as the RedBoard library will need to talk to the hardware there will likely be complications.