1.创建工作空间(和src)
mkdir -p catkin_ws/src
2.初始化工作空间
# 初始化工作空间要在src文件夹下
cd ~/catkin_ws/src
# 初始化工作空间,只在新建工作空间时运行一次即可
catkin_init_workspace
# 执行后,src下会多出一个cmakelist.txt
3.编译工作空间
# 回到 工作空间catkin_ws目录下,编译必须在工作空间目录下
cd ..
catkin_make
4.将当前工作空间的路径加入环境变量
# 每次新开一个终端/改了代码等,都要source一下
source devel/setup.bash
# 查看当前环境变量
echo $ROS_PACKAGE_PATH
5.创建功能包ros_test
# 进入src
cd src
# catkin_create_pkg+功能包名(ros_test)+依赖(std_msgs rospy roscpp)
catkin_create_pkg ros_test std_msgs rospy roscpp
# 进入功能包
cd ros_test
# 新建talker.cpp,listener.cpp
touch talker.cpp
touch listener.cpp
6.写talker.cpp,listener.cpp
// talker.cpp
#include "ros/ros.h"
#include "std_msgs/String.h"
#include <sstream>
int main(int argc, char **argv)
{
ros::init(argc, argv, "talker");
ros::NodeHandle n; //定义节点句柄
ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000); //定义发布者对象,<>里写该发布者消息类型,()里写话题名字,和缓存区大小;
ros::Rate loop_rate(10); //定义发布频率频率;
int count = 0;
while (ros::ok())
{
std_msgs::String msg; //定义ros里的string类型的消息message对象;
std::stringstream ss;
ss << "hello world " << count;//将需要发布的消息存到ss里;
msg.data = ss.str(); //将ss赋给msg.data;
ROS_INFO("%s", msg.data.c_str()); //设置ROSINFO输出格式
chatter_pub.publish(msg); //核心:发布
ros::spinOnce(); //与回调相关;
loop_rate.sleep();
++count;
}
return 0;
}
// listener.cpp
#include "ros/ros.h"
#include "std_msgs/String.h"
// 回调函数
void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
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 sub = n.subscribe("chatter", 1000, chatterCallback); //()里写订阅的话题名字,缓存区大小,收到消息后执行的回调函数
ros::spin();
return 0;
}
7.改写CMakeLists.txt
cmake_minimum_required(VERSION 3.0.2)
project(ros_test)
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
)
catkin_package(
include_directories(
# include
${catkin_INCLUDE_DIRS}
)
add_executable(talker src/talker.cpp) # 代表将src/talker.cpp编译成可执行文件talker
target_link_libraries(talker ${catkin_LIBRARIES}) # 将可执行文件talker与依赖库链接
add_executable(listener src/listener.cpp)
target_link_libraries(listener ${catkin_LIBRARIES})
# 写完重新编译并source一下
cd ~/catkin_ws
catkin_make
source devel/setup.sh
8.运行节点
8.1 运行roscore
roscore
8.2 运行talker
# 新打开一个终端
source devel/setup.bash
# 运行talker
# rosrun 包名 文件名
rosrun ros_test talker
8.3 运行listener
# 新打开一个终端
source devel/setup.bash
# 运行talker
# rosrun 包名 文件名
rosrun ros_test listener
8.4 运行结果显示