rclcpp VS asdf

Compare rclcpp vs asdf and see what are their differences.

rclcpp

rclcpp (ROS Client Library for C++) (by ros2)

asdf

Extendable version manager with support for Ruby, Node.js, Elixir, Erlang & more (by asdf-vm)
InfluxDB - Power Real-Time Data Analytics at Scale
Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
www.influxdata.com
featured
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com
featured
rclcpp asdf
4 341
492 20,547
2.4% 1.6%
9.1 7.6
2 days ago 6 days ago
C++ Shell
Apache License 2.0 MIT License
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

rclcpp

Posts with mentions or reviews of rclcpp. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2022-11-06.
  • How to use various QoS settings in ros2 used in moveit software?
    1 project | /r/ROS | 8 Apr 2023
    I think there's an overload of rclcpp::action::create_client that will accept an rcl_action_client_options_t (see here https://github.com/ros2/rclcpp/pull/1133/files) but it looks like MoveGroupInterface doesn't pass anything in when it creates the action clients:
  • Making the jump to ROS2
    2 projects | /r/ROS | 6 Nov 2022
    So one of the bigger issues I've encountered is that re-entrant services can break with the multi-threaded executor https://github.com/ros2/rclcpp/issues/1212 Services in ROS2 by default are not reentrant meaning they need to be called asynchronously. Since my team was porting ROS1 nodes over we wanted to keep the old blocking service call behavior in ROS2 to avoid changing decision logic. Unfortunately, we found out that this can cause the node to crash per the issue above. The fix for that issue was implemented in Humble irc, but can't be ported back to foxy. That's one specific example, but we've seen a few other issues like that as well.
  • RADU: Motor Controller Software for Arduino and Raspberry Pico
    9 projects | dev.to | 17 Apr 2022
    Alternatively, you can use the default client libraries like rclpy or rclcpp for writing custom code that reads and writes ROS2 messages.
  • Nix is the ultimate DevOps toolkit
    21 projects | news.ycombinator.com | 9 Apr 2021
    Thanks for the response!

    > This is difficult to answer without knowing more details.

    The situation specifically is the ROS ecosystem, where metadata is managed in these package.xml files:

    https://github.com/ros2/rclcpp/blob/master/rclcpp/package.xm...

    The federated nature of the ecosystem has led to a culture where it's very normal to be building dozens of these at once, in the same workspace together, often from multiple repos (the repo above has four in it). So there are several build tools which automate the work of examining a source workspace and building all the packages within it in the correct topological order, respecting build_depend tags. The newest of these tools (colcon) has actually made the package.xml optional in many cases, as it can examine CMakelists, setup.py, BUILD, etc, and discover for itself what the dependencies are.

    Your "distribution" of ROS is formed by listing all the packages and repos in this big file, for which there is other tooling to manage pulling dependency sources, whatever: https://github.com/ros/rosdistro/blob/master/foxy/distributi...

    Anyway, so the existing ROS/nix efforts (1) seem to basically consume all of this package/distribution metadata at once and generate a giant parallel structure of nix definitions (eg https://github.com/lopsided98/nix-ros-overlay/blob/master/di...), which I fear would be completely opaque to users and any system which required everyone to leave behind these existing workflows would be an immediate non-starter.

    I think the ideal scenario (and what it would look like if I built this myself based on debs) would be that you could source the "base" workspace as usual (enter the nix-shell?), and check out source, build packages as usual with colcon, the usual workspace-building tool, but there'd be an extra plugin/verb/flag for it, which would make it build each package as a nix package instead of into the usual installspace. The verb would generate the nix definitions on the fly, and probably handle the invocation and build-parallelism side of it as well.

    [1]: https://github.com/acowley/ros2nix, https://github.com/lopsided98/nix-ros-overlay

asdf

Posts with mentions or reviews of asdf. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2024-04-27.
  • Install Asdf: One Runtime Manager to Rule All Dev Environments
    10 projects | news.ycombinator.com | 27 Apr 2024
    The main issue most people have with asdf is that it’s annoyingly slow. Not unusably so, but just enough that it’s irritating.

    I identified [0] the source for much of it (sub-shells and pipes) and began a PR [1], but became bogged down with BATS testing, and then found mise / rtx, so kind of lost interest. Sorry. You can always implement these if you’d like.

    [0]: https://github.com/asdf-vm/asdf/issues/290#issuecomment-1383...

    [1]: https://github.com/asdf-vm/asdf/pull/1441

  • Show HN: I made a multiple runtime version manager that can be used on Windows
    4 projects | news.ycombinator.com | 22 Apr 2024
  • Volta – Fastest Node version manager in Rust
    2 projects | news.ycombinator.com | 25 Mar 2024
    Or if you need to manage more than just node, asdf has been around for over a decade and works great. You can use a .tool-versions to change runtimes for each project you have, in addition to managing your global runtime versions

    https://asdf-vm.com/

  • Pyenv – lets you easily switch between multiple versions of Python
    20 projects | news.ycombinator.com | 25 Mar 2024
    Why not just use a tool like asdf (https://asdf-vm.com/) or mise (https://mise.jdx.dev/)?

    These tools have the advantage of not being multi-taskers and can manage version for all your tools. You wouldn’t need pyenv and npm and rvm and…

    We’ve even started committing the .mise.toml files for projects to our repos. That way, since we work on multiple projects that may need multiple versions of the same tool, it’s handled and documented.

  • A Journey to Find an Ultimate Development Environment
    13 projects | dev.to | 2 Feb 2024
    The purpose of a version manager is to help you navigate or install any tools for development easily. Version Manager can be one tool for each dependency (e.g. NVM, g) or One tool for all dependencies (e.g. asdf, mise).
  • How to Install Your Python Version on Ubuntu
    1 project | news.ycombinator.com | 28 Jan 2024
    (asdf)[https://asdf-vm.com/] fully supports Python and almost any other language. I've been using it for Ruby, Python, Elixir, and other languages for years and never looked back.
  • Beginners Intro to Trunk Based Development
    4 projects | dev.to | 4 Jan 2024
    Secondly, our development environments must not drift, because then code may behave differently and a change could pass on our machine but fail in production. There are many tools for locking down environments, e.g nix, pkgx, asdf, containers, etc., and they all share the common goal of being able to lock down dependencies for an environment accurately and deterministically. And that needs to be enforced in our local workflow so we don't have to rely on CI environments for correctness. All developers must have environments that are effectively identical to what runs in CI (which itself should be representative of the production environment).
  • Practical Guide to Trunk Based Development
    4 projects | dev.to | 4 Jan 2024
    There are many ways this can be done (e.g nix, pkgx, asdf, containers, etc.), and we won’t get into which specific tools to use, because we'll instead cover the essential essence of preventing environment drift:
  • Criando seu ambiente com ASDF
    4 projects | dev.to | 29 Dec 2023
  • Kotlin version manager
    2 projects | /r/Kotlin | 7 Dec 2023
    I've really been enjoying asdf, which is a program that allows you to install specified versions of dev utilities as well as dynamically manage them via shims and .tool-versions files.

What are some alternatives?

When comparing rclcpp and asdf you can also consider the following projects:

micro_ros_arduino - micro-ROS library for Arduino

SDKMan - The SDKMAN! Command Line Interface

robotnix - Build Android (AOSP) using Nix [maintainer=@danielfullmer,@Atemu]

pyenv - Simple Python version management

ros2_serial_example

rbenv - Manage your app's Ruby environment

nix-1p - A (more or less) one page introduction to Nix, the language.

nvm - Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions

rclpy - rclpy (ROS Client Library for Python)

volta - Volta: JS Toolchains as Code. ⚡

rosserial - A ROS client library for small, embedded devices, such as Arduino. See: http://wiki.ros.org/rosserial

HomeBrew - 🍺 The missing package manager for macOS (or Linux)