Latest commit

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Frequency-aware Decomposition Network (FDN)

Code and data will be made available upon acceptance.

Research highlights

  1. Proposes a learning-based, sensorless wrench forecasting method for contact- and vibration-rich robotic interactions.

  2. Captures high-frequency contact transients and local peaks of the interaction wrench through decomposition-based probabilistic modeling and frequency-aware architectures.

  3. Enhances performance via transfer learning from a large-scale open-source robot dataset to the domain-specific hydraulic manipulation setting.

Key designs

  • Decomposition-based probabilistic modeling decomposes wrench signal into low-frequency trend and high-frequency residual, and models the trend with pointwise regression and the residual with conditional distribution.
  • Proprioception-to-wrench transfer learning transfers learned representation from an open source contact-rich robot dataset to the downstream hydraulic manipulation setting.

  • Frequency-awareness enforces frequency band prior to the outputs and enhances input spectra with learnable filters.

Results

We collect data from 12 hydraulic grinding manipulations as follows:

Our FDN model accurately forecasts contact- and vibration-rich wrench signals without physical F/T sensors, as shown in the right panels.

FDN is especially superior in the high-frequency band accuracy, thereby achieving the best full-band score (CRPS).

Ablation studies further demonstrate the effectiveness of each architectural component of FDN.

Transfer learning from the RH20T dataset further improves generalization, despite heterogeneous task, embodiment, and actuation settings between the two datasets.

Getting started

Download datasets

We share preprocessed datasets only, which can be readily used in the training. We're currently unable to open our raw dataset. You may check the preprocessing codes from:

FDN/
┣ data/
┃ ┣ data_hydraulic/
┃ ┣ data_rh20t/
┃ ┣ **process_data_hydraulic.py**
┃ ┗ **process_data_rh20t.py**
...
  1. Download *.tar.gz files and move them to the top project directory.

Your project directory should look like:

FDN/
┣ analysis/
┣ data/
┣ exp/
┣ layers/
┣ models/
┣ utils/
┣ .gitignore
┣ README.md
┣ **data_hydraulic_processed.tar.gz****data_rh20t_processed_260216.tar.gz**
┗ requirements.txt
  1. Untar files using:
tar -xvf data_hydraulic_processed.tar.gz
tar -xvf data_rh20t_processed_260216.tar.gz
  1. Install requirements in your environment. We use python==3.10 and torch==2.6.0+cu118.
pip install -r requirements.txt --extra-index-url https://download.pytorch.org/whl/cu118

We also support the use of the MPS backend on macOS devices. In such cases, install requirements using:

pip install -r requirements_mps.txt

Train the models

You may reproduce the training results provided in our paper as follows. While training, you can monitor the training process using TensorBoard by tensorboard --logdir exp/runs.

Our code always runs 3 training runs in parallel. If this causes issues on your machine, consider decreasing the default --num_parallel_runs in exp/helper.py.

1. Run all FDN numerical experiments

# This includes training from scratch, pretraining & fine-tuning,# ablation studies, transfer learning analyses, and additional sensitivity analyses.
bash exp/scripts/run_exp_FDN.sh

2. Train baselines

# This includes all Point2Point, Seq2Point, Seq2Seq baselines.
bash exp/scripts/run_exp_Baselines.sh

By default, the training results are stored at exp/runs directory. Checkpoints are saved every epoch as:

# exp/trainer.pyclassTrainerdef_save_checkpoint(self, fname: str):
model_instance=get_model(self.model)
torch.save(
{ # model state_dict"state_dict": self._copy_state_dict(model_instance.state_dict()),
# model configuration parameters"configs": deepcopy(self.configs),
# input/output normalization stats"scale_params": deepcopy(self.dataset_train.scale_params),
# optimizer state_dict"optimizer": self._copy_state_dict(self.optimizer.state_dict()),
},
fname,
)

You can use the checkpoint items as:

# See lines 170- of analysis/evaluate_models.pyckpt=torch.load(ckpt_path, map_location="cpu", weights_only=False)
configs=ckpt["configs"]
state_dict=ckpt["state_dict"]
scale_params=ckpt["scale_params"]
model=model_cls.Model(configs)
model.load_state_dict(state_dict)

Evaluate the trained models

After training, running below will generate exp/eval_*.txt and visualization files.

python analysis/evaluate_models.py

See function evaluate_predictions in analysis/evaluate_models.py to check our evaluation logic.

Acknowledgements

We appreciate valuable inspirations from the projects below:

Contact

If you have any concerns or additional requests, please feel free to contact lhbsharp@khu.ac.kr or leehyeonbeen@vt.edu. You may also create issues in this repo.

Citation

If you find our work useful, please consider citing our paper:

@article{lee2026frequency,
title={Frequency-aware Decomposition Learning for Sensorless Wrench Forecasting on a Vibration-rich Hydraulic Manipulator},
author={Lee, Hyeonbeen and Jung, Min-Jae and Yeu, Tae-Kyeong and Han, Jong-Boo and Park, Daegil and Kim, Jin-Gyun},
journal={arXiv preprint arXiv:2604.12905},
year={2026}
}

About

Frequency-aware Decomposition Learning for Sensorless Wrench Forecasting on a Vibration-rich Hydraulic Manipulator

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

, '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

Latest commit

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Frequency-aware Decomposition Network (FDN)

Code and data will be made available upon acceptance.

Research highlights

  1. Proposes a learning-based, sensorless wrench forecasting method for contact- and vibration-rich robotic interactions.

  2. Captures high-frequency contact transients and local peaks of the interaction wrench through decomposition-based probabilistic modeling and frequency-aware architectures.

  3. Enhances performance via transfer learning from a large-scale open-source robot dataset to the domain-specific hydraulic manipulation setting.

Key designs

  • Decomposition-based probabilistic modeling decomposes wrench signal into low-frequency trend and high-frequency residual, and models the trend with pointwise regression and the residual with conditional distribution.
  • Proprioception-to-wrench transfer learning transfers learned representation from an open source contact-rich robot dataset to the downstream hydraulic manipulation setting.

  • Frequency-awareness enforces frequency band prior to the outputs and enhances input spectra with learnable filters.

Results

We collect data from 12 hydraulic grinding manipulations as follows:

Our FDN model accurately forecasts contact- and vibration-rich wrench signals without physical F/T sensors, as shown in the right panels.

FDN is especially superior in the high-frequency band accuracy, thereby achieving the best full-band score (CRPS).

Ablation studies further demonstrate the effectiveness of each architectural component of FDN.

Transfer learning from the RH20T dataset further improves generalization, despite heterogeneous task, embodiment, and actuation settings between the two datasets.

Getting started

Download datasets

We share preprocessed datasets only, which can be readily used in the training. We're currently unable to open our raw dataset. You may check the preprocessing codes from:

FDN/
┣ data/
┃ ┣ data_hydraulic/
┃ ┣ data_rh20t/
┃ ┣ **process_data_hydraulic.py**
┃ ┗ **process_data_rh20t.py**
...
  1. Download *.tar.gz files and move them to the top project directory.

Your project directory should look like:

FDN/
┣ analysis/
┣ data/
┣ exp/
┣ layers/
┣ models/
┣ utils/
┣ .gitignore
┣ README.md
┣ **data_hydraulic_processed.tar.gz****data_rh20t_processed_260216.tar.gz**
┗ requirements.txt
  1. Untar files using:
tar -xvf data_hydraulic_processed.tar.gz
tar -xvf data_rh20t_processed_260216.tar.gz
  1. Install requirements in your environment. We use python==3.10 and torch==2.6.0+cu118.
pip install -r requirements.txt --extra-index-url https://download.pytorch.org/whl/cu118

We also support the use of the MPS backend on macOS devices. In such cases, install requirements using:

pip install -r requirements_mps.txt

Train the models

You may reproduce the training results provided in our paper as follows. While training, you can monitor the training process using TensorBoard by tensorboard --logdir exp/runs.

Our code always runs 3 training runs in parallel. If this causes issues on your machine, consider decreasing the default --num_parallel_runs in exp/helper.py.

1. Run all FDN numerical experiments

# This includes training from scratch, pretraining & fine-tuning,# ablation studies, transfer learning analyses, and additional sensitivity analyses.
bash exp/scripts/run_exp_FDN.sh

2. Train baselines

# This includes all Point2Point, Seq2Point, Seq2Seq baselines.
bash exp/scripts/run_exp_Baselines.sh

By default, the training results are stored at exp/runs directory. Checkpoints are saved every epoch as:

# exp/trainer.pyclassTrainerdef_save_checkpoint(self, fname: str):
model_instance=get_model(self.model)
torch.save(
{ # model state_dict"state_dict": self._copy_state_dict(model_instance.state_dict()),
# model configuration parameters"configs": deepcopy(self.configs),
# input/output normalization stats"scale_params": deepcopy(self.dataset_train.scale_params),
# optimizer state_dict"optimizer": self._copy_state_dict(self.optimizer.state_dict()),
},
fname,
)

You can use the checkpoint items as:

# See lines 170- of analysis/evaluate_models.pyckpt=torch.load(ckpt_path, map_location="cpu", weights_only=False)
configs=ckpt["configs"]
state_dict=ckpt["state_dict"]
scale_params=ckpt["scale_params"]
model=model_cls.Model(configs)
model.load_state_dict(state_dict)

Evaluate the trained models

After training, running below will generate exp/eval_*.txt and visualization files.

python analysis/evaluate_models.py

See function evaluate_predictions in analysis/evaluate_models.py to check our evaluation logic.

Acknowledgements

We appreciate valuable inspirations from the projects below:

Contact

If you have any concerns or additional requests, please feel free to contact lhbsharp@khu.ac.kr or leehyeonbeen@vt.edu. You may also create issues in this repo.

Citation

If you find our work useful, please consider citing our paper:

@article{lee2026frequency,
title={Frequency-aware Decomposition Learning for Sensorless Wrench Forecasting on a Vibration-rich Hydraulic Manipulator},
author={Lee, Hyeonbeen and Jung, Min-Jae and Yeu, Tae-Kyeong and Han, Jong-Boo and Park, Daegil and Kim, Jin-Gyun},
journal={arXiv preprint arXiv:2604.12905},
year={2026}
}

About

Frequency-aware Decomposition Learning for Sensorless Wrench Forecasting on a Vibration-rich Hydraulic Manipulator

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

, '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

Latest commit

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Frequency-aware Decomposition Network (FDN)

Code and data will be made available upon acceptance.

Research highlights

  1. Proposes a learning-based, sensorless wrench forecasting method for contact- and vibration-rich robotic interactions.

  2. Captures high-frequency contact transients and local peaks of the interaction wrench through decomposition-based probabilistic modeling and frequency-aware architectures.

  3. Enhances performance via transfer learning from a large-scale open-source robot dataset to the domain-specific hydraulic manipulation setting.

Key designs

  • Decomposition-based probabilistic modeling decomposes wrench signal into low-frequency trend and high-frequency residual, and models the trend with pointwise regression and the residual with conditional distribution.
  • Proprioception-to-wrench transfer learning transfers learned representation from an open source contact-rich robot dataset to the downstream hydraulic manipulation setting.

  • Frequency-awareness enforces frequency band prior to the outputs and enhances input spectra with learnable filters.

Results

We collect data from 12 hydraulic grinding manipulations as follows:

Our FDN model accurately forecasts contact- and vibration-rich wrench signals without physical F/T sensors, as shown in the right panels.

FDN is especially superior in the high-frequency band accuracy, thereby achieving the best full-band score (CRPS).

Ablation studies further demonstrate the effectiveness of each architectural component of FDN.

Transfer learning from the RH20T dataset further improves generalization, despite heterogeneous task, embodiment, and actuation settings between the two datasets.

Getting started

Download datasets

We share preprocessed datasets only, which can be readily used in the training. We're currently unable to open our raw dataset. You may check the preprocessing codes from:

FDN/
┣ data/
┃ ┣ data_hydraulic/
┃ ┣ data_rh20t/
┃ ┣ **process_data_hydraulic.py**
┃ ┗ **process_data_rh20t.py**
...
  1. Download *.tar.gz files and move them to the top project directory.

Your project directory should look like:

FDN/
┣ analysis/
┣ data/
┣ exp/
┣ layers/
┣ models/
┣ utils/
┣ .gitignore
┣ README.md
┣ **data_hydraulic_processed.tar.gz****data_rh20t_processed_260216.tar.gz**
┗ requirements.txt
  1. Untar files using:
tar -xvf data_hydraulic_processed.tar.gz
tar -xvf data_rh20t_processed_260216.tar.gz
  1. Install requirements in your environment. We use python==3.10 and torch==2.6.0+cu118.
pip install -r requirements.txt --extra-index-url https://download.pytorch.org/whl/cu118

We also support the use of the MPS backend on macOS devices. In such cases, install requirements using:

pip install -r requirements_mps.txt

Train the models

You may reproduce the training results provided in our paper as follows. While training, you can monitor the training process using TensorBoard by tensorboard --logdir exp/runs.

Our code always runs 3 training runs in parallel. If this causes issues on your machine, consider decreasing the default --num_parallel_runs in exp/helper.py.

1. Run all FDN numerical experiments

# This includes training from scratch, pretraining & fine-tuning,# ablation studies, transfer learning analyses, and additional sensitivity analyses.
bash exp/scripts/run_exp_FDN.sh

2. Train baselines

# This includes all Point2Point, Seq2Point, Seq2Seq baselines.
bash exp/scripts/run_exp_Baselines.sh

By default, the training results are stored at exp/runs directory. Checkpoints are saved every epoch as:

# exp/trainer.pyclassTrainerdef_save_checkpoint(self, fname: str):
model_instance=get_model(self.model)
torch.save(
{ # model state_dict"state_dict": self._copy_state_dict(model_instance.state_dict()),
# model configuration parameters"configs": deepcopy(self.configs),
# input/output normalization stats"scale_params": deepcopy(self.dataset_train.scale_params),
# optimizer state_dict"optimizer": self._copy_state_dict(self.optimizer.state_dict()),
},
fname,
)

You can use the checkpoint items as:

# See lines 170- of analysis/evaluate_models.pyckpt=torch.load(ckpt_path, map_location="cpu", weights_only=False)
configs=ckpt["configs"]
state_dict=ckpt["state_dict"]
scale_params=ckpt["scale_params"]
model=model_cls.Model(configs)
model.load_state_dict(state_dict)

Evaluate the trained models

After training, running below will generate exp/eval_*.txt and visualization files.

python analysis/evaluate_models.py

See function evaluate_predictions in analysis/evaluate_models.py to check our evaluation logic.

Acknowledgements

We appreciate valuable inspirations from the projects below:

Contact

If you have any concerns or additional requests, please feel free to contact lhbsharp@khu.ac.kr or leehyeonbeen@vt.edu. You may also create issues in this repo.

Citation

If you find our work useful, please consider citing our paper:

@article{lee2026frequency,
title={Frequency-aware Decomposition Learning for Sensorless Wrench Forecasting on a Vibration-rich Hydraulic Manipulator},
author={Lee, Hyeonbeen and Jung, Min-Jae and Yeu, Tae-Kyeong and Han, Jong-Boo and Park, Daegil and Kim, Jin-Gyun},
journal={arXiv preprint arXiv:2604.12905},
year={2026}
}

About

Frequency-aware Decomposition Learning for Sensorless Wrench Forecasting on a Vibration-rich Hydraulic Manipulator

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

, '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

Latest commit

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Frequency-aware Decomposition Network (FDN)

Code and data will be made available upon acceptance.

Research highlights

  1. Proposes a learning-based, sensorless wrench forecasting method for contact- and vibration-rich robotic interactions.

  2. Captures high-frequency contact transients and local peaks of the interaction wrench through decomposition-based probabilistic modeling and frequency-aware architectures.

  3. Enhances performance via transfer learning from a large-scale open-source robot dataset to the domain-specific hydraulic manipulation setting.

Key designs

  • Decomposition-based probabilistic modeling decomposes wrench signal into low-frequency trend and high-frequency residual, and models the trend with pointwise regression and the residual with conditional distribution.
  • Proprioception-to-wrench transfer learning transfers learned representation from an open source contact-rich robot dataset to the downstream hydraulic manipulation setting.

  • Frequency-awareness enforces frequency band prior to the outputs and enhances input spectra with learnable filters.

Results

We collect data from 12 hydraulic grinding manipulations as follows:

Our FDN model accurately forecasts contact- and vibration-rich wrench signals without physical F/T sensors, as shown in the right panels.

FDN is especially superior in the high-frequency band accuracy, thereby achieving the best full-band score (CRPS).

Ablation studies further demonstrate the effectiveness of each architectural component of FDN.

Transfer learning from the RH20T dataset further improves generalization, despite heterogeneous task, embodiment, and actuation settings between the two datasets.

Getting started

Download datasets

We share preprocessed datasets only, which can be readily used in the training. We're currently unable to open our raw dataset. You may check the preprocessing codes from:

FDN/
┣ data/
┃ ┣ data_hydraulic/
┃ ┣ data_rh20t/
┃ ┣ **process_data_hydraulic.py**
┃ ┗ **process_data_rh20t.py**
...
  1. Download *.tar.gz files and move them to the top project directory.

Your project directory should look like:

FDN/
┣ analysis/
┣ data/
┣ exp/
┣ layers/
┣ models/
┣ utils/
┣ .gitignore
┣ README.md
┣ **data_hydraulic_processed.tar.gz****data_rh20t_processed_260216.tar.gz**
┗ requirements.txt
  1. Untar files using:
tar -xvf data_hydraulic_processed.tar.gz
tar -xvf data_rh20t_processed_260216.tar.gz
  1. Install requirements in your environment. We use python==3.10 and torch==2.6.0+cu118.
pip install -r requirements.txt --extra-index-url https://download.pytorch.org/whl/cu118

We also support the use of the MPS backend on macOS devices. In such cases, install requirements using:

pip install -r requirements_mps.txt

Train the models

You may reproduce the training results provided in our paper as follows. While training, you can monitor the training process using TensorBoard by tensorboard --logdir exp/runs.

Our code always runs 3 training runs in parallel. If this causes issues on your machine, consider decreasing the default --num_parallel_runs in exp/helper.py.

1. Run all FDN numerical experiments

# This includes training from scratch, pretraining & fine-tuning,# ablation studies, transfer learning analyses, and additional sensitivity analyses.
bash exp/scripts/run_exp_FDN.sh

2. Train baselines

# This includes all Point2Point, Seq2Point, Seq2Seq baselines.
bash exp/scripts/run_exp_Baselines.sh

By default, the training results are stored at exp/runs directory. Checkpoints are saved every epoch as:

# exp/trainer.pyclassTrainerdef_save_checkpoint(self, fname: str):
model_instance=get_model(self.model)
torch.save(
{ # model state_dict"state_dict": self._copy_state_dict(model_instance.state_dict()),
# model configuration parameters"configs": deepcopy(self.configs),
# input/output normalization stats"scale_params": deepcopy(self.dataset_train.scale_params),
# optimizer state_dict"optimizer": self._copy_state_dict(self.optimizer.state_dict()),
},
fname,
)

You can use the checkpoint items as:

# See lines 170- of analysis/evaluate_models.pyckpt=torch.load(ckpt_path, map_location="cpu", weights_only=False)
configs=ckpt["configs"]
state_dict=ckpt["state_dict"]
scale_params=ckpt["scale_params"]
model=model_cls.Model(configs)
model.load_state_dict(state_dict)

Evaluate the trained models

After training, running below will generate exp/eval_*.txt and visualization files.

python analysis/evaluate_models.py

See function evaluate_predictions in analysis/evaluate_models.py to check our evaluation logic.

Acknowledgements

We appreciate valuable inspirations from the projects below:

Contact

If you have any concerns or additional requests, please feel free to contact lhbsharp@khu.ac.kr or leehyeonbeen@vt.edu. You may also create issues in this repo.

Citation

If you find our work useful, please consider citing our paper:

@article{lee2026frequency,
title={Frequency-aware Decomposition Learning for Sensorless Wrench Forecasting on a Vibration-rich Hydraulic Manipulator},
author={Lee, Hyeonbeen and Jung, Min-Jae and Yeu, Tae-Kyeong and Han, Jong-Boo and Park, Daegil and Kim, Jin-Gyun},
journal={arXiv preprint arXiv:2604.12905},
year={2026}
}

About

Frequency-aware Decomposition Learning for Sensorless Wrench Forecasting on a Vibration-rich Hydraulic Manipulator

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

, '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

Latest commit

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Frequency-aware Decomposition Network (FDN)

Code and data will be made available upon acceptance.

Research highlights

  1. Proposes a learning-based, sensorless wrench forecasting method for contact- and vibration-rich robotic interactions.

  2. Captures high-frequency contact transients and local peaks of the interaction wrench through decomposition-based probabilistic modeling and frequency-aware architectures.

  3. Enhances performance via transfer learning from a large-scale open-source robot dataset to the domain-specific hydraulic manipulation setting.

Key designs

  • Decomposition-based probabilistic modeling decomposes wrench signal into low-frequency trend and high-frequency residual, and models the trend with pointwise regression and the residual with conditional distribution.
  • Proprioception-to-wrench transfer learning transfers learned representation from an open source contact-rich robot dataset to the downstream hydraulic manipulation setting.

  • Frequency-awareness enforces frequency band prior to the outputs and enhances input spectra with learnable filters.

Results

We collect data from 12 hydraulic grinding manipulations as follows:

Our FDN model accurately forecasts contact- and vibration-rich wrench signals without physical F/T sensors, as shown in the right panels.

FDN is especially superior in the high-frequency band accuracy, thereby achieving the best full-band score (CRPS).

Ablation studies further demonstrate the effectiveness of each architectural component of FDN.

Transfer learning from the RH20T dataset further improves generalization, despite heterogeneous task, embodiment, and actuation settings between the two datasets.

Getting started

Download datasets

We share preprocessed datasets only, which can be readily used in the training. We're currently unable to open our raw dataset. You may check the preprocessing codes from:

FDN/
┣ data/
┃ ┣ data_hydraulic/
┃ ┣ data_rh20t/
┃ ┣ **process_data_hydraulic.py**
┃ ┗ **process_data_rh20t.py**
...
  1. Download *.tar.gz files and move them to the top project directory.

Your project directory should look like:

FDN/
┣ analysis/
┣ data/
┣ exp/
┣ layers/
┣ models/
┣ utils/
┣ .gitignore
┣ README.md
┣ **data_hydraulic_processed.tar.gz****data_rh20t_processed_260216.tar.gz**
┗ requirements.txt
  1. Untar files using:
tar -xvf data_hydraulic_processed.tar.gz
tar -xvf data_rh20t_processed_260216.tar.gz
  1. Install requirements in your environment. We use python==3.10 and torch==2.6.0+cu118.
pip install -r requirements.txt --extra-index-url https://download.pytorch.org/whl/cu118

We also support the use of the MPS backend on macOS devices. In such cases, install requirements using:

pip install -r requirements_mps.txt

Train the models

You may reproduce the training results provided in our paper as follows. While training, you can monitor the training process using TensorBoard by tensorboard --logdir exp/runs.

Our code always runs 3 training runs in parallel. If this causes issues on your machine, consider decreasing the default --num_parallel_runs in exp/helper.py.

1. Run all FDN numerical experiments

# This includes training from scratch, pretraining & fine-tuning,# ablation studies, transfer learning analyses, and additional sensitivity analyses.
bash exp/scripts/run_exp_FDN.sh

2. Train baselines

# This includes all Point2Point, Seq2Point, Seq2Seq baselines.
bash exp/scripts/run_exp_Baselines.sh

By default, the training results are stored at exp/runs directory. Checkpoints are saved every epoch as:

# exp/trainer.pyclassTrainerdef_save_checkpoint(self, fname: str):
model_instance=get_model(self.model)
torch.save(
{ # model state_dict"state_dict": self._copy_state_dict(model_instance.state_dict()),
# model configuration parameters"configs": deepcopy(self.configs),
# input/output normalization stats"scale_params": deepcopy(self.dataset_train.scale_params),
# optimizer state_dict"optimizer": self._copy_state_dict(self.optimizer.state_dict()),
},
fname,
)

You can use the checkpoint items as:

# See lines 170- of analysis/evaluate_models.pyckpt=torch.load(ckpt_path, map_location="cpu", weights_only=False)
configs=ckpt["configs"]
state_dict=ckpt["state_dict"]
scale_params=ckpt["scale_params"]
model=model_cls.Model(configs)
model.load_state_dict(state_dict)

Evaluate the trained models

After training, running below will generate exp/eval_*.txt and visualization files.

python analysis/evaluate_models.py

See function evaluate_predictions in analysis/evaluate_models.py to check our evaluation logic.

Acknowledgements

We appreciate valuable inspirations from the projects below:

Contact

If you have any concerns or additional requests, please feel free to contact lhbsharp@khu.ac.kr or leehyeonbeen@vt.edu. You may also create issues in this repo.

Citation

If you find our work useful, please consider citing our paper:

@article{lee2026frequency,
title={Frequency-aware Decomposition Learning for Sensorless Wrench Forecasting on a Vibration-rich Hydraulic Manipulator},
author={Lee, Hyeonbeen and Jung, Min-Jae and Yeu, Tae-Kyeong and Han, Jong-Boo and Park, Daegil and Kim, Jin-Gyun},
journal={arXiv preprint arXiv:2604.12905},
year={2026}
}

About

Frequency-aware Decomposition Learning for Sensorless Wrench Forecasting on a Vibration-rich Hydraulic Manipulator

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

, '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

Latest commit

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Frequency-aware Decomposition Network (FDN)

Code and data will be made available upon acceptance.

Research highlights

  1. Proposes a learning-based, sensorless wrench forecasting method for contact- and vibration-rich robotic interactions.

  2. Captures high-frequency contact transients and local peaks of the interaction wrench through decomposition-based probabilistic modeling and frequency-aware architectures.

  3. Enhances performance via transfer learning from a large-scale open-source robot dataset to the domain-specific hydraulic manipulation setting.

Key designs

  • Decomposition-based probabilistic modeling decomposes wrench signal into low-frequency trend and high-frequency residual, and models the trend with pointwise regression and the residual with conditional distribution.
  • Proprioception-to-wrench transfer learning transfers learned representation from an open source contact-rich robot dataset to the downstream hydraulic manipulation setting.

  • Frequency-awareness enforces frequency band prior to the outputs and enhances input spectra with learnable filters.

Results

We collect data from 12 hydraulic grinding manipulations as follows:

Our FDN model accurately forecasts contact- and vibration-rich wrench signals without physical F/T sensors, as shown in the right panels.

FDN is especially superior in the high-frequency band accuracy, thereby achieving the best full-band score (CRPS).

Ablation studies further demonstrate the effectiveness of each architectural component of FDN.

Transfer learning from the RH20T dataset further improves generalization, despite heterogeneous task, embodiment, and actuation settings between the two datasets.

Getting started

Download datasets

We share preprocessed datasets only, which can be readily used in the training. We're currently unable to open our raw dataset. You may check the preprocessing codes from:

FDN/
┣ data/
┃ ┣ data_hydraulic/
┃ ┣ data_rh20t/
┃ ┣ **process_data_hydraulic.py**
┃ ┗ **process_data_rh20t.py**
...
  1. Download *.tar.gz files and move them to the top project directory.

Your project directory should look like:

FDN/
┣ analysis/
┣ data/
┣ exp/
┣ layers/
┣ models/
┣ utils/
┣ .gitignore
┣ README.md
┣ **data_hydraulic_processed.tar.gz****data_rh20t_processed_260216.tar.gz**
┗ requirements.txt
  1. Untar files using:
tar -xvf data_hydraulic_processed.tar.gz
tar -xvf data_rh20t_processed_260216.tar.gz
  1. Install requirements in your environment. We use python==3.10 and torch==2.6.0+cu118.
pip install -r requirements.txt --extra-index-url https://download.pytorch.org/whl/cu118

We also support the use of the MPS backend on macOS devices. In such cases, install requirements using:

pip install -r requirements_mps.txt

Train the models

You may reproduce the training results provided in our paper as follows. While training, you can monitor the training process using TensorBoard by tensorboard --logdir exp/runs.

Our code always runs 3 training runs in parallel. If this causes issues on your machine, consider decreasing the default --num_parallel_runs in exp/helper.py.

1. Run all FDN numerical experiments

# This includes training from scratch, pretraining & fine-tuning,# ablation studies, transfer learning analyses, and additional sensitivity analyses.
bash exp/scripts/run_exp_FDN.sh

2. Train baselines

# This includes all Point2Point, Seq2Point, Seq2Seq baselines.
bash exp/scripts/run_exp_Baselines.sh

By default, the training results are stored at exp/runs directory. Checkpoints are saved every epoch as:

# exp/trainer.pyclassTrainerdef_save_checkpoint(self, fname: str):
model_instance=get_model(self.model)
torch.save(
{ # model state_dict"state_dict": self._copy_state_dict(model_instance.state_dict()),
# model configuration parameters"configs": deepcopy(self.configs),
# input/output normalization stats"scale_params": deepcopy(self.dataset_train.scale_params),
# optimizer state_dict"optimizer": self._copy_state_dict(self.optimizer.state_dict()),
},
fname,
)

You can use the checkpoint items as:

# See lines 170- of analysis/evaluate_models.pyckpt=torch.load(ckpt_path, map_location="cpu", weights_only=False)
configs=ckpt["configs"]
state_dict=ckpt["state_dict"]
scale_params=ckpt["scale_params"]
model=model_cls.Model(configs)
model.load_state_dict(state_dict)

Evaluate the trained models

After training, running below will generate exp/eval_*.txt and visualization files.

python analysis/evaluate_models.py

See function evaluate_predictions in analysis/evaluate_models.py to check our evaluation logic.

Acknowledgements

We appreciate valuable inspirations from the projects below:

Contact

If you have any concerns or additional requests, please feel free to contact lhbsharp@khu.ac.kr or leehyeonbeen@vt.edu. You may also create issues in this repo.

Citation

If you find our work useful, please consider citing our paper:

@article{lee2026frequency,
title={Frequency-aware Decomposition Learning for Sensorless Wrench Forecasting on a Vibration-rich Hydraulic Manipulator},
author={Lee, Hyeonbeen and Jung, Min-Jae and Yeu, Tae-Kyeong and Han, Jong-Boo and Park, Daegil and Kim, Jin-Gyun},
journal={arXiv preprint arXiv:2604.12905},
year={2026}
}

About

Frequency-aware Decomposition Learning for Sensorless Wrench Forecasting on a Vibration-rich Hydraulic Manipulator

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

, '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

Latest commit

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Frequency-aware Decomposition Network (FDN)

Code and data will be made available upon acceptance.

Research highlights

  1. Proposes a learning-based, sensorless wrench forecasting method for contact- and vibration-rich robotic interactions.

  2. Captures high-frequency contact transients and local peaks of the interaction wrench through decomposition-based probabilistic modeling and frequency-aware architectures.

  3. Enhances performance via transfer learning from a large-scale open-source robot dataset to the domain-specific hydraulic manipulation setting.

Key designs

  • Decomposition-based probabilistic modeling decomposes wrench signal into low-frequency trend and high-frequency residual, and models the trend with pointwise regression and the residual with conditional distribution.
  • Proprioception-to-wrench transfer learning transfers learned representation from an open source contact-rich robot dataset to the downstream hydraulic manipulation setting.

  • Frequency-awareness enforces frequency band prior to the outputs and enhances input spectra with learnable filters.

Results

We collect data from 12 hydraulic grinding manipulations as follows:

Our FDN model accurately forecasts contact- and vibration-rich wrench signals without physical F/T sensors, as shown in the right panels.

FDN is especially superior in the high-frequency band accuracy, thereby achieving the best full-band score (CRPS).

Ablation studies further demonstrate the effectiveness of each architectural component of FDN.

Transfer learning from the RH20T dataset further improves generalization, despite heterogeneous task, embodiment, and actuation settings between the two datasets.

Getting started

Download datasets

We share preprocessed datasets only, which can be readily used in the training. We're currently unable to open our raw dataset. You may check the preprocessing codes from:

FDN/
┣ data/
┃ ┣ data_hydraulic/
┃ ┣ data_rh20t/
┃ ┣ **process_data_hydraulic.py**
┃ ┗ **process_data_rh20t.py**
...
  1. Download *.tar.gz files and move them to the top project directory.

Your project directory should look like:

FDN/
┣ analysis/
┣ data/
┣ exp/
┣ layers/
┣ models/
┣ utils/
┣ .gitignore
┣ README.md
┣ **data_hydraulic_processed.tar.gz****data_rh20t_processed_260216.tar.gz**
┗ requirements.txt
  1. Untar files using:
tar -xvf data_hydraulic_processed.tar.gz
tar -xvf data_rh20t_processed_260216.tar.gz
  1. Install requirements in your environment. We use python==3.10 and torch==2.6.0+cu118.
pip install -r requirements.txt --extra-index-url https://download.pytorch.org/whl/cu118

We also support the use of the MPS backend on macOS devices. In such cases, install requirements using:

pip install -r requirements_mps.txt

Train the models

You may reproduce the training results provided in our paper as follows. While training, you can monitor the training process using TensorBoard by tensorboard --logdir exp/runs.

Our code always runs 3 training runs in parallel. If this causes issues on your machine, consider decreasing the default --num_parallel_runs in exp/helper.py.

1. Run all FDN numerical experiments

# This includes training from scratch, pretraining & fine-tuning,# ablation studies, transfer learning analyses, and additional sensitivity analyses.
bash exp/scripts/run_exp_FDN.sh

2. Train baselines

# This includes all Point2Point, Seq2Point, Seq2Seq baselines.
bash exp/scripts/run_exp_Baselines.sh

By default, the training results are stored at exp/runs directory. Checkpoints are saved every epoch as:

# exp/trainer.pyclassTrainerdef_save_checkpoint(self, fname: str):
model_instance=get_model(self.model)
torch.save(
{ # model state_dict"state_dict": self._copy_state_dict(model_instance.state_dict()),
# model configuration parameters"configs": deepcopy(self.configs),
# input/output normalization stats"scale_params": deepcopy(self.dataset_train.scale_params),
# optimizer state_dict"optimizer": self._copy_state_dict(self.optimizer.state_dict()),
},
fname,
)

You can use the checkpoint items as:

# See lines 170- of analysis/evaluate_models.pyckpt=torch.load(ckpt_path, map_location="cpu", weights_only=False)
configs=ckpt["configs"]
state_dict=ckpt["state_dict"]
scale_params=ckpt["scale_params"]
model=model_cls.Model(configs)
model.load_state_dict(state_dict)

Evaluate the trained models

After training, running below will generate exp/eval_*.txt and visualization files.

python analysis/evaluate_models.py

See function evaluate_predictions in analysis/evaluate_models.py to check our evaluation logic.

Acknowledgements

We appreciate valuable inspirations from the projects below:

Contact

If you have any concerns or additional requests, please feel free to contact lhbsharp@khu.ac.kr or leehyeonbeen@vt.edu. You may also create issues in this repo.

Citation

If you find our work useful, please consider citing our paper:

@article{lee2026frequency,
title={Frequency-aware Decomposition Learning for Sensorless Wrench Forecasting on a Vibration-rich Hydraulic Manipulator},
author={Lee, Hyeonbeen and Jung, Min-Jae and Yeu, Tae-Kyeong and Han, Jong-Boo and Park, Daegil and Kim, Jin-Gyun},
journal={arXiv preprint arXiv:2604.12905},
year={2026}
}

About

Frequency-aware Decomposition Learning for Sensorless Wrench Forecasting on a Vibration-rich Hydraulic Manipulator

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

, '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

Latest commit

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Frequency-aware Decomposition Network (FDN)

Code and data will be made available upon acceptance.

Research highlights

  1. Proposes a learning-based, sensorless wrench forecasting method for contact- and vibration-rich robotic interactions.

  2. Captures high-frequency contact transients and local peaks of the interaction wrench through decomposition-based probabilistic modeling and frequency-aware architectures.

  3. Enhances performance via transfer learning from a large-scale open-source robot dataset to the domain-specific hydraulic manipulation setting.

Key designs

  • Decomposition-based probabilistic modeling decomposes wrench signal into low-frequency trend and high-frequency residual, and models the trend with pointwise regression and the residual with conditional distribution.
  • Proprioception-to-wrench transfer learning transfers learned representation from an open source contact-rich robot dataset to the downstream hydraulic manipulation setting.

  • Frequency-awareness enforces frequency band prior to the outputs and enhances input spectra with learnable filters.

Results

We collect data from 12 hydraulic grinding manipulations as follows:

Our FDN model accurately forecasts contact- and vibration-rich wrench signals without physical F/T sensors, as shown in the right panels.

FDN is especially superior in the high-frequency band accuracy, thereby achieving the best full-band score (CRPS).

Ablation studies further demonstrate the effectiveness of each architectural component of FDN.

Transfer learning from the RH20T dataset further improves generalization, despite heterogeneous task, embodiment, and actuation settings between the two datasets.

Getting started

Download datasets

We share preprocessed datasets only, which can be readily used in the training. We're currently unable to open our raw dataset. You may check the preprocessing codes from:

FDN/
┣ data/
┃ ┣ data_hydraulic/
┃ ┣ data_rh20t/
┃ ┣ **process_data_hydraulic.py**
┃ ┗ **process_data_rh20t.py**
...
  1. Download *.tar.gz files and move them to the top project directory.

Your project directory should look like:

FDN/
┣ analysis/
┣ data/
┣ exp/
┣ layers/
┣ models/
┣ utils/
┣ .gitignore
┣ README.md
┣ **data_hydraulic_processed.tar.gz****data_rh20t_processed_260216.tar.gz**
┗ requirements.txt
  1. Untar files using:
tar -xvf data_hydraulic_processed.tar.gz
tar -xvf data_rh20t_processed_260216.tar.gz
  1. Install requirements in your environment. We use python==3.10 and torch==2.6.0+cu118.
pip install -r requirements.txt --extra-index-url https://download.pytorch.org/whl/cu118

We also support the use of the MPS backend on macOS devices. In such cases, install requirements using:

pip install -r requirements_mps.txt

Train the models

You may reproduce the training results provided in our paper as follows. While training, you can monitor the training process using TensorBoard by tensorboard --logdir exp/runs.

Our code always runs 3 training runs in parallel. If this causes issues on your machine, consider decreasing the default --num_parallel_runs in exp/helper.py.

1. Run all FDN numerical experiments

# This includes training from scratch, pretraining & fine-tuning,# ablation studies, transfer learning analyses, and additional sensitivity analyses.
bash exp/scripts/run_exp_FDN.sh

2. Train baselines

# This includes all Point2Point, Seq2Point, Seq2Seq baselines.
bash exp/scripts/run_exp_Baselines.sh

By default, the training results are stored at exp/runs directory. Checkpoints are saved every epoch as:

# exp/trainer.pyclassTrainerdef_save_checkpoint(self, fname: str):
model_instance=get_model(self.model)
torch.save(
{ # model state_dict"state_dict": self._copy_state_dict(model_instance.state_dict()),
# model configuration parameters"configs": deepcopy(self.configs),
# input/output normalization stats"scale_params": deepcopy(self.dataset_train.scale_params),
# optimizer state_dict"optimizer": self._copy_state_dict(self.optimizer.state_dict()),
},
fname,
)

You can use the checkpoint items as:

# See lines 170- of analysis/evaluate_models.pyckpt=torch.load(ckpt_path, map_location="cpu", weights_only=False)
configs=ckpt["configs"]
state_dict=ckpt["state_dict"]
scale_params=ckpt["scale_params"]
model=model_cls.Model(configs)
model.load_state_dict(state_dict)

Evaluate the trained models

After training, running below will generate exp/eval_*.txt and visualization files.

python analysis/evaluate_models.py

See function evaluate_predictions in analysis/evaluate_models.py to check our evaluation logic.

Acknowledgements

We appreciate valuable inspirations from the projects below:

Contact

If you have any concerns or additional requests, please feel free to contact lhbsharp@khu.ac.kr or leehyeonbeen@vt.edu. You may also create issues in this repo.

Citation

If you find our work useful, please consider citing our paper:

@article{lee2026frequency,
title={Frequency-aware Decomposition Learning for Sensorless Wrench Forecasting on a Vibration-rich Hydraulic Manipulator},
author={Lee, Hyeonbeen and Jung, Min-Jae and Yeu, Tae-Kyeong and Han, Jong-Boo and Park, Daegil and Kim, Jin-Gyun},
journal={arXiv preprint arXiv:2604.12905},
year={2026}
}

About

Frequency-aware Decomposition Learning for Sensorless Wrench Forecasting on a Vibration-rich Hydraulic Manipulator

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors