ROS话题通信(自定义消息)

项目场景:

编写发布者和订阅者,实现话题通信
需要通信的消息类型定义如下 (Robotvel.msg):
std msgs/Header header
string name
int16 id
geometry_msgs/Twist velocity


实现步骤:

  1. 新建功能包,添加依赖(roscpp rospy std_msgs geometry_msgs),CtrlShiftB编译无误;
  2. 新建msg文件夹,编写RobotVel.msg文件;
std_msgs/Header header
string name
int16 id
geometry_msgs/Twist velocity

     3.配置Package;


     4.配置CMakeLists;

 


     5.编译后生成头文件,在c_cpp_properties.json中添加头文件路径; 


     6.在src下编写发布者RoborVel_pub.cpp文件;

#include "ros/ros.h"
#include "std_msgs/String.h"
#include "std_msgs/Header.h"
#include "header_msg_0922/RobotVel.h"
int main(int argc, char *argv[])
{
    ros::init(argc, argv, "vel_pub");
    ros::NodeHandle nh;
    ros::Publisher pub = nh.advertise<header_msg_0922::RobotVel>("RobotVel",100);
    header_msg_0922::RobotVel rv;
    ros::Duration(3).sleep();
    ros::Rate rate(10);
    while (ros::ok())
    {   
        rv.header.seq = 1;
        rv.header.frame_id = "earth";
        rv.header.stamp = ros::Time::now();
        rv.id = 1;
        rv.name = "robot";
        rv.velocity.angular.x = 0.2;
        rv.velocity.angular.y = 0;
        rv.velocity.angular.z = 0;
        rv.velocity.linear.x = 0;
        rv.velocity.linear.y = 0;
        rv.velocity.linear.z = 0.3;

        pub.publish(rv);
        ROS_INFO("Robot's name is %s,frame_id is %s,now : %f",rv.name.c_str(),rv.header.frame_id.c_str(),rv.header.stamp.toSec());
        rate.sleep();    
        ros::spinOnce();
    }
    return 0;
}

 


     7.在src下编写订阅者RoborVel_sub.cpp文件;

#include "ros/ros.h"
#include "std_msgs/String.h"
#include "std_msgs/Header.h"
#include "header_msg_0922/RobotVel.h"

void doVel(const header_msg_0922::RobotVel &rv)
{
    ROS_INFO("Getting name:%s,now:%f,angular velocity(%f,%f,%f),linear velocity(%f,%f,%f)",
              rv.name.c_str(),rv.header.stamp.toSec(),
              rv.velocity.angular.x,rv.velocity.angular.y,rv.velocity.angular.z,
              rv.velocity.linear.x,rv.velocity.linear.y,rv.velocity.linear.z);
}
int main(int argc, char *argv[])
{
    ros::init(argc, argv, "vel_sub");
    ros::NodeHandle nh;
    ros::Subscriber sub = nh.subscribe("RobotVel",100,doVel);    
    ros::spin();
    return 0;
}

 


     8.配置CMakeLists.xml;

 


     9.运行;

 完成项目。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值