Ros command - Unifying the ROS command line tools

Overview

ros_command

Unifying the ROS command line tools

One impairment to ROS 2 adoption is that all of the commands that have worked their way into muscle memory for ROS 1 developers no longer work. Also, all of the commands in ROS 2 tend to be at least two characters longer. To get information about a topic in ROS 1, one could type rosto (5 characters before tab), but in ROS 2 the equivalent is ros2 to (7 characters before tab).

On top of the differences between the ROS 1 and ROS 2 command line tools, there is also a wide gulf between the different build tools that are available. For example, if you want to build a specific package (e.g. pr2_moveit_config) and all its dependencies, there are three possible commands, depending on the build tool.

build tool command
catkin_make catkin_make --only-pkg-with-deps pr2_moveit_config
catkin_tools catkin build pr2_moveit_config
colcon colcon build --packages-up-to pr2_moveit_config

The ros_command package provides a set of command line interfaces for common actions with syntax similar to ROS 1 and catkin_tools, since those are often simpler, shorter and more familiar to a majority of ROS developers [citation needed].

Setup

This tool uses Python 3.

git clone [email protected]:MetroRobots/ros_command.git
cd ros_command
sudo pip3 install -r requirements.txt

It also uses some BASH scripts. It is recommended that you add source /path/to/ros_command/setup.bash to your .bashrc. This will add the executable scripts to your PATH and add the library to your PYTHONPATH.

> ~/.bashrc">
echo "source $PWD/setup.bash" >> ~/.bashrc

Note that if you are using ROS 1, it is recommended that you source the setup AFTER you source ROS. Many of the commands in this library have the exact same syntax as their native ROS 1 counterparts, so sourcing after ROS gives these scripts priority.

Commands

roscd

This command was not implemented in ROS 2. There is the somewhat similar colcon_cd command, but it requires additional installation. Instead, this package has implemented a version of roscd that works with ROS 2. Because you cannot change the shell's working directory from within a Python script, roscd is implemented in bash.

rosbuild

rosbuild functions as a convenient wrapper for catkin_make, catkin_tools and colcon. (Apologies to all the people still using rosbuild in its original form, but its been deprecated since 2013.) Running rosbuild will automatically determine your current workspace root folder and which build tool it uses, and then running the equivalent native build command. For example running rosbuild pr2_moveit_config will run the three commands shown in the table in the introduction.

  • Like catkin build, it can be run from anywhere within the workspace directory structure.
  • Can play notification sounds when complete (see Configuration section below)
  • Displays the build status in a fancy blessed-based terminal-focused graphical user interface (although not for catkin_make).
rosbuild.mp4
  • Other arguments not specified in the table below are passed into the raw build command.
Category rosbuild colcon catkin_tools catkin_make
General -c, --continue_on_failure --continue-on-error --continue-on-failure
-j N --jobs N --parallel-workers N --jobs N --jobs N
-b, --cmake_build_type X --cmake_args -DCMAKE_BUILD_TYPE=X --cmake_args -DCMAKE_BUILD_TYPE=X -DCMAKE_BUILD_TYPE=X
Package Selection --this --packages-up-to pkg_name --this --pkg pkg_name
--this --no-deps --packages-select pkg_name --this --no-deps --only-pkg-with-deps
-s --skip_packages pkg_name --packages-skip pkg_name 🔲 -DCATKIN_BLACKLIST_PACKAGES="pkg_name"
pkg_name --packages-up-to pkg_name pkg_name --pkg pkg_name
  • There is no equivalent to --continue-on-failure with catkin_make (and it is probably not possible)
  • 🔲 There is no equivalent to --skip_packages in catkin_tools, although you could theoretically do it by parsing the dependency tree
  • If cmake_build_type is NOT specified, then it defaults to the value in the Configuration. The command line argument does overwrite the configured one.

rosdep_install

One useful arcane command that pops up in many places/aliases (in both ROS 1 and ROS 2) is

rosdep install --ignore-src -y -r --from-paths .

According to the manual , rosdep install will "download and install the dependencies of a given package or packages".

  • --from-paths . specifies that dependencies should be installed for all packages in the current directory
  • --ignore-src will ignore packages that you have the source code checked out
  • -y makes it non-interactive (so it defaults to installing everything without prompting)
  • -r continues when you get errors

Essentially, this is a command for installing all of the upstream dependencies for the packages in your workspace.

Now there's the new simple command rosdep_install which will do the same thing. A version with a terminal GUI similar to rosbuild is in development.

rosmsg / rossrv / rosaction

In ROS 2, rosmsg and rossrv were replaced by ros2 interface, which can also handle actions. For most commands, calling the rosbuild version of rosmsg and rossrv will just call either the ROS 1 rosmsg/rossrv command or the equivalent ros2 interface command.

In ROS 1, if you call rosaction , it will run rosmsg on the constituent parts (i.e. Goal/Result/Feedback). The other rosaction variations will list only the appropriate content for packages with actions defined.

In ROS 2, if you call ros show , there is advanced functionality for matching partial names. The equivalent command to ROS 1's rosmsg show Point is ros2 interface show geometry_msgs/msg/Point. This is cumbersome for a number of reasons. First, ROS 1 is nearly half has short (17 chars vs 43 chars). It also requires you remember what package the message you are looking for is. The version implemented here will search for matching fully qualified names, and then print the fully qualified name and the contents of the interface definition.

source_ros

If you use a single ROS workspace, then you probably source the appropriate setup.bash from the .bashrc file. However, if you use multiple, you can source the appropriate setup.bash with one simple command: source_ros. This will find the appropriate setup.bash by determining the current ROS Workspace based on the folder the script is executed in. Typically, this will either source the devel/setup.bash or install/setup.bash depending on whether it is ROS 1 or 2. (You can also have a setup.bash in the workspace root if you need custom logic to source additional environment variables.)

(Under the hood, this runs the get_current_setup_bash script to print the appropriate filename)

rosrun and rosdebug

In ROS 1, rosrun works the same way as the standard ROS 1 version. In ROS 2, it runs ros2 run.

rosdebug does the same things, except it will insert --prefix 'gdb -ex run --args' into the appropriate place to run your node using gdb.

rosclean

The rosclean command works as a hybrid of rosclean and catkin clean.

  • With no arguments (rosclean) the script will ask whether you want to delete the workspace's devel/install/build/log directories as well as the global ~/.ros/log directory while also printing their sizes.
  • With the -y flag (rosclean -y) it will not prompt you and just delete things!
  • To just print the sizes without deleting anything, you can run rosclean check or rosclean -c.
  • You can also avoid the computation of folder sizes with the -n flag.
  • You can also provide a list of packages (rosclean std_msgs nav2_core) and it will attempt to delete just those portions of the workspace.

You can also throw the word purge at the beginning just to mirror the ROS 1 rosclean more closely.

Configuration

Users may change the default behavior of ros_command by putting settings in yaml files in two places.

  • ros_command.yaml in the workspace root (highest precedence)
  • ~/.ros/ros_command.yaml

The current settings you may change are summarized in this table.

key type default note
cmake_build_type string Release CMAKE_BUILD_TYPE
graphic_build boolean True By default, rosbuild shows a fancy graphical interface
success_sound string / absolute path None Sound file path to play after successful builds
fail_sound string / absolute path None Sound file path to play after unsuccessful builds

Power Usage

If you like really short, convenient commands, try adding these to your ~/.bashrc

alias sros='source_ros'                  # Easier tab completion than source_ros
alias asdf='rosbuild --this -c'          # Builds the package in the current directory (and its dependencies)
alias zxcv='rosbuild --this --no-deps'   # Builds just the package in the current directory

Acknowledgements

QueraToCSV is a simple python CLI project to convert the Quera results file into CSV files.

Quera is an Iranian Learning management system (LMS) that has an online judge for programming languages. Some Iranian universities use it to automate the evaluation of programming assignments.

Amirmahdi Namjoo 16 Nov 11, 2022
Detect secret in source code, scan your repo for leaks. Find secrets with GitGuardian and prevent leaked credentials. GitGuardian is an automated secrets detection & remediation service.

GitGuardian Shield: protect your secrets with GitGuardian GitGuardian shield (ggshield) is a CLI application that runs in your local environment or in

GitGuardian 1.2k Jan 06, 2023
A command line tool (and Python library) for archiving Twitter JSON

A command line tool (and Python library) for archiving Twitter JSON

Documenting the Now 1.3k Dec 28, 2022
Linux commands Interpreter for Windows and Mac based systems using Python

DBHTermEcIbP Linux commands Interpreter for Windows and Mac based systems using Python Basic Linux commands supported viewing current working director

Vraj Patel 1 Dec 26, 2021
vimBrain is a brainfuck-based vim-inspired esoteric programming language.

vimBrain vimBrain is a brainfuck-based vim-inspired esoteric programming language. vimBrainPy Currently, the only interpreter available is written in

SalahDin Ahmed 3 May 08, 2022
Wik is use to get information about anything on the shell using Wikipedia.

WIK wik is a tool to view wikipedia pages from your terminal. It also let you search for any wikipedia up to date article on one query from your termi

Yash Singh 340 Dec 18, 2022
A Tempmail Tool for Terminal and Termux.

A Tempmail Tool for Terminal and Termux.

MAO-COMMUNITY 8 Oct 19, 2022
Project scoped command execution to just do your work

Judoka is a command line utility that lets you define project scoped commands and call them through their alias. It lets you just do (= judo) your work.

Eelke van den Bos 2 Dec 17, 2021
ddgr is a cmdline utility to search DuckDuckGo (html version) from the terminal

ddgr is a cmdline utility to search DuckDuckGo (html version) from the terminal. While googler is extremely popular among cmdline users, in many forums the need of a similar utility for privacy-aware

Piña Colada 2.5k Dec 25, 2022
Get COVID-19 vaccination schedules from booking.moh.gov.ge in the CLI

vaccination.py Get COVID-19 vaccination schedules from booking.moh.gov.ge in the CLI. Installation $ pip install vaccination Usage Make sure the Pytho

Temuri Takalandze 11 Dec 08, 2021
Tncli - TON smart contract command line interface

Tncli TON smart contract command line interface State Not working, in active dev

Disintar IO 100 Dec 18, 2022
Investing library and command-line interface inspired by the Bogleheads philosophy

Lakshmi (Screenshot of the lak command in action) Background This project is inspired by Bogleheads forum. Bogleheads focus on a simple but powerful p

Sarvjeet Singh 108 Dec 26, 2022
ghfetch is ai customizable CLI GitHub personal README generator.

ghfetch is ai customizable CLI GitHub personal README generator. Inspired by famous fetch such as screenfetch, neofetch and ufetch, the purpose of this tool is to introduce yourself as if you were a

Alessio Celentano 3 Sep 10, 2021
Python codecs extension featuring CLI tools for encoding/decoding anything

CodExt Encode/decode anything. This library extends the native codecs library (namely for adding new custom encodings and character mappings) and prov

Alex 210 Dec 30, 2022
Un module simple pour demander l'accord de l'utilisateur dans une CLI.

Demande de confirmation utilisateur pour CLI Présentation ask_lib est un module pour le langage Python proposant une seule fonction; ask(). Le but pri

CallMePixelMan 7 May 09, 2022
PyWordle: A Python-made wordle manual solver

PyWordle: A Python-made wordle manual solver How to use it Start the program with python3 pywordlesolver.py. How it works The program has a simple 5-l

Federico Torrielli 5 Nov 24, 2022
Collection of useful command line utilities and snippets to help you organise your workspace and improve workflow.

Collection of useful command line utilities and snippets to help you organise your workspace and improve workflow.

Dominik Tarnowski 3 Dec 26, 2021
lazy_table - a python-tabulate wrapper for producing tables from generators

A python-tabulate wrapper for producing tables from generators. Motivation lazy_table is useful when (i) each row of your table is generated by a poss

Parsiad Azimzadeh 52 Nov 12, 2022
Features terminal for python

Features Terminal V1.0 (23/10/2021) Um programa para linux com diferentes ferramentas! Recursos: Criador de QR code Gerador de senhas Teste de velocid

1 Oct 26, 2021
A simple Python library that allows you to customize your CLI based output on Linux

Terminal-Colored-Print About A small module that allows to simply decorate strings on Linux terminals. I personally use it for multi-threaded project,

Francesco Milano 0 Dec 13, 2021