Task #220
closedTask Group #197: [Dev] xela_models ros2 Apps Development
[Dev] Create a standalone marker publisher for visualizing Allegro hand sensor data.
100%
Description
This package is std_xela_taxel_viz_ahv4, a marker publisher for an isolated environment for visualizing Allegro hand sensor data.
I plan to develop a visualization app that subscribes to sensor data topics provided by xela_server2_ah and publishes markers in an independent environment for visualization.
Therefore, I plan to develop a standalone Taxel visualization app that operates identically to xela_taxel_viz_ahv4 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.
std_xela_taxel_viz_ahv4 targets the following models:
- uSCuAH (left, right)
Supported models use pre-defined profiles for each model, which can be selected as parameters at startup.

-------------------
std_xela_taxel_viz_ahv4¶
1. Goal¶
Provide standalone Allegro Hand v4 tactile visualization without requiring robot control stack.
2. System Context¶
- Input:
/x_taxel_ah- joint states from
/joint_states(global) or/<ns>/joint_states(local)
- Output:
/<ns>/markers- namespace-local TF topics (
/<ns>/tf,/<ns>/tf_static)
3. Components¶
3.1 std_xela_taxel_viz_ahv4_node¶
- Handles baseline and marker generation.
- Supports
gridandurdfmodes. - Uses mapping/pattern YAML for taxel placement.
3.2 robot_state_publisher (URDF mode)¶
- Loads local xacro:
description/xela_uSCuAH_<sequence>_modules.xacro. - Runs with
use_ros2_control:=falseanduse_hand_controllers:=false. - Publishes TF on namespace-local remapped topics.
3.3 std_xela_joint_state_publisher_node (URDF + local mode)¶
- Publishes namespace-local
joint_states. - Loads profile joints by device profile.
- Adds 16 active hand joints (
ah_joint00~ah_joint33).
3.4 All-in-one orchestrators¶
- Sim all-in-one:
sim_xela_server + xela_server2_ah_with_replayer + std viz + RViz. - Real all-in-one:
xela_server2_ah + std viz + RViz.
4. Model and Hand-Side Selection¶
model_name drives left/right defaults in all-in-one launch:
- Left default:
XR23AHLCPP - Right example:
XR23AHRCPP
Selector sets:
urdf_xacro_pathsequencepattern_yamlmapping_yamlhand_sidejoint_states_device_profile
5. Configuration Strategy¶
- Base defaults:
config/base/std_xela_taxel_viz_ahv4.yaml - Mapping:
config/maps/taxel_joint_map_new.yaml - Patterns:
config/patterns/pattern_lahv4.yaml,pattern_rahv4.yaml - Joint profiles:
config/joints/joint_state_profiles.yaml
- Base config
- Mapping/pattern files
- Launch overrides
6. TF Isolation Strategy¶
- Default namespace:
xvizah. - Topic-level isolation through TF remapping.
frame_prefixdefaults empty and is optional.
7. Timing Strategy¶
- Default
marker_stamp_mode=keep - Default
marker_time_offset_sec=-0.1 - For strict sync issues,
marker_stamp_mode=nowis available.
8. Dependencies Boundary¶
- Reuses URDF/mesh assets from
xela_modelsandxela_ah_r2c_bringup. - No hand control controller runtime required for local URDF visualization.
9. Acceptance Criteria¶
- Grid and URDF render correctly with
/x_taxel_ah. - URDF local mode works without hand controller.
- Left/right model selection changes URDF and pattern mapping correctly.
- All-in-one launches operate with namespace-local TF and marker topics.
README¶
Standalone visualization package for Allegro Hand v4 tactile sensors.
It runs independently from hand control stack and supports namespace-local TF and local joint-state generation.
Purpose¶
- Input tactile stream:
/x_taxel_ah - Output markers:
/<namespace>/markers - Visualization modes:
grid,urdf - Local URDF mode without hand control controllers
Requirements¶
- ROS 2 Humble
xela_taxel_msgsxela_modelsxela_ah_r2c_bringupallegro_hand_bringupxela_server2_ah(all-in-one)sim_xela_server(sim all-in-one)
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_ahv4 -r -y --ignore-src
Build¶
cd ~/xela_robotics/02_dev_ws
colcon build --packages-select std_xela_taxel_viz_ahv4
source install/setup.bash
Quick Start¶
Basic launch (default: grid mode):
ros2 launch std_xela_taxel_viz_ahv4 std_xela_taxel_viz_ahv4.launch.py
URDF mode with local joint states:
ros2 launch std_xela_taxel_viz_ahv4 std_xela_taxel_viz_ahv4.launch.py viz_mode:=urdf joint_states_mode:=local
URDF mode with external /joint_states:
ros2 launch std_xela_taxel_viz_ahv4 std_xela_taxel_viz_ahv4.launch.py viz_mode:=urdf joint_states_mode:=global
All-in-One Launch¶
Sim all-in-one (sim_xela_server + xela_server2_ah + std_xela_taxel_viz_ahv4 + rviz2):
ros2 launch std_xela_taxel_viz_ahv4 sim_all_svc_std_xela_taxel_viz_ahv4.launch.py
Sim all-in-one with right-hand model selection:
ros2 launch std_xela_taxel_viz_ahv4 sim_all_svc_std_xela_taxel_viz_ahv4.launch.py model_name:=XR23AHRCPP viz_mode:=urdf
Real all-in-one (xela_server2_ah + std_xela_taxel_viz_ahv4 + rviz2):
ros2 launch std_xela_taxel_viz_ahv4 real_all_svc_std_xela_taxel_viz_ahv4.launch.py
Default Launch Arguments¶
std_xela_taxel_viz_ahv4.launch.py¶
namespace:xvizahviz_mode:gridjoint_states_mode:localframe_id:worldframe_prefix: empty (recommended)overlay_grid_in_urdf:falsemapping_yaml:config/maps/taxel_joint_map_new.yamlpattern_yaml:config/patterns/pattern_lahv4.yamlhand_side:leftsequence:0tips:curvedparent:worldmarker_stamp_mode:keepmarker_time_offset_sec:-0.1joint_states_config_yaml:config/joints/joint_state_profiles.yamljoint_states_device_profile: auto by hand side
sim_all_svc_std_xela_taxel_viz_ahv4.launch.py¶
namespace:xvizahmodel_name:XR23AHLCPPviz_mode:urdfjoint_states_mode:localframe_prefix: emptymarker_stamp_mode:keepmarker_time_offset_sec:-0.1preset:normalinteger_z_range:10085.0calib_z_range:14.0z_bias_power:1.0
real_all_svc_std_xela_taxel_viz_ahv4.launch.py¶
namespace:xvizahmodel_name:XR23AHLCPPviz_mode:urdfjoint_states_mode:localframe_prefix: emptymarker_stamp_mode:keepmarker_time_offset_sec:-0.1ws_host:localhostws_port:5000
Local Joint-State Publisher (Controller-Free URDF)¶
When viz_mode=urdf and joint_states_mode=local, std_xela_joint_state_publisher_node starts.
- Publishes
/<namespace>/joint_states - Loads profile joints from
config/joints/joint_state_profiles.yaml - Adds active hand joints:
ah_joint00~ah_joint03ah_joint10~ah_joint13ah_joint20~ah_joint23ah_joint30~ah_joint33
This avoids dependency on robot-control hand controller for TF visualization.
Hand Model Selection¶
In all-in-one launch:
model_name:=XR23AHLCPPselects left defaultsmodel_name:=XR23AHRCPPselects right defaults
Selection updates:
urdf_xacro_pathpattern_yamlsequencehand_sidejoint_states_device_profile
TF Isolation¶
robot_state_publisherremaps/tfand/tf_staticinto namespace-local topics.- All-in-one RViz remaps to
/<namespace>/tfand/<namespace>/tf_static. - Keep
frame_prefixempty unless prefixed frame names are required.
Config Layout¶
- Base:
config/base/std_xela_taxel_viz_ahv4.yaml - Mapping:
config/maps/taxel_joint_map_new.yaml - Patterns:
config/patterns/pattern_lahv4.yaml,pattern_rahv4.yaml - Joint profiles:
config/joints/joint_state_profiles.yaml - RViz:
config/rviz/
Troubleshooting¶
- URDF not visible or RobotModel collapsed:
- Keep
frame_prefixempty, or - Set RViz RobotModel
TF PrefixandFixed Frameto matching prefixed names.
- Keep
- TF extrapolation warnings:
- Use
marker_stamp_mode:=nowand keep negativemarker_time_offset_sec.
- Use
- No markers:
- Confirm
/x_taxel_ahis publishing and selectedviz_modematches RViz config.
- Confirm
Related Redmine Docs¶
design_std_xela_taxel_viz_ahv4.textilefsd_std_xela_taxel_viz_ahv4.textile

Files