Roscpp Topic_demo
- package
$ cd ~/catkin_ws/src
$ catkin_create_pkg topic_demo roscpp rospy std_msgs
- msg
$ cd topic_demo
$ mkdir msg
$ cd msg
$ gedit gps.msg
float32 x
float32 y
string state
- talker.cpp
#include<ros/ros.h>
#include<topic_demo/gps.h>
int main(int argc, char** argv){
ros::init(argc,argv,"talker");
ros::NodeHandle nh;
topic_demo::gps msg;
msg.x=1.0;
msg.y=1.0;
msg.state="working";
ros::Publisher pub = nh.advertise<topic_demo::gps>("gps_info",1);
ros::Rate loop_rate(1.0);
while(ros::OK){
msg.x=1.1*msg.x;
msg.y=1.2*msg.y;
ROS_INFO("Talker:GPS x=%f, y=%f",msg.x, msg.y);
pub.Publish(msg);
loop_rate.sleep();
}
return 0;
}
- listener.cpp
#include<ros/ros.h>
#include<topic_demo/gps.h>
#include<std_msgs/Float32.h>
void gpsCallback(topic_demo::gps::ConstPtr &msg){
std_msgs::Float32 distance;
distance.data=sqrt(pow(msg.x,2)+pow(msg.y,2));
ROS_INFO("distence is %f",distance.data);
}
int main(int argc,char **argv){
ros::init(argc,argv,"listener");
ros::NodeHandle nh;
ros::Subscriber sub = nh.Subscribe("gps_info",1,gpscallback);
ros::spin();
return 0;
}
- CMakeLists.txt和Package.xml
catkin_minimum_required(VERSION 2.8.2)
project(topic_demo)
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
add_message_files(FILES gps.msg)
generation_messages(DEPENDENCIES std_msgs)
catkin_package(CATKIN_DEPENEDS roscpp rospy std_msgs message_runtime)
add_executable(talker src/talker.cpp)
add_dependencies(talker topic_demo_generation_messages_cpp)
target_link_libraries(talker ${catkin_LIBRARIES})
add_executable(listener src/listener.cpp)
add_dependencieslistener topic_demo_generation_message_cpp)
target_link_libraries(listener ${catkin_LIBRARIES})
<build_depend>message_generation</build_depend>
<run_depend>message_runtime</run_depend>
- 编译
$ cd ~/catkin_ws
$ catkin_make
Roscpp service_demo
- package
$ cd ~/catkin_ws/src
$ catkin_create_pkg servic_demo roscpp rospy std_msgs
- srv
$ cd topic_demo
$ mkdir srv
$ cd srv
$ gedit Greeting.srv
string name
int32 age
---
string feedback
3.server.cpp
#include<ros/ross.h>
#include<service_demo/Greeting.h>
bool handle_function(service_demo::Greeting::Request &req,service_Demo::Greeting::Response &res){
ROS_INFO("Requested from %s, age is %d",req.name,req.age);
res.feedback = "HI"+req.name,"I'm server!";
return true;
}
int main(int argc, char** argv){
ros::init(argc,argv,"greeting_server");
ros::NodeHandle nh;
ros::ServiceServer server= nh.advertiseService("greetings",handle_function);
ros::spin();
retunrn 0;
}
4.client.cpp
#include<ros/ros.h>
#include<service_demo/Greeting.h>
int main(int argc, char **argv){
ros::init(argc,argv,"greeting_client");
ros::NodeHandle nh;
service_demo::Greeting srv;
srv.name="HAN";
srv.age=20;
ros::ServiceClient client=nh.serviceClient<service_demo::Greeting>("greetings");
if(client.call(srv)){
ROS_INFO("my name is %s, age is %d",srv.name,srv.age);
}
else{
ROS_ERROR("Failed");
return 1;
}
return 0;
}
5.CMakeLists.txt和package.xml
project(service_demo)
find_package(catkin REQUIRED COMPONETS
roscpp
rospy
std_msgs
message_generation
)
add_service_files(FILES Greeting.srv)
generate_messages(DEPENDENCIES std_msgs)
catkin_package(CATKIN_DEPENDS roscpp rospy std_msgs message_runtime)
add_executable(server src/server.cpp)
add_dependencies(server service_demo_generation_message.cpp)
target_link_libraries(server ${catkin_LIBRARIES})
add_executable(client src/client.cpp)
add_dependencies(client service_demo_generation_message.cpp)
target_link_libraries(client ${catkin_LIBRARIES})
<build_depend>message_generation</build_depend>
<run_depend>message_runtime</run_depend>
6.编译
$ cd ~/catkin_ws
$ catkin_make