Hi everyone!
At Kiwibot, we develop sidewalk delivery robots. As we continue to deploy an increasing number of Kiwibots worldwide, we realized the necessity for a robust remote debugging tool. While rosbags can be great for this purpose, they tend to become huge files that are hard to distribute and serve only for offline analysis. Often, it is useful to be able to debug the system online and in real-time. Such a tool would allow us to stream topics over a limited bandwidth LTE network connection between the robots and our remote personal computers to visualize and diagnose any problems easily.
Previously, we solved this by introducing the rosboard client. Nonetheless, this required our local setup to have all ROS dependencies installed and involved a cumbersome setup. Fortunately, there is Foxglove, a great web-based alternative that allows excellent debugging and visualization of ROS systems, all by just needing a browser. They offer streaming of topics by running either rosbridge_suite or foxglove_websocket_protocol on the robots’ side. This was our first option when testing, but it consumed a lot of bandwidth and accumulated significant latency over time, which was unsuitable for our case.
As discussed in our previous post, although rosboard was not originally designed for streaming over the Internet, we have seen it overcome these bandwidth and latency problems by relying on a set of subsampling and compression techniques. It requires few dependencies and is easily installable.
The Kiwibot team wanted to have the excellent visualization capabilities of Foxglove while keeping the data transfer advantages of rosboard’s networking protocol. For that reason, we are releasing our Foxglove fork and rosboard fork that were modified to:
- Add an additional connection type to Foxglove to allow connection to a rosboard server.
- Make small modifications on rosboard’s side to communicate with the Foxglove client.
- Add a button to rosboard’s original interface to redirect to Foxglove’s for instant connection.
You can play with the foxglove version using our docker image from dockerhub and our mentioned rosboard fork. Caveat: at the moment we only support ROS2 systems.
Example of using ngrok to make the robot available to the internet and then connect to the robot using Foxglove to visualize cameras, costmaps, pointcloud and navigation information
Thanks to this new tool, we can simultaneously stream several costmaps, laserscans, RGB images, paths, and transforms in near real-time over a bandwidth-limited LTE cellular network and visualize them using Foxglove without any issues.
With ngrok, you can effortlessly make the server on your robot’s local network accessible over the internet as shown in the demo video.
Credits to @franyol and @charlielito who made this integration possible. Credits to @dheera for developing the rosboard server and all the foxglove team for the amazing visualization tool.
We are thrilled to receive feedback from the community!
Happy debugging!