ROS创建第一个接收程序

ROS第一个程序


ROS个人感觉就是本质将各种信息进行整合,比如视觉信息,传感器信息,等等之类
#发送程序

#首先cd到文件目录,或者直接新创一个目录
$ cd /home/catkin_ws/src  #这一步只是到达一个新的目录,可以随便写自己的
$ catkin_create_pkg pub_sub_test std_msgs rospy roscpp
#上面这一句catkin_create_pkg是ROS自带的命令,表示要创建一个package了.
# pub_sub_test是这个package的名称,当然你也可以取任何名字.
# ROS的package命名习惯是不出现大写字母.
#后面的内容表示你这个ROS package的依赖项.
#(这就好像写c++你需要include,写python你需要import)可以一开始指定你需要包含哪些ROS已有的软件包(也可以后添加).
$ cd .. #回到主目录,因为catkin_make必须在主目录下才行
$ catkin_make #运行这个就是告诉ros,你有了一个新的程序pub_sub_test 要添加到工作空间了

至此,环境初步搭建成功了。
再进行命令:

roscd pub_sub_test
mkdir src
cd src
进行一系列的文件创建
touch pub_string.cpp #创建发送程序
touch sub_string.cpp# 创建接收程序

#pub_string.cpp
#include "ros/ros.h" #我这里显示标红,但是可以正常使用程序,遂不管
#include "std_msgs/String.h"
#include <sstream>

int main(int argc, char **argv)
{
    ros::init(argc,argv, "talker");
    ros::NodeHandle n;
    //初始化节点
    ros::Publisher chatter_pub=n.advertise<std_msgs::String>("chatter",1000);
    //发布话题"chatter"
    ros::Rate loop_rate(10); //睡眠频率,配合loop_rate.sleep()使用
    int count = 0;
    while (ros::ok)
    {
        std_msgs::String msg;
     //定义了std_msgs::String的对象msg       String/Int8
        std::stringstream ss;
        ss << "hello world"<<count;//写入ss 字符串流
        msg.data = ss.str();//赋值msg

        ROS_INFO("%s",msg.data.c_str());
        chatter_pub.publish(msg); //pusblish()
        ros::spinOnce();
        loop_rate.sleep();
        ++count;

    }
    return 0;    
}

#接收程序

#sub_string.cpp
#include "ros/ros.h"
#include "std_msgs/String.h"


void chatterCallback(const std_msgs::String::ConstPtr&  msg)//msg --接收信息的指针
//回调函数  
//Int 8 类型(const std_msgs::Int8::ConstPtr&  msg)
{
    ROS_INFO("I heard: [%s]", msg->data.c_str());
}
int main(int argc, char **argv)
{
    ros::init(argc, argv, "listener");
    ros::NodeHandle n;
    //初始化节点
    ros::Subscriber sub =n.subscribe("chatter", 1000, chatterCallback);
    //订阅chatter话题
    ros::spin();
    return 0;
}

#运行
至此初步的两个程序搭建完成,首先一个是发送信息hello world,另一个是接收该程序发送的信息。
再就是编辑CMakeLists.txt 的信息,将我们创建的两个cpp文件添加到环境中。

add_executable(pub_string src/pub_string.cpp)
target_link_libraries(pub_string ${catkin_LIBRARIES})
add_executable(sub_string src/sub_string.cpp)
target_link_libraries(sub_string ${catkin_LIBRARIES})

然后再新开一个terminal,输入roscore,打开ros服务。
再新开一个terminal:

cd 到主目录
source devel/setup.bash
rosrun pub_sub_tset sub_string

先打开接收端程序。如果先打开发送端,接收端未打开,产生时间差,会导致部分信息接收不到,影响后续的操作。

再新开一个terminal:

重复上面第一第二步
rosrun pub_sub_test pub_string

再打开发送端。
到这一步,OVER

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值