Task #219
closedTask Group #197: [Dev] xela_models ros2 Apps Development
[Dev] Create a standalone marker publisher for visualizing 2F sensor data
100%
Description
This package is std_xela_taxel_viz_2f, a marker publisher for 2F sensor data visualization in an isolated environment.
I plan to develop a visualization app that subscribes to sensor data topics provided by xela_server2_2f and publishes markers in an isolated environment for visualization.
Therefore, I plan to develop a standalone Taxel visualization app that operates identically to xela_taxel_viz_2f but publishes separate /robot_description and /joint_states without affecting the robot control environment.
This app publishes data to the Marker topic, allowing RViz and other ROS apps to easily subscribe to this marker topic for visualization.
This std_xela_taxel_viz_2f supports three target models:
- uSPr2F,
- uSPrDS,
- uSPrHE35
These supported models can be selected as parameters during runtime, using pre-prepared profiles for each model.

std_xela_taxel_viz_2f¶
1. Goal¶
Provide a standalone 2F tactile visualization path that does not interfere with robot-control stack topics.
2. System Context¶
- Input:
/x_taxel_2f- joint states from
/joint_states(global) or/<ns>/joint_states(local)
- Output:
/<ns>/markers- local TF streams
/<ns>/tf,/<ns>/tf_static
3. Runtime Components¶
3.1 std_xela_taxel_viz_2f_node¶
- Computes baseline/deadband.
- Supports
gridandurdfplacement logic. - Publishes marker arrays.
3.2 robot_state_publisher (URDF mode only)¶
- Uses local xacro:
description/xela_<model>_2_modules.xacro. - Subscribes to selected joint_states topic.
- Publishes TF under namespace-local remap.
3.3 std_xela_joint_state_publisher_node (URDF + local mode)¶
- Emits static/default joint list from config profile.
- Removes dependency on external controller stack for URDF visualization.
3.4 All-in-one wrappers¶
- Sim all-in-one includes
sim_xela_serverandxela_server2_2f. - Real all-in-one includes
xela_server2_2freal server launch. - Both start RViz with local TF remapping.
4. Configuration Strategy¶
- Base defaults:
config/base/std_xela_taxel_viz_2f.yaml - Model/mode overrides:
config/models/<model>/<mode>.yaml - Joint profiles:
config/joints/joint_state_profiles.yaml
- Base config
- Model/mode config
- Launch overrides
5. TF Isolation Strategy¶
- Default namespace:
xviz2f. /tfand/tf_staticare remapped to local topics (tf,tf_static) inside namespace.- RViz all-in-one remaps back to
/<ns>/tfand/<ns>/tf_static. frame_prefixdefaults empty; isolation is achieved by topic namespace.
6. Visualization Modes¶
6.1 Grid mode¶
- Uses configured rows/cols/index map.
- Generates grid plane + circles + arrows.
6.2 URDF mode¶
- Uses taxel link frames from local robot description.
- Optional grid overlay via
overlay_grid_in_urdf.
7. Timing Policy¶
marker_stamp_mode(keep|now|zero)marker_time_offset_sec(negative default) to reduce TF extrapolation warnings.
8. Key Decisions¶
- Keep package standalone from control controllers.
- Provide local joint-state publisher for URDF mode.
- Reuse shared URDF/mesh assets from
xela_models.
9. Acceptance Criteria¶
- Works with only
/x_taxel_2fplus optional local joint states. - Sim and real all-in-one launches bring up full visualization chain.
- TF and marker streams are isolated to namespace-local topics.
uSPr2F,uSPrDS,uSPrHE35configs load correctly per mode.
README¶
Standalone visualization package for Xela 2F taxel sensors.
It runs independently from robot control stack and uses namespace-local TF topics.
Purpose¶
- Input only tactile stream (
/x_taxel_2f) plus joint states. - Output markers on
/<namespace>/markers. - Support
gridandurdfvisualization. - Keep TF traffic local by remapping
/tfand/tf_staticto/<namespace>/tfand/<namespace>/tf_static.
Requirements¶
- ROS 2 Humble
xela_taxel_msgsxela_modelsxela_server2_2f(all-in-one launch)sim_xela_server(sim all-in-one launch)
Install Dependencies (rosdep)¶
WS=~/xela_robotics/02_dev_ws
sudo sh -c "echo 'yaml file://${WS}/src/xela_apps/rosdep/xela_taxel_viz_deps.yaml' > /etc/ros/rosdep/sources.list.d/98-xela-taxel-viz.list"
rosdep update
rosdep install --from-paths ${WS}/src/xela_apps/std_xela_taxel_viz_2f -r -y --ignore-src
Build¶
cd ~/xela_robotics/02_dev_ws
colcon build --packages-select std_xela_taxel_viz_2f
source install/setup.bash
Quick Start¶
Basic launch (default: grid mode):
ros2 launch std_xela_taxel_viz_2f std_xela_taxel_viz_2f.launch.py
URDF mode with local joint states:
ros2 launch std_xela_taxel_viz_2f std_xela_taxel_viz_2f.launch.py viz_mode:=urdf joint_states_mode:=local
URDF mode with external /joint_states:
ros2 launch std_xela_taxel_viz_2f std_xela_taxel_viz_2f.launch.py viz_mode:=urdf joint_states_mode:=global
All-in-One Launch¶
Sim all-in-one (sim_xela_server + xela_server2_2f + std_xela_taxel_viz_2f + rviz2):
ros2 launch std_xela_taxel_viz_2f sim_all_svc_std_xela_taxel_viz_2f.launch.py
Sim all-in-one with model and mode options:
ros2 launch std_xela_taxel_viz_2f sim_all_svc_std_xela_taxel_viz_2f.launch.py viz_model_name:=uSPrDS server_model_name:=uSPrDS viz_mode:=urdf joint_states_mode:=local
Real all-in-one (xela_server2_2f + std_xela_taxel_viz_2f + rviz2):
ros2 launch std_xela_taxel_viz_2f real_all_svc_std_xela_taxel_viz_2f.launch.py
Default Launch Arguments¶
std_xela_taxel_viz_2f.launch.py¶
namespace:xviz2fviz_mode:gridmodel_name:uSPr2Fmodel_params_file:config/models/<model_name>/<viz_mode>.yamlstyle_preset:defaultoverlay_grid_in_urdf:falsemarker_stamp_mode:nowmarker_time_offset_sec:-0.12frame_id:worldframe_prefix: empty (recommended)joint_states_mode:localjoint_states_config_yaml:config/joints/joint_state_profiles.yamljoint_states_device_profile:<model_name>
sim_all_svc_std_xela_taxel_viz_2f.launch.py¶
namespace:xviz2fviz_model_name:uSPr2Fserver_model_name:<viz_model_name>viz_mode:gridjoint_states_mode:localframe_prefix: emptymarker_stamp_mode:nowmarker_time_offset_sec:-0.12preset:normalpublish_period_ms:200sine_freq_hz:0.05integer_z_range:10085.0calib_z_range:14.0z_bias_power:1.0
real_all_svc_std_xela_taxel_viz_2f.launch.py¶
namespace:xviz2fviz_model_name:uSPr2Fviz_mode:urdfjoint_states_mode:localcan_port:can0ws_host:localhostws_port:5000
TF and Joint States Isolation¶
robot_state_publisherremaps:/tf -> tf/tf_static -> tf_static
- RViz in all-in-one launch is remapped to
/<ns>/tfand/<ns>/tf_static. - Local mode uses
std_xela_joint_state_publisher_nodeto publish/<ns>/joint_states. - Keep
frame_prefixempty unless explicit prefixed frame names are required.
Config Layout¶
- Base:
config/base/std_xela_taxel_viz_2f.yaml - Model overrides:
config/models/uSPr2F/grid.yaml,urdf.yamlconfig/models/uSPrDS/grid.yaml,urdf.yamlconfig/models/uSPrHE35/grid.yaml,urdf.yaml
- Joint profiles:
config/joints/joint_state_profiles.yaml - RViz:
config/rviz/
Troubleshooting¶
- Missing xacro in install space:
colcon build --packages-select std_xela_taxel_viz_2f --symlink-install source install/setup.bash - URDF model collapsed in RViz:
- Keep
frame_prefixempty, or - Set RViz RobotModel
TF PrefixandFixed Frameto matching prefixed names.
- Keep
- TF extrapolation warnings:
- Use
marker_stamp_mode:=nowand negativemarker_time_offset_sec.
- Use
Related Redmine Docs¶
design_std_xela_taxel_viz_2f.textilefsd_std_xela_taxel_viz_2f.textile

Files