Skip to content

Commit

Permalink
Creating 10.21105.joss.03967.jats
Browse files Browse the repository at this point in the history
  • Loading branch information
editorialbot committed Mar 16, 2022
1 parent a9f3e59 commit 90392e3
Showing 1 changed file with 386 additions and 0 deletions.
386 changes: 386 additions & 0 deletions joss.03967/10.21105.joss.03967.jats
Original file line number Diff line number Diff line change
@@ -0,0 +1,386 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.2 20190208//EN"
"JATS-publishing1.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" dtd-version="1.2" article-type="other">
<front>
<journal-meta>
<journal-id></journal-id>
<journal-title-group>
<journal-title>Journal of Open Source Software</journal-title>
<abbrev-journal-title>JOSS</abbrev-journal-title>
</journal-title-group>
<issn publication-format="electronic">2475-9066</issn>
<publisher>
<publisher-name>Open Journals</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="publisher-id">3967</article-id>
<article-id pub-id-type="doi">10.21105/joss.03967</article-id>
<title-group>
<article-title>TriP: A Python package for the kinematic modeling of
serial-parallel hybrid robots</article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<contrib-id contrib-id-type="orcid">0000-0002-7825-3476</contrib-id>
<name>
<surname>Baumgärtner</surname>
<given-names>Jan</given-names>
</name>
<xref ref-type="aff" rid="aff-1"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Miller</surname>
<given-names>Torben</given-names>
</name>
<xref ref-type="aff" rid="aff-2"/>
</contrib>
<aff id="aff-1">
<institution-wrap>
<institution>Heidelberg University</institution>
</institution-wrap>
</aff>
<aff id="aff-2">
<institution-wrap>
<institution>Independent Researcher</institution>
</institution-wrap>
</aff>
</contrib-group>
<pub-date date-type="pub" publication-format="electronic" iso-8601-date="2021-10-28">
<day>28</day>
<month>10</month>
<year>2021</year>
</pub-date>
<volume>7</volume>
<issue>71</issue>
<fpage>3967</fpage>
<permissions>
<copyright-statement>Authors of papers retain copyright and release the
work under a Creative Commons Attribution 4.0 International License (CC
BY 4.0)</copyright-statement>
<copyright-year>2022</copyright-year>
<copyright-holder>The article authors</copyright-holder>
<license license-type="open-access" xlink:href="https://creativecommons.org/licenses/by/4.0/">
<license-p>Authors of papers retain copyright and release the work under
a Creative Commons Attribution 4.0 International License (CC BY
4.0)</license-p>
</license>
</permissions>
<kwd-group kwd-group-type="author">
<kwd>Python</kwd>
<kwd>robotics</kwd>
<kwd>inverse kinematics</kwd>
<kwd>kinematics</kwd>
<kwd>parallel manipulator</kwd>
<kwd>serial manipulator</kwd>
</kwd-group>
</article-meta>
</front>
<body>
<sec id="summary">
<title>Summary</title>
<p>​Robots can be classified according to their mechanical structure.
Serial mechanisms like robotic arms are mechanisms where each moving
part (called a link) is connected to only the one before and the one
after it. They are often used when a large workspace is required,
meaning the robot needs a long reach. In parallel mechanisms, the
links of the robot form loops causing them to be structurally stronger
and stiffer.</p>
<p>If both a large workspace and structural strength are required,
hybrids that contain both serial and parallel mechanisms are used.
While hybrid mechanisms combine the mechanical advantages of both
parallel and serial mechanisms, they also combine their modeling
disadvantages:</p>
<list list-type="bullet">
<list-item>
<p>Finding an explicit solution for either forward or inverse
kinematics is often impossible. Using numerical approaches instead
leads to complicated constrained optimization problems for both
forward and inverse kinematics.</p>
</list-item>
<list-item>
<p>While serial mechanisms are very well supported by current
robotic frameworks, parallel mechanisms and hybrid mechanisms
especially are often not supported at all. A great overview of the
supported robot types for different robotic frameworks was
compiled by Kumar
(<xref alt="2019" rid="ref-kumar" ref-type="bibr">2019</xref>).</p>
</list-item>
</list>
<p>TriP is a python package designed to close this gap using a modular
modeling framework akin to the one described by Kumar et al.
(<xref alt="2020" rid="ref-survey" ref-type="bibr">2020</xref>). It
allows the modeling of arbitrary hybrid mechanisms and is capable of
calculating forward and inverse kinematics.</p>
<p>The calculations are performed using a symbolic framework. This
makes it easy for users to implement custom case-dependent
mathematical solvers.</p>
</sec>
<sec id="statement-of-need">
<title>Statement of Need</title>
<p>While a huge number of researchers, such as Pisla et al.
(<xref alt="2013" rid="ref-PISLA" ref-type="bibr">2013</xref>), Kanaan
et al. (<xref alt="2009" rid="ref-verne" ref-type="bibr">2009</xref>),
and Zoss et al.
(<xref alt="2006" rid="ref-berkley" ref-type="bibr">2006</xref>), use
hybrid serial parallel systems, most modern kinematics frameworks
still lack support for such systems. Examples include OpenRAVE
(<xref alt="Diankov &amp; Kuffner, 2008" rid="ref-openrave" ref-type="bibr">Diankov
&amp; Kuffner, 2008</xref>), used in the MoveIt! stack
(<xref alt="Chitta et al., 2012" rid="ref-moveit" ref-type="bibr">Chitta
et al., 2012</xref>), the MATLAB robotics toolbox
(<xref alt="Corke, 2017" rid="ref-matlabrobot" ref-type="bibr">Corke,
2017</xref>), Klampt
(<xref alt="Hauser, 2021" rid="ref-Klampt" ref-type="bibr">Hauser,
2021</xref>), and the inverse kinematics Python library
(<xref alt="Manceron, 2021" rid="ref-ikpy" ref-type="bibr">Manceron,
2021</xref>). While all these frameworks and libraries offer fast
computation of forward and inverse kinematics, they only support
branching serial mechanisms. This lack of support often leaves
developers with essentially two choices:</p>
<p>Either shoehorn their hybrid robots into a framework not designed
to handle them or be left to implement their own kinematic
solvers.</p>
<p>TriP is a lightweight and easy-to-use package for directly modeling
hybrid mechanisms and calculating their kinematics. Although TriP is
fast for a Python package, it is not built for robust hard-real time
control applications. Instead, it is aimed at researchers and
engineers who quickly want to build kinematic models to test their
mechanical designs. For this reason it also exposes a interface to the
nonlinear optimization and algorithmic differentiation tool CasADi
(<xref alt="Andersson et al., 2019" rid="ref-casadi" ref-type="bibr">Andersson
et al., 2019</xref>). This allows researchers to investigate the
kinematic properties of their robots, for example, by using CasADi to
find singular configurations or to compute manipulability ellipsoides.
Similar to MoveIt!, TriP also enables researchers to build their own
inverse kinematic solvers.</p>
</sec>
<sec id="overview">
<title>Overview</title>
<p>TriP models robots using its <italic>Robot</italic> class. A
<italic>Robot</italic> object is made up of
<italic>Transformation</italic> and <italic>KinematicGroup</italic>
objects. The <italic>KinematicGroup</italic> objects are used to model
parallel mechanisms while the <italic>Transformation</italic> objects
model serial mechanisms. See Figure
<xref alt="1" rid="hybrid_chain_taxonomy_groups">1</xref> for
reference, where the links of each robot are colored according to the
<italic>KinematicGroup</italic> or <italic>Transformation</italic> it
belongs to, while joints are either light green or orange, depending
on whether they are actuated or not.</p>
<fig>
<caption><p>Different Hybrid Robot types and their object structure
<styled-content id="hybrid_chain_taxonomy_groups"></styled-content></p></caption>
<graphic mimetype="image" mime-subtype="png" xlink:href="hybrid_chain_taxonomy_groups.png" xlink:title="" />
</fig>
<p>Both <italic>KinematicGroups</italic> and
<italic>Transformations</italic> can be connected to form branching
mechanisms as indicated in Figure
<xref alt="1" rid="hybrid_chain_taxonomy_groups">1</xref>.</p>
<p><italic>Transformation</italic> objects implement homogeneous
coordinate transformations between coordinate frames. These can be
either dynamic or static with dynamic transformations implementing
joints. A few example joints can be seen in Figure
<xref alt="2" rid="sample_trafo">2</xref>.</p>
<fig>
<caption><p>Sample Joints using the Transformation class
<styled-content id="sample_trafo"></styled-content></p></caption>
<graphic mimetype="image" mime-subtype="png" xlink:href="sample_transformations.png" xlink:title="" />
</fig>
<p>While all example joints use Euler angles in roll pitch yaw
convention to describe rotation, quaternions are also supported.</p>
<p><italic>KinematicGroups</italic> model parallel mechanisms using
the abstraction approach described by Kumar et al.
(<xref alt="2020" rid="ref-survey" ref-type="bibr">2020</xref>). This
approach models a parallel manipulator as a virtual serial manipulator
and a mapping that maps the virtual joint state to the true actuated
joint state of the parallel manipulator.</p>
<p>An illustrative example of this model is an excavator with two
hydraulic cylinders. Each cylinder is part of a parallel mechanism
resulting in two <italic>KinematicGroups</italic>. Both can be seen in
Figure <xref alt="3" rid="group_structure">3</xref>, where one is
green and the other one is blue.</p>
<fig>
<caption><p>Excavator Arm build from two Groups (green and blue)
<styled-content id="group_structure"></styled-content></p></caption>
<graphic mimetype="image" mime-subtype="png" xlink:href="group_structure.png" xlink:title="" />
</fig>
<p>The abstraction approach models the excavator as a serial
manipulator where the joints are directly actuated. Using two mappings
to convert the state of the hydraulic cylinders to the state of the
joints and vice versa, it is possible to calculate both forward and
inverse kinematics. In this example, the mapping between cylinders and
joints can be expressed using trigonometry. Since an explicit
formulation of the mappings might not always be possible, TriP can
also compute the mapping by solving the closure equation of the
parallel manipulator.</p>
<p>TriP can generate symbolic representations of robots using CasADi
(<xref alt="Andersson et al., 2019" rid="ref-casadi" ref-type="bibr">Andersson
et al., 2019</xref>). This symbolic representation can be used to set
up a solver object that then solves the inverse kinematics. While the
library already implements a simple inverse kinematics solver, the
symbolic representation makes it easy to implement custom solvers.</p>
<p>All features of TriP are thoroughly documented with tutorials and
examples to help people get started.</p>
</sec>
</body>
<back>
<ref-list>
<ref-list>
<ref id="ref-Klampt">
<element-citation publication-type="webpage">
<person-group person-group-type="author">
<name><surname>Hauser</surname><given-names>Kris</given-names></name>
</person-group>
<article-title>Kris’ locomotion and manipulation planning toolbox - Klamp’t</article-title>
<year iso-8601-date="2021">2021</year>
<date-in-citation content-type="access-date"><year iso-8601-date="2021-03-31">2021</year><month>03</month><day>31</day></date-in-citation>
<uri>https://github.com/krishauser/Klampt</uri>
</element-citation>
</ref>
<ref id="ref-ikpy">
<element-citation publication-type="webpage">
<person-group person-group-type="author">
<name><surname>Manceron</surname><given-names>Pierre</given-names></name>
</person-group>
<article-title>IKPy - an inverse kinematics library aiming performance and modularity</article-title>
<year iso-8601-date="2021">2021</year>
<date-in-citation content-type="access-date"><year iso-8601-date="2021-07-10">2021</year><month>07</month><day>10</day></date-in-citation>
<uri>https://github.com/Phylliade/ikpy</uri>
</element-citation>
</ref>
<ref id="ref-survey">
<element-citation publication-type="article-journal">
<person-group person-group-type="author">
<name><surname>Kumar</surname><given-names>Shivesh</given-names></name>
<name><surname>Woehrle</surname><given-names>Hendrik</given-names></name>
<name><surname>Fernández</surname><given-names>José</given-names></name>
<name><surname>Mueller</surname><given-names>Andreas</given-names></name>
<name><surname>Kirchner</surname><given-names>Frank</given-names></name>
</person-group>
<article-title>A survey on modularity and distributivity in series-parallel hybrid robots</article-title>
<source>Mechatronics</source>
<year iso-8601-date="2020-04">2020</year><month>04</month>
<volume>68</volume>
<pub-id pub-id-type="doi">10.1016/j.mechatronics.2020.102367</pub-id>
</element-citation>
</ref>
<ref id="ref-casadi">
<element-citation publication-type="article-journal">
<person-group person-group-type="author">
<name><surname>Andersson</surname><given-names>Joel A E</given-names></name>
<name><surname>Gillis</surname><given-names>Joris</given-names></name>
<name><surname>Horn</surname><given-names>Greg</given-names></name>
<name><surname>Rawlings</surname><given-names>James B</given-names></name>
<name><surname>Diehl</surname><given-names>Moritz</given-names></name>
</person-group>
<article-title>CasADi – A software framework for nonlinear optimization and optimal control</article-title>
<source>Mathematical Programming Computation</source>
<publisher-name>Springer</publisher-name>
<year iso-8601-date="2019">2019</year>
<volume>11</volume>
<issue>1</issue>
<pub-id pub-id-type="doi">10.1007/s12532-018-0139-4</pub-id>
</element-citation>
</ref>
<ref id="ref-berkley">
<element-citation publication-type="article-journal">
<person-group person-group-type="author">
<name><surname>Zoss</surname><given-names>A. B.</given-names></name>
<name><surname>Kazerooni</surname><given-names>H.</given-names></name>
<name><surname>Chu</surname><given-names>A.</given-names></name>
</person-group>
<article-title>Biomechanical design of the Berkeley lower extremity exoskeleton (BLEEX)</article-title>
<source>IEEE/ASME Transactions on Mechatronics</source>
<year iso-8601-date="2006-05">2006</year><month>05</month>
<volume>11</volume>
<pub-id pub-id-type="doi">10.1109/TMECH.2006.871087</pub-id>
</element-citation>
</ref>
<ref id="ref-verne">
<element-citation publication-type="article-journal">
<person-group person-group-type="author">
<name><surname>Kanaan</surname><given-names>Daniel</given-names></name>
<name><surname>Wenger</surname><given-names>Philippe</given-names></name>
<name><surname>Chablat</surname><given-names>Damien</given-names></name>
</person-group>
<article-title>Kinematic analysis of a serial–parallel machine tool: The VERNE machine</article-title>
<source>Mechanism and Machine Theory</source>
<year iso-8601-date="2009">2009</year>
<volume>44</volume>
<issue>2</issue>
<issn>0094-114X</issn>
<uri>https://www.sciencedirect.com/science/article/pii/S0094114X08000517</uri>
<pub-id pub-id-type="doi">10.1016/j.mechmachtheory.2008.03.002</pub-id>
</element-citation>
</ref>
<ref id="ref-PISLA">
<element-citation publication-type="article-journal">
<person-group person-group-type="author">
<name><surname>Pisla</surname><given-names>Doina</given-names></name>
<name><surname>Szilaghyi</surname><given-names>Andras</given-names></name>
<name><surname>Vaida</surname><given-names>Calin</given-names></name>
<name><surname>Plitea</surname><given-names>Nicolae</given-names></name>
</person-group>
<article-title>Kinematics and workspace modeling of a new hybrid robot used in minimally invasive surgery</article-title>
<source>Robotics and Computer-Integrated Manufacturing</source>
<year iso-8601-date="2013">2013</year>
<volume>29</volume>
<issue>2</issue>
<issn>0736-5845</issn>
<uri>https://www.sciencedirect.com/science/article/pii/S0736584512001196</uri>
<pub-id pub-id-type="doi">10.1016/j.rcim.2012.09.016</pub-id>
</element-citation>
</ref>
<ref id="ref-openrave">
<element-citation publication-type="paper-conference">
<person-group person-group-type="author">
<name><surname>Diankov</surname><given-names>Rosen</given-names></name>
<name><surname>Kuffner</surname><given-names>James J.</given-names></name>
</person-group>
<article-title>OpenRAVE: A planning architecture for autonomous robotics</article-title>
<year iso-8601-date="2008">2008</year>
</element-citation>
</ref>
<ref id="ref-matlabrobot">
<element-citation publication-type="book">
<person-group person-group-type="author">
<name><surname>Corke</surname><given-names>Peter I.</given-names></name>
</person-group>
<source>Robotics, vision &amp; control: Fundamental algorithms in MATLAB</source>
<publisher-name>Springer</publisher-name>
<year iso-8601-date="2017">2017</year>
</element-citation>
</ref>
<ref id="ref-kumar">
<element-citation publication-type="thesis">
<person-group person-group-type="author">
<name><surname>Kumar</surname><given-names>Shivesh</given-names></name>
</person-group>
<article-title>Modular and analytical methods for solving kinematics and dynamics of series-parallel hybrid robots</article-title>
<publisher-name>Universität Bremen</publisher-name>
<year iso-8601-date="2019">2019</year>
</element-citation>
</ref>
<ref id="ref-moveit">
<element-citation publication-type="article-journal">
<person-group person-group-type="author">
<name><surname>Chitta</surname><given-names>Sachin</given-names></name>
<name><surname>Sucan</surname><given-names>Ioan</given-names></name>
<name><surname>Cousins</surname><given-names>Steve</given-names></name>
</person-group>
<article-title>Moveit! [ROS topics]</article-title>
<source>IEEE Robotics &amp; Automation Magazine</source>
<publisher-name>IEEE</publisher-name>
<year iso-8601-date="2012">2012</year>
<volume>19</volume>
<issue>1</issue>
<pub-id pub-id-type="doi">10.1109/MRA.2011.2181749</pub-id>
</element-citation>
</ref>
</ref-list>
</ref-list>
</back>
</article>

0 comments on commit 90392e3

Please sign in to comment.