Skip to content

Update README.md

Update README.md #146

name: trajectory-attn
on:
push:
branches:
- main
- trajectory
pull_request:
branches:
- main
workflow_dispatch:
inputs:
steps:
required: false
default: 300
policy:
required: false
default: 'data/policies/attn'
frame_size:
required: false
default: 300
line_width:
required: false
default: 2
jobs:
generate-trajectory:
runs-on: ubuntu-latest
strategy:
matrix:
agent: [biped, quadruped]
steps:
- name: Clone repo
uses: actions/checkout@v4
- name: Load algovivo refs
id: algovivo-refs
run: |
echo "src_ref=$(jq -r '.src_ref' algovivo.json)" >> $GITHUB_OUTPUT
echo "build_ref=$(jq -r '.build_ref' algovivo.json)" >> $GITHUB_OUTPUT
- name: Clone algovivo repo
uses: actions/checkout@v4
with:
repository: 'juniorrojas/algovivo'
ref: '${{ steps.algovivo-refs.outputs.src_ref }}'
path: algovivo.repo
- name: Clone algovivo build repo
uses: actions/checkout@v4
with:
repository: 'juniorrojas/algovivo'
ref: '${{ steps.algovivo-refs.outputs.build_ref }}'
path: algovivo.build.repo
- name: Copy build files
run: |
cp -r algovivo.build.repo/build algovivo.repo/build
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install uv
uses: astral-sh/setup-uv@v6
- name: Install algovivo
run: uv pip install --system "git+https://github.com/juniorrojas/algovivo.git@${{ steps.algovivo-refs.outputs.src_ref }}#subdirectory=utils/py"
- name: Generate trajectory
run: |
export PYTHONPATH=.
export ALGOVIVO_NATIVE_LIB_FILENAME=$(pwd)/algovivo.build.repo/build/native/algovivo.amd64.so
python scripts/generate_trajectory_with_attn_policy.py \
--agent data/agents/${{ matrix.agent }} \
--steps ${{ github.event.inputs.steps || 30 }} \
--policy ${{ github.event.inputs.policy || 'data/policies/attn' }} \
| tee trajectory_output.txt
# Extract info for summary
echo "${{ matrix.agent }}" > report_${{ matrix.agent }}.txt
grep -E "^steps:|x displacement|x velocity|(sim|policy|sim \+ policy|loop) steps per second" trajectory_output.txt >> report_${{ matrix.agent }}.txt
- name: Upload report
uses: actions/upload-artifact@v4
with:
path: report_${{ matrix.agent }}.txt
name: report-${{ matrix.agent }}
- name: Install ffmpeg
run: |
sudo apt-get update
sudo apt-get install ffmpeg
- name: Render trajectory frames
run: |
cd algovivo.repo
npm ci
cd ..
node algovivo.repo/utils/trajectory/renderTrajectory.js \
--mesh trajectory_attn.out/mesh.json \
--steps trajectory_attn.out/steps \
--width ${{ github.event.inputs.frame_size || 300 }} \
--height ${{ github.event.inputs.frame_size || 300 }}
- name: Make video
run: |
ffmpeg \
-framerate 30 \
-i frames.out/%d.png \
-c:v libx264 \
-profile:v high \
-crf 20 \
-pix_fmt yuv420p \
video_${{ matrix.agent }}.mp4
- name: Upload trajectory data
uses: actions/upload-artifact@v4
with:
path: trajectory_attn.out
name: trajectory-${{ matrix.agent }}
- name: Upload trajectory frames
uses: actions/upload-artifact@v4
with:
path: frames.out
name: trajectory-${{ matrix.agent }}-frames
- name: Upload video
uses: actions/upload-artifact@v4
with:
path: video_${{ matrix.agent }}.mp4
name: trajectory-${{ matrix.agent }}-video
merge-trajectories:
runs-on: ubuntu-latest
needs: generate-trajectory
steps:
- name: Download reports
uses: actions/download-artifact@v4
with:
pattern: report-*
path: reports
merge-multiple: true
- name: Generate summary
run: |
echo "## trajectory generation report" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| agent | steps | x displacement | x velocity | sim steps/s | policy steps/s | sim + policy steps/s | loop steps/s |" >> $GITHUB_STEP_SUMMARY
echo "|-------|-------|----------------|------------|-------------|----------------|-------------------|--------------|" >> $GITHUB_STEP_SUMMARY
for report in reports/report_*.txt; do
agent=$(head -n 1 "$report")
steps=$(grep "^steps:" "$report" | sed 's/.*: //')
x_disp=$(grep "x displacement" "$report" | sed 's/.*: //')
x_vel=$(grep "x velocity" "$report" | sed 's/.*: //')
sim_sps=$(grep "^sim steps per second" "$report" | sed 's/.*: //')
policy_sps=$(grep "^policy steps per second" "$report" | sed 's/.*: //')
sim_policy_sps=$(grep "sim + policy steps per second" "$report" | sed 's/.*: //')
loop_sps=$(grep "loop steps per second" "$report" | sed 's/.*: //')
echo "| $agent | $steps | $x_disp | $x_vel | $sim_sps | $policy_sps | $sim_policy_sps | $loop_sps |" >> $GITHUB_STEP_SUMMARY
done
- name: Download biped frames
uses: actions/download-artifact@v4
with:
name: trajectory-biped-frames
path: frames-biped
- name: Download quadruped frames
uses: actions/download-artifact@v4
with:
name: trajectory-quadruped-frames
path: frames-quadruped
- name: Install ffmpeg
run: |
sudo apt-get update
sudo apt-get install ffmpeg
- name: Make video
env:
LINE_WIDTH: ${{ github.event.inputs.line_width || 2 }}
run: |
ffmpeg \
-framerate 30 \
-i "frames-biped/%d.png" \
-framerate 30 \
-i "frames-quadruped/%d.png" \
-filter_complex "[0:v]pad=iw+${LINE_WIDTH}:color=black[left];[left][1:v]hstack=inputs=2" \
-c:v libx264 \
-profile:v high \
-crf 20 \
-pix_fmt yuv420p \
-r 30 \
-y \
merged.mp4
- name: Upload merged video
uses: actions/upload-artifact@v4
with:
path: merged.mp4
name: video