Skip to content

Commit 35c272a

Browse files
Adding more information and images, editing formatting.
1 parent bbb9f52 commit 35c272a

28 files changed

Lines changed: 306 additions & 147 deletions

_bibliography/references.bib

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
@conference{feshbach2025artistic,
2+
title = {Artistic Non-Inertial Tracer (ANT): an Educational Kit for a 3-Link Origami Slithering Robot},
3+
author = {Daniel Feshbach and Alex Chi and Eric Huang and Diedra Krieger and Cynthia Sung},
4+
url = {https://sung.seas.upenn.edu/research/ant/},
5+
year = {2025},
6+
date = {2025-06-22},
7+
urldate = {2025-06-22},
8+
booktitle = {2025 ASEE Annual Conference and Exposition},
9+
organization = {American Society for Engineering Education},
10+
abstract = {The abundance of connections between art and engineering are opportunities to engage artistically inclined students who may not think of themselves as interested in robotics, and to inspire engineering-inclined students to express themselves artistically. This work presents a tool kit and lesson plan for a hands-on introductory robotics activity centering how art and engineering influence each other. The Artistic Non-Inertial Tracer (ANT) is a three-link robot made of
11+
origami, which contacts the ground through markers that trace patterns as it slithers around. The design is capable of forward, turning, backward, and diagonal motion. Using origami for the body highlights the influence of art on engineering, and the gait traces are a visually interesting output of the engineering. The kit uses inexpensive components totaling about $26/robot USD (servos, origami, and an Arduino Nano) common in hobbyist communities so that learning how to use these components can empower further exploration of actuated art. Our associated lesson plan engages participants in the assembly and control of ANT and contextualizes it within a broader overview of robot system components and the use of origami in engineering. We successfully ran the lesson as a 3-hour outreach workshop at a local arts organization.},
12+
keywords = {},
13+
pubstate = {forthcoming},
14+
tppubtype = {conference}
15+
}
16+
17+
@conference{feshbach2024kinematicTrees,
18+
title = {Algorithmic Design of Kinematic Trees Based on CSC Dubins Planning for Link Shapes},
19+
author = {Daniel Feshbach and Wei-Hsi Chen and Ling Xu and Emil Schaumburg and Isabella Huang and Cynthia Sung},
20+
url = {https://repository.upenn.edu/handle/20.500.14332/60660
21+
https://www.algorithmic-robotics.org/papers/43_Algorithmic_Design_of_Kinem.pdf},
22+
year = {2024},
23+
date = {2024-10-08},
24+
urldate = {2024-10-08},
25+
booktitle = {Workshop on the Algorithmic Foundations of Robotics (WAFR)},
26+
abstract = {Computational tools for robot design require algorithms moving between several layers of abstraction including task, morphology, kinematics, mechanism shapes, and actuation. In this paper we give a linear-time algorithm mapping from kinematics to mechanism shape for tree-structured linkages. Specifically, we take as input a tree whose nodes are axes of motion (lines which joints rotate about or translate along) along with types and sizes for joints on these axes, and a radius $r$ for a tubular bound on the link shapes. Our algorithm outputs the geometry for a kinematic tree instantiating these specifications such that the neutral configuration has no self-intersection. The algorithm approach is based on understanding the mechanism design problem as a planning problem for link shapes, and arranging the joints along their axes of motion to be appropriately spaced and oriented such that feasible, non-intersecting paths exist linking them. Since link bending is restricted by its tubular radius, this is a Dubins planning problem, and to prove the correctness of our algorithm we also prove a theorem about Dubins paths: if two point-direction pairs are separated by a plane at least $2r$ from each, and the directions each have non-negative dot product with the plane normal, then they are connected by a radius-$r$ CSC Dubins path with turn angles $leq pi$. We implement our design algorithm in code and provide a 3D printed example of a tubular kinematic tree. The results provide an existence proof of tubular-shaped kinematic trees implementing given axes of motion, and could be used as a starting point for further optimization in an automated or algorithm-assisted robot design system.},
27+
keywords = {},
28+
pubstate = {published},
29+
tppubtype = {conference}
30+
}
31+
32+
@conference{feshbach2024kinegamiPython,
33+
title = {Kinegami: Open-source Software for Creating Kinematic Chains from Tubular Origami},
34+
author = {Daniel Feshbach and Wei-Hsi Chen and Daniel E. Koditschek and Cynthia Sung},
35+
url = {https://github.com/SungRoboticsGroup/KinegamiPython
36+
https://sung.seas.upenn.edu/research/kinegami/
37+
https://repository.upenn.edu/handle/20.500.14332/60333},
38+
year = {2024},
39+
date = {2024-07-16},
40+
urldate = {2024-07-16},
41+
booktitle = {8th International Meeting on Origami in Science, Mathematics, and Education (8OSME)},
42+
abstract = {Arms, legs, and fingers of animals and robots are all examples of “kinematic chains" - mechanisms with sequences of joints connected by effectively rigid links. Lightweight kinematic chains can be manufactured quickly and cheaply by folding tubes. In recent work [Chen et al. 2022], we demonstrated that origami patterns for kinematic chains with arbitrary numbers of degrees of freedom can be constructed algorithmically from a minimal kinematic specification (axes that joints rotate about or translate along). The work was founded on a catalog of tubular crease patterns for revolute joints (rotation about an axis), prismatic joints (translation along an axis), and links, which compose to form the specified design. With this paper, we release an open-source python implementation of these patterns and algorithms. Users can specify kinematic chains as a sequence of degrees of freedom or by specific joint locations and orientations. Our software uses this information to construct a single crease pattern for the corresponding chain. The software also includes functions to move or delete joints in an existing chain and regenerate the connecting links, and a visualization tool so users can check that the chain can achieve their desired configurations. This paper provides a detailed guide to the code and its usage, including an explanation of our proposed representation for tubular crease patterns. We include a number of examples to illustrate the software’s capabilities and its potential for robot and mechanism design.},
43+
keywords = {},
44+
pubstate = {published},
45+
tppubtype = {conference}
46+
}
47+
48+
@conference{feshbach2023curvequad,
49+
title = {CurveQuad: A centimeter-scale origami quadruped that leverages curved creases to self-fold and crawl with one motor},
50+
author = {Daniel Feshbach and Xuelin Wu and Satviki Vasireddy and Louis Beardell and Bao To and Yuliy Baryshnikov and Cynthia Sung},
51+
url = {https://www.youtube.com/watch?v=RnSHG5F2Iek&ab_channel=SungRoboticsGroup
52+
https://sung.seas.upenn.edu/publications/curvequad/},
53+
doi = {10.1109/IROS55552.2023.10342339},
54+
year = {2023},
55+
date = {2023-10-01},
56+
urldate = {2023-10-01},
57+
booktitle = {IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)},
58+
abstract = {We present CurveQuad, a miniature curved origami quadruped that is able to self-fold and unfold, crawl, and steer, all using a single actuator. CurveQuad is designed for planar manufacturing, with parts that attach and stack sequentially on a flat body. The design uses 4 curved creases pulled by 2 pairs of tendons from opposite ends of a link on a 270deg servo. It is 8 cm in the longest direction and weighs 10.9 g. Rotating the horn pulls the tendons inwards to induce folding. Continuing to rotate the horn shears the robot, enabling the robot to shuffle forward while turning in either direction. We experimentally validate the robot’s ability to fold, steer, and unfold by changing the magnitude of horn rotation. We also demonstrate basic feedback control by steering towards a light source from a variety of starting positions and orientations, and swarm aggregation by having 4 robots simultaneously steer towards the light. The results demonstrate the potential of using curved crease origami in self-assembling and deployable robots with complex motions such as locomotion.},
59+
keywords = {},
60+
pubstate = {published},
61+
tppubtype = {conference}
62+
}
63+
64+
@article{feshbach2021reconfiguring,
65+
title = {Reconfiguring Non-Convex Holes in Pivoting Modular Cube Robots},
66+
author = {Daniel Feshbach and Cynthia Sung},
67+
url = {https://repository.upenn.edu/cis_papers/865/
68+
https://www.youtube.com/watch?v=IoyFs_K5RNE
69+
https://github.com/SungRoboticsGroup/PIVOTING-CUBES_cube-reconfiguration},
70+
doi = {10.1109/LRA.2021.3095030},
71+
year = {2021},
72+
date = {2021-07-07},
73+
urldate = {2021-07-07},
74+
journal = {IEEE Robotics and Automation Letters},
75+
volume = {6},
76+
number = {4},
77+
pages = {6701-6708},
78+
abstract = {We present an algorithm for self-reconfiguration of admissible 3D configurations of pivoting modular cube robots with holes of arbitrary shape and number. Cube modules move across the surface of configurations by pivoting about shared edges, enabling configurations to reshape themselves. Previous work provides a reconfiguration algorithm for admissible 3D configurations containing no non-convex holes; we improve upon this by handling arbitrary admissible 3D configurations. The key insight specifies a point in the deconstruction of layers enclosing non-convex holes at which we can pause and move inner modules out of the hole. We prove this happens early enough to maintain connectivity, but late enough to open enough room in the enclosing layer for modules to escape the hole. Our algorithm gives reconfiguration plans with O(n^2) moves for n modules.},
79+
keywords = {},
80+
pubstate = {published},
81+
tppubtype = {article}
82+
}

_config.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ repository : "DanielFeshbach/danielfeshbach.github.io"
2222
# Additional customization can be done by editing /_includes/author-profile.html
2323
author:
2424
# Biographic information
25-
avatar : "profile.png"
25+
avatar : "daniel_holding_curvequad_square.JPG"
2626
name : "Daniel Feshbach"
2727
pronouns : "he/him/his"
2828
bio : "Robotics and Computational Geometry PhD Student"
@@ -319,7 +319,6 @@ whitelist:
319319
- jekyll-redirect-from
320320
- jemoji
321321

322-
323322
# Archives
324323
# Type
325324
# - GitHub Pages compatible archive pages built with Liquid ~> type: liquid (default)

_includes/archive-single-cv.html

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -14,29 +14,33 @@
1414

1515
<div class="{{ include.type | default: "list" }}__item">
1616
<article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
17-
<li>
18-
{% if include.type == "grid" and teaser %}
19-
<div class="archive__item-teaser">
20-
<img src=
21-
{% if teaser contains "://" %}
22-
"{{ teaser }}"
17+
<div style="display: flex; align-items: flex-start; gap: 15px; margin-bottom: 1em;">
18+
{% if teaser %}
19+
<div class="archive__item-teaser" style="flex-shrink: 0;">
20+
<img src=
21+
{% if teaser contains "://" %}
22+
"{{ teaser }}"
23+
{% else %}
24+
"{{ teaser | prepend: "/images/" | prepend: base_path }}"
25+
{% endif %}
26+
alt="{{ title | default: post.title }}" style="width: 120px; height: auto;">
27+
</div>
28+
{% endif %}
29+
30+
<div class="archive__item-content" style="flex-grow: 1;">
31+
<h3 style="margin: 0 0 0.5em 0;">
32+
{% if post.url %}
33+
<a href="{{ base_path }}{{ post.url }}" rel="permalink">{{ title }}</a>
2334
{% else %}
24-
"{{ teaser | prepend: "/images/" | prepend: base_path }}"
35+
{{ title }}
2536
{% endif %}
26-
alt="">
37+
</h3>
38+
39+
{% if post.authors %}<p style="margin: 0.2em 0;">{{ post.authors }}</p>{% endif %}
40+
<p style="margin: 0.2em 0;">
41+
{% if post.venue %}{{ post.venue }}{% endif %}{% if post.venue and post.date %}, {% endif %}{% if post.date %}{{ post.date | date: "%Y" }}{% endif %}
42+
</p>
2743
</div>
28-
{% endif %}
29-
<h3 class="archive__item-title" itemprop="headline">
30-
{% if post.link %}
31-
<a href="{{ post.link }}">{{ title }}</a> <a href="{{ base_path }}{{ post.url }}" rel="permalink"><i class="fa fa-link" aria-hidden="true" title="permalink"></i><span class="sr-only">Permalink</span></a>
32-
{% else %}
33-
<a href="{{ base_path }}{{ post.url }}" rel="permalink">{{ title }}</a>
34-
{% endif %}
35-
</h3>
36-
{% if post.read_time %}
37-
<p class="page__meta"><i class="fa fa-clock" aria-hidden="true"></i> {% include read-time.html %}</p>
38-
{% endif %}
39-
{% if post.venue%}<p class="archive__item-excerpt" itemprop="description">{{ post.citation }}</p> {% endif %}
40-
</li>
41-
</article>
44+
</div>
45+
</article>
4246
</div>

_includes/archive-single.html

Lines changed: 25 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -14,71 +14,33 @@
1414

1515
<div class="{{ include.type | default: "list" }}__item">
1616
<article class="archive__item" itemscope itemtype="http://schema.org/CreativeWork">
17-
{% if include.type == "grid" and teaser %}
18-
<div class="archive__item-teaser">
19-
<img src=
20-
{% if teaser contains "://" %}
21-
"{{ teaser }}"
17+
<div style="display: flex; align-items: center; gap: 15px;">
18+
{% if teaser %}
19+
<div class="archive__item-teaser" style="flex-shrink: 0;">
20+
<img src=
21+
{% if teaser contains "://" %}
22+
"{{ teaser }}"
23+
{% else %}
24+
"{{ teaser | prepend: "/images/" | prepend: base_path }}"
25+
{% endif %}
26+
alt="{{ title | default: post.title }}" style="width: 300px; height: auto;">
27+
</div>
28+
{% endif %}
29+
<div class="archive__item-content" style="flex-grow: 1;">
30+
<h2 class="archive__item-title" itemprop="headline">
31+
{% if post.link %}
32+
<a href="{{ post.link }}">{{ title }}</a> <a href="{{ base_path }}{{ post.url }}" rel="permalink"><i class="fa fa-link" aria-hidden="true" title="permalink"></i><span class="sr-only">Permalink</span></a>
33+
{% elsif post.url %}
34+
<a href="{{ base_path }}{{ post.url }}" rel="permalink">{{ title }}</a>
2235
{% else %}
23-
"{{ teaser | prepend: "/images/" | prepend: base_path }}"
36+
{{ title }}
2437
{% endif %}
25-
alt="">
38+
</h2>
39+
{% if post.authors %}<p class="publication-meta"><strong>Authors:</strong> {{ post.authors }}</p>{% endif %}
40+
{% if post.venue %}<p class="publication-meta"><strong>Venue:</strong> {{ post.venue }}</p>{% endif %}
41+
{% if post.date %}<p class="publication-meta"><strong>Date:</strong> {{ post.date | date: "%B %Y" }}</p>{% endif %}
42+
<!-- {% if post.excerpt %}<p class="archive__item-excerpt" itemprop="description">{{ post.excerpt }}</p>{% endif %} -->
2643
</div>
27-
{% endif %}
28-
29-
<h2 class="archive__item-title" itemprop="headline">
30-
{% if post.link %}
31-
<a href="{{ post.link }}">{{ title }}</a> <a href="{{ base_path }}{{ post.url }}" rel="permalink"><i class="fa fa-link" aria-hidden="true" title="permalink"></i><span class="sr-only">Permalink</span></a>
32-
{% else %}
33-
<a href="{{ base_path }}{{ post.url }}" rel="permalink">{{ title }}</a>
34-
{% endif %}
35-
</h2>
36-
37-
{% if post.read_time %}
38-
<p class="page__meta"><i class="fa fa-clock" aria-hidden="true"></i> {% include read-time.html %}</p>
39-
{% endif %}
40-
41-
{% if post.collection == 'teaching' %}
42-
<p> {{ post.type }}, <i>{{ post.venue }}</i>, {{ post.date | default: "1900-01-01" | date: "%Y" }} </p>
43-
{% elsif post.collection == 'publications' %}
44-
<p>Published in <i>{{ post.venue }}</i>, {{ post.date | default: "1900-01-01" | date: "%Y" }} </p>
45-
{% elsif post.date %}
46-
<p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].date_label | default: "Published:" }}</strong> <time datetime="{{ post.date | default: "1900-01-01" | date_to_xmlschema }}">{{ post.date | default: "1900-01-01" | date: "%B %d, %Y" }}</time></p>
47-
{% endif %}
48-
49-
{% if post.excerpt and site.read_more != 'enabled' %}
50-
<p class="archive__item-excerpt" itemprop="description">{{ post.excerpt | markdownify }}</p>
51-
{% elsif post.excerpt and site.read_more == 'enabled' %}
52-
<p class="archive__item-excerpt" itemprop="description"><p>{{ post.excerpt | markdownify | remove: '<p>' | remove: '</p>' }}<strong><a href="{{ base_path }}{{ post.url }}" rel="permalink"> Read more</a></strong></p></p>
53-
{% endif %}
54-
55-
{% if post.citation and post.paperurl and post.slidesurl and post.bibtexurl %}
56-
<p>Recommended citation: {{ post.citation }}<br /><a href="{{ post.paperurl }}">Download Paper</a> | <a href="{{ post.slidesurl }}">Download Slides</a> | <a href="{{ post.bibtexurl }}">Download Bibtex</a></p>
57-
{% elsif post.citation and post.paperurl and post.slidesurl %}
58-
<p>Recommended citation: {{ post.citation }}<br /><a href="{{ post.paperurl }}">Download Paper</a> | <a href="{{ post.slidesurl }}">Download Slides</a></p>
59-
{% elsif post.citation and post.paperurl and post.bibtexurl %}
60-
<p>Recommended citation: {{ post.citation }}<br /><a href="{{ post.paperurl }}">Download Paper</a> | <a href="{{ post.bibtexurl }}">Download Bibtex</a></p>
61-
{% elsif post.citation and post.paperurl %}
62-
<p>Recommended citation: {{ post.citation }}<br /><a href="{{ post.paperurl }}">Download Paper</a></p>
63-
{% elsif post.citation and post.slidesurl and post.bibtexurl %}
64-
<p>Recommended citation: {{ post.citation }}<br /><a href="{{ post.slidesurl }}">Download Slides</a> | <a href="{{ post.bibtexurl}}">Download Bibtex</a></p>
65-
{% elsif post.citation and post.slidesurl %}
66-
<p>Recommended citation: {{ post.citation }}<br /><a href="{{ post.slidesurl }}">Download Slides</a></p>
67-
{% elsif post.citation and post.bibtexurl %}
68-
<p>Recommended citation: {{ post.citation }}<br /><a href="{{ post.bibtexurl }}">Download Bibtex</a></p>
69-
{% elsif post.citation %}
70-
<p>Recommended citation: {{ post.citation }}</p>
71-
{% elsif post.paperurl and post.bibtexurl %}
72-
<p><a href=" {{ post.paperurl }} ">Download Paper</a> | <a href="{{ post.bibtexurl }}">Download Bibtex</a></p>
73-
{% elsif post.paperurl %}
74-
<p><a href=" {{ post.paperurl }} ">Download Paper</a></p>
75-
{% elsif post.slidesurl and post.bibtexurl %}
76-
<p><a href="{{ post.slidesurl }}">Download Slides</a> | <a href="{{ post.bibtexurl }}">Download Bibtex</a></p>
77-
{% elsif post.slidesurl %}
78-
<p><a href="{{ post.slidesurl }}">Download Slides</a></p>
79-
{% elsif post.bibtexurl %}
80-
<p><a href="{{ post.bibtexurl }}">Download Bibtex</a></p>
81-
{% endif %}
82-
44+
</div>
8345
</article>
8446
</div>

_includes/social-share.html

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,4 @@ <h4 class="page__share-title">{{ site.data.ui-text[site.locale].share_on_label |
1111

1212
<a href="https://www.linkedin.com/shareArticle?mini=true&url={{ base_path }}{{ page.url }}" class="btn btn--linkedin" title="{{ site.data.ui-text[site.locale].share_on_label | default: 'Share on' }} LinkedIn"><i class="fab fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
1313

14-
<a href="https://x.com/intent/post?text={{ base_path }}{{ page.url }}" class="btn btn--x" title="{{ site.data.ui-text[site.locale].share_on_label | default: 'Share on' }} X"><i class="fab fa-x-twitter" aria-hidden="true"></i><span> X (formerly Twitter)</span></a>
1514
</section>

_layouts/single.html

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,19 @@
2727
{% unless page.header.overlay_color or page.header.overlay_image %}
2828
<header>
2929
{% if page.title %}<h1 class="page__title" itemprop="headline">{{ page.title | markdownify | remove: "<p>" | remove: "</p>" }}</h1>{% endif %}
30+
31+
{% if page.collection == 'publications' and page.header.teaser %}
32+
<div style="text-align: center; margin: 1em 0;">
33+
<img src="{{ page.header.teaser | prepend: '/images/' | relative_url }}"
34+
alt="{{ page.title }}"
35+
style="max-width: 500px; height: auto; border-radius: 8px;">
36+
</div>
37+
{% endif %}
38+
39+
{% if page.authors and page.collection == 'publications' %}
40+
<p class="page__meta"><strong>Authors:</strong> {{ page.authors }}</p>
41+
{% endif %}
42+
3043
{% if page.read_time %}
3144
<p class="page__meta"><i class="fa fa-clock" aria-hidden="true"></i> {% include read-time.html %}</p>
3245
{% endif %}

0 commit comments

Comments
 (0)