ROS2

Download and installation

The Bota Tactile Sensing Utilities are distributed as an open source wrapper around the C++ library, implemented as a single ROS2 package named bota_tactile_sensing_utils.

Found the package implementation in our official GitLab repository.

bota_tactile_sensing_utils on GitLab

Clone the repository into the src directory of your ROS2 workspace and build it:

# go to your workspace src folder
cd <WORKSPACE_DIR>/src

# clone the repository
git clone https://gitlab.com/botasys/control_toolkit/bota_tactile_sensing_utils_ros2.git

# go to your workspace root folder and build
cd <WORKSPACE_DIR>
source /opt/ros/<DISTRO>/setup.bash
colcon build

Note

The pre-built C++ core libraries are not stored in the repository. The first CMake configure downloads the newest published release of both bota_tactile_sensing_utils and bota_control and unpacks them into the package, so the build needs internet access the first time.


Standard Nodes

The bota_tactile_sensing_utils package implements two standard ROS2 nodes:

These nodes follow the Bota Control Toolkit architecture, allowing them to be easily integrated into processing chains with other ROS2 Bota Control Nodes, such as the Bota Payload Compensator Node.

The intended chain is payload compensator → contact point → slip detector.

Note

The tactile sensing utilities are offered only as standard nodes. There is no lifecycle node and no ros2_control controller variant.


Bota Contact Point Node

Estimates the point of application of the incoming wrench and republishes the measurement at that point.

Configuration Parameters

The node requires the following parameters:

Parameter

Description

node_name

Name assigned to the node, as well as the prefix for topics and frames.

config_file

Path to the JSON configuration file

ema_alpha

Smoothing factor of the exponential moving average applied to the incoming wrench, in (0, 1]. A value of 1.0 disables the filter.

Note

These are the only parameters of the node. The contact geometry, the force threshold and the error policy all come from the configuration file.

Tip

Place the node after a payload compensator. An uncompensated signal carries the weight of the tool, which produces a torque and therefore a phantom contact that drifts as the robot reorients.

Published Topics

Once running, the node publishes the following:

Topic

Message Type

Description

<NODE_NAME>/contact_wrench

WrenchStamped

The wrench moved to the estimated contact point, and the input of the slip detector node.

/tf

TFMessage

Transform from the frame of the incoming wrench to the contact frame, placed at the estimated contact point and carrying the same orientation as the parent.

Since this node is not a starting block in the processing chain (it only processes a signal), the published topics are defined in the same frame as the one of the source node.

Important

In the published contact wrench the moment components across the surface vanish by construction, and what is left is the torsion about the contact normal. That is not a rounding artefact: the contact point is defined as the point where this happens. The information that lived in those two components has been converted into a position, and it is now carried by the TF rather than by the message payload.

Note

The estimate is only meaningful for a single point contact. Distributed contacts are reported as their centre of pressure.

Getting Started

Launch the node from the console:

ros2 run bota_tactile_sensing_utils bota_contact_point_node \
  --ros-args \
  -p node_name:=<NODE_NAME> \
  -p config_file:=<PATH_TO_JSON> \
  -p ema_alpha:=<VALUE>

Inspect the result:

ros2 topic echo /<NODE_NAME>/contact_wrench
ros2 run tf2_ros tf2_echo <INPUT_FRAME> <CONTACT_FRAME>

Visualise in RViz: add a TF display to watch the contact frame move across the tool surface as the contact point changes.


Bota Slip Detector Node

Compares the incoming contact wrench against the friction limits of the contact, and reports whether the contact is slipping.

Configuration Parameters

The node requires the following parameters:

Parameter

Description

node_name

Name assigned to the node, as well as the prefix for topics.

config_file

Path to the JSON configuration file

input_node_name

Name of the node that provides input data to this node in the processing chain.

Note

The input_node_name parameter should match the node_name of the previous node in the processing chain.

Important

The previous node must be a contact point node. Friction limits are statements about the contact, so they can only be evaluated on a wrench that has been moved to the contact point. Feeding this node a wrench taken anywhere else in the chain produces ratios that are arithmetically valid and physically meaningless.

Published Topics

Once running, the node publishes the following topics:

Topic

Message Type

Description

<NODE_NAME>/is_linear_slipping

Bool

Indicates whether the linear friction condition is currently exceeded.

<NODE_NAME>/is_torsional_slipping

Bool

Indicates whether the torsional friction condition is currently exceeded.

<NODE_NAME>/linear_slip_ratio

Float64

Tangential-to-normal force ratio, to be compared against the linear friction coefficient.

<NODE_NAME>/torsional_slip_ratio

Float64

[m] Torsion-to-normal-force ratio, to be compared against the torsional friction coefficient.

The two modes are reported independently, so a grasp controller can react to a slipping twist and to a sliding grip differently. The ratio topics are the ones to monitor: a flag tells you the contact has already given way, a ratio tells you how much margin is left before it does.

Getting Started

Launch the node from the console:

ros2 run bota_tactile_sensing_utils bota_slip_detector_node \
  --ros-args \
  -p node_name:=<NODE_NAME> \
  -p config_file:=<PATH_TO_JSON> \
  -p input_node_name:=<INPUT_NODE_NAME>

Monitor the slip status topics:

ros2 topic echo /<NODE_NAME>/is_linear_slipping
ros2 topic echo /<NODE_NAME>/is_torsional_slipping
ros2 topic echo /<NODE_NAME>/linear_slip_ratio
ros2 topic echo /<NODE_NAME>/torsional_slip_ratio