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(): def generate_launch_description():
image_topic = LaunchConfiguration("image_topic", default="/image_raw") image_topic = LaunchConfiguration("image_topic", default="/image")
return LaunchDescription([ return LaunchDescription([
DeclareLaunchArgument("image_topic",
default_value="/image_raw",
description="相机图像话题 (bgr8 / rgb8 / nv12 / mono8)"),
Node( Node(
package="qr_detection", package="qr_detection",

View File

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

View File

@@ -34,8 +34,9 @@ public:
std::bind(&QrDetectNode::sign_cb, this, std::placeholders::_1)); std::bind(&QrDetectNode::sign_cb, this, std::placeholders::_1));
pub_ = create_publisher<std_msgs::msg::String>("qr_results", 10); 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: private:
@@ -84,13 +85,18 @@ private:
auto out = std_msgs::msg::String(); auto out = std_msgs::msg::String();
if (n > 0) { if (n > 0) {
out.data = zimg.symbol_begin()->get_data(); const std::string qr_data = zimg.symbol_begin()->get_data();
if (out.data != last_) { if (qr_data != last_) {
RCLCPP_INFO(get_logger(), "QR: %s", out.data.c_str()); RCLCPP_INFO(get_logger(), "QR: %s", qr_data.c_str());
last_ = out.data; 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_->publish(out);
pub_tts_->publish(out); // 同时发给TTS播报
}
}
} }
void sign_cb(const std_msgs::msg::Int32::SharedPtr msg) 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<sensor_msgs::msg::Image>::SharedPtr sub_;
rclcpp::Subscription<std_msgs::msg::Int32>::SharedPtr sign_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_;
rclcpp::Publisher<std_msgs::msg::String>::SharedPtr pub_tts_; // 发给TTS语音播报
bool enabled_; bool enabled_;
std::string image_topic_; std::string image_topic_;

View File

@@ -6,6 +6,7 @@
3 - 到达任务二起始阶段,执行顺/逆时针绕圈(可集成图生文) 3 - 到达任务二起始阶段,执行顺/逆时针绕圈(可集成图生文)
4 - 减速拍照图像传入图生文节点随后回到3备用 4 - 减速拍照图像传入图生文节点随后回到3备用
5 - 完整走完一圈,执行任务三 5 - 完整走完一圈,执行任务三
6 - 到达终点,停止
2. 全部流程 2. 全部流程
启动小车->slamtoolbox开始建图并开始发布导航命令这时候小车还不能动->打开电机开关,小车开始行动->走到一半扫到二维码,发布在/qr_results上->停掉二维码节点sign=5和导航1同时开始导航2到任务二入口并顺逆时针转圈->到达指定位置触发一次vlm请求->开始语音播报同时完成任务二、三 启动小车->slamtoolbox开始建图并开始发布导航命令这时候小车还不能动->打开电机开关,小车开始行动->走到一半扫到二维码,发布在/qr_results上->停掉二维码节点sign=5和导航1同时开始导航2到任务二入口并顺逆时针转圈->到达指定位置触发一次vlm请求->开始语音播报同时完成任务二、三
*/ */
@@ -17,16 +18,13 @@ static int ENTRY = 2;
static int CIRCLE = 3; static int CIRCLE = 3;
static int VLM = 4; static int VLM = 4;
static int TASK3 = 5; static int TASK3 = 5;
static int END = 6;
class RacingControl : public rclcpp::Node class RacingControl : public rclcpp::Node
{ {
public: public:
RacingControl() : Node("racing_control") RacingControl();
{
// 初始化状态指令
state_command_ = QR_SEARCHING;
}
private: private:
// 状态指令变量 // 状态指令变量
int state_command_; int state_command_;

View File

@@ -0,0 +1,7 @@
#include "racing_control/racing_control.hpp"
RacingControl : Node("racing_control")
{
// 初始化状态指令
state_command_ = QR_SEARCHING;
}