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