ROS中C++编写发布、python编写订阅

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28306361/article/details/85553691


因为在做项目的过程中需要用到C++和Python程序,所以想要尝试一下在ROS中能不能用C++编写消息的发布者,Python编写消息的订阅者。

源程序

mytalker.cpp

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

using namespace std;

int main(int argc, char** argv)
{
	ros::init(argc, argv, "mytalker");  // 节点名称
	ros::NodeHandle n;

	ros::Publisher chatter_pub  = n.advertise<std_msgs::String>("chatter",1000);
	ros::Rate loop_rate(10);
	int count = 0;

	while( ros::ok() )
	{
		std_msgs::String msg;
		std::stringstream ss;
		ss<<"hello "<<count;
		msg.data = ss.str();
	
		ROS_INFO("Publish %s\n", msg.data.c_str() );

		chatter_pub.publish(msg);

		ros::spinOnce();

		loop_rate.sleep();
		++count;
	}

	return 0;	
}

mylisten2.py

#!/usr/bin/env python
import rospy
from std_msgs.msg import String

def callback(data):
    print("Received \n")

def listener():
    rospy.init_node('listener', anonymous= True)
    rospy.Subscriber("chatter", String, callback)
    rospy.spin()


if __name__ == '__main__':
    listener()

程序比较简单,就不解读了

运行结果

发布者

在这里插入图片描述

订阅者

在这里插入图片描述
可以看到,即使我们用C++编写消息的发布者,用python编写消息的订阅者,消息还是能正常传输,并且能够执行相应的回调函数。

相关配置

mylisten2.py文件的位置。应当先在包(比如mytest)下面创建一个scripts文件夹,然后将mylisten2.py文件放在scripts文件夹下就行,在CMakeList中,只需要在add_executable和target_link_libraries中加入mylistener.cpp相应的内容就行,不需要加入python文件的相关编译内容。

include_directories(include ${catkin_INCLUDE_DIRS})

add_executable(mytalker src/mytalker.cpp)
target_link_libraries(mytalker ${catkin_LIBRARIES})
add_dependencies(mytalker ${PROJECT_NAME}_generate_messages_cpp)
 
#add_executable(mylistener src/mylistener.cpp)
#target_link_libraries(mylistener ${catkin_LIBRARIES})
#add_dependencies(mytalker ${PROJECT_NAME}_generate_messages_cpp)

ROS真的好方便,这样C++和Python就能随便用了

参考博客

1:C++、python编写消息程序
2:检验自己编写的消息程序

猜你喜欢

转载自blog.csdn.net/qq_28306361/article/details/85553691