Announcing Vizanti, a web visualizer & mission planner for ROS

Hey everyone,

I’ve been working on a touchscreen friendly orthographic version of RViz that also incorporates lots of Ardupilot Mission Planner functionality. Vizanti runs in a browser through rosbridge so it should work on most platforms, but it’s mainly intended for field/marine robotics where you can’t really bring a laptop with you without risk of damage (where are my dustproof and waterproof laptops at?!). That’s also why rviz_satelite comes as stock.

Unlike Foxglove/WebViz it’s more designed for live control and debugging than bag review, and is set up to be hosted on a robot without internet access.

Here’s a gazebo SLAM demo in a desktop browser that also shows the node management stuff:

And the first test I did in the field with an older version, running on Android with my custom GNSS nav stack (the magnetometer was acting funky during this run which is quite easily seen with both tfs and the raw navsat pose rendered):

For now it’s built on Noetic and should work on Melodic w/ Python 3 (haven’t tried though), but I’ll be porting it to Humble once I’ve got a dev environment for it and some robots that run ROS 2 in general.

Other notes:

  • some features are still experimental since I haven’t had the chance to use them much yet, hopefully the community can help in making it more robust
  • still working on proper tf timestamp interpolation, so the lidar data and markers may appear a bit jerky for now, though it’s not too terrible imo
  • iOS compatibility is problematic, since ATS blocks fetch/xhr requests on HTTP and getting HTTPS working without being online is a handful, also some of the CSS looks weird on webkit
  • I’ve implemented the line_planner package that handles the more advanced command generation functionality both as a demo and for my own use cases
  • there isn’t full feature parity with RViz in terms of visualizers and param adjustment yet, and some probably don’t even make sense in 2D anyway (e.g. Wrench) so I’m not sure if it’s worth the bother for all of them, let me know if there’s any specific ones that you’d really like to see ported

Also I’d like to thank GPT 4 for writing most of it just from my ideas and instructions :sweat_smile:


Do you have a drwa of the final architecture that you created?

Ah I suppose I should add more detail about that in the readme.

The serverside/ROS side is pretty minimal, it needs the usual rosbridge+rosapi for roslibjs to work properly, then there’s two extra helper nodes for the functionality that needs subprocess, so starting/killing nodes, rosbag, roswtf, etc. There’s also a node that collects and republishes tf frames, since it turns out if you throttle a topic in rosbridge that’s not sending complete data every time you can consistently miss some specific transform.

As for the client side, here’s the general structure:

It uses Flask’s Jinja2 template engine, so each widget can consist of a few template types (icon, modal, canvas, script) that then get instanced on demand. There’s a few singleton classes that handle general functionality that the widgets can import. Like rosbridge, tf, view transforms, persistence, tile downloading, etc. No npm nor node required, so it’s really lightweight.

As for the command generation API, there’s the standard /initialpose and /move_base_simple/goal from move_base that Rviz can publish, and /cmd_vel from teleop_twist_keyboard, but there’s also these new ones:

  • nav_mgs/Path (since it’s an array of /move_base_simple/goals) that I like to point at /move_base_simple/waypoints, but that’s just my preference
  • geometry_msgs/PolygonStamped that can define an area, which is pretty useful for setting up mission zones and such, I typically have lots of subscriber topics that then get filled in once
  • std_msgs/Bool and std_msgs/Empty sent by the button widget, to start and stop various processes

I think a useful one would also be a std_msgs/String message that acts like a chat display, for natural language commands and checking status, so that’s also getting added at some point.

1 Like

This is great! I’ve been looking for an easy-to-use webserver visualiser like ROSBoard but with more features like RViz for some time now.

I’ve had a crack at converting this to ROS 2 Humble (GitHub - b1n-ch1kn/vizanti at ros2) which was mostly using our GPT friends for translation and extracting the interfaces into their own package (GitHub - b1n-ch1kn/vizanti_interfaces) as CMake for interfaces and Python packages don’t mix in ROS 2.

The backbone seems to work, I just can’t get see any advertised topics. I also haven’t touched the front-end yet, so the node manager still shows ros.

Happy to collaborate more, let me know if you get a ROS 2 workspace set up :slight_smile:

1 Like

Fantastic work, I was wondering if someone would take a crack at it, but that was fast :smile:

Yeah I think the bulk of the work is already done since rosbridge has a ros2 branch, but there are lots of small specifics that need tweaking. For example those two rosrun/roslaunch options since they’re hardcoded in the html iirc. I think the topics may need an extra /msg prepended or something, that part goes through rosapi so it may be worth checking if that one’s running properly. And if this function returns the list or not.

Dynamic reconfigure will probably be the most work to port, since afaik it’s been merged with the params api, but otherwise it shouldn’t be too problematic.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.