The lay of the land for robotics in Julia

I’m going to use Julia for a robotics simulation project. I need a basic interface to ROS 1, rosbags and visualization of point clouds, meshes, etc. I’m a bit confused about what packages are currently supported and best to invest time into for the next 6 to 12 months.

I found RobotOS.jl, which looks fine for ROS 1 interface. I don’t see it listed at https://juliarobotics.org/, which seems to the place with a lot of recent activity. Is RobotOS.jl the best option to work with ROS 1?

Is RobotOSData.jl the only option to read rosbags? It hasn’t been updated in a while.

Are there any specialized options to visualize point clouds and meshes in real time? I think it can be done with Makie or GR, but is there another package, perhaps robotics or computer vision oriented?

2 Likes

AFAIK there hasn’t been a lot of ROS-Julia integration work, but last time I checked RobotOS.jl was still the right place to look for it.

It’s sort of a historical accident that there aren’t any ROS tools in the JuliaRobotics umbrella. Most of us who work on JuliaRobotics happened to be using an alternative tool called LCM during the MIT DARPA Robotics Challenge, so we have GitHub - JuliaRobotics/LCMCore.jl: Low-level Julia bindings for the LCM communications library instead. But ROS is far more standard, and I wouldn’t recommend picking up LCM for a new project.

For visualization, Makie is great, but I’d also suggest looking at https://github.com/rdeits/MeshCat.jl (which I originally wrote for my own robot and point cloud visualization needs). There’s also GitHub - JuliaRobotics/MeshCatMechanisms.jl: 3D Visualization of mechanisms and URDFs using MeshCat.jl and RigidBodyDynamics.jl which lets you visualize robots from GitHub - JuliaRobotics/RigidBodyDynamics.jl: Julia implementation of various rigid body dynamics and kinematics algorithms.

3 Likes

I already found MeshCat, thank you for writing it! How did you read point clouds into MeshCat?

I haven’t done any work on reading in point clouds from disk–the only cases I needed involved data already present as a vector of points in memory, which you can render with:

            verts = rand(Point3f0, 100000)
            setobject!(visualizer, PointCloud(verts))

Are you looking to read point cloud data from a sensor or a ROS topic of some kind?

I’m migrating a C++ ROS project to Julia. Since I don’t really like the bloat of ROS, I will probably leave a thin C++ wrapper over ROS API subset I need and learned, and access it from Julia. It will isolate my Julia code from ROS API. I will most likely pass point clouds or depth images as plain vectors.

In the meantime, before I learn enough Julia to make it work, I would like to easily read my set of test point clouds from Julia. I can write them from C++ at practically any format, but I’m not sure which is the most reasonable for Julia: JSON, CSV, something else?

I tried to use RobotOS, but I couldn’t make it work.

Any of those will be fine. Personally, I like msgpack, which has all the flexibility of JSON but better performance. HDF5 will be even better for very large datasets.