> 文章列表 > ROS——基本框架

ROS——基本框架

ROS——基本框架

ROS(Robot Operating System)是一款针对机器人应用开发的开源软件平台,它提供了一系列的工具和库,支持机器人的各种功能实现,如控制、感知、导航等。ROS主要使用C++和Python语言进行开发。

下面是ROS基本框架的C++实现:

节点

ROS的基本组成单位是节点,每个节点代表一个独立的进程,节点之间可以相互通信。在C++中,可以通过ros::NodeHandle类来实现节点的创建和管理。

#include <ros/ros.h>int main(int argc, char argv)
{// 初始化ROS节点ros::init(argc, argv, "my_node");// 创建节点句柄ros::NodeHandle nh;// 节点处理逻辑// ...// 退出节点ros::shutdown();return 0;
}

发布者

发布者用于向指定的话题(Topic)发布消息,订阅该话题的节点将接收到该消息。在C++中,可以通过ros::Publisher类来实现发布者的创建和消息发布。

#include <ros/ros.h>
#include <std_msgs/String.h>int main(int argc, char argv)
{ros::init(argc, argv, "my_publisher");ros::NodeHandle nh;ros::Publisher pub = nh.advertise<std_msgs::String>("my_topic", 10);while(ros::ok()){std_msgs::String msg;msg.data = "Hello, world!";pub.publish(msg);ros::spinOnce();ros::Rate(10).sleep();}ros::shutdown();return 0;
}

订阅者

使用ros::Subscriber对象订阅消息,指定回调函数来处理接收到的消息。

#include <ros/ros.h>
#include <std_msgs/String.h>void callback(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, "my_subscriber");ros::NodeHandle nh;ros::Subscriber sub = nh.subscribe("my_topic", 10, callback);ros::spin();ros::shutdown();return 0;
}

服务端 

使用ros::ServiceServer对象创建一个服务,并指定处理服务请求的回调函数。

#include <ros/ros.h>
#include <std_srvs/Empty.h>bool myService(std_srvs::Empty::Request& req,std_srvs::Empty::Response& res)
{ROS_INFO("Service called");// Service code herereturn true;
}int main(int argc, char argv)
{ros::init(argc, argv, "my_service");ros::NodeHandle nh;// Create a service for the "my_service" serviceros::ServiceServer srv = nh.advertiseService("my_service", myService);// Spin the node and wait for incoming service requestsros::spin();return 0;
}