Hey everyone
You know, I’ve suddenly realized been over a year since my last post on this topic and there have been a lot of additions so I figured I ought to compile a short rundown of the more notable bits.
For those new to it, Vizanti is a community maintained open source control and visualization command center for ROS 1/2 in the web browser, targeting primarily outdoor use cases like marine, field, and aerial robotics on mobile and desktop devices.
Jazzy Release
This mainly involved waiting for rosbridge and rws to update, since there was little in terms of breaking changes. So far the ros2 branch can stay common to both Humble and Jazzy, which reduces overhead for backporting changes. The stability and usability is now more or less on par with Noetic, which will continue to get equal feature updates at least until the end of 2025 as well.
Well I wrote “release” there, but there isn’t exactly an apt release for the package yet, for various popen, rws, and other reasons. TBD.
RWS - ROS Websocket Server
Since web browsers are mostly restricted to TCP and as such can’t really connect with a DDS (or even ros_comm for that matter), an intermediary server is needed to pack traffic up into websockets.
Originally this was established by rosbridge suite on ROS, but due to a multitude of reasons it’s not nearly as performant on ROS 2. That’s why I’ve been working with v-kiniv to integrate his drop in replacement server, RWS.
There were a few things to fix up and a feature or two to add, but after nearly a year I think we’re at a point where it’s basically there now.
While a bit more of a hassle to set up, it uses significantly fewer resources while providing much higher throughput, enabling use on low end platforms like the Pi 4 and 5 where the ROS 2 version of Rosbridge isn’t efficient enough to function under typical load.
Right now it’s the recommended backend to use with Vizanti on Humble and Jazzy. And unless you’re using client side services, probably for your roslibjs project as well.
Updates
There are a handful of new widgets, and a few existing ones have been expanded to support multiple topics for better compatibility.
Grid Cells
This one is somewhat underused in Rviz in my experience, but extremely efficient for sparse grid data, such as the occasional obstacle in an open field. Comes in any 24-bit colour.
Altimeter
Yes a way to finally see the Z axis, very good. Ah, but it’s not just for observation, tapping the meter sends a Float32 target with the clicked value for direct depth/altitude control.
What it tracks exactly is the position of a chosen TF link relative to the fixed frame. Comes in depth (blue) and altitude (green) versions with adjustable units, but doesn’t do both at the same time. I have to apologise if any of you happen to be working on aerial submarines, but those simply won’t fly.
Folder
Is your tiny screen getting filled up with rows and rows of widgets? Well, now they can be grouped together, just like in rviz.
There are some limitations, mainly that the widget has to be created in the folder and can’t be moved around. I’m still figuring out a way to even conceptually do that UX-wise now that both the short and long click are taken, and mobile has no right click…
Speedometer
Okay this one’s a bit funky, it lets you measure the relative speed of any two tf links in various scientific (and unscientific) units. A handy thing to check if your nav stack is set to drive at the correct velocity and/or if your boat props have weeds in them.
In the gif above, the first few dials track turtle1
relative to world
in various units, the next one turtle1
relative to turtle2
, final one tracks turtle2
to world
.
General improvements
Covariance rendering is correct now:
(what do you mean it was wrong before , aaah you saw nothing)
The icons will reflect the visualizer color by recoloring the svg, so it’s easier to find which icon corresponds to what’s being rendered:
Map rendering has code-exact rendering parity with rviz in terms of colour mapping (as well as the raw display mode), except for a slightly more transparent tinge for unknown pixels, which imo looks slightly better:
TF frames now get grouped together by prefix, for clarity:
Community Contributions
A notable change to the satelite tile renderer was started by kosmonauta144 and darkhannibal, which enabled the use of other tile zoom levels, letting you see your robot from orbit:
The tiles themselves are now exportable and importable, so it’s possible to just load up the entire area beforehand and load it up offline on another device.
Thanks to samkys, all versions now also support building and running a Docker container, for those of you trying to run the wrong versions of ROS on the wrong OS
I also have to thank tony2guo for adding base url support, which essentially lets you namespace the browser path, and of course v-kiniv for his continuing help in integrating RWS.
Etc.
And there’s of course a lot of gradual improvements in general stability, rendering accuracy, speed, etc. There is also a github wiki now that contains everything from introductory to more esoteric info.
In Conclusion?
Well there’s still a lot left to do, features and visualizers to add, widgets to rework, performance to improve, bugs to fix, Firefox rendering to speed up. If anyone feels like helping along or has a good idea, I’m always up for a code review