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 |
|---|---|
|
Name assigned to the node, as well as the prefix for topics and frames. |
|
Path to the JSON configuration file |
|
Smoothing factor of the exponential moving average applied to the incoming wrench, in
|
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 |
|---|---|---|
|
The wrench moved to the estimated contact point, and the input of the slip detector node. |
|
|
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 |
|---|---|
|
Name assigned to the node, as well as the prefix for topics. |
|
Path to the JSON configuration file |
|
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 |
|---|---|---|
|
Indicates whether the linear friction condition is currently exceeded. |
|
|
Indicates whether the torsional friction condition is currently exceeded. |
|
|
Tangential-to-normal force ratio, to be compared against the linear friction coefficient. |
|
|
[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