使用Roboware编写ROS程序

使用Roboware编写ROS程序

1.编写ROS cpp

将在roboware中的工作区,新建功能包后,进行c++文件的编写。

创建cpp文件时,右键SRC,点击新建cpp文件,然后点击加入可执行程序,则IDE将会自动为我们编写好cmakelist文件。

#include "ros/ros.h"
#include "std_msgs/String.h"
#include 
int main(int argc, char **argv)
{
    // 初始化节点
    ros::init(argc,argv,"talker");
    //定义节点句柄
    ros::NodeHandle n;
    //定义一个publisher变量  发布名为 chatter 的topic 消息类型为std_msgs::String  消息名为message
    //advertise("topic_name",num)
    ros::Publisher chatter_pub = n.advertise("chatter",1000);
    //设置循环频率
    ros::Rate loop_rate(10);
    int count;
    while(ros::ok())
    {
        std_msgs::String msg;
        std::stringstream ss;
        ss << "Hello world!" << count;
        msg.data=ss.str();
        chatter_pub.publish(msg);
        //延时等待回调函数
        ros::spinOnce();
        //按循环频率延时,与ros::Rate loop_rate(10); 配合使用
        loop_rate.sleep();
        count++;
    }
    return 0;
}


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

void chatterCallback(const std_msgs::String::ConstPtr& msg)//std_msgs::String::ConstPtr数据类型,是一个常指针,与pub所发送的消息类型相同。
{
    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 listener_sub = n.subscribe("chatter", 1000, chatterCallback);

   //用于调用所有可触发的回调函数。反复循环检测与调用,若缓存队列中含有msg,则会通过回调函数进行处理,
    //而队列中没有msg,则不会进行回调。相当于一个循环。是阻塞的。类似于在循环里反复调用ros::spinOnce()。
    //ros::spinOnce()是指检测并调用回调函数一次。
    ros::spin(); //用于反复检查事有msg需要进行回调函数处理。

return 0;

}

2.运行文件

编写好topic的talker与listener后,我们通过终端来运行文件,首先

roscore

将ROS的核心启动

然后运行可执行文件来启动节点,比如我们第一个cpp文件叫做talker,第二个叫做listener,他们放在test功能包下,那么:

rosrun  test talker

打开另一个终端:

rosrun test listener

这样可以启动两个可执行文件中的node

然后就可以在listener中看到talker发送的信息。

你可能感兴趣的:(ROS机器人基础)