ROS QR Tracker 是一个将 QR 码检测和跟踪功能集成到 ROS(机器人操作系统)环境中的项目。它使用 OpenCV 进行图像处理,在 Ubuntu 和 macOS 上使用 ZBar,在 Windows 上使用 quirc 进行 QR 码检测,使机器人能够实时识别和跟踪 QR 码。
- ROS(Ubuntu 20.04 使用 Noetic,Ubuntu 18.04 使用 Melodic)
- CMake(3.10 版本或更高)
- 支持 C++14 的 C++ 编译器
- OpenCV
- ZBar(Ubuntu 和 macOS)或 quirc(Windows)
ros_qr_tracker/
├── include/
│ └── QRScanner.h
├── src/
│ ├── QRScanner.cpp
│ └── main.cpp
├── CMakeLists.txt
└── package.xml
- 安装 ROS(按照官方 ROS 安装指南进行安装)
- 安装依赖:
将
sudo apt update sudo apt install cmake libopencv-dev libzbar-dev ros-<distro>-cv-bridge
<distro>
替换为您的 ROS 发行版(例如 noetic, melodic)
- 安装 Visual Studio(2019 或更新版本),选择"使用 C++ 的桌面开发"工作负载。
- 从 cmake.org 下载并安装 CMake。
- 从 opencv.org 下载 Windows 版 OpenCV 并解压。
- 下载并编译 quirc 库。
项目的核心代码(QRScanner.h 和 QRScanner.cpp)在三个操作系统上有一些关键的差异:
Ubuntu 和 macOS:
#include <opencv2/opencv.hpp>
#include <zbar.h>
class QRScanner {
// ...
private:
cv::VideoCapture cap;
zbar::ImageScanner scanner;
// ...
};
Windows:
#include <opencv2/opencv.hpp>
#include <quirc.h>
class QRScanner {
// ...
private:
cv::VideoCapture cap;
struct quirc* qr;
// ...
};
主要差异在于 QR 码检测和解码的实现:
Ubuntu 和 macOS:
void QRScanner::processFrame(cv::Mat& frame) {
// 使用 ZBar 进行 QR 码检测
zbar::Image image(frame.cols, frame.rows, "Y800", grey.data, frame.cols * frame.rows);
scanner.scan(image);
for (zbar::Image::SymbolIterator symbol = image.symbol_begin(); symbol != image.symbol_end(); ++symbol) {
// 处理检测到的 QR 码
// ...
}
}
Windows:
void QRScanner::processFrame(cv::Mat& frame) {
// 使用 quirc 进行 QR 码检测
quirc_resize(qr, width, height);
uint8_t* image = quirc_begin(qr, nullptr, nullptr);
memcpy(image, grey.data, width * height);
quirc_end(qr);
int count = quirc_count(qr);
for (int i = 0; i < count; i++) {
struct quirc_code code;
struct quirc_data data;
quirc_extract(qr, i, &code);
if (quirc_decode(&code, &data) == 0) {
// 处理检测到的 QR 码
// ...
}
}
}
- 创建一个 catkin 工作空间:
mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone <repository-url> ros_qr_tracker cd ~/catkin_ws catkin_make
- 使用 CMake 生成 Visual Studio 项目:
mkdir build && cd build cmake .. -G "Visual Studio 16 2019" -A x64
- 打开生成的 .sln 文件,在 Visual Studio 中构建解决方案。
- 源化您的工作空间:
source ~/catkin_ws/devel/setup.bash
- 运行节点:
rosrun ros_qr_tracker ros_qr_tracker_node
直接运行编译生成的可执行文件。
本项目在 Ubuntu 和支持 ROS 的 macOS 环境下设计为 ROS 节点。它发布检测到的 QR 码信息,并订阅相机图像话题。
主要 ROS 特性:
- 发布到
/qr_tracker/detections
话题 - 订阅
/camera/image_raw
话题
Windows 版本通常不包含 ROS 集成。
- 库加载问题:检查路径设置和库文件位置。
- Windows DLL 问题:确保所需 DLL 在系统 PATH 中或与可执行文件在同一目录。
- ROS 问题:检查 ROS 核心是否运行,以及话题连接是否正确。
欢迎贡献!请通过创建 issue 或提交 pull request 来帮助改进这个项目。
本项目采用 MIT 许可证。详情请见 LICENSE 文件。