Update README.md #146
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |