Python controller generator for ros2_control.
Generate the controller package using :
$ ros2 pytroller create my_pytroller --destination-directory controllersThe raw Python controller logic script my_pytroller_logic_impl.py to be implemented is located the script directory inside the newly created controller package.
This Python script containing the definition of the pytroller_logic_impl function that takes as input
state: typedict{joint/interface, value} : current joint states on all available interfacescommands: typedict{joint/interface, value} : commands to be assigned to joint command interfacesmsg: command message from subscriberparams: typedict{parameter, value} : node parameters
For example :
# my_pytroller/script/my_pytroller_logic_impl.py
from math import cos, sin
def pytroller_logic_impl(period, states, commands, msg, params):
commands['joint1/effort'.encode('ascii')] = msg.data[0]
commands['joint2/effort'.encode('ascii')] = msg.data[1]
return commandsInstall all dependencies and build the controller using
$ rosdep install --ignore-src --from-paths . -y -r
$ colcon buildPytrollers use parameters generated by the generate_parameter_library package and are defined in the my_pytroller_parameters.yaml file :
my_pytroller:
interface_full_names: {
type: string_array,
default_value: [],
description: "Full names of the interface(s) to command",
}
command_topic_name: {
type: string,
default_value: "" # "~/commands",
description: "Name of the subscribed command topic"
}
command_topic_type: {
type: string,
default_value: "" # "std_msgs/msg/Float64MultiArray",
description: "Type of the subscribed command topic"
}Additional parameters can be added to this configuration file. To do so, refer to the generate_parameter_library package documentation.
The values of the defined parameters are set in the controller configuration file used for ros2-control.
ICube Laboratory, University of Strasbourg, France
Maciej Bednarczyk: mcbed.robotics@gmail.com, @github: mcbed
