1
0
forked from zbw/yiliao2026

二维码检测:添加了判断顺逆时针的规则和发布内容;临时修改发布话题到了vlm中

This commit is contained in:
2026-07-22 17:32:00 +08:00
parent fc6e796c28
commit 691e9c80bd
5 changed files with 36 additions and 27 deletions

View File

@@ -9,12 +9,9 @@ from launch_ros.actions import Node
def generate_launch_description():
image_topic = LaunchConfiguration("image_topic", default="/image_raw")
image_topic = LaunchConfiguration("image_topic", default="/image")
return LaunchDescription([
DeclareLaunchArgument("image_topic",
default_value="/image_raw",
description="相机图像话题 (bgr8 / rgb8 / nv12 / mono8)"),
Node(
package="qr_detection",

View File

@@ -16,17 +16,17 @@ def generate_launch_description():
use_buffer = LaunchConfiguration("use_buffer", default="true")
# USB 相机驱动 (v4l2)
v4l2_camera = Node(
package="v4l2_camera",
executable="v4l2_camera_node",
name="usb_camera",
parameters=[{
"video_device": camera_device,
"image_size": [640, 480],
"pixel_format": "YUYV",
}],
remappings=[("image_raw", image_topic)],
)
# camera = Node(
# package="hobot_usb_cam",
# executable="hobot_usb_cam",
# name="hobot_usb_cam",
# parameters=[{
# "video_device": camera_device,
# "image_size": [640, 480],
# "pixel_format": "YUYV",
# }],
# remappings=[("image_raw", image_topic)],
# )
# QR 识别
qr_detector = Node(
@@ -60,6 +60,6 @@ def generate_launch_description():
DeclareLaunchArgument("use_buffer",
default_value="true",
description="信号消失后保持最近结果"),
v4l2_camera,
# v4l2_camera,
qr_detector,
])

View File

@@ -34,8 +34,9 @@ public:
std::bind(&QrDetectNode::sign_cb, this, std::placeholders::_1));
pub_ = create_publisher<std_msgs::msg::String>("qr_results", 10);
pub_tts_ = create_publisher<std_msgs::msg::String>("/vlm_result", 10);
RCLCPP_INFO(get_logger(), "QR Detect ready, topic=%s", image_topic_.c_str());
RCLCPP_INFO(get_logger(), "QR Detect ready, topic=%s, tts topic=/vlm_result", image_topic_.c_str());
}
private:
@@ -84,13 +85,18 @@ private:
auto out = std_msgs::msg::String();
if (n > 0) {
out.data = zimg.symbol_begin()->get_data();
if (out.data != last_) {
RCLCPP_INFO(get_logger(), "QR: %s", out.data.c_str());
last_ = out.data;
const std::string qr_data = zimg.symbol_begin()->get_data();
if (qr_data != last_) {
RCLCPP_INFO(get_logger(), "QR: %s", qr_data.c_str());
last_ = qr_data;
}
if (!qr_data.empty() && qr_data.find_first_not_of("0123456789") == std::string::npos) {
out.data = qr_data + " " + (((qr_data.back() - '0') % 2 == 1) ? "顺时针" : "逆时针");
pub_->publish(out);
pub_tts_->publish(out); // 同时发给TTS播报
}
}
pub_->publish(out);
}
void sign_cb(const std_msgs::msg::Int32::SharedPtr msg)
@@ -102,6 +108,7 @@ private:
rclcpp::Subscription<sensor_msgs::msg::Image>::SharedPtr sub_;
rclcpp::Subscription<std_msgs::msg::Int32>::SharedPtr sign_sub_;
rclcpp::Publisher<std_msgs::msg::String>::SharedPtr pub_;
rclcpp::Publisher<std_msgs::msg::String>::SharedPtr pub_tts_; // 发给TTS语音播报
bool enabled_;
std::string image_topic_;