创建一个名为"camera_publisher_node.cpp"的文件,并在其中编写ROS节点程序
时间: 2023-06-20 20:06:59 浏览: 101
好的,以下是一个简单的示例代码:
```c++
#include <ros/ros.h>
#include <sensor_msgs/Image.h>
#include <opencv2/opencv.hpp>
int main(int argc, char** argv) {
// 初始化ROS节点
ros::init(argc, argv, "camera_publisher_node");
ros::NodeHandle nh;
// 创建ROS发布者,发布sensor_msgs/Image类型的消息
ros::Publisher image_pub = nh.advertise<sensor_msgs::Image>("camera_image", 10);
// 打开摄像头
cv::VideoCapture cap(0);
if (!cap.isOpened()) {
ROS_ERROR("Failed to open camera.");
return -1;
}
// 循环读取摄像头数据并发布消息
cv::Mat frame;
sensor_msgs::ImagePtr msg;
ros::Rate loop_rate(30); // 发布频率为30Hz
while (ros::ok()) {
cap >> frame;
if (!frame.empty()) {
// 将OpenCV的Mat类型转换为ROS的sensor_msgs/Image类型
msg = cv_bridge::CvImage(std_msgs::Header(), "bgr8", frame).toImageMsg();
// 发布消息
image_pub.publish(msg);
}
ros::spinOnce();
loop_rate.sleep();
}
// 关闭摄像头
cap.release();
return 0;
}
```
上述代码中,我们使用了OpenCV库来读取摄像头数据,并将数据转换为ROS消息后发布出去。同时,我们还使用了ROS的循环机制来控制发布频率。最后,记得在CMakeLists.txt中添加对OpenCV和cv_bridge的依赖。
希望这个示例代码能帮助到你。
阅读全文