| feat(navi): replace FunASR with local sherpa-onnx + add tests
Voice control refactoring:
- Add voice_control node bridging voice_asr_service (sherpa-onnx) to
nav2_goal_client via keyword matching, replacing external FunASR
WebSocket client that required a separate server deployment
- Add hotword registration: voice_control auto-pushes keywords to
voice_asr_node at startup via SetHotwords service (ibrobot_msgs)
- Remove funasr_client_node, FunASR install/start scripts, and
python3-websockets dependency
- Clean up lekiwi_navi.yaml: replace stale funasr config with voice_asr
section; update model path to relative path
- Update voice_nav.py launch builder for voice_control node
- Update README with new architecture and ROS interface docs
lekiwi_hardware refactoring:
- Extract lekiwi_conversions.hpp (header-only) with 6 pure conversion
functions (ticks_to_radians, radians_to_ticks, steps_to_rad_s,
rad_s_to_steps, decode_motor_register, encode_homing_offset)
- Refactor lekiwi_system_hardware.cpp to use extracted functions,
removing inline conversion logic
- Add 55 gtest cases covering all conversion functions and round-trip
consistency (test_lekiwi_conversions.cpp)
Test coverage:
- Add pytest tests for voice_control (40 cases: keyword matching,
destination resolution, stop handling, hotword extraction, e2e)
- Add pytest tests for cmd_vel_bridge (IK/FK, velocity scaling,
quaternion, joint feedback, odometry integration)
- Add pytest tests for nav2_goal_client (goal dispatch, cancellation,
task description caching, timeout handling)
Also fix asr_inference_module to correctly load encoder/decoder ONNX
files for streaming paraformer model.
Signed-off-by: yanhan <yanhan31@huawei.com>
| 18 天前 |