1、
创建工作区间
mkdir -p ~/comm_ws/src
cd ~/comm_ws/src
catkin_init_workspace
2、编译工作区间
cd …
catkin_make
3、在bash中注册工作区
source devel/setup.bash
echo $ROS_PACKAGE_PATH
输出工作空间路径代表成功
4、创建ROS工程包
在工作空间中使用catkin_create_pkg命令去创建一个叫comm(通信)的包,这个包依靠std_msgs、roscpp、rospy。
~/comm_ws/src目录下
catkin_create_pkg comm std_msgs rospy roscpp
在工作区编译工程包
输入以下命令:
cd …
catkin_make
创建通信的收、发节点
进入工程包目录:
cd ~/comm_ws/src/comm
会在comm文件夹下看到CmakeList.txt、package.xml文件和include、src这两个目录。
cd src
创建一个名为fa1.cpp的文件
touch fa1.cpp
gedit fa1.cpp
touch jie1.cpp
gedit jie1.cpp
fa1.cpp如下
#include "ros/ros.h"
#include "std_msgs/String.h"
#include <sstream>
int main(int argc,char**argv){
ros::init(argc,argv,"publisher_node");//创建初始节点
ros::NodeHandle n;//创建节点句柄
ros::Publisher pub = n.advertise<std_msgs::String>("chatter",1000);
//创建发布者,发布std_msgs::String类型的消息,发布主题为chatter
ros::Rate loop(10);//创建发布频率10Hz
int count = 0;
while(ros::ok()){
//创建一个消息
std_msgs::String msg;
msg.data = "Hello ROS" + std::to_string(count);
//发布消息
pub.publish(msg);
//打印发布的消息
ROS_INFO("Published: %s",msg.data.c_str());
//按照设置的频率延时
loop_rate.sleep();
++count;
}
return 0;
}
jie1.cpp如下:
#include "ros/ros.h"
#include "std_msgs/String.h"
void chatterCallback(const std::msgs::String::ConstPtr& msg){
//当接收到消息时的回调函数
ROS_INFO("Received:[%s]",msg->data.c_str());
}
init main(int argc,char **argv){
//初始化ros节点
ros::init(argc,argv,"subscriberd_node");
//创建ROS节点句柄
ros::NodeHandle n;
//创建订阅者,订阅主题chatter,每当收到消息调用chattercallback,回调函数
ros::Subscriber sub=n.subscribe("chatter",10,chatterCallback);
//循环等待回调函数
ros:spin();
return 0;
}
两个文件都保存。
4、编辑Cmakelist.txt文件(注意:是comm项目包下的CMakelist文件)
gedit CMakeList.txt
添加
#项目名字是comm,可以根据自己的进行更改
cmake_minimum_required(VERSION 3.0.2)
project(comm)
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
)
include_directories(
# include
${catkin_INCLUDE_DIRS}
)
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES comm
# CATKIN_DEPENDS roscpp rospy std_msgs
# DEPENDS system_lib
CATKIN_DEPENDS roscpp rospy std_msgs
message_runtime
)
add_executable(fa1 src/fa1.cpp)
target_link_libraries(fa1 ${catkin_LIBRARIES})
add_executable(jie1 src/jie1.cpp)
target_link_libraries(jie1 ${catkin_LIBRARIES})
save
5、将目录切换到工作区目录,并执行catkin_make运行命令:
cd ~/comm_ws
catkin_make
6、新开一个终端启动ros
roscore
7、在原来的终端
cd ~/comm_ws
source ./devel/setup.bash
此处是发布者的
8、在新开一个终端
cd ~/comm_ws
source ./devel/setup.bash此处是订阅者
9、分别在两个终端下
rosrun comm fa1
rosrun comm jie1
运行两个结点即可。