Repository files navigation

DMotion

Paper

Haoqi Yuan, Ruihai Wu, Andrew Zhao, Haipeng Zhang, Zihan Ding, Hao Dong, "DMotion: Robotic Visuomotor Control with Unsupervised Forward Model Learned from Videos", IROS 2021

arXiv

project page

Experiments in Grid World, Atari Pong

Dependencies:

  • Ubuntu
  • python 3.7
  • dependencies: PIL, numpy, tqdm, gym, pytorch (1.2.0), matplotlib

(a). Generate datasets:

Grid World:

python datagen/gridworld.py

Atari Pong: require gym[atari] to be installed.

python datagen/ataripong.py

(b). Train the model from unlabelled videos:

Grid World:

python train.py --gpu 0 --dataset_name shape --data_path datagen/gridworld

Atari Pong:

python train.py --gpu 0 --dataset_name pong --data_path datagen/atari-pong

Set --gpu -1 if use cpu.

(c). Find action-transformation mapping and test:

One transition sample for each action can be manually selected. In folder datagen/demonstration, we have one directory for each dataset to contain the demonstrations. Directory names are shape, pong, with respect to two datasets.

We provide you the demonstrations for all datasets. For example, for Grid World dataset, directory datagen/demonstration/shape contains a file demo.txt, in which each line consists of {img1, img2, action}, showing a transition of this action. Image files img1, img2 are placed in directory datagen/demonstration/shape.

You can either use the demonstrations provided by us, or arbitrarily replace them with samples in the generated dataset manually.

Grid World:

python test.py --gpu 0 --dataset_name shape --data_path datagen/gridworld

Atari Pong:

python test.py --gpu 0 --dataset_name pong --data_path datagen/atari-pong

Set --gpu -1 if use cpu. You can select the model for test using e.g., --test_model_path checkpoint/model_49.pth. The test program will sequentially run the test of feature map visualisation, visual forecasting conditioned on the agent's motion and quantitative test. If you want to disable them, add --visualize_feature 0, --visual_forecasting 0 or --quantitative 0, respectively.

Experiments in Robot Pushing and MPC

Dependencies:

Please visit https://github.com/stepjam/PyRep, and follow the installation on their page to install Pyrep and CoppeliaSim.

Generate Dataset and Train:

  1. Use python -m datagen.roboarm --increment 20 to generate trajectories, as the simulation gets slower, please only generate around 20-100 (--increment) trajectories at a time. When generating a second batch, please use python -m datagen.roboarm --increment 20 --eps [number of eps generated before + increment] for the sake of naming convention.
  2. [Optional] If generated multiple batches of trajectories, use python -m rename --folders [number of folders you generated in step 1] to move all files into a single folder.
  3. Train: python -m train --dataset_name roboarm --data_path datagen/roboarm --size 64 --no_graph --contrastive_coeff 0 --save_path checkpoint
  4. Test: python -m test --dataset_name roboarm --data_path datagen/roboarm --size 64 --no_graph --contrastive_coeff 0 --test_model_path checkpoint/model_49.pth --test_save_path test

Model Predictive Control

Generate data for MPC

Create csv file logging the trajectory IDs and time step you wish to perform MPC on

episodestart_idxend_idx
200029
201837

Run python -m rename_mpc --folders 1 to combine all json state files into one for MPC dataset. Change the --folders argument according to the maximum ID of the trajectories manually selected. Run python -m move_mpc to get all trajectories to the right place.

Test for MPC

python -m mpc_multi

Citation

If you find this code useful for your research, please cite our paper:

@article{yuan2021robotic,
title={Robotic Visuomotor Control with Unsupervised Forward Model Learned from Videos},
author={Yuan, Haoqi and Wu, Ruihai and Zhao, Andrew and Zhang, Haipeng and Ding, Zihan and Dong, Hao},
journal={arXiv preprint arXiv:2103.04301},
year={2021}
}

About

DMotion: Robotic Visuomotor Control with Unsupervised Forward Model Learned from Videos , IROS 2021

Topics

Resources

Stars

5 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

DMotion

Paper

Haoqi Yuan, Ruihai Wu, Andrew Zhao, Haipeng Zhang, Zihan Ding, Hao Dong, "DMotion: Robotic Visuomotor Control with Unsupervised Forward Model Learned from Videos", IROS 2021

arXiv

project page

Experiments in Grid World, Atari Pong

Dependencies:

  • Ubuntu
  • python 3.7
  • dependencies: PIL, numpy, tqdm, gym, pytorch (1.2.0), matplotlib

(a). Generate datasets:

Grid World:

python datagen/gridworld.py

Atari Pong: require gym[atari] to be installed.

python datagen/ataripong.py

(b). Train the model from unlabelled videos:

Grid World:

python train.py --gpu 0 --dataset_name shape --data_path datagen/gridworld

Atari Pong:

python train.py --gpu 0 --dataset_name pong --data_path datagen/atari-pong

Set --gpu -1 if use cpu.

(c). Find action-transformation mapping and test:

One transition sample for each action can be manually selected. In folder datagen/demonstration, we have one directory for each dataset to contain the demonstrations. Directory names are shape, pong, with respect to two datasets.

We provide you the demonstrations for all datasets. For example, for Grid World dataset, directory datagen/demonstration/shape contains a file demo.txt, in which each line consists of {img1, img2, action}, showing a transition of this action. Image files img1, img2 are placed in directory datagen/demonstration/shape.

You can either use the demonstrations provided by us, or arbitrarily replace them with samples in the generated dataset manually.

Grid World:

python test.py --gpu 0 --dataset_name shape --data_path datagen/gridworld

Atari Pong:

python test.py --gpu 0 --dataset_name pong --data_path datagen/atari-pong

Set --gpu -1 if use cpu. You can select the model for test using e.g., --test_model_path checkpoint/model_49.pth. The test program will sequentially run the test of feature map visualisation, visual forecasting conditioned on the agent's motion and quantitative test. If you want to disable them, add --visualize_feature 0, --visual_forecasting 0 or --quantitative 0, respectively.

Experiments in Robot Pushing and MPC

Dependencies:

Please visit https://github.com/stepjam/PyRep, and follow the installation on their page to install Pyrep and CoppeliaSim.

Generate Dataset and Train:

  1. Use python -m datagen.roboarm --increment 20 to generate trajectories, as the simulation gets slower, please only generate around 20-100 (--increment) trajectories at a time. When generating a second batch, please use python -m datagen.roboarm --increment 20 --eps [number of eps generated before + increment] for the sake of naming convention.
  2. [Optional] If generated multiple batches of trajectories, use python -m rename --folders [number of folders you generated in step 1] to move all files into a single folder.
  3. Train: python -m train --dataset_name roboarm --data_path datagen/roboarm --size 64 --no_graph --contrastive_coeff 0 --save_path checkpoint
  4. Test: python -m test --dataset_name roboarm --data_path datagen/roboarm --size 64 --no_graph --contrastive_coeff 0 --test_model_path checkpoint/model_49.pth --test_save_path test

Model Predictive Control

Generate data for MPC

Create csv file logging the trajectory IDs and time step you wish to perform MPC on

episodestart_idxend_idx
200029
201837

Run python -m rename_mpc --folders 1 to combine all json state files into one for MPC dataset. Change the --folders argument according to the maximum ID of the trajectories manually selected. Run python -m move_mpc to get all trajectories to the right place.

Test for MPC

python -m mpc_multi

Citation

If you find this code useful for your research, please cite our paper:

@article{yuan2021robotic,
title={Robotic Visuomotor Control with Unsupervised Forward Model Learned from Videos},
author={Yuan, Haoqi and Wu, Ruihai and Zhao, Andrew and Zhang, Haipeng and Ding, Zihan and Dong, Hao},
journal={arXiv preprint arXiv:2103.04301},
year={2021}
}

About

DMotion: Robotic Visuomotor Control with Unsupervised Forward Model Learned from Videos , IROS 2021

Topics

Resources

Stars

5 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

DMotion

Paper

Haoqi Yuan, Ruihai Wu, Andrew Zhao, Haipeng Zhang, Zihan Ding, Hao Dong, "DMotion: Robotic Visuomotor Control with Unsupervised Forward Model Learned from Videos", IROS 2021

arXiv

project page

Experiments in Grid World, Atari Pong

Dependencies:

  • Ubuntu
  • python 3.7
  • dependencies: PIL, numpy, tqdm, gym, pytorch (1.2.0), matplotlib

(a). Generate datasets:

Grid World:

python datagen/gridworld.py

Atari Pong: require gym[atari] to be installed.

python datagen/ataripong.py

(b). Train the model from unlabelled videos:

Grid World:

python train.py --gpu 0 --dataset_name shape --data_path datagen/gridworld

Atari Pong:

python train.py --gpu 0 --dataset_name pong --data_path datagen/atari-pong

Set --gpu -1 if use cpu.

(c). Find action-transformation mapping and test:

One transition sample for each action can be manually selected. In folder datagen/demonstration, we have one directory for each dataset to contain the demonstrations. Directory names are shape, pong, with respect to two datasets.

We provide you the demonstrations for all datasets. For example, for Grid World dataset, directory datagen/demonstration/shape contains a file demo.txt, in which each line consists of {img1, img2, action}, showing a transition of this action. Image files img1, img2 are placed in directory datagen/demonstration/shape.

You can either use the demonstrations provided by us, or arbitrarily replace them with samples in the generated dataset manually.

Grid World:

python test.py --gpu 0 --dataset_name shape --data_path datagen/gridworld

Atari Pong:

python test.py --gpu 0 --dataset_name pong --data_path datagen/atari-pong

Set --gpu -1 if use cpu. You can select the model for test using e.g., --test_model_path checkpoint/model_49.pth. The test program will sequentially run the test of feature map visualisation, visual forecasting conditioned on the agent's motion and quantitative test. If you want to disable them, add --visualize_feature 0, --visual_forecasting 0 or --quantitative 0, respectively.

Experiments in Robot Pushing and MPC

Dependencies:

Please visit https://github.com/stepjam/PyRep, and follow the installation on their page to install Pyrep and CoppeliaSim.

Generate Dataset and Train:

  1. Use python -m datagen.roboarm --increment 20 to generate trajectories, as the simulation gets slower, please only generate around 20-100 (--increment) trajectories at a time. When generating a second batch, please use python -m datagen.roboarm --increment 20 --eps [number of eps generated before + increment] for the sake of naming convention.
  2. [Optional] If generated multiple batches of trajectories, use python -m rename --folders [number of folders you generated in step 1] to move all files into a single folder.
  3. Train: python -m train --dataset_name roboarm --data_path datagen/roboarm --size 64 --no_graph --contrastive_coeff 0 --save_path checkpoint
  4. Test: python -m test --dataset_name roboarm --data_path datagen/roboarm --size 64 --no_graph --contrastive_coeff 0 --test_model_path checkpoint/model_49.pth --test_save_path test

Model Predictive Control

Generate data for MPC

Create csv file logging the trajectory IDs and time step you wish to perform MPC on

episodestart_idxend_idx
200029
201837

Run python -m rename_mpc --folders 1 to combine all json state files into one for MPC dataset. Change the --folders argument according to the maximum ID of the trajectories manually selected. Run python -m move_mpc to get all trajectories to the right place.

Test for MPC

python -m mpc_multi

Citation

If you find this code useful for your research, please cite our paper:

@article{yuan2021robotic,
title={Robotic Visuomotor Control with Unsupervised Forward Model Learned from Videos},
author={Yuan, Haoqi and Wu, Ruihai and Zhao, Andrew and Zhang, Haipeng and Ding, Zihan and Dong, Hao},
journal={arXiv preprint arXiv:2103.04301},
year={2021}
}

About

DMotion: Robotic Visuomotor Control with Unsupervised Forward Model Learned from Videos , IROS 2021

Topics

Resources

Stars

5 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

DMotion

Paper

Haoqi Yuan, Ruihai Wu, Andrew Zhao, Haipeng Zhang, Zihan Ding, Hao Dong, "DMotion: Robotic Visuomotor Control with Unsupervised Forward Model Learned from Videos", IROS 2021

arXiv

project page

Experiments in Grid World, Atari Pong

Dependencies:

  • Ubuntu
  • python 3.7
  • dependencies: PIL, numpy, tqdm, gym, pytorch (1.2.0), matplotlib

(a). Generate datasets:

Grid World:

python datagen/gridworld.py

Atari Pong: require gym[atari] to be installed.

python datagen/ataripong.py

(b). Train the model from unlabelled videos:

Grid World:

python train.py --gpu 0 --dataset_name shape --data_path datagen/gridworld

Atari Pong:

python train.py --gpu 0 --dataset_name pong --data_path datagen/atari-pong

Set --gpu -1 if use cpu.

(c). Find action-transformation mapping and test:

One transition sample for each action can be manually selected. In folder datagen/demonstration, we have one directory for each dataset to contain the demonstrations. Directory names are shape, pong, with respect to two datasets.

We provide you the demonstrations for all datasets. For example, for Grid World dataset, directory datagen/demonstration/shape contains a file demo.txt, in which each line consists of {img1, img2, action}, showing a transition of this action. Image files img1, img2 are placed in directory datagen/demonstration/shape.

You can either use the demonstrations provided by us, or arbitrarily replace them with samples in the generated dataset manually.

Grid World:

python test.py --gpu 0 --dataset_name shape --data_path datagen/gridworld

Atari Pong:

python test.py --gpu 0 --dataset_name pong --data_path datagen/atari-pong

Set --gpu -1 if use cpu. You can select the model for test using e.g., --test_model_path checkpoint/model_49.pth. The test program will sequentially run the test of feature map visualisation, visual forecasting conditioned on the agent's motion and quantitative test. If you want to disable them, add --visualize_feature 0, --visual_forecasting 0 or --quantitative 0, respectively.

Experiments in Robot Pushing and MPC

Dependencies:

Please visit https://github.com/stepjam/PyRep, and follow the installation on their page to install Pyrep and CoppeliaSim.

Generate Dataset and Train:

  1. Use python -m datagen.roboarm --increment 20 to generate trajectories, as the simulation gets slower, please only generate around 20-100 (--increment) trajectories at a time. When generating a second batch, please use python -m datagen.roboarm --increment 20 --eps [number of eps generated before + increment] for the sake of naming convention.
  2. [Optional] If generated multiple batches of trajectories, use python -m rename --folders [number of folders you generated in step 1] to move all files into a single folder.
  3. Train: python -m train --dataset_name roboarm --data_path datagen/roboarm --size 64 --no_graph --contrastive_coeff 0 --save_path checkpoint
  4. Test: python -m test --dataset_name roboarm --data_path datagen/roboarm --size 64 --no_graph --contrastive_coeff 0 --test_model_path checkpoint/model_49.pth --test_save_path test

Model Predictive Control

Generate data for MPC

Create csv file logging the trajectory IDs and time step you wish to perform MPC on

episodestart_idxend_idx
200029
201837

Run python -m rename_mpc --folders 1 to combine all json state files into one for MPC dataset. Change the --folders argument according to the maximum ID of the trajectories manually selected. Run python -m move_mpc to get all trajectories to the right place.

Test for MPC

python -m mpc_multi

Citation

If you find this code useful for your research, please cite our paper:

@article{yuan2021robotic,
title={Robotic Visuomotor Control with Unsupervised Forward Model Learned from Videos},
author={Yuan, Haoqi and Wu, Ruihai and Zhao, Andrew and Zhang, Haipeng and Ding, Zihan and Dong, Hao},
journal={arXiv preprint arXiv:2103.04301},
year={2021}
}

About

DMotion: Robotic Visuomotor Control with Unsupervised Forward Model Learned from Videos , IROS 2021

Topics

Resources

Stars

5 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

DMotion

Paper

Haoqi Yuan, Ruihai Wu, Andrew Zhao, Haipeng Zhang, Zihan Ding, Hao Dong, "DMotion: Robotic Visuomotor Control with Unsupervised Forward Model Learned from Videos", IROS 2021

arXiv

project page

Experiments in Grid World, Atari Pong

Dependencies:

  • Ubuntu
  • python 3.7
  • dependencies: PIL, numpy, tqdm, gym, pytorch (1.2.0), matplotlib

(a). Generate datasets:

Grid World:

python datagen/gridworld.py

Atari Pong: require gym[atari] to be installed.

python datagen/ataripong.py

(b). Train the model from unlabelled videos:

Grid World:

python train.py --gpu 0 --dataset_name shape --data_path datagen/gridworld

Atari Pong:

python train.py --gpu 0 --dataset_name pong --data_path datagen/atari-pong

Set --gpu -1 if use cpu.

(c). Find action-transformation mapping and test:

One transition sample for each action can be manually selected. In folder datagen/demonstration, we have one directory for each dataset to contain the demonstrations. Directory names are shape, pong, with respect to two datasets.

We provide you the demonstrations for all datasets. For example, for Grid World dataset, directory datagen/demonstration/shape contains a file demo.txt, in which each line consists of {img1, img2, action}, showing a transition of this action. Image files img1, img2 are placed in directory datagen/demonstration/shape.

You can either use the demonstrations provided by us, or arbitrarily replace them with samples in the generated dataset manually.

Grid World:

python test.py --gpu 0 --dataset_name shape --data_path datagen/gridworld

Atari Pong:

python test.py --gpu 0 --dataset_name pong --data_path datagen/atari-pong

Set --gpu -1 if use cpu. You can select the model for test using e.g., --test_model_path checkpoint/model_49.pth. The test program will sequentially run the test of feature map visualisation, visual forecasting conditioned on the agent's motion and quantitative test. If you want to disable them, add --visualize_feature 0, --visual_forecasting 0 or --quantitative 0, respectively.

Experiments in Robot Pushing and MPC

Dependencies:

Please visit https://github.com/stepjam/PyRep, and follow the installation on their page to install Pyrep and CoppeliaSim.

Generate Dataset and Train:

  1. Use python -m datagen.roboarm --increment 20 to generate trajectories, as the simulation gets slower, please only generate around 20-100 (--increment) trajectories at a time. When generating a second batch, please use python -m datagen.roboarm --increment 20 --eps [number of eps generated before + increment] for the sake of naming convention.
  2. [Optional] If generated multiple batches of trajectories, use python -m rename --folders [number of folders you generated in step 1] to move all files into a single folder.
  3. Train: python -m train --dataset_name roboarm --data_path datagen/roboarm --size 64 --no_graph --contrastive_coeff 0 --save_path checkpoint
  4. Test: python -m test --dataset_name roboarm --data_path datagen/roboarm --size 64 --no_graph --contrastive_coeff 0 --test_model_path checkpoint/model_49.pth --test_save_path test

Model Predictive Control

Generate data for MPC

Create csv file logging the trajectory IDs and time step you wish to perform MPC on

episodestart_idxend_idx
200029
201837

Run python -m rename_mpc --folders 1 to combine all json state files into one for MPC dataset. Change the --folders argument according to the maximum ID of the trajectories manually selected. Run python -m move_mpc to get all trajectories to the right place.

Test for MPC

python -m mpc_multi

Citation

If you find this code useful for your research, please cite our paper:

@article{yuan2021robotic,
title={Robotic Visuomotor Control with Unsupervised Forward Model Learned from Videos},
author={Yuan, Haoqi and Wu, Ruihai and Zhao, Andrew and Zhang, Haipeng and Ding, Zihan and Dong, Hao},
journal={arXiv preprint arXiv:2103.04301},
year={2021}
}

About

DMotion: Robotic Visuomotor Control with Unsupervised Forward Model Learned from Videos , IROS 2021

Topics

Resources

Stars

5 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

DMotion

Paper

Haoqi Yuan, Ruihai Wu, Andrew Zhao, Haipeng Zhang, Zihan Ding, Hao Dong, "DMotion: Robotic Visuomotor Control with Unsupervised Forward Model Learned from Videos", IROS 2021

arXiv

project page

Experiments in Grid World, Atari Pong

Dependencies:

  • Ubuntu
  • python 3.7
  • dependencies: PIL, numpy, tqdm, gym, pytorch (1.2.0), matplotlib

(a). Generate datasets:

Grid World:

python datagen/gridworld.py

Atari Pong: require gym[atari] to be installed.

python datagen/ataripong.py

(b). Train the model from unlabelled videos:

Grid World:

python train.py --gpu 0 --dataset_name shape --data_path datagen/gridworld

Atari Pong:

python train.py --gpu 0 --dataset_name pong --data_path datagen/atari-pong

Set --gpu -1 if use cpu.

(c). Find action-transformation mapping and test:

One transition sample for each action can be manually selected. In folder datagen/demonstration, we have one directory for each dataset to contain the demonstrations. Directory names are shape, pong, with respect to two datasets.

We provide you the demonstrations for all datasets. For example, for Grid World dataset, directory datagen/demonstration/shape contains a file demo.txt, in which each line consists of {img1, img2, action}, showing a transition of this action. Image files img1, img2 are placed in directory datagen/demonstration/shape.

You can either use the demonstrations provided by us, or arbitrarily replace them with samples in the generated dataset manually.

Grid World:

python test.py --gpu 0 --dataset_name shape --data_path datagen/gridworld

Atari Pong:

python test.py --gpu 0 --dataset_name pong --data_path datagen/atari-pong

Set --gpu -1 if use cpu. You can select the model for test using e.g., --test_model_path checkpoint/model_49.pth. The test program will sequentially run the test of feature map visualisation, visual forecasting conditioned on the agent's motion and quantitative test. If you want to disable them, add --visualize_feature 0, --visual_forecasting 0 or --quantitative 0, respectively.

Experiments in Robot Pushing and MPC

Dependencies:

Please visit https://github.com/stepjam/PyRep, and follow the installation on their page to install Pyrep and CoppeliaSim.

Generate Dataset and Train:

  1. Use python -m datagen.roboarm --increment 20 to generate trajectories, as the simulation gets slower, please only generate around 20-100 (--increment) trajectories at a time. When generating a second batch, please use python -m datagen.roboarm --increment 20 --eps [number of eps generated before + increment] for the sake of naming convention.
  2. [Optional] If generated multiple batches of trajectories, use python -m rename --folders [number of folders you generated in step 1] to move all files into a single folder.
  3. Train: python -m train --dataset_name roboarm --data_path datagen/roboarm --size 64 --no_graph --contrastive_coeff 0 --save_path checkpoint
  4. Test: python -m test --dataset_name roboarm --data_path datagen/roboarm --size 64 --no_graph --contrastive_coeff 0 --test_model_path checkpoint/model_49.pth --test_save_path test

Model Predictive Control

Generate data for MPC

Create csv file logging the trajectory IDs and time step you wish to perform MPC on

episodestart_idxend_idx
200029
201837

Run python -m rename_mpc --folders 1 to combine all json state files into one for MPC dataset. Change the --folders argument according to the maximum ID of the trajectories manually selected. Run python -m move_mpc to get all trajectories to the right place.

Test for MPC

python -m mpc_multi

Citation

If you find this code useful for your research, please cite our paper:

@article{yuan2021robotic,
title={Robotic Visuomotor Control with Unsupervised Forward Model Learned from Videos},
author={Yuan, Haoqi and Wu, Ruihai and Zhao, Andrew and Zhang, Haipeng and Ding, Zihan and Dong, Hao},
journal={arXiv preprint arXiv:2103.04301},
year={2021}
}

About

DMotion: Robotic Visuomotor Control with Unsupervised Forward Model Learned from Videos , IROS 2021

Topics

Resources

Stars

5 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

DMotion

Paper

Haoqi Yuan, Ruihai Wu, Andrew Zhao, Haipeng Zhang, Zihan Ding, Hao Dong, "DMotion: Robotic Visuomotor Control with Unsupervised Forward Model Learned from Videos", IROS 2021

arXiv

project page

Experiments in Grid World, Atari Pong

Dependencies:

  • Ubuntu
  • python 3.7
  • dependencies: PIL, numpy, tqdm, gym, pytorch (1.2.0), matplotlib

(a). Generate datasets:

Grid World:

python datagen/gridworld.py

Atari Pong: require gym[atari] to be installed.

python datagen/ataripong.py

(b). Train the model from unlabelled videos:

Grid World:

python train.py --gpu 0 --dataset_name shape --data_path datagen/gridworld

Atari Pong:

python train.py --gpu 0 --dataset_name pong --data_path datagen/atari-pong

Set --gpu -1 if use cpu.

(c). Find action-transformation mapping and test:

One transition sample for each action can be manually selected. In folder datagen/demonstration, we have one directory for each dataset to contain the demonstrations. Directory names are shape, pong, with respect to two datasets.

We provide you the demonstrations for all datasets. For example, for Grid World dataset, directory datagen/demonstration/shape contains a file demo.txt, in which each line consists of {img1, img2, action}, showing a transition of this action. Image files img1, img2 are placed in directory datagen/demonstration/shape.

You can either use the demonstrations provided by us, or arbitrarily replace them with samples in the generated dataset manually.

Grid World:

python test.py --gpu 0 --dataset_name shape --data_path datagen/gridworld

Atari Pong:

python test.py --gpu 0 --dataset_name pong --data_path datagen/atari-pong

Set --gpu -1 if use cpu. You can select the model for test using e.g., --test_model_path checkpoint/model_49.pth. The test program will sequentially run the test of feature map visualisation, visual forecasting conditioned on the agent's motion and quantitative test. If you want to disable them, add --visualize_feature 0, --visual_forecasting 0 or --quantitative 0, respectively.

Experiments in Robot Pushing and MPC

Dependencies:

Please visit https://github.com/stepjam/PyRep, and follow the installation on their page to install Pyrep and CoppeliaSim.

Generate Dataset and Train:

  1. Use python -m datagen.roboarm --increment 20 to generate trajectories, as the simulation gets slower, please only generate around 20-100 (--increment) trajectories at a time. When generating a second batch, please use python -m datagen.roboarm --increment 20 --eps [number of eps generated before + increment] for the sake of naming convention.
  2. [Optional] If generated multiple batches of trajectories, use python -m rename --folders [number of folders you generated in step 1] to move all files into a single folder.
  3. Train: python -m train --dataset_name roboarm --data_path datagen/roboarm --size 64 --no_graph --contrastive_coeff 0 --save_path checkpoint
  4. Test: python -m test --dataset_name roboarm --data_path datagen/roboarm --size 64 --no_graph --contrastive_coeff 0 --test_model_path checkpoint/model_49.pth --test_save_path test

Model Predictive Control

Generate data for MPC

Create csv file logging the trajectory IDs and time step you wish to perform MPC on

episodestart_idxend_idx
200029
201837

Run python -m rename_mpc --folders 1 to combine all json state files into one for MPC dataset. Change the --folders argument according to the maximum ID of the trajectories manually selected. Run python -m move_mpc to get all trajectories to the right place.

Test for MPC

python -m mpc_multi

Citation

If you find this code useful for your research, please cite our paper:

@article{yuan2021robotic,
title={Robotic Visuomotor Control with Unsupervised Forward Model Learned from Videos},
author={Yuan, Haoqi and Wu, Ruihai and Zhao, Andrew and Zhang, Haipeng and Ding, Zihan and Dong, Hao},
journal={arXiv preprint arXiv:2103.04301},
year={2021}
}

About

DMotion: Robotic Visuomotor Control with Unsupervised Forward Model Learned from Videos , IROS 2021

Topics

Resources

Stars

5 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

DMotion

Paper

Haoqi Yuan, Ruihai Wu, Andrew Zhao, Haipeng Zhang, Zihan Ding, Hao Dong, "DMotion: Robotic Visuomotor Control with Unsupervised Forward Model Learned from Videos", IROS 2021

arXiv

project page

Experiments in Grid World, Atari Pong

Dependencies:

  • Ubuntu
  • python 3.7
  • dependencies: PIL, numpy, tqdm, gym, pytorch (1.2.0), matplotlib

(a). Generate datasets:

Grid World:

python datagen/gridworld.py

Atari Pong: require gym[atari] to be installed.

python datagen/ataripong.py

(b). Train the model from unlabelled videos:

Grid World:

python train.py --gpu 0 --dataset_name shape --data_path datagen/gridworld

Atari Pong:

python train.py --gpu 0 --dataset_name pong --data_path datagen/atari-pong

Set --gpu -1 if use cpu.

(c). Find action-transformation mapping and test:

One transition sample for each action can be manually selected. In folder datagen/demonstration, we have one directory for each dataset to contain the demonstrations. Directory names are shape, pong, with respect to two datasets.

We provide you the demonstrations for all datasets. For example, for Grid World dataset, directory datagen/demonstration/shape contains a file demo.txt, in which each line consists of {img1, img2, action}, showing a transition of this action. Image files img1, img2 are placed in directory datagen/demonstration/shape.

You can either use the demonstrations provided by us, or arbitrarily replace them with samples in the generated dataset manually.

Grid World:

python test.py --gpu 0 --dataset_name shape --data_path datagen/gridworld

Atari Pong:

python test.py --gpu 0 --dataset_name pong --data_path datagen/atari-pong

Set --gpu -1 if use cpu. You can select the model for test using e.g., --test_model_path checkpoint/model_49.pth. The test program will sequentially run the test of feature map visualisation, visual forecasting conditioned on the agent's motion and quantitative test. If you want to disable them, add --visualize_feature 0, --visual_forecasting 0 or --quantitative 0, respectively.

Experiments in Robot Pushing and MPC

Dependencies:

Please visit https://github.com/stepjam/PyRep, and follow the installation on their page to install Pyrep and CoppeliaSim.

Generate Dataset and Train:

  1. Use python -m datagen.roboarm --increment 20 to generate trajectories, as the simulation gets slower, please only generate around 20-100 (--increment) trajectories at a time. When generating a second batch, please use python -m datagen.roboarm --increment 20 --eps [number of eps generated before + increment] for the sake of naming convention.
  2. [Optional] If generated multiple batches of trajectories, use python -m rename --folders [number of folders you generated in step 1] to move all files into a single folder.
  3. Train: python -m train --dataset_name roboarm --data_path datagen/roboarm --size 64 --no_graph --contrastive_coeff 0 --save_path checkpoint
  4. Test: python -m test --dataset_name roboarm --data_path datagen/roboarm --size 64 --no_graph --contrastive_coeff 0 --test_model_path checkpoint/model_49.pth --test_save_path test

Model Predictive Control

Generate data for MPC

Create csv file logging the trajectory IDs and time step you wish to perform MPC on

episodestart_idxend_idx
200029
201837

Run python -m rename_mpc --folders 1 to combine all json state files into one for MPC dataset. Change the --folders argument according to the maximum ID of the trajectories manually selected. Run python -m move_mpc to get all trajectories to the right place.

Test for MPC

python -m mpc_multi

Citation

If you find this code useful for your research, please cite our paper:

@article{yuan2021robotic,
title={Robotic Visuomotor Control with Unsupervised Forward Model Learned from Videos},
author={Yuan, Haoqi and Wu, Ruihai and Zhao, Andrew and Zhang, Haipeng and Ding, Zihan and Dong, Hao},
journal={arXiv preprint arXiv:2103.04301},
year={2021}
}

About

DMotion: Robotic Visuomotor Control with Unsupervised Forward Model Learned from Videos , IROS 2021

Topics

Resources

Stars

5 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages