tl;dr: Five new Python libraries to help with ROS development are available now via pip
:
ros_glint
- a ROS 1 and 2 linter that evolved fromroscompile
ros_command
- command line tools previously announced hereros_introspect
- Pure Python version of the ROS 1 packageros_introspection
stylish_cmake_parser
- Parser for CMake files with the ability to retain the whitespace “style” after modifyingbetsy_ros
- A helper library with several ROS 1 & 2 “meta” operations, used by the above tools
Background
Back in 2015, I released a tool called roscompile with the goal of automating all the annoying meta-information in catkin packages. It largely stems from the fact that I’m bad at remembering to install
stuff in CMake and that I wrote so many pluginlib
plugins that it made sense to automate the process of writing the plugin definition files. I talked about it in my ROS World 2020 Lightning Talk.
But roscompile
only works for ROS 1. And rather than port it directly, and maintain two separate versions of the code, I made the questionable decision to make a new library that handled both ROS 1 and ROS 2, and was not a ROS package at all, but an independent python package.
The result is the above five Python packages, available via pip.
ros_glint
“Make your ROS code sparkle!”
Run glint_ros
in any folder with ROS packages (1 or 2) and it will suggest meta-data fixes interactively for you to apply.
- Add missing dependencies to
package.xml
- Replace the default license/author names
- Generate CMake code to build ROS messages, etc.
- Link your C++ libraries/executables with the proper libraries
- Make sure all the important package files are installed
- Clean up whitespace in many places
- Generate plugin definition files
- Generate
setup.py
files - Remove default settings from
.rviz
files - And much much more…
New features:
- Extensive tests in ROS 1 and 2 to avoid regressions
- Pre-commit hook definitions
I prioritized testing over documentation on this one, and I know I’ll need to circle around to that eventually.
ros_command
I announced ros_command over two years ago, and now its available as a pip package. Other new features in that time:
roslaunch
implemented- New command
rosexecute
for doing either a launch file or a node - Tab completion - This makes me feel like a real Python dev.
- The package completer works in
rosbuild
,roscd
,rosrun
androslaunch
- Executable completer works in
rosrun
androsexecute
- The launch file completer in
roslaunch
and fixing something that really grinds my gears, doesn’t suggest--print
and all the other args as completions when trying to remember the name of a launch file. - Also autocompletes launch file arguments.
- ROS interfaces (messages/services/actions) can be autocompleted starting with either the package name or the interface name.
- The package completer works in
- Also, the list of canonical emojis for each distro has been updated, although I’m struggling to figure out what to do for Kilted Kaiju. Maybe
Other Libraries
stylish_cmake_parser
also spun out ofroscompile
and is the only parser that can properly manipulate the “style” of the CMake in addition to the actual commands. Preliminary tests showed it successfully parsing 13351/13395 (99.67%) CMake files found in therosdistro
.ros_introspect
gives you the ability to classify all the files in a ROS package folder into different classes and then perform some operations on them. Used throughoutros_glint
betsy_ros
contains a bunch of Python functions that are needed for the other tools to work in ROS 1 or 2.get_workspace_root
determines the type and location of the current workspaceget_package_name_from_path
reads thepackage.xml
so you don’t have to.ROSInterface
is an independent class for ROS messages/services/actions.- and more…
Final Thoughts
- Please use these libraries as a jumping off point for your own ROS script hacking. I’ve thought about making a Github bot with it, and am still working on releasing an updated ROS 1 → ROS 2 conversion tool.
- Despite the polish and branding that I have given these, they are still “hobby” projects and are likely to have bugs that I encourage you to report. I’m not perfect.
- It is ridiculously easy to release pip packages once you get the hang of it. I have to credit the Scientific Python Library Development Guide as being a great starting resource. But also, there’s not actually any other human action required for getting stuff into pip, which I’ve found contrasts distinctly with the multiple rounds of PRs that you need to get stuff into the ROS distro.
- I’ve also made a Python DB wrapper based on my ros_metrics work and a Python Google API wrapper if you want to know where my “spare” developer cycles have been.
- I use my own tools daily, and I think they’re very useful. If you do too, please drop me a line. It makes the community feel more tight knit. Or, as the kids say, likeandsubscribe.