目录
一、ROS通信工程
1.话题编程
1.1创建工作空间
catkin_init_workspace
1.2工程编译
catkin_make
使install空间出现
catkin_make install
1.3 创建功能包
catkin_create_pkg test_pkg roscpp rospy std_mags
1.4 设置环境变量
source devel/setup.bash
echo $ROS_PACKAGE_PATH
1.5 代码撰写
publisher.cpp
#include <sstream>
#include "ros/ros.h"
#include "std_msgs/String.h"
int main(int argc, char **argv){
//ROS节点初始化
ros::init(argc, argv, "talker");
//创建节点句柄
ros::NodeHandle n;
//创建publisher
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;
std::stringstream ss;
ss << "hello world "<< count;
msg.data = ss.str();
ROS_INFO("%s", msg.data.c_str());
chatter_pub.publish(msg);
//循环等待回调函数
ros::spinOnce();
loop_rate.sleep();
++count;
}
return 0;
}
server.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;
}
1.6 运行结果
2.服务编程
2.1定义srv文件
mkdir ~/second_topic_ws/src/test_pkg/srv
sudo nano AddTwoInts.srv
AddTwoInts.srv
int64 a
int64 b
---
int64 sum
2.2 修改package.xml和CMakeLists.txt
package.xml
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
在CMakeLists.txt添加编译选项
使用find_package()查找包catkin的所有依赖项。
添加运行时的依赖message_runtime