|
|
<!DOCTYPE html> |
|
|
<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script> |
|
|
<script type="text/javascript" id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/mml-chtml.js"> |
|
|
</script> |
|
|
<html> |
|
|
|
|
|
<head> |
|
|
<meta charset="utf-8"> |
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
|
<meta property="og:title" content="DynaMo: In-Domain Dynamics Pretraining for Visuo-Motor Control"> |
|
|
<meta property="og:description" content="DynaMo: In-Domain Dynamics Pretraining for Visuo-Motor Control"> |
|
|
<meta property="og:type" content="website"> |
|
|
<meta property="og:site_name" content="DynaMo: In-Domain Dynamics Pretraining for Visuo-Motor Control"> |
|
|
<meta name="twitter:card" content="summary_large_image"> |
|
|
<meta name="twitter:title" content="DynaMo: In-Domain Dynamics Pretraining for Visuo-Motor Control"> |
|
|
<meta name="twitter:description" |
|
|
content="DynaMo: In-Domain Dynamics Pretraining for Visuo-Motor Control"> |
|
|
<meta name="twitter:image" content="./mfiles/figs/intro.png" /> |
|
|
<link rel="shortcut icon" href="mfiles/favicon.png"> |
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css"> |
|
|
<link rel="stylesheet" href="css/simple-grid.css"> |
|
|
<title>DynaMo: In-Domain Dynamics Pretraining for Visuo-Motor Control</title> |
|
|
</head> |
|
|
|
|
|
<body> |
|
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3" crossorigin="anonymous"></script> |
|
|
<script> |
|
|
const videos = document.querySelectorAll('.carousel-item video'); |
|
|
videos.forEach(video => { |
|
|
video.addEventListener('touchstart', (e) => { |
|
|
e.stopPropagation(); |
|
|
}); |
|
|
}); |
|
|
</script> |
|
|
<div class="jumbotron"> |
|
|
<div class="container"> |
|
|
<div class="row mt-5"> |
|
|
<div class="col-12 center mb-3"> |
|
|
<h1> |
|
|
<img src="mfiles/favicon.png" height="80px" style="margin-right: 5px"></img> |
|
|
<b>DynaMo</b>: In-Domain Dynamics Pretraining for Visuo-Motor Control |
|
|
</h1> |
|
|
<div class="row mt-3 mb-3"> |
|
|
<div class="col-4 hidden-sm"></div> |
|
|
<div class="col-2 center"> |
|
|
<a style="text-decoration: none" href="https://arxiv.org/abs/2409.12192"> |
|
|
<h3 style="color: #F5A803">Paper</h3> |
|
|
</a> |
|
|
</div> |
|
|
<div class="col-2 center"> |
|
|
<a style="text-decoration: none" href="https://github.com/jeffacce/dynamo_ssl"> |
|
|
<h3 style="color: #F5A803">Code</h3> |
|
|
</a> |
|
|
</div> |
|
|
</div> |
|
|
<div class="row"> |
|
|
<div class="center" style="flex: 0 0 15%; white-space: nowrap;"> |
|
|
<p class="center"><a href="https://jeffcui.com/" style="color: #333447">Zichen Jeff Cui</a></p> |
|
|
</div> |
|
|
<div class="center" style="flex: 0 0 15%; white-space: nowrap;"> |
|
|
<p class="center"><a href="https://www.ri.cmu.edu/ri-people/hengkai-pan/" style="color: #333447">Hengkai Pan</a></p> |
|
|
</div> |
|
|
<div class="center" style="flex: 0 0 15%; white-space: nowrap;"> |
|
|
<p class="center"><a href="https://aadhithya14.github.io/" style="color: #333447">Aadhithya Iyer</a></p> |
|
|
</div> |
|
|
<div class="center" style="flex: 0 0 15%; white-space: nowrap;"> |
|
|
<p class="center"><a href="https://siddhanthaldar.github.io/" style="color: #333447">Siddhant Haldar</a></p> |
|
|
</div> |
|
|
<div class="center" style="flex: 0 0 15%; white-space: nowrap;"> |
|
|
<p class="center"><a href="https://lerrelpinto.com" style="color: #333447">Lerrel Pinto</a></p> |
|
|
</div> |
|
|
</div> |
|
|
<div class="row"> |
|
|
<div class="col-12 center" style="white-space: nowrap;"> |
|
|
<p class="center" style="font-size: larger;"> <b>New York University</b> </p> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div class="row mt-3"> |
|
|
<div class="col-12 center img"> |
|
|
<img class="center" src="mfiles/figs/intro.png" style="width:100%"></img> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="row mt-3"> |
|
|
<div class="col-12"> |
|
|
<h2 class="center m-bottom">Abstract</h2> |
|
|
<p> |
|
|
Imitation learning has proven to be a powerful tool for training complex visuomotor |
|
|
policies. However, current methods often require hundreds to thousands |
|
|
of expert demonstrations to handle high-dimensional visual observations. A key |
|
|
reason for this poor data efficiency is that visual representations are predominantly |
|
|
either pretrained on out-of-domain data or trained directly through a behavior |
|
|
cloning objective. In this work, we present <b>DynaMo</b>, a new in-domain, |
|
|
self-supervised method for learning visual representations. Given a set of expert |
|
|
demonstrations, we jointly learn a latent inverse dynamics model and a forward |
|
|
dynamics model over a sequence of image embeddings, predicting the next frame |
|
|
in latent space, without augmentations, contrastive sampling, or access to ground |
|
|
truth actions. Importantly, DynaMo does not require any out-of-domain data such |
|
|
as Internet datasets or cross-embodied datasets. On a suite of six simulated and real |
|
|
environments, we show that representations learned with DynaMo significantly |
|
|
improve downstream imitation learning performance over prior self-supervised |
|
|
learning objectives, and pretrained representations. Gains from using DynaMo |
|
|
hold across policy classes such as Behavior Transformer, Diffusion Policy, MLP, |
|
|
and nearest neighbors. Finally, we ablate over key components of DynaMo and |
|
|
measure its impact on downstream policy performance. |
|
|
</p> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div class="container"> |
|
|
<div class="row"> |
|
|
<div class="col-12"> |
|
|
<h2 class="center mb-3">Method</h2> |
|
|
<p><a style="color: #00A2FF; font-weight: bold;">DynaMo</a>, a new self-supervised method for pretraining visual encoders for downstream visuomotor control.</p> |
|
|
<p> |
|
|
The key insight of our method is that we can learn a good visual representation for control by modeling the dynamics on |
|
|
demonstration observations, without requiring augmentations, contrastive sampling, or access to the ground truth |
|
|
actions. Given a sequence of raw visual observations, we jointly train the encoder, a latent inverse dynamics model, |
|
|
and a forward dynamics model. We model the actions as unobserved latents, and train all models end-to-end with a |
|
|
consistency loss on the forward dynamics prediction. We use a ResNet18 encoder, and causally masked transformer encoders |
|
|
for the inverse and forward dynamics models. The architecture is illustrated below. |
|
|
</p> |
|
|
</div> |
|
|
</div> |
|
|
<div class="col-12 center img"> |
|
|
<img class="center" src="mfiles/figs/model_arch.png" style="width:100%"></img> |
|
|
</div> |
|
|
<small>Embedding nearest neighbor matches. (Top) The nearest |
|
|
neighbor matches visualized in pixel space. (Bottom) Matches visualized in a top-down view. We see that the DynaMo |
|
|
representation captures task-relevant features (end effector, block, and target locations in this case), whereas prior |
|
|
work fixates on the large robot arm.</small> |
|
|
<div> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/blockpush/nn_probe.MP4" type="video/mp4"> |
|
|
</video> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="container mt-5"> |
|
|
<div class="row"> |
|
|
<div class="col-12"> |
|
|
<h2 class="center mb-3">Real-world robot rollouts</h2> |
|
|
<p> |
|
|
Rollouts with the DynaMo representation on the Allegro Manipulation environment, and the xArm Kitchen environment. |
|
|
We use a nearest neighbor policy for the Allegro environment, and BAKU with VQ-BeT for the xArm Kitchen environment. |
|
|
</p> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
<div class="body-content" style="padding-bottom: 150px;"> |
|
|
<div class="container"> |
|
|
<div class="grid-display"> |
|
|
<h4> Allegro: pick up the sponge (4x) </h4> |
|
|
<p> Dataset size: 543 frames </p> |
|
|
<div id="indicator0" class="carousel slide mb-3" data-bs-ride="false" data-bs-touch="false"> |
|
|
<div class="carousel-indicators"> |
|
|
<button type="button" data-bs-target="#indicator0" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button> |
|
|
<button type="button" data-bs-target="#indicator0" data-bs-slide-to="1" aria-label="Slide 2"></button> |
|
|
<button type="button" data-bs-target="#indicator0" data-bs-slide-to="2" aria-label="Slide 3"></button> |
|
|
<button type="button" data-bs-target="#indicator0" data-bs-slide-to="3" aria-label="Slide 4"></button> |
|
|
<button type="button" data-bs-target="#indicator0" data-bs-slide-to="4" aria-label="Slide 5"></button> |
|
|
<button type="button" data-bs-target="#indicator0" data-bs-slide-to="5" aria-label="Slide 6"></button> |
|
|
<button type="button" data-bs-target="#indicator0" data-bs-slide-to="6" aria-label="Slide 7"></button> |
|
|
<button type="button" data-bs-target="#indicator0" data-bs-slide-to="7" aria-label="Slide 8"></button> |
|
|
<button type="button" data-bs-target="#indicator0" data-bs-slide-to="8" aria-label="Slide 9"></button> |
|
|
<button type="button" data-bs-target="#indicator0" data-bs-slide-to="9" aria-label="Slide 10"></button> |
|
|
</div> |
|
|
<div class="carousel-inner"> |
|
|
<div class="carousel-item active"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-sponge-success-1.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Pick up the sponge<br>Success</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-sponge-success-2.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Pick up the sponge<br>Success</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-sponge-success-3.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Pick up the sponge<br>Success</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-sponge-success-4.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Pick up the sponge<br>Success</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-sponge-success-5.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Pick up the sponge<br>Success</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-sponge-success-6.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Pick up the sponge<br>Success</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-sponge-success-7.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Pick up the sponge<br>Success</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-sponge-fail-8.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Pick up the sponge<br>Failure</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-sponge-fail-9.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Pick up the sponge<br>Failure</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-sponge-fail-10.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Pick up the sponge<br>Failure</h4> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
<button class="carousel-control-prev" type="button" data-bs-target="#indicator0" data-bs-slide="prev"> |
|
|
<span class="carousel-control-prev-icon with-backdrop" aria-hidden="true"></span> |
|
|
<span class="visually-hidden">Previous</span> |
|
|
</button> |
|
|
<button class="carousel-control-next" type="button" data-bs-target="#indicator0" data-bs-slide="next"> |
|
|
<span class="carousel-control-next-icon with-backdrop" aria-hidden="true"></span> |
|
|
<span class="visually-hidden">Next</span> |
|
|
</button> |
|
|
</div> |
|
|
|
|
|
<h4> Allegro: pick up the teabag (4x) </h4> |
|
|
<p> Dataset size: 1034 frames</p> |
|
|
<div id="indicator1" class="carousel slide mb-3" data-bs-ride="false" data-bs-touch="false"> |
|
|
<div class="carousel-indicators"> |
|
|
<button type="button" data-bs-target="#indicator1" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button> |
|
|
<button type="button" data-bs-target="#indicator1" data-bs-slide-to="1" aria-label="Slide 2"></button> |
|
|
<button type="button" data-bs-target="#indicator1" data-bs-slide-to="2" aria-label="Slide 3"></button> |
|
|
<button type="button" data-bs-target="#indicator1" data-bs-slide-to="3" aria-label="Slide 4"></button> |
|
|
<button type="button" data-bs-target="#indicator1" data-bs-slide-to="4" aria-label="Slide 5"></button> |
|
|
<button type="button" data-bs-target="#indicator1" data-bs-slide-to="5" aria-label="Slide 6"></button> |
|
|
<button type="button" data-bs-target="#indicator1" data-bs-slide-to="6" aria-label="Slide 7"></button> |
|
|
<button type="button" data-bs-target="#indicator1" data-bs-slide-to="7" aria-label="Slide 8"></button> |
|
|
<button type="button" data-bs-target="#indicator1" data-bs-slide-to="8" aria-label="Slide 9"></button> |
|
|
<button type="button" data-bs-target="#indicator1" data-bs-slide-to="9" aria-label="Slide 10"></button> |
|
|
</div> |
|
|
<div class="carousel-inner"> |
|
|
<div class="carousel-item active"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-teabag-success-1.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Pick up the teabag<br>Success</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-teabag-success-2.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Pick up the teabag<br>Success</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-teabag-success-3.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Pick up the teabag<br>Success</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-teabag-success-4.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Pick up the teabag<br>Success</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-teabag-success-5.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Pick up the teabag<br>Success</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-teabag-fail-6.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Pick up the teabag<br>Failure</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-teabag-fail-7.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Pick up the teabag<br>Failure</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-teabag-fail-8.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Pick up the teabag<br>Failure</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-teabag-fail-9.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Pick up the teabag<br>Failure</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-teabag-fail-10.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Pick up the teabag<br>Failure</h4> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
<button class="carousel-control-prev" type="button" data-bs-target="#indicator1" data-bs-slide="prev"> |
|
|
<span class="carousel-control-prev-icon with-backdrop" aria-hidden="true"></span> |
|
|
<span class="visually-hidden">Previous</span> |
|
|
</button> |
|
|
<button class="carousel-control-next" type="button" data-bs-target="#indicator1" data-bs-slide="next"> |
|
|
<span class="carousel-control-next-icon with-backdrop" aria-hidden="true"></span> |
|
|
<span class="visually-hidden">Next</span> |
|
|
</button> |
|
|
</div> |
|
|
|
|
|
<h4> Allegro: open the microwave oven (10x) </h4> |
|
|
<p> Dataset size: 735 frames </p> |
|
|
<div id="indicator2" class="carousel slide mb-3" data-bs-ride="false" data-bs-touch="false"> |
|
|
<div class="carousel-indicators"> |
|
|
<button type="button" data-bs-target="#indicator2" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button> |
|
|
<button type="button" data-bs-target="#indicator2" data-bs-slide-to="1" aria-label="Slide 2"></button> |
|
|
<button type="button" data-bs-target="#indicator2" data-bs-slide-to="2" aria-label="Slide 3"></button> |
|
|
<button type="button" data-bs-target="#indicator2" data-bs-slide-to="3" aria-label="Slide 4"></button> |
|
|
<button type="button" data-bs-target="#indicator2" data-bs-slide-to="4" aria-label="Slide 5"></button> |
|
|
<button type="button" data-bs-target="#indicator2" data-bs-slide-to="5" aria-label="Slide 6"></button> |
|
|
<button type="button" data-bs-target="#indicator2" data-bs-slide-to="6" aria-label="Slide 7"></button> |
|
|
<button type="button" data-bs-target="#indicator2" data-bs-slide-to="7" aria-label="Slide 8"></button> |
|
|
<button type="button" data-bs-target="#indicator2" data-bs-slide-to="8" aria-label="Slide 9"></button> |
|
|
<button type="button" data-bs-target="#indicator2" data-bs-slide-to="9" aria-label="Slide 10"></button> |
|
|
</div> |
|
|
<div class="carousel-inner"> |
|
|
<div class="carousel-item active"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-microwave-success-1.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Open the microwave oven<br>Success</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-microwave-failure-2.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Open the microwave oven<br>Failure</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-microwave-success-3.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Open the microwave oven<br>Success</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-microwave-success-4.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Open the microwave oven<br>Success</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-microwave-success-5.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Open the microwave oven<br>Success</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-microwave-success-6.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Open the microwave oven<br>Success</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-microwave-success-7.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Open the microwave oven<br>Success</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-microwave-success-8.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Open the microwave oven<br>Success</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-microwave-success-9.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Open the microwave oven<br>Success</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/hand/hand-microwave-success-10.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Open the microwave oven<br>Success</h4> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
<button class="carousel-control-prev" type="button" data-bs-target="#indicator2" data-bs-slide="prev"> |
|
|
<span class="carousel-control-prev-icon with-backdrop" aria-hidden="true"></span> |
|
|
<span class="visually-hidden">Previous</span> |
|
|
</button> |
|
|
<button class="carousel-control-next" type="button" data-bs-target="#indicator2" data-bs-slide="next"> |
|
|
<span class="carousel-control-next-icon with-backdrop" aria-hidden="true"></span> |
|
|
<span class="visually-hidden">Next</span> |
|
|
</button> |
|
|
</div> |
|
|
|
|
|
<h4> xArm Kitchen Tasks (real-time) </h4> |
|
|
<div id="indicator3" class="carousel slide mb-3" data-bs-ride="false" data-bs-touch="false"> |
|
|
<div class="carousel-indicators"> |
|
|
<button type="button" data-bs-target="#indicator3" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button> |
|
|
<button type="button" data-bs-target="#indicator3" data-bs-slide-to="1" aria-label="Slide 2"></button> |
|
|
<button type="button" data-bs-target="#indicator3" data-bs-slide-to="2" aria-label="Slide 3"></button> |
|
|
<button type="button" data-bs-target="#indicator3" data-bs-slide-to="3" aria-label="Slide 4"></button> |
|
|
<button type="button" data-bs-target="#indicator3" data-bs-slide-to="4" aria-label="Slide 5"></button> |
|
|
<button type="button" data-bs-target="#indicator3" data-bs-slide-to="5" aria-label="Slide 6"></button> |
|
|
<button type="button" data-bs-target="#indicator3" data-bs-slide-to="6" aria-label="Slide 7"></button> |
|
|
</div> |
|
|
<div class="carousel-inner"> |
|
|
<div class="carousel-item active"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/kitchen/get-tea-success.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Take the tea bottle from the fridge<br>Success</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/kitchen/get-water-success.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Take the vitamin water from the fridge<br>Success</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/kitchen/get-water-fail.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Take the vitamin water from the fridge<br>Failure</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/kitchen/get-yogurt-success.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Take the yogurt from the fridge<br>Success</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/kitchen/put-yogurt-success.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Put the yogurt into the fridge<br>Success</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/kitchen/put-ketchup-success.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Put the ketchup into the fridge<br>Success</h4> |
|
|
</div> |
|
|
</div> |
|
|
<div class="carousel-item"> |
|
|
<video class="img" style="height: 600" muted autoplay loop controls> |
|
|
<source src="mfiles/env/kitchen/put-ketchup-fail.mp4" type="video/mp4"> |
|
|
</video> |
|
|
<div> |
|
|
<h4 class="carousel-caption with-backdrop">Put the ketchup into the fridge<br>Failure</h4> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
<button class="carousel-control-prev" type="button" data-bs-target="#indicator3" data-bs-slide="prev"> |
|
|
<span class="carousel-control-prev-icon with-backdrop" aria-hidden="true"></span> |
|
|
<span class="visually-hidden">Previous</span> |
|
|
</button> |
|
|
<button class="carousel-control-next" type="button" data-bs-target="#indicator3" data-bs-slide="next"> |
|
|
<span class="carousel-control-next-icon with-backdrop" aria-hidden="true"></span> |
|
|
<span class="visually-hidden">Next</span> |
|
|
</button> |
|
|
</div> |
|
|
|
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
</div> |
|
|
<footer> |
|
|
</footer> |
|
|
</body> |
|
|
|
|
|
</html> |
|
|
|