Skip to content

This repository shows minimal pybind11 examples using catkin.

Notifications You must be signed in to change notification settings

kalyanvasudev/pybind11_examples

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pybind11_examples

This repository shows minimal pybind11 examples using catkin. This project depends on pybind11_catkin. It is a pybind11 catkin package. Having a catkin package is very convenient if you are using catkin as build system.

Installation

  1. Install the package pybind11_catkin with sudo apt-get install ros-kinetic-pybind11-catkin
  2. Create a catkin workspace or use an existing workspace.
  3. Clone this repository into the src/ subdirectory of the workspace: git clone https://github.com/arturmiller/pybind11_examples.git.
  4. Compile the code catkin build.
  5. Source the config file: source path_to_workspace/devel/setup.bash.

Examples

Calling a C++ function

The first example is C++ print function, which is call in Python. You run this example with rosrun function_call hello_world.py. As output you should see hello world!.

Class inheritance

The second example shows a Python class inheriting from a C++ class. An in Python overriden method is called from the C++ base class.

Run it with rosrun inheritance dog.py. You should see something similar to this:

<__main__.Dog object at 0x7f90143954d0>
Fluffy dog Molly!
Fluffy dog Charly!

Plugin

The last two examples have shown, how to call C++ code from Python. With Pybind11 you can do the inverse as well. This is needed for example if you want to write a plugin written in Python for a C++ library. There are multiple advantages of this approach. For example you can rerun the plugin without recompiling and running a debugger is much simpler.
The following classes are part of the plugin system:

  • PluginRunner: The plugins are stored and called in this module.
  • BasePlugin: All plugins inherit from BasePlugin.
  • CustomPlugin: A custom plugin implemented in Python.
  • PluginWrapper: The PluginWrapper calls the Python Plugin.
  • PyBasePlugin: This module makes the base plugin accessible in Python.

Run this example with rosrun plugin plugin_runner. The Python plugin is called, with the resulting output hello world!. Now you can change the string of the print statement and rerun it without recompiling the source code.

About

This repository shows minimal pybind11 examples using catkin.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 59.2%
  • CMake 22.3%
  • Python 18.5%