ROS第一个程序
ROS个人感觉就是本质将各种信息进行整合,比如视觉信息,传感器信息,等等之类
#发送程序
#首先cd到文件目录,或者直接新创一个目录
$ cd /home/catkin_ws/src #这一步只是到达一个新的目录,可以随便写自己的
$ catkin_create_pkg pub_sub_test std_msgs rospy roscpp
#上面这一句catkin_create_pkg是ROS自带的命令,表示要创建一个package了.
# pub_sub_test是这个package的名称,当然你也可以取任何名字.
# ROS的package命名习惯是不出现大写字母.
#后面的内容表示你这个ROS package的依赖项.
#(这就好像写c++你需要include,写python你需要import)可以一开始指定你需要包含哪些ROS已有的软件包(也可以后添加).
$ cd .. #回到主目录,因为catkin_make必须在主目录下才行
$ catkin_make #运行这个就是告诉ros,你有了一个新的程序pub_sub_test 要添加到工作空间了
至此,环境初步搭建成功了。
再进行命令:
roscd pub_sub_test
mkdir src
cd src
进行一系列的文件创建
touch pub_string.cpp #创建发送程序
touch sub_string.cpp# 创建接收程序
#pub_string.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);
//发布话题"chatter"
ros::Rate loop_rate(10); //睡眠频率,配合loop_rate.sleep()使用
int count = 0;
while (ros::ok)
{
std_msgs::String msg;
//定义了std_msgs::String的对象msg String/Int8
std::stringstream ss;
ss << "hello world"<<count;//写入ss 字符串流
msg.data = ss.str();//赋值msg
ROS_INFO("%s",msg.data.c_str());
chatter_pub.publish(msg); //pusblish()
ros::spinOnce();
loop_rate.sleep();
++count;
}
return 0;
}
#接收程序
#sub_string.cpp
#include "ros/ros.h"
#include "std_msgs/String.h"
void chatterCallback(const std_msgs::String::ConstPtr& msg)//msg --接收信息的指针
//回调函数
//Int 8 类型(const std_msgs::Int8::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);
//订阅chatter话题
ros::spin();
return 0;
}
#运行
至此初步的两个程序搭建完成,首先一个是发送信息hello world,另一个是接收该程序发送的信息。
再就是编辑CMakeLists.txt 的信息,将我们创建的两个cpp文件添加到环境中。
add_executable(pub_string src/pub_string.cpp)
target_link_libraries(pub_string ${catkin_LIBRARIES})
add_executable(sub_string src/sub_string.cpp)
target_link_libraries(sub_string ${catkin_LIBRARIES})
然后再新开一个terminal,输入roscore,打开ros服务。
再新开一个terminal:
cd 到主目录
source devel/setup.bash
rosrun pub_sub_tset sub_string
先打开接收端程序。如果先打开发送端,接收端未打开,产生时间差,会导致部分信息接收不到,影响后续的操作。
再新开一个terminal:
重复上面第一第二步
rosrun pub_sub_test pub_string
再打开发送端。
到这一步,OVER