建立package
cd ~/catkin_ws/src catkin_create_pkg first_pkg roscpp ros_py std_msgs
编辑msg文件
cd first_pkg mkdir msg#创建msg文件夹,这个文件夹一定要是这个名字 cd msg #进入文件夹 vi test_1.msg //怎么编译这个文件,根据跟人喜好
,msg文件中的代码:
float32 x
float32 y
string state
这里的数据类型是ros自己定义的,都在std_msgs中,与传统的cpp中的有一定出入。
编写c++源文件
源文件都写在first_pkg/src中
talker.cpp
#include<ros/ros.h>
#include<first_pkg/text_1.h>
int main(int argc,char** argv){
ros::init(argc,argv,"talker");//节点初始化
ros::NodeHandle nh; //定义节点的句柄,实例化节点。
first_pkg::text_1 msg ;//定义msg变量,类型为topic_demo命名空间下的gps
msg.x=1.0;
msg.y=1.0;
msg.state="working";//定义变量的值
//创建publisher
ros::Publisher pub = nh.advertise<first_pkg::text_1>("test_1_info", 1);
//first_pkg::text_1话题传送的信息格式
//("test_1_info", 1)话题的名字,缓存队列
//定义发布的频率
ros::Rate loop_rate(1.0); //循环发送的频率为1,即一秒钟1次
while (ros::ok())
{
//以指数增长,每隔1秒更新一次
msg.x = 1.03 * msg.x ;
msg.y = 1.01 * msg.y;
ROS_INFO("msg.x = %f,msg.y = %f,msg.state = %s",msg.x,msg.y,msg.state.c_str());
//将当前的信息打印处理,类似于printf。
//c_str()将std_msgs::string转换为std::string
//以1Hz的频率发布msg
pub.publish(msg);
//根据前面定义的频率, sleep 1s
loop_rate.sleep();//根据前面的定义的loop_rate,设置1s的暂停
}
return 0;
}
listen.cpp
//ROS头文件
#include <ros/ros.h>
//包含自定义msg产生的头文件
#include<first_pkg/text_1.h>
void Callback(const first_pkg::text_1::ConstPtr& msg_p)
//topic_demo::gps::ConstPtr为gps.msg文件编译生成的头文件中定义的数据类型,是一个常指针。
{
ROS_INFO(&#