CANopen is a higher-level communication protocol built on top of CAN. This means that it uses the same physical layer on the uCs with CAN transceivers, but it enforces additional rules on the CAN frames to impose further structure on the communication. It provides specifications for a master node controlling slave nodes, state machines for each nodes, and more. More information about CANopen can be found on Wikipedia.
The CANopen stack is an open source library for implementing CANopen in embedded systems. We've integrated the CANopen stack into EVT-core, so we are able to implement each of our boards as CANopen nodes fairly easily. Compared to other communication protocols, CANopen is more complicated to implement in the code, but the CANopen stack handles a lot of the complexity for us. You can read more about the CANopen stack on the CANopen stack website. We've also summarized some implementation information in this doc.