I've created a custom msg (msg/mycustom.msg) in my package called mypkg, created a publisher and 2 subscribers, one in python, another in cpp. You can see below:
my_subscriber.py
#!/usr/bin/env python
import rospy
from mypkg.msg import mycustom
def callback(data):
rospy.loginfo("direction x: [" + str(data.direction.x) + "]")
rospy.loginfo("direction y: [" + str(data.direction.y) + "]")
rospy.loginfo("direction z: [" + str(data.direction.z) + "]")
def listener():
rospy.init_node('listener', anonymous=True)
rospy.Subscriber("my_topic", mycustom, callback)
rospy.spin()
if __name__ == '__main__':
listener()
cpp_subscriber.cpp
#include "ros/ros.h"
#include "mypkg/mycustom.h"
void chatterCallback(const mypkg::mycustom::ConstPtr& msg)
{
ROS_INFO("direction x: [%.2f]", msg->direction.x);
ROS_INFO("direction y: [%.2f]", msg->direction.y);
ROS_INFO("direction z: [%.2f]", msg->direction.z);
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "cpp_subscriber");
ros::NodeHandle n;
ros::Subscriber sub = n.subscribe("my_topic", 1000, chatterCallback);
ros::spin();
return 0;
}
There's a video step-by-step showing how I did it: https://www.youtube.com/watch?v=aLfJZf9py0g