介绍ROS中的std_msgs
介绍ROS中的std_msgs
Robot Operating System (ROS) 是一个用于编写机器人软件的灵活框架。在 ROS 中,std_msgs 是标准消息包,提供了一系列简单的消息类型,这些消息类型可以在不同的 ROS 节点之间进行通信。std_msgs 包含了一些基本的数据类型,如整数、浮点数、字符串等。以下是 std_msgs 中一些常用消息类型的例子:
- std_msgs::Bool
- std_msgs::Int8、Int16、Int32、Int64
- std_msgs::UInt8、UInt16、UInt32、UInt64
- std_msgs::Float32、Float64
- std_msgs::String
- std_msgs::ColorRGBA
- std_msgs::Header
下面是一个使用 C++ 编写的 ROS 节点例子,展示了如何使用 std_msgs::String 类型来发布和接收字符串消息:
- 首先,创建一个名为 “example_publisher” 的发布者节点:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28#include <ros/ros.h>
#include <std_msgs/String.h>
int main(int argc, char **argv) {
ros::init(argc, argv, "example_publisher");
ros::NodeHandle nh;
ros::Publisher publisher = nh.advertise<std_msgs::String>("example_topic", 1000);
ros::Rate loop_rate(10);
int count = 0;
while (ros::ok()) {
std_msgs::String msg;
msg.data = "Hello, ROS! " + std::to_string(count);
ROS_INFO("%s", msg.data.c_str());
publisher.publish(msg);
ros::spinOnce();
loop_rate.sleep();
++count;
}
return 0;
} - 接下来,创建一个名为 “example_subscriber” 的订阅者节点:这两个例子分别创建了一个发布者节点和一个订阅者节点。发布者节点发布一个 std_msgs::String 类型的消息到 “example_topic” 主题上,订阅者节点订阅该主题并在接收到新消息时调用 exampleCallback 函数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#include <ros/ros.h>
#include <std_msgs/String.h>
void exampleCallback(const std_msgs::String::ConstPtr& msg) {
ROS_INFO("Received message: %s", msg->data.c_str());
}
int main(int argc, char **argv) {
ros::init(argc, argv, "example_subscriber");
ros::NodeHandle nh;
ros::Subscriber subscriber = nh.subscribe("example_topic", 1000, exampleCallback);
ros::spin();
return 0;
}
接下来,我们将详细介绍如何编译和运行上述示例中的发布者和订阅者节点。
首先,确保你已经安装了 ROS 并正确设置了环境。接下来,在你的工作空间中创建一个名为 std_msgs_example 的新 ROS 软件包:1
2
3cd ~/catkin_ws/src
catkin_create_pkg std_msgs_example roscpp std_msgs
现在,在 std_msgs_example 软件包的 src 文件夹中创建两个源文件:example_publisher.cpp 和 example_subscriber.cpp。将先前给出的发布者和订阅者示例代码分别复制到这两个文件中。
接下来,在 std_msgs_example/CMakeLists.txt 中添加以下内容以编译发布者和订阅者节点:
1 |
|
在终端中,导航到你的工作空间目录(catkin_ws),并运行 catkin_make 以编译新创建的发布者和订阅者节点:1
2
3cd ~/catkin_ws
catkin_make
编译完成后,确保在新的终端中运行 ROS Master:1
2roscore
接下来,在两个单独的终端中分别运行发布者和订阅者节点:1
2
3source ~/catkin_ws/devel/setup.bash
rosrun std_msgs_example example_publisher1
2
3source ~/catkin_ws/devel/setup.bash
rosrun std_msgs_example example_subscriber
此时,你将看到发布者节点定期发布消息 “Hello, ROS! X”(其中 X 是递增的整数),并且订阅者节点会显示接收到的消息。这个简单的例子演示了如何使用 std_msgs::String 类型在 ROS 节点之间传递消息。对于其他 std_msgs 类型,使用类似的方法创建发布者和订阅者节点即可。