Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9396073
  • 博文数量: 1747
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 20060
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1747)

文章存档

2024年(23)

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: 其他平台

2019-01-07 15:06:14

  1. 创建工作目录并初始化 
  2. mkdir -p ~/catkin_ws/src; cd ~/catkin_ws/src; catkin_init_workspace
  3. 并把 ~/catkin_ws/src/devel/setup.bash 添加到环境目录下.


  4. 一般情况下,建议将消息文件msg和服务文件srv制作成一个只包含消息文件的单独的包,而不是将其包含在可执行节点中的目录中.

  5. ----------------------------Demo Topic-----------------------------------------------------------
  6. //创建功能包
  7.     cd ~/catkin_ws/src
  8.     catkin_create_pkg ros_tutorials_topic message_generation std_msgs roscpp 
  9. #此时有了 ros_tutorials_topic/{include,src,CMakeLists.txt,package.xml文件}
 //创建msg/srv等子目录. 看上面的红色字的提示点, 就知道为什么系统默认没有这些目录了吧
    mkdir -p ros_tutorials_topic/{msg,srv,action}
 //添加消息
    #CMakeLists.txt 中添加
    add_message_files(FILES MsgTutorial.msg)
    #msg 目录中添加 MsgTutorial.msg 文件.内容如下    

点击(此处)折叠或打开

  1. time stamp
  2. int32 data


//创建发布者节点
     #CMakeLists.txt 添加
       add_executable(topic_publisher src/topic_publisher.cpp)
     #在src目录中添加topic_publisher.cpp文件
        gedit topic_publisher.cpp → 新建源文件并修改内容

点击(此处)折叠或打开

#include "ros/ros.h" // ROS默认头文件
#include "ros_tutorials_topic/MsgTutorial.h" // MsgTutorial消息头文件( 构建后自动生成)
int main(int argc, char **argv) // 节点主函数
{
    ros::init(argc, argv, "topic_publisher"); // 初始化节点名称
    ros::NodeHandle nh; // 声明一个节点句柄来与ROS系统进行通信
    // 声明发布者,创建一个使用ros_tutorials_topic功能包的MsgTutorial 消息文件的
    // 发布者ros_tutorial_pub。话题名称是"ros_tutorial_msg"
    // 消息文件发布者队列(queue)的大小设置为100
    ros::Publisher ros_tutorial_pub =
    nh.advertise<ros_tutorials_topic::MsgTutorial>("ros_tutorial_msg", 100);
    // 设定循环周期。"10"是指10Hz,是以0.1秒间隔重复
    ros::Rate loop_rate(10);
    ros_tutorials_topic::MsgTutorial msg; // 以MsgTutorial消息文件格式声明一个 叫做msg的消息
    int count = 0; // 声明要在消息中使用的变量
    while (ros::ok())
    {
        msg.stamp = ros::Time::now(); // 把当前时间传给msg的下级消息stamp
        msg.data = count; // 将变量count的值传给下级消息data
        ROS_INFO("send msg = %d", msg.stamp.sec); // 显示stamp.sec消息
        ROS_INFO("send msg = %d", msg.stamp.nsec); // 显示stamp.nsec消息
        ROS_INFO("send msg = %d", msg.data); // 显示data消息
        ros_tutorial_pub.publish(msg); // 发布消息。
        loop_rate.sleep(); // 按照上面定义的循环周期进行暂歇
        ++count; // 变量count增加1
    }
    return 0;
}
//创建订阅者节点
    #CMakeLists.txt文件中添加
    add_executable(topic_subscriber src/topic_subscriber.cpp)
    #在src目录中添加topic_subscriber.cpp文件
        gedit topic_subscriber.cpp → 新建源文件并修改内容
    

点击(此处)折叠或打开

  1. #include "ros/ros.h" // ROS的默认头文件
  2. #include "ros_tutorials_topic/MsgTutorial.h" // MsgTutorial消息头文件(构建后自动生成)
  3. // 这是一个消息后台函数,
  4. // 此函数在收到一个下面设置的名为ros_tutorial_msg的话题时候被调用。
  5. // 输入的消息是从ros_tutorials_topic功能包接收MsgTutorial消息。
  6. void msgCallback(const ros_tutorials_topic::MsgTutorial::ConstPtr& msg)
  7. {
  8.     ROS_INFO("recieve msg = %d", msg->stamp.sec); // 显示stamp.sec消息
  9.     ROS_INFO("recieve msg = %d", msg->stamp.nsec); // 显示stamp.nsec消息
  10.     ROS_INFO("recieve msg = %d", msg->data); // 显示data消息
  11. }
  12. int main(int argc, char **argv) // 节点主函数
  13. {
  14.     ros::init(argc, argv, "topic_subscriber"); // 初始化节点名称
  15.     ros::NodeHandle nh; // 声明用于ROS系统和通信的节点句柄
  16.     // 声明订阅者,创建一个订阅者ros_tutorial_sub,
  17.     // 它利用ros_tutorials_topic功能包的的MsgTutorial消息文件。
  18.     // 话题名称是"ros_tutorial_msg",订阅者队列(queue)的大小设为100。
  19.     ros::Subscriber ros_tutorial_sub = nh.subscribe("ros_tutorial_msg", 100, msgCallback);
  20.     // 用于调用后台函数,等待接收消息。在接收到消息时执行后台函数。
  21.     ros::spin();
  22.     return 0;
  23. }
#catkin 构建
    cd ~/catkin_ws → 移动到catkin目录
    catkin_make → 执行catkin构建
    构建结果为 
        build 目录:保存catkin构建用到的配置内容
        /devel/lib/ros_tutorials_topic’”目录中保存可执行文件
        /devel/include/ros_tutorials_topic”目录存储着从消息文件自动生成的消息头文件

#运行
    roscore
    rosrun ros_tutorials_topic topic_publisher 
    # rostopic list查看话题. rostopic echo /ros_tutorial_msg 显示话题内容
    rosrun ros_tutorials_topic topic_subscriber
    rqt_graph #查看节点关系.


阅读(1132) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~