VLMotion is a ROS2-based vision-language robot control system that integrates two main packages: VLPoint and VLServo.
VLMotion/
├── docker/ # Docker container configuration
│ ├── Dockerfile
│ ├── docker-compose.yml
│ ├── build.sh # Build Docker image
│ ├── run.sh # Start Docker container
│ └── stop.sh # Stop Docker container
├── ros2_ws/ # ROS2 workspace
│ └── src/
│ └── vlpoint/ # VLPoint package (controller and worker)
└── environment.sh # Environment setup script
Clone Repository
git clone git@github.com:hrc-pme/VLMotion.git
cd VLMotion
For an existing local repository, update to the latest version:
cd VLMotion
git pull origin main
SSH access to the hrc-pme/VLMotion repository must be configured on the local machine before cloning.
Build Docker Image
cd docker
./build.sh
Start Docker Container
./run.sh
Build ROS2 Packages Inside the Container
cd /workspace/ros2_ws
colcon build --symlink-install
Reload the Environment After Building
source /workspace/environment.sh [ROS_DOMAIN_ID]
ROS_DOMAIN_ID is optional, defaults to 0, valid range: 0-232The VLPoint package contains two main components: controller and worker.
ros2 launch vlpoint controller.launch.py
ros2 launch vlpoint worker.launch.py
The initial training setup uses 100 images sampled evenly from 20 different scene groups. Each image retains all associated annotations, such as up and down, resulting in 200 training and validation records in total.
Run on the host:
docker exec -it vlmotion bash
Inside the container, verify the GPU and training data:
cd /workspace
python3 -c 'import torch; print(torch.cuda.is_available(), torch.cuda.get_device_name(0))'
find training_vlmotion_100/images -type f | wc -l
The output should include True, the GPU name, and an image count of 100.
cd /workspace
mkdir -p logs checkpoints
set -o pipefail
bash scripts/train_vlmotion.sh 2>&1 | tee logs/vlmotion-train.log
On the first run, the base model, CLIP, and SAM3 are downloaded to /workspace/.cache/huggingface. The corresponding location on the host is /home/alan/VLMotion/.cache/huggingface.
The training script directly uses the existing model code in /workspace/ros2_ws/src/vlpoint. vlpoint remains the existing ROS package name, while the public training scripts and outputs consistently use the vlmotion name.
Default training configuration:
5e-5/workspace/checkpoints/vlmotionIf the output directory already contains a checkpoint-* directory, running the same command again automatically resumes training.
In another terminal, run:
docker exec -it vlmotion bash
tail -f /workspace/logs/vlmotion-train.log
You can also run nvidia-smi on the host. To stop training, press Ctrl-C in the training terminal. Any checkpoints that have already been written are preserved.
After /workspace/checkpoints/vlmotion/done.md appears, run:
cd /workspace
bash scripts/merge_vlmotion.sh
The merged model is written to /workspace/checkpoints/vlmotion-merged. The merge loads the 13B model in FP16, so stop other GPU workloads first.
Set parameters before the command. For example, to run a 10-step smoke test:
cd /workspace
OUTPUT_DIR=/workspace/checkpoints/vlmotion-smoke \
MAX_STEPS=10 \
SAVE_STEPS=10 \
bash scripts/train_vlmotion.sh
Do not reuse the smoke-test output directory for a full training run.
cd ros2_ws
colcon build --symlink-install --packages-select vlpoint vlservo
source install/setup.bash
cd ros2_ws
rm -rf build/ install/ log/
Apache-2.0
9 commits
Python
93.0%
C++
4.1%
Shell
1.6%
VLMotion is a ROS2-based vision-language robot control system that integrates two main packages: VLPoint and VLServo.
VLMotion/
├── docker/ # Docker container configuration
│ ├── Dockerfile
│ ├── docker-compose.yml
│ ├── build.sh # Build Docker image
│ ├── run.sh # Start Docker container
│ └── stop.sh # Stop Docker container
├── ros2_ws/ # ROS2 workspace
│ └── src/
│ └── vlpoint/ # VLPoint package (controller and worker)
└── environment.sh # Environment setup script
Clone Repository
git clone git@github.com:hrc-pme/VLMotion.git
cd VLMotion
For an existing local repository, update to the latest version:
cd VLMotion
git pull origin main
SSH access to the hrc-pme/VLMotion repository must be configured on the local machine before cloning.
Build Docker Image
cd docker
./build.sh
Start Docker Container
./run.sh
Build ROS2 Packages Inside the Container
cd /workspace/ros2_ws
colcon build --symlink-install
Reload the Environment After Building
source /workspace/environment.sh [ROS_DOMAIN_ID]
ROS_DOMAIN_ID is optional, defaults to 0, valid range: 0-232The VLPoint package contains two main components: controller and worker.
ros2 launch vlpoint controller.launch.py
ros2 launch vlpoint worker.launch.py
The initial training setup uses 100 images sampled evenly from 20 different scene groups. Each image retains all associated annotations, such as up and down, resulting in 200 training and validation records in total.
Run on the host:
docker exec -it vlmotion bash
Inside the container, verify the GPU and training data:
cd /workspace
python3 -c 'import torch; print(torch.cuda.is_available(), torch.cuda.get_device_name(0))'
find training_vlmotion_100/images -type f | wc -l
The output should include True, the GPU name, and an image count of 100.
cd /workspace
mkdir -p logs checkpoints
set -o pipefail
bash scripts/train_vlmotion.sh 2>&1 | tee logs/vlmotion-train.log
On the first run, the base model, CLIP, and SAM3 are downloaded to /workspace/.cache/huggingface. The corresponding location on the host is /home/alan/VLMotion/.cache/huggingface.
The training script directly uses the existing model code in /workspace/ros2_ws/src/vlpoint. vlpoint remains the existing ROS package name, while the public training scripts and outputs consistently use the vlmotion name.
Default training configuration:
5e-5/workspace/checkpoints/vlmotionIf the output directory already contains a checkpoint-* directory, running the same command again automatically resumes training.
In another terminal, run:
docker exec -it vlmotion bash
tail -f /workspace/logs/vlmotion-train.log
You can also run nvidia-smi on the host. To stop training, press Ctrl-C in the training terminal. Any checkpoints that have already been written are preserved.
After /workspace/checkpoints/vlmotion/done.md appears, run:
cd /workspace
bash scripts/merge_vlmotion.sh
The merged model is written to /workspace/checkpoints/vlmotion-merged. The merge loads the 13B model in FP16, so stop other GPU workloads first.
Set parameters before the command. For example, to run a 10-step smoke test:
cd /workspace
OUTPUT_DIR=/workspace/checkpoints/vlmotion-smoke \
MAX_STEPS=10 \
SAVE_STEPS=10 \
bash scripts/train_vlmotion.sh
Do not reuse the smoke-test output directory for a full training run.
cd ros2_ws
colcon build --symlink-install --packages-select vlpoint vlservo
source install/setup.bash
cd ros2_ws
rm -rf build/ install/ log/
Apache-2.0
9 commits
Python
93.0%
C++
4.1%
Shell
1.6%