mirror of
https://github.com/soconnor0919/hristudio.git
synced 2026-05-08 05:48:56 -04:00
6.7 KiB
6.7 KiB
HRIStudio Mock Robot Simulation
This directory contains a mock robot server for simulating NAO6 robot connections without a physical robot.
Quick Start
Option 1: Standalone Mock Server (Recommended for testing)
cd scripts/mock-robot
bun install
bun dev
This starts the mock robot WebSocket server on ws://localhost:9090.
Option 2: Docker Compose Mock Mode
cd nao6-hristudio-integration
docker compose -f docker-compose.yml -f docker-compose.mock.yml --profile mock up -d
Option 3: Client-Side Simulation (No server needed)
Enable simulation mode in the wizard interface:
- Set
NEXT_PUBLIC_SIMULATION_MODE=truein your.envfile - Or use the simulation toggle in the UI
Architecture
┌─────────────────────────────────────────────────────────────┐
│ HRIStudio Platform │
├─────────────────────────────────────────────────────────────┤
│ Wizard Interface (Browser) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ wizard-ros-service.ts │ │
│ │ ├── simulationMode: true → Simulates locally │ │
│ │ └── simulationMode: false → Connects to server │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ┌────────────┴────────────┐ │
│ │ │ │
│ Real Mode Simulation Mode │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Mock Robot │ │ Local JS │ │
│ │ WebSocket │ │ Simulation │ │
│ │ Server │ │ (No server) │ │
│ └─────────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────────┘
Mock Robot Server Protocol
The mock server implements the rosbridge WebSocket protocol:
Supported Operations
| Operation | Description |
|---|---|
subscribe |
Subscribe to a topic |
unsubscribe |
Unsubscribe from a topic |
publish |
Publish a message to a topic |
call_service |
Call a ROS service |
advertise |
Advertise a topic |
unadvertise |
Stop advertising a topic |
Simulated Topics
| Topic | Type | Description |
|---|---|---|
/joint_states |
sensor_msgs/JointState |
Joint positions (26 joints) |
/naoqi_driver/battery |
naoqi_bridge_msgs/Battery |
Battery status (85%) |
/bumper |
naoqi_bridge_msgs/Bumper |
Bumper contact sensors |
/hand_touch |
naoqi_bridge_msgs/HandTouch |
Hand touch sensors |
/head_touch |
naoqi_bridge_msgs/HeadTouch |
Head touch sensors |
/sonar/left |
sensor_msgs/Range |
Left sonar distance |
/sonar/right |
sensor_msgs/Range |
Right sonar distance |
Simulated Services
| Service | Response |
|---|---|
/naoqi_driver/get_robot_info |
{ robotName: "MOCK-NAO6", robotVersion: "6.0" } |
/naoqi_driver/get_joint_names |
List of 26 joint names |
/naoqi_driver/get_position |
Current position { x, y, theta } |
/naoqi_driver/is_waking_up |
{ is_waking_up: false } |
Supported Actions
| Action | Parameters | Description |
|---|---|---|
say_text |
text |
Speak text |
walk_forward |
speed |
Walk forward |
walk_backward |
speed |
Walk backward |
turn_left |
speed |
Turn left |
turn_right |
speed |
Turn right |
stop |
- | Stop all movement |
move_head |
yaw, pitch, speed |
Move head |
Configuration
Environment Variables
# Mock Robot Server (scripts/mock-robot)
MOCK_ROBOT_PORT=9090 # WebSocket port
MOCK_PUBLISH_INTERVAL=100 # Sensor update interval (ms)
# HRIStudio Client
NEXT_PUBLIC_SIMULATION_MODE=true # Enable client-side simulation
NEXT_PUBLIC_ROS_BRIDGE_URL=ws://localhost:9090
Testing
1. Start Mock Server
cd scripts/mock-robot
bun dev
2. Start HRIStudio
cd hristudio
bun dev
3. Test Connection
Visit http://localhost:3000/nao-test and click "Connect". You should see:
- Connection status:
connected - Battery: ~85%
- Joint states updating
- Log messages showing subscriptions
4. Test Actions
Use the wizard interface to test:
- Speech actions
- Movement actions
- Head control
Troubleshooting
"Connection timeout" error
- Ensure mock server is running:
curl ws://localhost:9090 - Check port is correct (default 9090)
"Not connected to ROS bridge" error
- Enable simulation mode:
NEXT_PUBLIC_SIMULATION_MODE=true - Or connect to mock server first
Actions not executing
- Check connection status in wizard interface
- Enable simulation mode if using client-side simulation
Files
| File | Description |
|---|---|
scripts/mock-robot/src/server.ts |
TypeScript mock server |
scripts/mock-robot/server.js |
JavaScript mock server (for Docker) |
src/lib/ros/wizard-ros-service.ts |
Client with simulation mode |
src/hooks/useWizardRos.ts |
React hook with simulation support |
docker-compose.mock.yml |
Docker mock service |
robot-plugins/plugins/nao6-mock.json |
Mock NAO6 plugin |
Development
Adding New Simulated Actions
- Edit
scripts/mock-robot/src/server.ts - Add handler in
handlePublish()orhandleServiceCall() - Update
nao6-mock.jsonplugin with new action definition
Adding New Simulated Sensors
- Edit
scripts/mock-robot/src/server.ts - Add topic publishing in
publishRobotState() - Update subscriber topics in
WizardRosService.subscribeToRobotTopics()