ros中cpp节点创建
1.创建工作空间mkdir -p ~/test_ws/srccd ~/test_ws/srccatkin_init_workspacecd ~/test_wscatkin_make2.创建功能包cd ~/tets_ws/srccatkin_create_pkg test-cpp roscpp std_msgs3.在src中创建广播a.cppcd ~/test_ws/src/test-cpp/src
·
目录
1.创建工作空间
mkdir -p ~/test_ws/src
cd ~/test_ws/src
catkin_init_workspace
cd ~/test_ws
catkin_make
2.创建功能包
cd ~/tets_ws/src
catkin_create_pkg test-cpp roscpp std_msgs
3.在src中创建广播a.cpp
cd ~/test_ws/src/test-cpp/src
touch a.cpp
touch b.cpp
在a.cpp中写入
#include "ros/ros.h" //包含了使用ROS节点的必要文件
#include "std_msgs/String.h" //包含了使用的数据类型
#include <sstream>
int main(int argc, char **argv)
{
ros::init(argc, argv, "node_a"); //初始化ROS,节点名命名为node_a,节点名必须保持唯一
ros::NodeHandle n; //实例化节点, 节点进程句柄
ros::Publisher pub = n.advertise<std_msgs::String>("str_message", 1000); //告诉系统要发布话题了,话题名为“str_message”,类型为std_msgs::String,缓冲队列为1000。
ros::Rate loop_rate(10); //设置发送数据的频率为10Hz
//ros::ok()返回false会停止运行,进程终止。
while(ros::ok())
{
std_msgs::String msg;
std::stringstream ss;
ss<<"Hello World";
msg.data = ss.str();
ROS_INFO("node_a is publishing %s", msg.data.c_str());
pub.publish(msg); //向话题“str_message”发布消息
ros::spinOnce(); //不是必须,若程序中订阅话题则必须,否则回掉函数不起作用。
loop_rate.sleep(); //按前面设置的10Hz频率将程序挂起
}
return 0;
}
4.创建订阅b.cpp
#include "ros/ros.h"
#include "std_msgs/String.h"
//话题回调函数
void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
ROS_INFO("node_b is receiving [%s]", msg->data.c_str());
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "node_b"); //初始化ROS,节点命名为node_b,节点名必须唯一。
ros::NodeHandle n; //节点句柄实例化
ros::Subscriber sub = n.subscribe("str_message", 1000, chatterCallback); //向话题“str_message”订阅,一旦发布节点(node_a)在该话题上发布消息,本节点就会调用chatterCallbck函数。
ros::spin(); //程序进入循环,直到ros::ok()返回false,进程结束。
return 0;
}
5.修改cmake文件
gedit ~/test_ws/src/test-cpp/CMakeLists.txt
cmake_minimum_required(VERSION 3.0.2)
project(test-cpp)
find_package(catkin REQUIRED COMPONENTS roscpp std_msgs)
catkin_package()
include_directories( ${catkin_INCLUDE_DIRS})
add_executable(test_a src/a.cpp)
add_executable(test_b src/b.cpp)
target_link_libraries(test_a ${catkin_LIBRARIES})
target_link_libraries(test_b ${catkin_LIBRARIES})
6.编译
cd ~/test_ws
catkin_make
7.运行,在终端输入roscore启动
cd ~/test_ws
source devel/setup.bash
rosrun test-cpp test_a
cd ~/test_ws
source devel/setup.bash
rosrun test-cpp test_b
8.查看消息节点
rqt_graph
rostopic list
rostopic echo /str_message
更多推荐
所有评论(0)