Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
261 commits
Select commit Hold shift + click to select a range
55c8499
add board tile definitions for Board 1/2/3
LayNoah Apr 23, 2026
ad0c82d
add Chance and Community Chest decks with structured effects
LayNoah Apr 23, 2026
f7095b7
add property card templates and renderer
LayNoah Apr 23, 2026
7a1661d
restructure PRDs contract-first with key decisions integrated
LayNoah Apr 23, 2026
9072749
align Board 3 with physical drawio layout (3x5 rectangle)
LayNoah Apr 23, 2026
691285e
add development checklist (PRD section 16) operationalising milestones
LayNoah Apr 23, 2026
6ce9f45
scaffold FastAPI app with adapter stubs and JSON logger (M0)
LayNoah Apr 23, 2026
fc9a4d2
add Docker compose setup (M0)
LayNoah Apr 23, 2026
665665a
add ROS 2 node skeleton with lazy rclpy init (M0)
LayNoah Apr 23, 2026
8d4e1ac
add placeholder landing page with adapter mode badges (M0)
LayNoah Apr 23, 2026
edccd62
check off M0 items in PRD development checklist
LayNoah Apr 23, 2026
bb94bac
add game engine core for Board 3 smoke path (M1)
LayNoah Apr 23, 2026
2291fa8
add GameManager and Board 3 API surface (M1)
LayNoah Apr 23, 2026
f990407
stream FSM events over WebSocket /api/stream/game (M1)
LayNoah Apr 23, 2026
373e58c
add Board 3 E2E smoke test against in-process ASGI (M1)
LayNoah Apr 23, 2026
9442d3d
add Board 3 UI with live piece tracking (M1)
LayNoah Apr 23, 2026
ae946d5
add doc/running.md — command reference for local dev, docker, tests
LayNoah Apr 23, 2026
28b424f
survive missing RMW implementation in containers and dev machines
LayNoah Apr 23, 2026
3e7f0a8
add property state model and rent computation (M2)
LayNoah Apr 23, 2026
ac6afaf
add Chance/Community Chest decks and structured effect dispatcher (M2)
LayNoah Apr 23, 2026
74f2537
add resolve_tile routing + property transactions + bankruptcy (M2)
LayNoah Apr 23, 2026
b8ae2f6
expose property, money, effects endpoints and stream aliases (M2)
LayNoah Apr 23, 2026
cac7e23
add Board 1/2 visuals, money widget, property sidebar and decision mo…
LayNoah Apr 23, 2026
e5241de
add Board 1 scenario tests and tick off M2 in PRD
LayNoah Apr 23, 2026
431f440
resize Board 1 to 16 tiles and align pieces with the physical image
LayNoah Apr 23, 2026
2e5a61a
credit start bonus when a player passes GO (B1 fix)
LayNoah Apr 23, 2026
2726061
gate go_to_jail in_jail flag to boards with jail FSM (B2 fix)
LayNoah Apr 23, 2026
dbc8656
minimise auto-liquidation overshoot and narrate it on the bus (B3 fix)
LayNoah Apr 23, 2026
6ce06f4
return 400 instead of 500 when /api/effects/* misses a field (B4 fix)
LayNoah Apr 23, 2026
f9d7716
double Board 1 rent via monopoly bonus and retire the transient jail …
LayNoah Apr 23, 2026
edf1f01
hide the phantom "+ 0" when only one die was rolled
LayNoah Apr 23, 2026
0265c95
deliver M3: camera WS/REST proxy + Isaac card-spawn topic, add /api/m…
LayNoah Apr 24, 2026
d8869dd
refresh UX: reset-on-start, Reset button, Board 3 top-left clockwise,…
LayNoah Apr 24, 2026
5e914ef
harden docker + ci_local launchers against port/node ghosts
LayNoah Apr 24, 2026
b74fe53
bump PRD to v0.3: M3 delivery, reset semantics, /api/modes, docker hy…
LayNoah Apr 24, 2026
949e0bd
add VLM inference for Monopoly board state
kyoungje Apr 24, 2026
fb94355
update system prompt and show image queried
kyoungje Apr 26, 2026
1e12715
update whiteboards
LayNoah Apr 27, 2026
9fb3ddf
update the system prompt
kyoungje Apr 27, 2026
bc98711
- Drop hard-coded city/grid mapping from the system prompt so the VLM…
LayNoah Apr 27, 2026
4a8fe86
change default value in ui
LebahGanteng88 Apr 29, 2026
ecf8335
default position good
LebahGanteng88 Apr 29, 2026
7a91b77
Merge pull request #4 from movensys/hotfix/joint1-dobot-cr3a-issue
LayNoah Apr 29, 2026
8650695
change vel and acc scale service name
LebahGanteng88 Apr 29, 2026
da50aa9
Merge pull request #5 from movensys/test/dobot-cr3a-trajectory-test
LayNoah Apr 29, 2026
af6ee8d
add image and fix bugs
LayNoah Apr 29, 2026
4801fb7
fix link
LayNoah Apr 29, 2026
48bbbf8
change docker sed
LebahGanteng88 Apr 30, 2026
cb4235b
Merge pull request #6 from movensys/fix/humble-docker-setup
LayNoah Apr 30, 2026
8e92cb2
Merge pull request #7 from movensys/feature/vlm-inference
LebahGanteng88 Apr 30, 2026
b4a3b67
Merge branch 'devel' into feature/monopoly
LebahGanteng88 Apr 30, 2026
7b86457
Merge pull request #8 from movensys/feature/monopoly
LebahGanteng88 Apr 30, 2026
2dad595
add vLLM docker setup for Gemma 4 on Jetson Thor
kyoungje May 3, 2026
1e2a492
add xpu container, not tested due to PTL memory size
kyoungje May 3, 2026
f1f554d
add yolo_detection
LayNoah May 4, 2026
000a2c9
good dice pnp
LayNoah May 5, 2026
1589480
explain building from source code for now
kyoungje May 6, 2026
4f5934e
add whisper-npu service and standardize vLLM on port 9000
kyoungje May 6, 2026
dd70b9d
add whisper-thor service alongside whisper-npu
kyoungje May 6, 2026
4dfd367
switch whisper-npu to movensys fp16 IR for OV 2026
kyoungje May 7, 2026
a7e1fc0
add pick and place REST API client code
LayNoah May 7, 2026
508ec1e
fix position
LayNoah May 7, 2026
f00a150
make readable
LayNoah May 8, 2026
bf9c6e1
change revise the directory structure and eliminate debugging module …
LayNoah May 8, 2026
ccf022c
Merge pull request #10 from movensys/feature/pick_and_place
LebahGanteng88 May 8, 2026
57e5825
add board
LayNoah May 8, 2026
df5b9cc
document vllm/whisper docker setup and panther lake host-build path i…
kyoungje May 8, 2026
6f33b43
Merge pull request #11 from movensys/feature/vllm-thor-docker
kyoungje May 8, 2026
4bdef78
fix the game
LayNoah May 8, 2026
bf684ee
good board
LayNoah May 9, 2026
24c5fbe
update board
LayNoah May 10, 2026
0b720e8
good pick and place
LayNoah May 10, 2026
8bd4df2
update pos
LayNoah May 11, 2026
2de96ec
remove unnecessary part
LebahGanteng88 May 11, 2026
fcbdf57
change to movensys_vlm
LebahGanteng88 May 11, 2026
843ecb4
add old change
LebahGanteng88 May 11, 2026
8bb1f00
separate intel and nvidia dockerfile
LebahGanteng88 May 11, 2026
530c43a
update the board size to 4 by 5
LayNoah May 11, 2026
40136c4
dedicated vlm page
LebahGanteng88 May 11, 2026
c547e3f
add chat only feature
LebahGanteng88 May 11, 2026
6f80ec1
delete whisper docker
LebahGanteng88 May 11, 2026
24751ff
add intel gpu vllm
LebahGanteng88 May 11, 2026
cf7e559
Merge pull request #12 from movensys/refactor/monopoly
LebahGanteng88 May 11, 2026
5daa296
fix position
mohsinarf May 11, 2026
d36d14b
add Whisper STT to Ask VLM query panel
kyoungje May 11, 2026
26539d7
fix gemma4 on intel arc pro b60
LebahGanteng88 May 11, 2026
1b08237
update docker file
mohsinarf May 12, 2026
e2acbf7
Merge pull request #14 from movensys/feature/whisper-stt-query
LayNoah May 12, 2026
fe57daf
Merge branch 'devel' into refactor/restructure-vllm
LebahGanteng88 May 12, 2026
688cdf6
fix ci process
LebahGanteng88 May 12, 2026
29e5a8d
rever partial ci process
LebahGanteng88 May 12, 2026
fe6f5ef
add whisper docker
LebahGanteng88 May 12, 2026
0fb74b2
add whisper client server
LebahGanteng88 May 12, 2026
7124e45
modify whisper frontend
LebahGanteng88 May 12, 2026
9607bad
cahnge env variable name
LebahGanteng88 May 12, 2026
459ab12
fix position
mohsinarf May 12, 2026
404cd2c
Merge pull request #15 from movensys/test/monopoly-demo
mohsinarf May 12, 2026
e97d3b9
add whisper at frontend
mohsinarf May 12, 2026
2d905b6
good real, good frontend <-> pnp, rolling dice
mohsinarf May 12, 2026
85aed37
Merge pull request #16 from movensys/preparation/consolidated-demo
LayNoah May 12, 2026
a2f0e1e
separate nvidia and intel whispher model
LebahGanteng88 May 12, 2026
8184f5d
separate nvidia and intel for movensys_vlm
mohsinarf May 12, 2026
12343c9
remove prds.
LayNoah May 12, 2026
62ddbd6
reduce memory for intel-panther lake
mohsinarf May 12, 2026
bba8a4a
uncomment npu for panther lake
mohsinarf May 12, 2026
fc0eca3
change a directory name, change to support simulation
LayNoah May 12, 2026
6e13f1e
remove unnessary property cards
LayNoah May 12, 2026
0f2f6bf
fix again
LayNoah May 12, 2026
0882848
fallback search mechanism added
mohsinarf May 12, 2026
1d758ae
add vllm intel build and run sh
mohsinarf May 12, 2026
5189d71
fix triton setup
mohsinarf May 12, 2026
0e154d4
intel panther lake is working well
mohsinarf May 13, 2026
8e131d7
Merge pull request #17 from movensys/refactor/restructure-vllm-and-wh…
kyoungje May 13, 2026
57c1962
update manual positions
LayNoah May 13, 2026
5edc74d
add documents
LayNoah May 13, 2026
aa36285
rename docs
LayNoah May 13, 2026
f4e5691
make save load toggles
LayNoah May 13, 2026
ad942d8
time out added
mohsinarf May 13, 2026
bd5f85e
Merge pull request #18 from movensys/feature/fallback_search_mechanism
LayNoah May 13, 2026
948d7ac
try to fix
LayNoah May 14, 2026
8f8a318
Merge branch 'devel' into enhance/support_robopoly_sim_real
LayNoah May 14, 2026
3986ed0
Merge pull request #19 from movensys/enhance/support_robopoly_sim_real
LayNoah May 14, 2026
2829cac
fix the PR issue
LayNoah May 14, 2026
52fb7e4
add db vector
LebahGanteng88 May 14, 2026
22c161c
vector db running well
LebahGanteng88 May 14, 2026
5b1d9a9
add clear memory button
LebahGanteng88 May 14, 2026
4b48d1c
connect everything to vlm_container
LebahGanteng88 May 14, 2026
3a89631
change everything to use vlm_container API
LebahGanteng88 May 14, 2026
0b8155f
repair readme
LebahGanteng88 May 14, 2026
b59aac6
repair the user interface
LebahGanteng88 May 14, 2026
e5d9f44
fix memory size issue
LebahGanteng88 May 14, 2026
41fd44d
add api explanation
LebahGanteng88 May 14, 2026
7cb9e35
delete color group
LebahGanteng88 May 14, 2026
bd18ceb
simplify build game
LebahGanteng88 May 14, 2026
447fde6
add game logic
LebahGanteng88 May 14, 2026
1f98094
reduce game logic
LebahGanteng88 May 14, 2026
9b504ac
simplify game rule
LebahGanteng88 May 14, 2026
e0efc16
modify game rules
LebahGanteng88 May 15, 2026
9690cfe
simplify game ui and flow
LebahGanteng88 May 15, 2026
86da617
modify the ui
LebahGanteng88 May 15, 2026
5eb5953
add vlm as player
LebahGanteng88 May 15, 2026
02e9e5f
add vlm to play a game
LebahGanteng88 May 15, 2026
645e10c
use vlm action
LebahGanteng88 May 15, 2026
776eb7a
skip the jail
LebahGanteng88 May 15, 2026
0eea83c
add game logic to vlm
LebahGanteng88 May 15, 2026
2a254bb
vlm can ge board image data
LebahGanteng88 May 15, 2026
d0a9965
add solution for jetson thor memory stuck
LebahGanteng88 May 15, 2026
a30ba54
fix intel PTL port issue
mohsinarf May 15, 2026
d89cb2f
setup work in jetson thor
LebahGanteng88 May 15, 2026
b0fa1b2
add auto truncate
mohsinarf May 15, 2026
2794546
Merge branch 'feature/robopoly-player' into feature/add-vector-db
LebahGanteng88 May 15, 2026
bbd47fb
Merge pull request #23 from movensys/feature/add-vector-db
kyoungje May 15, 2026
0b08809
Merge pull request #24 from movensys/feature/add-vector-db
kyoungje May 15, 2026
4bc3a2a
update running doc
LayNoah May 15, 2026
8fbc299
Merge pull request #25 from movensys/feature/vlm-as-player
LebahGanteng88 May 17, 2026
5458d6e
repair md file
mohsinarf May 17, 2026
9192674
skip memory recall/store on image inferences so per-frame calls can't…
mohsinarf May 18, 2026
2189f59
gate memory on chat-only path, cap stored notes, move store off the r…
mohsinarf May 18, 2026
4571a98
guard against None content in vlm_client.infer
mohsinarf May 18, 2026
f859dab
add MOVENSYS_PNP_DRY_RUN to skip arm motion for testing
kyoungje May 18, 2026
29cabf6
drop redundant prompt key from memory metadata
mohsinarf May 18, 2026
81f78a7
fallback
LebahGanteng88 May 18, 2026
cdd7508
Merge branch 'feature/robopoly-player' into feature/testing_real_fall…
mohsinarf May 18, 2026
e3a6877
Merge pull request #26 from movensys/feature/testing_real_fallback
LayNoah May 18, 2026
640d72d
Capture real base line
mohsinarf May 18, 2026
428f44f
read me added
mohsinarf May 18, 2026
f723215
tuning vlm in PTL
mohsinarf May 18, 2026
3661b9a
docker + DRY RUN is supported for robopoly
LayNoah May 18, 2026
50c3f0d
update doc
LayNoah May 18, 2026
3420f41
redundent sleep removed
mohsinarf May 18, 2026
c8d34a7
fine tuned values
mohsinarf May 18, 2026
73a870c
two step approach removed
mohsinarf May 18, 2026
13fafdc
Reapplied two step pickup and dropoff
mohsinarf May 18, 2026
cc884a6
add STT service
LayNoah May 18, 2026
565c5d1
Merge pull request #27 from movensys/feature/speedup-pick-and-place
LayNoah May 18, 2026
2b795e8
Merge pull request #20 from movensys/feature/add-vector-db
kyoungje May 18, 2026
819a1b8
game board is updated
LayNoah May 18, 2026
7163e77
add Phoenix tracing for VLM/Whisper troubleshooting
kyoungje May 18, 2026
6388f70
Merge pull request #28 from movensys/feature/robopoly-STT-chatting
LayNoah May 19, 2026
3b656f1
Merge branch 'devel' into feature/robopoly-player
LebahGanteng88 May 19, 2026
b8e62fc
fix movements bugs for new board
LayNoah May 19, 2026
f730ab3
Merge pull request #30 from movensys/feature/robopoly-STT-chatting
LayNoah May 19, 2026
186a43c
modify md files
LebahGanteng88 May 19, 2026
e6dbdb0
waiting robot drop the dice before read it
LebahGanteng88 May 19, 2026
4091e52
can move property pos
LayNoah May 19, 2026
c73f849
separate user and robot turn flow
LebahGanteng88 May 19, 2026
7954b6b
add game mode
LayNoah May 19, 2026
ee98276
update more smoother
LayNoah May 19, 2026
b7f289f
add bug notification for not moving
LebahGanteng88 May 19, 2026
cb522c7
Merge pull request #31 from movensys/enhance/seperate_debug_mode_game…
LayNoah May 19, 2026
0081da8
Merge pull request #32 from movensys/fix/game-flow-bugs
LayNoah May 19, 2026
911f35d
fix thank you hallucination / fix to buy hotel, house, land in user side
LayNoah May 19, 2026
150a2ce
reduce system promt and inline cmd
LayNoah May 19, 2026
4585275
Merge pull request #33 from movensys/enhance/seperate_debug_mode_game…
LayNoah May 19, 2026
f22de07
fix restart bug when user click game mode
LayNoah May 19, 2026
251bc14
Merge pull request #34 from movensys/enhance/seperate_debug_mode_game…
LayNoah May 19, 2026
2a3f3e9
fix Phoenix tracing to export to standalone collector
kyoungje May 19, 2026
067d1e9
Merge branch 'feature/robopoly-player' into feature/phoenix-tracing
kyoungje May 19, 2026
7cd4a96
Merge pull request #35 from movensys/feature/phoenix-tracing
kyoungje May 19, 2026
58ff28d
reduce image quality and system prompt
LebahGanteng88 May 20, 2026
20cd0e8
increase whisper language in english
LebahGanteng88 May 20, 2026
4d8c7d9
tested in the simulation
LebahGanteng88 May 20, 2026
1202e2a
update .env file
LayNoah May 20, 2026
de02e1a
update docs
LayNoah May 20, 2026
b98ea33
update documents
LayNoah May 20, 2026
1f6a1b6
fix vlm bugs in the game
LebahGanteng88 May 21, 2026
315239e
avoid last cache in dry run test
LebahGanteng88 May 21, 2026
798b721
remove bugs for fail movement and stuck in buy hotel
LebahGanteng88 May 21, 2026
f85fcd7
make robot use strategic buy
LebahGanteng88 May 21, 2026
a66b6bc
skipping desert tile
LebahGanteng88 May 21, 2026
dc54a4a
fix docs and manual poses
mohsinarf May 21, 2026
0b41d73
Merge pull request #36 from movensys/feature/showing_yolo_vision_duri…
LayNoah May 21, 2026
654cff1
update docs and add rgb features
mohsinarf May 21, 2026
81ac127
showing yolo detection img is good.
mohsinarf May 21, 2026
204489f
good
mohsinarf May 21, 2026
d77a853
showing yolo & chance card event is good.
mohsinarf May 21, 2026
d633e56
add auto dry test
LebahGanteng88 May 22, 2026
207169b
test 10 times running
LebahGanteng88 May 22, 2026
c73d4bd
fix minor bugs
LebahGanteng88 May 22, 2026
46c4ba2
include vlm in the dry test
LebahGanteng88 May 22, 2026
cb744e6
Reduce laps 5 → 3
LayNoah May 22, 2026
de3283e
Reduce laps 3 to 2
LayNoah May 22, 2026
4d7a340
fix stuck move
LebahGanteng88 May 22, 2026
fc3ab6a
Merge pull request #37 from movensys/fix/increase_game_speed
LayNoah May 22, 2026
fbef36d
update docs for SOP and fix rondon cell's destination position
LayNoah May 23, 2026
d0d40ef
support easy running method
LayNoah May 24, 2026
501158f
fix docs
LayNoah May 24, 2026
7297743
fix the path issue
mohsinarf May 25, 2026
9a68373
Merge pull request #38 from movensys/fix/running_script_real
mohsinarf May 25, 2026
a1aa738
Merge pull request #29 from movensys/feature/robopoly-player
mohsinarf May 25, 2026
421bfc7
rotat 180 degree
LebahGanteng88 May 26, 2026
0cf9406
add target spawn in isaacsim
LebahGanteng88 May 26, 2026
008128f
repair robopoly doc
LebahGanteng88 May 28, 2026
9afb885
add lint and unit test
LebahGanteng88 May 28, 2026
073f3cc
simplify run_robopoly.sh
LebahGanteng88 May 28, 2026
37eb895
fix based on lint and unit test
LebahGanteng88 May 28, 2026
bda06ef
repair based on unit test and lint test
LebahGanteng88 May 28, 2026
2faaec2
repair readme
LebahGanteng88 May 28, 2026
d8408af
update poses
mohsinarf Jun 1, 2026
130b16e
Merge pull request #40 from movensys/fix/predefined_pose
LayNoah Jun 1, 2026
72adb8a
Merge pull request #39 from movensys/release/release-0.2-rc1
kyoungje Jun 9, 2026
1f389f4
Merge pull request #41 from movensys/feature/spawn-dice-and-pieces-is…
kyoungje Jun 9, 2026
86da413
fix mic gain in the driver level.
mohsinarf Jun 10, 2026
d45169f
fix running script
LayNoah Jun 10, 2026
64c80f7
update docs
LayNoah Jun 10, 2026
b619018
Update running.md
LayNoah Jun 11, 2026
a238acb
Merge pull request #42 from movensys/fix/bugs_after_Taipei
kyoungje Jun 12, 2026
0e7e322
remove vectordb, phoenix to reduce memory usage
LayNoah Jun 16, 2026
572b225
Merge pull request #43 from movensys/fix/running_script
kyoungje Jun 16, 2026
220d543
delete due to need live FastAPI
LebahGanteng88 Jul 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions .flake8
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
[flake8]
max-line-length = 100
extend-ignore =
E203,
E501,
W503,
E402,
# B008: false positive on FastAPI's Depends()/File()/Query()/Form() defaults
B008
exclude =
.git,
__pycache__,
.venv,
build,
dist,
movensys_vlm/models,
movensys_sample/movensys_vlm,
movensys_sample/.venv
per-file-ignores =
movensys_sample/movensys_robopoly/tests/game/test_rules_m2.py:F821,F841
45 changes: 45 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: Lint

on:
pull_request:
branches: [main, devel]

defaults:
run:
shell: bash

jobs:
lint:
name: flake8 (${{ matrix.python-version }} / ${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-22.04
python-version: '3.10'
- os: ubuntu-24.04
python-version: '3.12'

steps:
- uses: actions/checkout@v4

- name: Setup Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Install flake8
run: |
python -m pip install --upgrade pip
python -m pip install flake8 flake8-bugbear

- name: flake8 movensys_sample/movensys_robopoly
run: |
flake8 movensys_sample/movensys_robopoly \
--exclude=.venv,__pycache__,build,dist

- name: flake8 movensys_vlm
run: |
flake8 movensys_vlm \
--exclude=.venv,__pycache__,models,static
65 changes: 65 additions & 0 deletions .github/workflows/movensys-intelligence.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
name: CI - movensys_vlm

on:
pull_request:
branches: [main, devel]
paths:
- 'movensys_vlm/**'

jobs:
build-and-test:
strategy:
fail-fast: false
matrix:
include:
- ros_distro: jazzy
os: ubuntu-24.04
- ros_distro: humble
os: ubuntu-22.04

runs-on: ${{ matrix.os }}

steps:
- name: Checkout
uses: actions/checkout@v4

# Pre-install ros2-apt-source pinned to a known release so setup-ros
# skips its unauthenticated api.github.com call (rate-limited on
# shared runner IPs → empty version → 404 → curl exit 22).
- name: Pre-install ros2-apt-source
run: |
set -euo pipefail
sudo apt-get update
sudo apt-get install -y --no-install-recommends curl ca-certificates lsb-release
codename=$(. /etc/os-release && echo "${UBUNTU_CODENAME:-${VERSION_CODENAME}}")
version=1.2.0
deb="ros2-apt-source_${version}.${codename}_all.deb"
curl --fail --location --retry 5 --retry-delay 3 \
-o "/tmp/${deb}" \
"https://github.com/ros-infrastructure/ros-apt-source/releases/download/${version}/${deb}"
sudo dpkg -i "/tmp/${deb}"
rm -f "/tmp/${deb}"
sudo apt-get update

- name: Setup ROS ${{ matrix.ros_distro }}
uses: ros-tooling/setup-ros@v0.7
with:
required-ros-distributions: ${{ matrix.ros_distro }}

- name: Install Python dependencies
run: |
if [ "${{ matrix.ros_distro }}" = "jazzy" ]; then
pip3 install --no-cache-dir --break-system-packages \
fastapi "uvicorn[standard]" pydantic "openai>=1.30.0" Pillow
else
pip3 install --no-cache-dir \
fastapi "uvicorn[standard]" pydantic "openai>=1.30.0" Pillow
fi

- name: Test Python syntax
run: |
for f in main.py router.py ros2_node.py; do
echo "=== syntax check: $f ==="
python3 -m py_compile ${{ github.workspace }}/movensys_vlm/$f
echo " OK"
done
101 changes: 101 additions & 0 deletions .github/workflows/unit-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
name: Unit Tests

on:
pull_request:
branches: [main, devel]

defaults:
run:
shell: bash

jobs:
robopoly:
name: pytest movensys_robopoly (${{ matrix.python-version }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-22.04
python-version: '3.10'
- os: ubuntu-24.04
python-version: '3.12'

# Stub-mode invariant: external service URLs unset so adapters use stubs.
env:
STT_SERVICE_URL: ''
LLM_SERVICE_URL: ''
ROBOT_SERVICE_URL: ''

defaults:
run:
working-directory: movensys_sample/movensys_robopoly

steps:
- uses: actions/checkout@v4

- name: Setup Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Install dependencies
run: |
python -m pip install --upgrade pip
if [ -f requirements.txt ]; then
python -m pip install -r requirements.txt
fi
python -m pip install pytest pytest-asyncio httpx

- name: Python syntax check
run: |
find . -type f -name '*.py' \
-not -path './.venv/*' \
-not -path './build/*' \
-not -path './__pycache__/*' \
-print0 | xargs -0 -n1 python -m py_compile

- name: pytest
run: |
# Exit code 5 = "no tests collected" is acceptable (all tests may be
# marked stale and skipped at module level).
rc=0
python -m pytest -v tests/ --maxfail=10 || rc=$?
if [ "$rc" != "0" ] && [ "$rc" != "5" ]; then
exit "$rc"
fi

vlm-syntax:
name: Python syntax check movensys_vlm (${{ matrix.python-version }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-22.04
python-version: '3.10'
- os: ubuntu-24.04
python-version: '3.12'

steps:
- uses: actions/checkout@v4

- name: Setup Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Install runtime dependencies
run: |
python -m pip install --upgrade pip
python -m pip install fastapi 'uvicorn[standard]' pydantic 'openai>=1.30.0' Pillow

- name: py_compile movensys_vlm Python files
run: |
for f in main.py router.py ros2_node.py memory_client.py vlm_client.py whisper_client.py whisper_server.py; do
if [ -f "movensys_vlm/$f" ]; then
echo "=== $f ==="
python -m py_compile "movensys_vlm/$f"
echo " OK"
fi
done
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
movensys_vlm/models
movensys_vlm/vllm
.venv/
155 changes: 154 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,154 @@
# movensys-intellegence
# Movensys Intelligence

Vision-language and speech intelligence layer for the
[`movensys-manipulator`](https://github.com/movensys/movensys-manipulator)
stack. Adds a FastAPI VLM service, a Whisper speech endpoint, a Qdrant
vector memory, optional Phoenix tracing, and sample applications that drive
the manipulator from natural language.

## Overview

This repository sits on top of the WMX ROS 2 manipulator stack and gives it
a higher-level reasoning layer:

- **VLM service** — FastAPI server wrapping a vLLM-hosted Gemma 4 model
with image input, exposed as REST + WebSocket. It bridges to ROS 2 so it
can call manipulator services (`MovePose`, `MoveJoints`, `GetEefPose`,
etc.) directly.
- **Whisper service** — streaming speech-to-text used to issue commands by
voice.
- **Vector memory** — Qdrant-backed long-term memory for the VLM agent.
- **Sample apps** — `movensys_robopoly`, a board-game demo where the robot
picks and places pieces under VLM control, with a YOLO + AprilTag
perception pipeline and a dry-run mode that exercises the full stack
without moving the arm.

The entire stack runs as a set of Docker compose services and supports
NVIDIA desktop GPUs, Jetson Thor, and Intel B60 / Panther Lake XPU.

## Repository Layout

```
.
├── movensys_vlm/
│ ├── main.py / router.py / ros2_node.py # FastAPI app + ROS 2 bridge
│ ├── vlm_client.py / whisper_client.py # vLLM + Whisper clients
│ ├── memory_client.py # Qdrant vector memory client
│ ├── models/ # Local model assets (Gemma, Whisper, embeddings)
│ ├── docker/ # Compose files: vllm, whisper, vectordb, vlm
│ └── doc/running.md # Step-by-step bring-up
└── movensys_sample/
└── movensys_robopoly/ # Board-game demo (FastAPI + adapters)
├── main.py / router.py
├── pick_and_place.py
├── adapters/ # robot, ros_image, stt, vlm
├── game/ # rules, manager, decks, boards
├── scripts/ # auto_play_dry_run, render helpers
└── docker/ # Compose stack
```

## Services and Ports

| Service | Default port | Purpose |
|------------------------|--------------|------------------------------------------|
| `movensys_vlm` (FastAPI) | 8000 | VLM REST/WebSocket API + ROS 2 bridge |
| `vllm` | 9000 | vLLM OpenAI-compatible inference server |
| `whisper` | 9010 | Speech-to-text server |
| `vectordb` (Qdrant) | 6333 | Long-term vector memory |
| `movensys_robopoly` | 7999 | Robopoly demo UI/API |
| `phoenix` (optional) | 6006 | OpenTelemetry/LLM traces UI |

## Requirements

- Ubuntu 22.04 or 24.04
- Docker with `docker compose`
- Hardware: NVIDIA GPU (desktop or Jetson Thor) or Intel XPU (B60 / Panther Lake)
- Local model weights placed under `movensys_vlm/models/` (Gemma 4 E2B/E4B, Whisper large-v3, embedding model)
- The [`movensys-manipulator`](https://github.com/movensys/movensys-manipulator) stack running (the VLM publishes/calls its ROS 2 services)

## Quick Start

### 1. Configure the host environment

Add the following to your `~/.bashrc`:

```
export XPU_CORE=nvidia-gpu # {nvidia-gpu, intel-xpu}
export CPU_ARCH=amd64 # {amd64, arm64}
```

```
source ~/.bashrc
```

### 2. Clone the repository

```
mkdir -p ~/workspaces
cd ~/workspaces
git clone https://github.com/movensys/movensys-intelligence.git
```

### 3. Start the VLM stack

For Nvidia desktop, Jetson Thor, or Intel B60:

```
cd ~/workspaces/movensys-intelligence/movensys_vlm/docker
COMPOSE_PROFILES=$XPU_CORE docker compose -f vllm.yaml up -d --build
COMPOSE_PROFILES=$CPU_ARCH docker compose -f vectordb.yaml up -d --build
COMPOSE_PROFILES=$XPU_CORE docker compose -f whisper.yaml up -d --build
COMPOSE_PROFILES=$XPU_CORE docker compose -f movensys_vlm.yaml up -d --build
```

For Intel Panther Lake (vLLM uses a separate build path):

```
cd ~/workspaces/movensys-intelligence/movensys_vlm/docker
./vllm-intel-build.sh
./vllm-intel-run.sh
```

Wait for `application startup complete` in the vLLM logs before continuing.

> On Jetson Thor or Intel Panther Lake, drop kernel caches between restarts
> if memory pressure builds up:
> `sync && sudo sysctl vm.drop_caches=3`

Full bring-up, teardown, and Phoenix-tracing options are documented in
[`movensys_vlm/doc/running.md`](movensys_vlm/doc/running.md).

### 4. Run a sample application

The Robopoly board-game demo drives the manipulator via the VLM stack. With
the `movensys-manipulator` YOLO simulation example running (see
[`movensys-manipulator/doc/6a_yolo_simulation.md`](https://github.com/movensys/movensys-manipulator/blob/main/doc/6a_yolo_simulation.md)):

```
export MOVENSYS_PNP_DRY_RUN=0 # set to 1 to skip arm motion
cd ~/workspaces/movensys-intelligence/movensys_sample/movensys_robopoly/docker
docker compose up -d --build
```

Open the UI on `http://localhost:7999/`, toggle `is_YOLO` on, and start a
game. Dry-run mode and the auto-play test script are described in
[`movensys_sample/doc/1a_robopoly_simulation.md`](movensys_sample/doc/1a_robopoly_simulation.md).

### Pick-and-place from the command line

```
cd ~/workspaces/movensys-intelligence
python3 movensys_sample/movensys_robopoly/pick_and_place.py red_cube GO true 2>&1 | tee baseline.log
grep '\[timing\]' baseline.log
```

## Related Repositories

- [movensys-manipulator](https://github.com/movensys/movensys-manipulator) — ROS 2 manipulator stack driven by this layer
- [movensys-simulation](https://github.com/movensys/movensys-simulation) — Isaac Sim scenes used by the demos
- [wmx-ros2](https://github.com/movensys/wmx-ros2) — Core WMX motion control packages
- [wmx-ros2-doc](https://github.com/movensys/wmx-ros2-doc) — WMX ROS 2 documentation site

## License

Released under the MIT License.
Loading
Loading