ROS初学

您所在的位置:网站首页 ros发布数组 ROS初学

ROS初学

2023-10-17 00:22| 来源: 网络整理| 查看: 265

ROS初学——消息发布、消息接收与armadillo矩阵库的使用

ROS初学记录,消息的发布和接收,代码文件编写、cmakelist文件编写,package.xml文件编写,armadillo矩阵库的使用。

消息发布

编写了一个简单的消息发布节点,发布的数据类型为std_msgs中定义的数据类型。节点名称为test_sensor_talker,发送的消息名称为sensor001,是一个Float32类型的数据。std_msgs中定义了很多基础的数据类型,可以在ROS网站上查到,注意,使用不同的数据类型时需要修改头文件。

//test_sensor_talker.cpp消息发布节点 #include #include"ros/ros.h" #include"std_msgs/Float32.h" int main(int argc,char **argv) { ros::init(argc,argv,"test_sensor_talker"); ros::NodeHandle n; ros::Publisher chatter_pub = n.advertise("sensor001",1000); ros::Rate loop_rate(10); int count =0; while(ros::ok()) { std_msgs::Float32 msg; float ss=(float)count; msg.data=ss; ROS_INFO("%0.2f",msg.data); chatter_pub.publish(msg); ros::spinOnce(); loop_rate.sleep(); count++; //count=count%10; } return 0; }

对应的CmakeList.txt

cmake_minimum_required(VERSION 2.8.3) project(test_sensor) find_package(catkin REQUIRED COMPONENTS roscpp std_msgs ) catkin_package( CATKIN_DEPENDS message_runtime # INCLUDE_DIRS include # LIBRARIES test_sensor # CATKIN_DEPENDS roscpp std_msgs # DEPENDS system_lib roscpp std_msgs ) include_directories( include ${catkin_INCLUDE_DIRS} # include ${catkin_INCLUDE_DIRS} ) include_directories(include ${catkin_INCLUDE_DIRS}) add_executable(test_sensor_talker src/test_sensor_talker.cpp) target_link_libraries(test_sensor_talker ${catkin_LIBRARIES})

对应的package.xml中添加

catkin roscpp std_msgs roscpp std_msgs roscpp std_msgs message_runtime 消息订阅与自定义消息类型 消息订阅并使用类处理

完成消息订阅节点后,接下来完成消息订阅处理节点,并且消息处理的节点希望在类中完成,所以消息订阅节点定义了两个文件,一个是test_sensor_KF.cpp用来订阅消息,另一个是FusionCenter_KF.h,类写在FusionCenter_KF.h中,该文件放在include文件夹中。

//test_sensor_KF.cpp #include"ros/ros.h" #include"FusionCenter_KF.h" int main(int argc,char **argv) { ros::init(argc, argv, "test_sensor_KF"); ros::NodeHandle n; FusionCenter_KF kf; ros::Subscriber sub = n.subscribe("sensor001",1000,&FusionCenter_KF::chatterCallback,&kf); ros::Rate loop_rate(10); while(ros::ok()) { ros::spinOnce(); kf.Print_z(); loop_rate.sleep(); } return 0; } //FusionCenter_KF.h #include #include"std_msgs/Float32.h" #include"test_sensor/sensor2d.h" using namespace std; struct meas_re { float time; float r; float theta; float pos_x; float pos_y; }; class FusionCenter_KF { public: test_sensor::sensor2d z; void Print_z(); void chatterCallback(const test_sensor::sensor2d::ConstPtr& msg); }; void FusionCenter_KF::Print_z() { cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3