ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | Q&A
Ask Your Question

Publish CAN frame on topic

asked 2015-09-24 09:18:35 -0600

Droter gravatar image

updated 2015-09-25 18:36:55 -0600


I am trying to publish CAN data to a ROS topic. I followed the talker tutorial and am using the suggestion on this question:

#include "ros/ros.h"
#include "std_msgs/String.h"
#include <sstream>
#include "socketcan_interface/socketcan.h"
#include "socketcan_interface/threading.h"
#include "socketcan_interface/string.h"

void handleFrames(const can::Frame &f){
    // handle all frames
    LOG(can::tostring(f, true)); // lowercase: true
void handleFrame123(const can::Frame &f){
    // handle specific frame
    LOG("123? " << can::tostring(f, true)); // lowercase: true

int main(int argc, char **argv)
    can::ThreadedSocketCANInterface driver;
    if(!driver.init("can0", false)) return 1; // read own messages: false

    can::CommInterface::FrameListener::Ptr all_frames = driver.createMsgListener(handleFrames);
    can::CommInterface::FrameListener::Ptr one_frame = driver.createMsgListener(can::MsgHeader(0xFF32), handleFrame123); // handle only frames with CAN-ID 0x123

    ros::init(argc, argv, "data_raw");
    ros::NodeHandle n;
    ros::Publisher canbus_pub = n.advertise<std_msgs::String>("canbus", 1000);

    while (ros::ok())
      std_msgs::String msg;
      std::stringstream ss;

      ss << all_frames; = ss.str();


      //ROS_INFO("%s", std::cout<<"all_frames is of type: "<<typeid(all_frames).name()<<std::endl);


  return 0;

This line LOG(can::tostring(f, true) will print the CAN frame to the console like:


This line canbus_pub.publish(msg) prints to a rostopic canbus but no frame data:

data: 0x1e9db80
data: 0x1e9db80

How do I get the individual CAN frames to print to the topic?



edit retag flag offensive close merge delete


This code cannot compile! Please move std_msgs::String msg; into handleFrames. The CAN-IDs in the LOG outputs look strange, too. I have to check can::tostring next week.

Mathias Lüdtke gravatar image Mathias Lüdtke  ( 2015-09-25 04:52:34 -0600 )edit

I found this package. Maybe it is a better place to start.

Haven't got it working yet.

Droter gravatar image Droter  ( 2015-09-25 18:37:42 -0600 )edit

Any good news about this? Please advice me how to us it...

khairulizwan gravatar image khairulizwan  ( 2015-11-13 01:53:20 -0600 )edit

1 Answer

Sort by » oldest newest most voted

answered 2015-10-04 11:52:37 -0600

Droter gravatar image

This interface works well. I haven't tried sending but it will publish CAN data to a topic.

edit flag offensive delete link more


Any good news about this? Please advice me how to us it...

khairulizwan gravatar image khairulizwan  ( 2015-11-13 01:53:29 -0600 )edit

This package has been updated to include a new CanFrame2 msg that includes a bool for extended.

Droter gravatar image Droter  ( 2016-04-26 12:41:06 -0600 )edit

I am a newbie. I installed the package,but I am sure it been installed correctly. I used rosrun to find the command, but i can not find any command about the packet. Any command to prove the packet is installed correctly?

yaovincent gravatar image yaovincent  ( 2016-06-28 04:27:27 -0600 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools



Asked: 2015-09-24 09:18:35 -0600

Seen: 2,546 times

Last updated: Oct 04 '15