一、实验准备
实验要求:
学习古月居ROS教学课件和相关视频,练习课件上的话题通信、服务通信编程代码示例
实验环境:
ubuntu 18.04
二、工作空间
工作空间是一个存放工程开放相关文件的文件夹,它包括以下文件夹:
1)创建工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
2)编译工作空间
cd ~/catkin_ws/
catkin_make
catkin_make install
3)设置环境变量
sudo nano ~/.bashrc
将代码source /home/huo/catkin_ws/devel/setup.bash
粘入文件末尾
这里我的用户名是huo,注意替换
4)查看环境变量
echo $ROS_PACKAGE_PATH
三、功能包
1)创建功能包
cd ~/catkin_ws/src
catkin_create_pkg learning_communication std_msgs rospy roscpp
2)编译功能包
cd ~/catkin_ws
catkin_make
四、ROS通信编程
1.话题通信
话题编程流程:
- 创建发布者
- 创建订阅者
- 添加编译选项
- 运行可执行程序
1)创建发布者
在目录~/catkin_ws/src/learning_communication/src
下创建文件talker.cpp
cd ~/catkin_ws/src/learning_communication/src
gedit talker.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,发布名为chatter的topic,消息类型为std_msgs::String
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类型的消息
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;
}
2)创建订阅者
在同目录下创建文件listener.cpp
gedit 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.