<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    tl;dr: You use CANopen devices and ROS? Then checkout: <a
      href="http://wiki.ros.org/kacanopen"><a class="moz-txt-link-freetext" href="http://wiki.ros.org/kacanopen">http://wiki.ros.org/kacanopen</a></a>
    (Repository: <a href="https://github.com/KITmedical/kacanopen">https://github.com/KITmedical/kacanopen</a>)<br>
    <br>
    <br>
    Dear ROS community,<br>
    <br>
    I'm happy to announce <a href="http://wiki.ros.org/kacanopen">KaCanOpen</a>,
    a plug&play ROS stack for CANopen devices (motors, remote I/Os,
    ...) written in modern C++.<br>
    <br>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <p class="line867" style="box-sizing: border-box; margin: 0px 0px
      10px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue',
      Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal;
      font-variant: normal; font-weight: normal; letter-spacing: normal;
      line-height: 20px; orphans: auto; text-align: start; text-indent:
      0px; text-transform: none; white-space: normal; widows: 1;
      word-spacing: 0px; -webkit-text-stroke-width: 0px;
      background-color: rgb(255, 255, 255);">KaCanOpen is an easy-to-use
      CANopen stack, which consists of four parts:<span class="anchor"
        id="line-12" style="box-sizing: border-box;"></span></p>
    <ul style="box-sizing: border-box; margin-top: 0px; margin-bottom:
      10px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue',
      Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal;
      font-variant: normal; font-weight: normal; letter-spacing: normal;
      line-height: 20px; orphans: auto; text-align: start; text-indent:
      0px; text-transform: none; white-space: normal; widows: 1;
      word-spacing: 0px; -webkit-text-stroke-width: 0px;
      background-color: rgb(255, 255, 255);">
      <li style="box-sizing: border-box;">
        <p class="line891" style="box-sizing: border-box; margin: 0.25em
          0px;"><strong style="box-sizing: border-box; font-weight:
            bold;">Drivers</strong>: A wide range of CAN hardware (USB,
          PCI, embedded) is supported using different CAN drivers. They
          have been developed by the <a class="nonexistent"
            href="http://wiki.ros.org/CanFestival" style="box-sizing:
            border-box; color: gray; text-decoration: none; border: 0px;
            background: transparent;">CanFestival</a><span
            class="Apple-converted-space"> </span>project. Follow the
          link for details.<span class="anchor" id="line-13"
            style="box-sizing: border-box;"></span></p>
      </li>
      <li style="box-sizing: border-box;">
        <p class="line891" style="box-sizing: border-box; margin: 0.25em
          0px;"><strong style="box-sizing: border-box; font-weight:
            bold;">Core</strong>: This is a library which implements
          basic CANopen protocols like NMT, SDO and PDO. As an example,
          you can easily fetch a value from a device (uploading in<span
            class="Apple-converted-space"> </span><a class="nonexistent"
            href="http://wiki.ros.org/CanOpen" style="box-sizing:
            border-box; color: gray; text-decoration: none; border: 0px;
            background: transparent;">CANopen</a><span
            class="Apple-converted-space"> </span>terminology) via<tt
            style="box-sizing: border-box;">
            core.sdo.upload(node_id, index, subindex)</tt>. Furthermore,
          it allows you to register callbacks on certain events or any
          incoming messages, so one can build arbitrary CANopen nodes
          (master or slave) using this library.<span class="anchor"
            id="line-14" style="box-sizing: border-box;"></span></p>
      </li>
      <li style="box-sizing: border-box;">
        <p class="line891" style="box-sizing: border-box; margin: 0.25em
          0px;"><strong style="box-sizing: border-box; font-weight:
            bold;">Master</strong>: This library is intended to be used
          for a master node. It detects all nodes in a CAN network and
          gives direct access to them via standardized CiA® profiles.
          For example, on a motor device (profile CiA® 402) you can
          simply call <tt style="box-sizing: border-box;">mymotor.set_entry("Target velocity", 500)</tt>.
          A main feature of this library is transparent SDO/PDO access
          to dictionary entries: By default a value is fetched and set
          via SDO. But you can also configure PDO mappings, which keep
          the value up-to-date in background via (much more lightweight)
          PDO messages. The call itself (<tt style="box-sizing:
            border-box;">mymotor.set_entry("Target velocity", 500)</tt>)
          remains unchanged.<span class="anchor" id="line-15"
            style="box-sizing: border-box;"></span></p>
      </li>
      <li style="box-sizing: border-box;">
        <p class="line891" style="box-sizing: border-box; margin: 0.25em
          0px;"><strong style="box-sizing: border-box; font-weight:
            bold;">ROS Bridge</strong>: This library provides a bridge
          to a ROS network, which makes KaCanOpen especially interesting
          for robotics. After setting up the CANopen network, the
          library can publish slave nodes so they are accessible through
          ROS messages. Special effort is put into the use of
          standardized message types which allows interaction with other
          software from the ROS universe. For example, motors can be
          operated using JointState messages.<span class="anchor"
            id="line-16" style="box-sizing: border-box;"></span><span
            class="anchor" id="line-17" style="box-sizing: border-box;"></span></p>
      </li>
    </ul>
    <p class="line867" style="box-sizing: border-box; margin: 0px 0px
      10px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue',
      Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal;
      font-variant: normal; font-weight: normal; letter-spacing: normal;
      line-height: 20px; orphans: auto; text-align: start; text-indent:
      0px; text-transform: none; white-space: normal; widows: 1;
      word-spacing: 0px; -webkit-text-stroke-width: 0px;
      background-color: rgb(255, 255, 255);">KaCanOpen is designed to
      make use of modern C++11/14 features and to avoid redundant code
      on the user side wherever possible. Reusing all the available
      functionality, a custom node for a custom CANopen device can be
      written in less than 100 lines of code.<br>
    </p>
    <br>
    Although, I have the joy to announce KaCanOpen here, most credit
    goes to Thomas for all the effort he put into it!<br>
    <br>
    Cheers,<br>
    Andreas<br>
  </body>
</html>