写这篇文章的初衷
首先是自己第一次接触ros遇到了好多的坑就想让大家避免入坑,还有就是普及正确的东西首先我要抨击一下这篇文章,让许多人走了弯路浪费了大家的时间,对待发博客一点都不严谨错误太多以下是地址按照我的做你会发现其实错误很简单。https://blog.csdn.net/poqiaomi5437/article/details/79660199
首先建立工作空间
很简单就是几条linux命令
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ~/catkin_ws
catkin_make
创建ROS包
cd ~/catkin_ws/src
catkin_create_pkg example_cpp(其实就是个文件夹别名包可以自定义) std_msgs roscpp
编译ROS功能包
cd ~/catkin_ws
catkin_make
开始最开心的时刻了写代码
将两个cpp文件(server.cpp和client.cpp)放到catkin_ws/example_cpp/src里面
server.cpp
#include <ros/ros.h>
#include <std_msgs/String.h>
#include <sstream>
int main(int argc,char **argv)
{
ros::init(argc,argv,"example_public"); //a)
ros::NodeHandle n; //b)
ros::Publisher chatter_pub = n.advertise<std_msgs::String>("message",1000); //c)
ros::Rate loop_rate(10); //d)
while(ros::ok()) //中断,遇到ctrl+c时候中断
{
std_msgs::String msg; //申请内存
std::stringstream ss; //信息内容变量
ss << "I am publisher "; //写入变量
msg.data = ss.str(); //写入内存
chatter_pub.publish(msg); //调用发布函数
loop_rate.sleep(); //发送频率
}
return 0;
}
client.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,"example_subscriber"); //a)
ros::NodeHandle n; //b)
ros::Subscriber sub = n.subscribe("message",1000,chatterCallback); //c)
ros::spin(); //回调函数
return 0;
}
修改catkin_ws/example_cpp下的CMakeList文件(在末尾加一下内容即可)
include_directories(
include
${catkin_INCLUDE_DIRS}
)
add_executable(example_public src/server.cpp)
add_executable(example_subscriber src/client.cpp)
target_link_libraries(example_public ${catkin_LIBRARIES})
target_link_libraries(example_subscriber ${catkin_LIBRARIES})
source配置
执行以下命
echo "source /home/catkin_ws/devel/setup.bash" >> ~/.bashrc
也可以手动添加不会去百度不多说了
开始进行编译
cd ~/catkin_ws
catkin_make
开始执行程序
分别在3个终端内输入以下命令(不要在一个终端中输入)
roscore
rosrun example_cpp example_public
rosrun example_cpp example_subscriber