string name
float32 x
float32 y
float32 angle
注意一下格式,类型和名称之间是空格,写成table会有问题
在xml文件中增加依赖
message_runtime
在CMakeList.txt文件中增加编译选项
10 find_package(catkin REQUIRED COMPONENTS
11 roscpp
12 rospy
13 std_msgs
14 message_generation
15 actionlib_msgs
16 actionlib
17 )
58 add_message_files(
59 FILES
60 Person.msg
61 Position.msg
62 )
85 generate_messages(DEPENDENCIES std_msgs actionlib_msgs)
catkin_make 之后可以看到
raoxu@raoxu:~/catkin_ws/src/learning_communication$ rosmsg show learning_communication/Position
string name
float32 x
float32 y
float32 angle
1 #include
2 #include "ros/ros.h"
3 #include "std_msgs/String.h"
4 #include "learning_communication/Position.h"
5 #include
6 #include
7 #include
8
9 ros::Publisher position_pub;
10
11 void poseCallback(const turtlesim::PoseConstPtr& posmsg)
12 {
13 //创建消息
14 learning_communication::Position msg;
15
16 msg.name = "turtle1";
17 msg.x = posmsg->x;
18 msg.y = posmsg->y;
19 msg.angle = posmsg->theta;
20
21 position_pub.publish(msg);
22 }
23
24 int main(int argc, char **argv)
25 {
26 // ROS节点初始化
27 ros::init(argc, argv, "position_publish");
28 ros::NodeHandle n;
29
30 ROS_INFO("create publish");
31
32 // 创建一个Publisher,发布名为show_position的topic,消息类型为
33 position_pub = n.advertise("show_position", 1000);
34
35 ros::Subscriber sub = n.subscribe("/turtle1/pose", 1000, poseCallback);
36
37 ros::spin();
38
39 return 0;
40 }
5 #include
6 #include "ros/ros.h"
7 #include "std_msgs/String.h"
8 #include "learning_communication/Position.h"
9
10 // 接收到订阅的消息后,会进入消息回调函数
11 void listenCallback(const learning_communication::Position &msg)
12 {
13 // 将接收到的消息打印出来
14 ROS_INFO("listen: [name:%s, x:%f, y:%f, a:%f]", msg.name.c_str(), msg.x, msg.y, msg.angle);
15 }
16
17 int main(int argc, char **argv)
18 {
19 // 初始化ROS节点
20 ros::init(argc, argv, "position_listen");
21
22 // 创建节点句柄
23 ros::NodeHandle listen;
24
25 ROS_INFO("create listener");
26 // 创建一个Subscriber,订阅名为chatter的topic,注册回调函数chatterCallback
27 ros::Subscriber sub = listen.subscribe("show_position", 1000, listenCallback);
28
29 // 循环等待回调函数
30 ros::spin();
31
32 return 0;
33 }
在CMakeList.txt文件中增加编译选项
155 add_executable(position_pub src/position_publisher.cpp)
156 target_link_libraries(position_pub ${catkin_LIBRARIES})
157
158 add_executable(position_listen src/position_listen.cpp)
159 target_link_libraries(position_listen ${catkin_LIBRARIES})
catkin_make 之后成功编译出可执行文件,可以查看
ls ~/catkin_ws/devel/lib/learning_communication/
client DoDishes_client DoDishes_server listener listen_pos position_listen position_pub server talker
敲命令
roslaunch learning_communication positon_show.launch
本来预计这次也要做tf包学习的作业,不过目前学习的东西太少,等学会urdf之后,关于tf的内容会统一一起做的。
目前先简单说一下,自己对于tf的简单理解: