Robossember Teleoperation Library
| docs | ||
| gello_provider | ||
| interactive_marker_provider | ||
| joy_provider | ||
| keyboard_provider | ||
| rbs_rviz_plugins | ||
| rbs_teleop_interface | ||
| rbs_teleop_provider | ||
| repos | ||
| virtual_frame_controller | ||
| vr_provider | ||
| .gitignore | ||
| README.md | ||
Robossembler Teleoperation Library
Мотивация
- Объединить разные устройства ввода (геймпад, VR/IMU, клавиатура, лидер‑манипулятор) под единой абстракцией и единым набором топиков управления.
- Дать модульную архитектуру: провайдеры управления подключаются плагинами (
pluginlib) и могут отдавать Twist, JointTrajectory, команды хватателя и сервисные команды. - Стабильно работать локально и через сеть. Поддерживается ROS 2 поверх Zenoh RMW для удалённого телеуправления.
См. «Инструкция по Zenoh» — zenoh_run.md
Поддерживаемые устройства и их статус
- Геймпад (DualShock 4): стабильная поддержка. На вход —
sensor_msgs/Joy(любая нода драйвера), маппинг осей/кнопок задан статически. - Клавиатура: базовая поддержка через топики
keyboard_twistиkeyboard_gripper(нужен внешний паблишер). Для команд записи есть узелkeyboard_adapter.py. - VR/IMU: экспериментальная поддержка. Из IMU интегрируется ориентация и компенсируется гравитация, на выходе — Twist.
- Лидер‑манипулятор GELLO (Dynamixel): плагин‑провайдер, читает углы лидера и строит JointTrajectory для ведомого по URDF‑ограничениям; публикует
gello/joint_states. Статус: beta. - RViz панель: отображает сравнение позиций сочленений «Лидер vs Ведомый» и позволяет менять знаки направлений.
Сводка пакетов
- rbs_teleop_interface: интерфейсы провайдеров (Twist/Pose/Gripper/Recorder/JointTrajectory) + утилиты Publisher/Subscription.
- rbs_teleop_provider: встроенные провайдеры —
keyboard,joy(с маппингами),vr, фабрикаProviderFactoryи инфраструктура маппинга геймпадов. - gello_provider: плагин‑провайдер для лидерского манипулятора GELLO (Dynamixel) + простой планировщик траекторий по URDF‑лимитам (Ruckig, joint_limits, URDF); фоновая публикация
/gello/joint_statesпри неактивном контроллере; калибровка знаков/смещений с сохранением вparameters_file. - virtual_frame_controller: Lifecycle‑нода мостит провайдеры в контроллеры робота: публикует Twist/Pose/JointTrajectory, вызывает action хватателя, управляет сервисом рекордера; умеет работать в базовой или ИМ рамке.
- rbs_rviz_plugins: RViz дисплей и панель калибровки/наблюдения «Leader/Follower» по JointState с прогресс‑барами и инверсией направлений.
- repos/:
.reposфайл с внешними зависимостями дляvcs import.
rbs_rviz_panel (панель RViz)
- Дисплей
RbsTeleop(пакетrbs_rviz_plugins) добавляет док‑панель для наблюдения и калибровки. - Свойства дисплея:
URDF topic:/robot_description(latchedstd_msgs/Stringс URDF).Leader JointState: например/gello/joint_states.Follower JointState:/joint_states.
- Панель показывает: значения суставов лидера/ведомого, прогресс в пределах лимитов и колонку Direction для инверсии знаков.
- Кнопки:
- Link/Unlink — активировать/деактивировать Lifecycle‑узел
virtual_frame_controllerчерез/<ns>/virtual_frame_controller/change_state. - Calibrate — сервис
/<ns>/gello/calibrate: вычисляетjoint_signsиbest_offsets, сохраняет вparameters_file(или~/.ros/gello_offsets.yaml).
- Link/Unlink — активировать/деактивировать Lifecycle‑узел
- Смена знаков: публикует список в
/<ns>/gello/signs_cmd(std_msgs/Int64MultiArray) и вызывает/<ns>/gello/reload_signs; начальное чтение через/<ns>/gello/get_signs(Trigger, строка[1,-1,...]).
Примечание: при деактивации контроллера (VirtualFrameController inactive) лидерские JointState продолжают обновляться для удобной калибровки.
Добавление новых устройств
Руководство: docs/ADDING_DEVICES.md
Зависимости
- ROS 2 (рекомендуется Jazzy) + базовые пакеты:
rclcpp,rclcpp_lifecycle,pluginlib,geometry_msgs,sensor_msgs,trajectory_msgs,control_msgs,tf2,tf2_ros,tf2_geometry_msgs. - Для геймпада: любой драйвер, публикующий
sensor_msgs/Joy. - Для RViz панели:
rviz2,rviz_common,rviz_default_plugins. - Для GELLO:
dynamixel_sdk,joint_limits,urdfdom,ruckig,generate_parameter_library. - Внешние интерфейсы:
rbs_utils_interfacesи утилиты из Robossembler Runtime (см. repos/aubo.repos). - Опционально для сети:
rmw_zenoh_cpp(см. zenoh_run.md).
Установка
- Клонируйте репозиторий в
srcвашего ROS 2 workspace:
mkdir -p ~/ws/src && cd ~/ws/src
git clone <this_repo_url> rbs_teleop
- Подтяните внешние зависимости через VCS (при необходимости):
vcs import . < rbs_teleop/repos/aubo.repos
- Установите системные зависимости и зависимости ROS:
rosdep install --from-paths . -iry
- Соберите workspace:
cd ~/ws
colcon build --symlink-install
source install/setup.bash
Базовая настройка
Минимальный пример параметров для геймпада (DualShock 4) с публикацией Twist:
virtual_frame_controller:
ros__parameters:
provider_type: joy
controller_type: dualshock4
base_link: base_link
ee_link: tool0
use_ee_frame: false
twist_gain_array: [6.0, 6.0, 6.0, 10.0, 10.0, 10.0]
twist_topic: cartesian_twist_controller/target_twist
pose_topic: cartesian_motion_controller/target_frame
use_gripper: true
gripper_open_length: 0.025
gripper_joint_names: ["right_finger_joint"]
Пример для GELLO, построения JointTrajectory и публикации gello/joint_states:
virtual_frame_controller:
ros__parameters:
provider_type: "rbs_teleop_provider/GelloProvider"
joint_trajectory_topic: joint_trajectory_controller/joint_trajectory
gello_provider:
joint_names: [shoulder_joint, upperArm_joint, foreArm_joint, wrist1_joint, wrist2_joint, wrist3_joint]
topic_name: "/gello/joint_states"
# com_port: "/dev/serial/by-id/..." # опционально, авто‑детект
# joint_signs: [1,1,1,1,1,1]
# best_offsets: [0,0,0,0,0,0]
Полный перечень параметров: docs/SETTINGS.md
Все настройки
Полная справка по параметрам и топикам: docs/SETTINGS.md
Запуск и использование
- Локально с геймпадом:
- Запустите драйвер геймпада, публикующий
sensor_msgs/Joy(например,joy/joy_linux). - Запустите контроллер:
ros2 run virtual_frame_controller vfc_node \ --ros-args \ -p provider_type:=joy -p controller_type:=dualshock4 \ -p base_link:=base_link -p ee_link:=tool0 -p use_ee_frame:=false
- Запустите драйвер геймпада, публикующий
- С плагином GELLO и демонстрацией (launch):
ros2 launch virtual_frame_controller virtual_frame_controller.launch.py \ provider_type:=rbs_teleop_provider/GelloProvider \ parameters_file:=$(ros2 pkg prefix virtual_frame_controller)/share/virtual_frame_controller/config/parameters.yaml - RViz панель:
- Откройте
rviz2, добавьте дисплей «TeleopDisplay» (пакетrbs_rviz_plugins). - Выберите топики:
robot_description,Leader JointState(например,/gello/joint_states) иFollower JointState(/joint_states).
- Откройте
- Удалённое телеуправление через Zenoh: см. zenoh_run.md
