ROS学习笔记(3)之ros的topic发送与接收简单实例

这篇博客详细介绍了如何在ROS环境中创建package,编辑msg文件,编写C++源文件实现topic的发送(talker.cpp)和接收(listen.cpp),并提到了修改MacList.txt的步骤,帮助读者掌握ROS中的消息通信机制。
摘要由CSDN通过智能技术生成

建立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(&#
  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值