CI of BaselineWalkingController #224
This file contains 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: CI of BaselineWalkingController | |
on: | |
push: | |
branches: | |
- '**' | |
pull_request: | |
branches: | |
- '**' | |
schedule: | |
- cron: '0 0 * * 0' | |
jobs: | |
build-and-test: | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-20.04] | |
catkin-build: [catkin, standalone] | |
build-type: [RelWithDebInfo, Debug] | |
mc-rtc-version: [head, stable] | |
compiler: [gcc] | |
mpc-method: [PreviewControlZmp] | |
mpc-framework: [OpenLoopMpc] | |
motion-type: [WalkingOnPlane] | |
exclude: | |
- build-type: Debug | |
mc-rtc-version: stable | |
# Some packages have not been released onto the stable mirror yet | |
- catkin-build: standalone | |
mc-rtc-version: stable | |
include: | |
# compiler | |
- os: ubuntu-20.04 | |
catkin-build: standalone # catkin | |
build-type: RelWithDebInfo | |
mc-rtc-version: head | |
compiler: clang # gcc | |
mpc-method: PreviewControlZmp | |
mpc-framework: OpenLoopMpc | |
motion-type: WalkingOnPlane | |
# motion-type | |
- os: ubuntu-20.04 | |
catkin-build: catkin | |
build-type: RelWithDebInfo | |
mc-rtc-version: head | |
compiler: gcc | |
mpc-method: PreviewControlZmp | |
mpc-framework: OpenLoopMpc | |
motion-type: WalkingOnStairs # WalkingOnPlane | |
- os: ubuntu-20.04 | |
catkin-build: catkin | |
build-type: RelWithDebInfo | |
mc-rtc-version: head | |
compiler: gcc | |
mpc-method: PreviewControlZmp | |
mpc-framework: OpenLoopMpc | |
motion-type: WalkingOnPlaneWaypoint # WalkingOnPlane | |
- os: ubuntu-20.04 | |
catkin-build: catkin | |
build-type: RelWithDebInfo | |
mc-rtc-version: head | |
compiler: gcc | |
mpc-method: PreviewControlZmp | |
mpc-framework: OpenLoopMpc | |
motion-type: WalkingOnPlaneVel # WalkingOnPlane | |
- os: ubuntu-20.04 | |
catkin-build: catkin | |
build-type: RelWithDebInfo | |
mc-rtc-version: head | |
compiler: gcc | |
mpc-method: PreviewControlZmp | |
mpc-framework: OpenLoopMpc | |
motion-type: WalkingWithFootstepPlanner # WalkingOnPlane | |
- os: ubuntu-20.04 | |
catkin-build: standalone # catkin | |
build-type: RelWithDebInfo | |
mc-rtc-version: head | |
compiler: gcc | |
mpc-method: PreviewControlZmp | |
mpc-framework: OpenLoopMpc | |
motion-type: WalkingOnStairs # WalkingOnPlane | |
- os: ubuntu-20.04 | |
catkin-build: standalone # catkin | |
build-type: RelWithDebInfo | |
mc-rtc-version: head | |
compiler: gcc | |
mpc-method: PreviewControlZmp | |
mpc-framework: OpenLoopMpc | |
motion-type: WalkingOnPlaneWaypoint # WalkingOnPlane | |
- os: ubuntu-20.04 | |
catkin-build: standalone # catkin | |
build-type: RelWithDebInfo | |
mc-rtc-version: head | |
compiler: gcc | |
mpc-method: PreviewControlZmp | |
mpc-framework: OpenLoopMpc | |
motion-type: WalkingOnPlaneVel # WalkingOnPlane | |
- os: ubuntu-20.04 | |
catkin-build: standalone # catkin | |
build-type: RelWithDebInfo | |
mc-rtc-version: head | |
compiler: gcc | |
mpc-method: PreviewControlZmp | |
mpc-framework: OpenLoopMpc | |
motion-type: WalkingWithFootstepPlanner # WalkingOnPlane | |
# mpc-method, mpc-framework | |
- os: ubuntu-20.04 | |
catkin-build: catkin | |
build-type: RelWithDebInfo | |
mc-rtc-version: head | |
compiler: gcc | |
mpc-method: DdpZmp # PreviewControlZmp | |
mpc-framework: OpenLoopMpc | |
motion-type: WalkingOnPlane | |
- os: ubuntu-20.04 | |
catkin-build: catkin | |
build-type: RelWithDebInfo | |
mc-rtc-version: head | |
compiler: gcc | |
mpc-method: FootGuidedControl # PreviewControlZmp | |
mpc-framework: OpenLoopMpc | |
motion-type: WalkingOnPlane | |
- os: ubuntu-20.04 | |
catkin-build: catkin | |
build-type: RelWithDebInfo | |
mc-rtc-version: head | |
compiler: gcc | |
mpc-method: IntrinsicallyStableMpc # PreviewControlZmp | |
mpc-framework: OpenLoopMpc | |
motion-type: WalkingOnPlane | |
- os: ubuntu-20.04 | |
catkin-build: catkin | |
build-type: RelWithDebInfo | |
mc-rtc-version: head | |
compiler: gcc | |
mpc-method: PreviewControlZmp | |
mpc-framework: ClosedLoopMpc # OpenLoopMpc | |
motion-type: WalkingOnPlane | |
- os: ubuntu-20.04 | |
catkin-build: catkin | |
build-type: RelWithDebInfo | |
mc-rtc-version: head | |
compiler: gcc | |
mpc-method: DdpZmp # PreviewControlZmp | |
mpc-framework: ClosedLoopMpc # OpenLoopMpc | |
motion-type: WalkingOnPlane | |
- os: ubuntu-20.04 | |
catkin-build: catkin | |
build-type: RelWithDebInfo | |
mc-rtc-version: head | |
compiler: gcc | |
mpc-method: FootGuidedControl # PreviewControlZmp | |
mpc-framework: ClosedLoopMpc # OpenLoopMpc | |
motion-type: WalkingOnPlane | |
- os: ubuntu-20.04 | |
catkin-build: catkin | |
build-type: RelWithDebInfo | |
mc-rtc-version: head | |
compiler: gcc | |
mpc-method: IntrinsicallyStableMpc # PreviewControlZmp | |
mpc-framework: ClosedLoopMpc # OpenLoopMpc | |
motion-type: WalkingOnPlane | |
runs-on: ${{ matrix.os }} | |
env: | |
RESULTS_POSTFIX: ${{ matrix.mpc-method }}-${{ matrix.mpc-framework }}-${{ matrix.motion-type }}-${{ matrix.catkin-build }} | |
steps: | |
- name: Setup environment variables | |
run: | | |
set -e | |
set -x | |
if [ "${{ matrix.os }}" == "ubuntu-20.04" ] && \ | |
[ "${{ matrix.build-type }}" == "RelWithDebInfo" ] && \ | |
[ "${{ matrix.mc-rtc-version }}" == "head" ] && \ | |
[ "${{ matrix.compiler }}" == "gcc" ] | |
then | |
echo "RUN_SIMULATION_STEPS=true" >> $GITHUB_ENV | |
else | |
echo "RUN_SIMULATION_STEPS=false" >> $GITHUB_ENV | |
fi | |
if [ "${{ matrix.os }}" == "ubuntu-20.04" ] && \ | |
[ "${{ matrix.catkin-build }}" == "catkin" ] && \ | |
[ "${{ matrix.build-type }}" == "RelWithDebInfo" ] && \ | |
[ "${{ matrix.mc-rtc-version }}" == "head" ] && \ | |
[ "${{ matrix.compiler }}" == "gcc" ] && \ | |
[ "${{ matrix.mpc-method }}" == "PreviewControlZmp" ] && \ | |
[ "${{ matrix.mpc-framework }}" == "OpenLoopMpc" ] && \ | |
[ "${{ matrix.motion-type }}" == "WalkingOnPlane" ] && \ | |
[ "${{ github.repository_owner }}" == "isri-aist" ] && \ | |
[ "${{ github.ref }}" == "refs/heads/master" ] | |
then | |
echo "UPLOAD_DOCUMENTATION=true" >> $GITHUB_ENV | |
else | |
echo "UPLOAD_DOCUMENTATION=false" >> $GITHUB_ENV | |
fi | |
if [ "${{ matrix.catkin-build }}" == "catkin" ] | |
then | |
echo "CI_DIR=${GITHUB_WORKSPACE}/catkin_ws/src/${{ github.repository }}/.github/workflows" >> $GITHUB_ENV | |
else | |
echo "CI_DIR=${GITHUB_WORKSPACE}/.github/workflows" >> $GITHUB_ENV | |
fi | |
if [ "${{ matrix.motion-type }}" == "WalkingWithFootstepPlanner" ] | |
then | |
echo "BASELINE_FOOTSTEP_PLANNER=baseline_footstep_planner" >> $GITHUB_ENV | |
else | |
echo "BASELINE_FOOTSTEP_PLANNER=" >> $GITHUB_ENV | |
fi | |
- name: Install dependencies | |
uses: jrl-umi3218/github-actions/install-dependencies@master | |
with: | |
ubuntu: | | |
apt-mirrors: | |
mc-rtc: | |
cloudsmith: mc-rtc/${{ matrix.mc-rtc-version }} | |
apt: libmc-rtc-dev mc-rtc-utils mc-state-observation doxygen graphviz jvrc-choreonoid choreonoid libcnoid-dev | |
ros: | | |
apt: ros-base mc-rtc-plugin eigen-conversions | |
- name: Install standalone dependencies | |
if: matrix.catkin-build == 'standalone' | |
uses: jrl-umi3218/github-actions/install-dependencies@master | |
with: | |
compiler: ${{ matrix.compiler }} | |
build-type: ${{ matrix.build-type }} | |
ubuntu: | | |
apt: libforcecontrolcollection-dev libtrajectorycollection-dev libcentroidalcontrolcollection-dev | |
- name: Install BaselineFootstepPlanner for standalone build | |
if: matrix.catkin-build == 'standalone' && matrix.motion-type == 'WalkingWithFootstepPlanner' | |
uses: jrl-umi3218/github-actions/install-dependencies@master | |
with: | |
compiler: ${{ matrix.compiler }} | |
build-type: ${{ matrix.build-type }} | |
ros: | | |
apt: sbpl | |
github: | | |
- path: isri-aist/BaselineFootstepPlanner | |
ref: master | |
- name: Checkout repository code for standalone build | |
if: matrix.catkin-build == 'standalone' | |
uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
- name: Standalone build | |
if: matrix.catkin-build == 'standalone' | |
uses: jrl-umi3218/github-actions/build-cmake-project@master | |
with: | |
compiler: ${{ matrix.compiler }} | |
build-type: ${{ matrix.build-type }} | |
- name: Catkin build | |
if: matrix.catkin-build == 'catkin' | |
uses: jrl-umi3218/github-actions/build-catkin-project@master | |
with: | |
build-type: ${{ matrix.build-type }} | |
cmake-args: -DINSTALL_DOCUMENTATION=${{ env.UPLOAD_DOCUMENTATION }} -DENABLE_QLD=ON | |
catkin-test-args: --no-deps | |
build-packages: "baseline_walking_controller ${{ env.BASELINE_FOOTSTEP_PLANNER }}" | |
test-packages: baseline_walking_controller | |
- name: Catkin build again to ensure footstep planner found | |
if: matrix.catkin-build == 'catkin' && matrix.motion-type == 'WalkingWithFootstepPlanner' | |
run: | | |
set -e | |
set -x | |
cd ${GITHUB_WORKSPACE}/catkin_ws | |
set +x | |
. devel/setup.bash | |
set -x | |
catkin build baseline_walking_controller --no-deps --force-cmake --limit-status-rate 0.1 --cmake-args -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} --catkin-make-args all run_tests | |
catkin_test_results --verbose --all build | |
- name: Run simulation | |
if: env.RUN_SIMULATION_STEPS == 'true' | |
# https://github.com/jrl-umi3218/lipm_walking_controller/blob/b564d655388ae6a6725c504e5c74a62192e58c7c/.github/workflows/build.yml#L64-L92 | |
run: | | |
set -e | |
set -x | |
sudo apt-get install -y -qq xvfb ffmpeg mesa-utils fluxbox xserver-xorg xserver-xorg-core xserver-xorg-video-all libwayland-egl1-mesa | |
set +x | |
if [ "${{ matrix.catkin-build }}" == "catkin" ] | |
then | |
. ${GITHUB_WORKSPACE}/catkin_ws/devel/setup.bash | |
fi | |
set -x | |
export DISPLAY=":1" | |
Xvfb ${DISPLAY} -screen 0 1920x1080x24 & | |
sleep 10s | |
fluxbox 2> /dev/null & | |
mkdir -p ${HOME}/.config/mc_rtc/controllers | |
if [ "${{ matrix.catkin-build }}" == "catkin" ] | |
then | |
cp ${GITHUB_WORKSPACE}/catkin_ws/src/${{ github.repository }}/etc/mc_rtc.yaml ${HOME}/.config/mc_rtc | |
else | |
echo "Enabled: BaselineWalkingController" > ${HOME}/.config/mc_rtc/mc_rtc.yaml | |
fi | |
python3 ${{ env.CI_DIR }}/scripts/mergeConfigs.py ${{ env.CI_DIR }}/config/${{ matrix.mpc-method }}.yaml ${{ env.CI_DIR }}/config/${{ matrix.mpc-framework }}.yaml ${{ env.CI_DIR }}/config/${{ matrix.motion-type }}.yaml > ${HOME}/.config/mc_rtc/controllers/BaselineWalkingController.yaml | |
ffmpeg -y -f x11grab -s 1920x1080 -r 30 -i ${DISPLAY} -qscale 0 -vcodec huffyuv /tmp/video.avi > /dev/null 2>&1 < /dev/null & | |
FFMPEG_PID=$! | |
cd /usr/share/hrpsys/samples/JVRC1 | |
./clear-omninames.sh | |
roscore > /dev/null 2>&1 < /dev/null & | |
ROSCORE_PID=$! | |
sleep 1s | |
if [ "${{ matrix.motion-type }}" == "WalkingOnPlane" -o "${{ matrix.motion-type }}" == "WalkingOnPlaneWaypoint" -o "${{ matrix.motion-type }}" == "WalkingOnPlaneVel" ]; then | |
CNOID_FILE=sim_mc.cnoid | |
else | |
CNOID_FILE=sim_mc_comanoid_staircase.cnoid | |
fi | |
choreonoid ${CNOID_FILE} --test-mode --start-simulation & | |
CNOID_PID=$! | |
if [ "${{ matrix.motion-type }}" == "WalkingWithFootstepPlanner" ]; then | |
SLEEP_DURATION="70s" | |
else | |
SLEEP_DURATION="50s" | |
fi | |
sleep ${SLEEP_DURATION} | |
kill -2 ${ROSCORE_PID} | |
kill -2 ${CNOID_PID} | |
kill -2 ${FFMPEG_PID} | |
sleep 1s | |
kill -9 ${CNOID_PID} || true | |
sleep 10s | |
mkdir -p /tmp/results | |
ffmpeg -nostats -i /tmp/video.avi /tmp/results/BWC-video-${RESULTS_POSTFIX}.mp4 | |
LOG_FILENAME=BWC-log-${RESULTS_POSTFIX} | |
mv `readlink -f /tmp/mc-control-BaselineWalkingController-latest.bin` /tmp/${LOG_FILENAME}.bin | |
tar czf /tmp/results/${LOG_FILENAME}.tar.gz -C /tmp ${LOG_FILENAME}.bin | |
- name: Upload simulation data | |
if: env.RUN_SIMULATION_STEPS == 'true' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: BWC-ci-results-${{ matrix.catkin-build }} | |
path: /tmp/results | |
- name: Check simulation results | |
if: env.RUN_SIMULATION_STEPS == 'true' | |
run: | | |
set -e | |
set -x | |
if [ "${{ matrix.motion-type }}" == "WalkingOnPlane" ]; then | |
EXPECTED_BASE_POS="1.34 -0.41 0.8" | |
elif [ "${{ matrix.motion-type }}" == "WalkingOnStairs" ]; then | |
EXPECTED_BASE_POS="1.75 0.0 1.68" | |
elif [ "${{ matrix.motion-type }}" == "WalkingOnPlaneWaypoint" ]; then | |
EXPECTED_BASE_POS="0.82 0.57 0.8" | |
elif [ "${{ matrix.motion-type }}" == "WalkingOnPlaneVel" ]; then | |
EXPECTED_BASE_POS="0.74 -0.53 0.8" | |
else # if [ "${{ matrix.motion-type }}" == "WalkingWithFootstepPlanner" ]; then | |
EXPECTED_BASE_POS="2.5 -0.25 0.8" | |
fi | |
LOG_FILENAME=BWC-log-${RESULTS_POSTFIX} | |
python3 ${{ env.CI_DIR }}/scripts/checkSimulationResults.py /tmp/${LOG_FILENAME}.bin --expected-base-pos ${EXPECTED_BASE_POS} | |
- name: Upload documentation | |
if: env.UPLOAD_DOCUMENTATION == 'true' | |
run: | | |
set -e | |
set -x | |
cd ${GITHUB_WORKSPACE}/catkin_ws/src/${{ github.repository }} | |
git config --global user.name "Masaki Murooka" | |
git config --global user.email "[email protected]" | |
git remote set-url origin "https://mmurooka:${{ secrets.CI_TOKEN }}@github.com/isri-aist/BaselineWalkingController" | |
git fetch --depth=1 origin gh-pages:gh-pages | |
git clean -dfx | |
rm -rf cmake/ | |
git checkout --quiet gh-pages | |
rm -rf doxygen/ | |
cp -r ${GITHUB_WORKSPACE}/catkin_ws/build/baseline_walking_controller/doc/html/ doxygen | |
git add doxygen | |
git_status=`git status -s` | |
if test -n "$git_status"; then | |
git commit --quiet -m "Update Doxygen HTML files from commit ${{ github.sha }}" | |
git push origin gh-pages | |
else | |
echo "Github pages documentation is already up-to-date." | |
fi |