Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3f96df39d4 | |||
| 0502948bcd | |||
| cbb54b4882 | |||
| 66fb213861 | |||
| 97e06314cc | |||
| ad48c955d9 | |||
| b69a5ff5bc | |||
| a43ff769d4 | |||
| afc839e8cb | |||
| 08b00d6c97 |
+1
-1
@@ -14,7 +14,7 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3 -Wall")
|
||||
project(smartcar_demo2 VERSION 0.1.0 LANGUAGES C CXX)
|
||||
|
||||
# OpenCV 设备端路径
|
||||
set(OpenCV_DIR /home/spdis/loongson/opencv-4.13.0/loongson/lib/cmake/opencv4)
|
||||
set(OpenCV_DIR /mnt/D/PPPProgram/smartcar/opencv-4.13.0/loongson/lib/cmake/opencv4)
|
||||
find_package(OpenCV REQUIRED)
|
||||
include_directories(${OpenCV_INCLUDE_DIRS})
|
||||
message(STATUS "OpenCV Include Directories: ${OpenCV_INCLUDE_DIRS}")
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ SET(CROSS_COMPILE 1)
|
||||
IF(CROSS_COMPILE)
|
||||
SET(CMAKE_SYSTEM_NAME Linux)
|
||||
set(CMAKE_SYSTEM_PROCESSOR loongson)
|
||||
SET(TOOLCHAIN_DIR "/opt/loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.6")
|
||||
SET(TOOLCHAIN_DIR "/home/spdis/loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.6")
|
||||
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/bin/loongarch64-linux-gnu-g++)
|
||||
set(CMAKE_C_COMPILER ${TOOLCHAIN_DIR}/bin/loongarch64-linux-gnu-gcc)
|
||||
|
||||
|
||||
+15
-9
@@ -962,12 +962,15 @@ static void steering_update()
|
||||
}
|
||||
}
|
||||
|
||||
if (std::abs(deviation) < g_cfg.deadband) {
|
||||
// 死区内 → 直行
|
||||
// 平滑线性转向: 偏差从死区边界开始缩放,消除死区断崖
|
||||
double effective = std::abs(deviation) - g_cfg.deadband;
|
||||
if (effective <= 0) {
|
||||
servo.setDutyCycle(1500000);
|
||||
} else {
|
||||
// 比例控制: 偏差 → 归一化 → × 增益 × 满偏占空比差
|
||||
double offset = deviation / (newWidth / 2.0) * g_cfg.steer_gain * 300000;
|
||||
double half_w = newWidth / 2.0;
|
||||
double norm = effective / (half_w - g_cfg.deadband);
|
||||
double sign = (deviation > 0) ? 1.0 : -1.0;
|
||||
double offset = norm * g_cfg.steer_gain * 300000.0 * sign;
|
||||
double duty_ns = std::clamp(1500000.0 + offset, 1200000.0, 1800000.0);
|
||||
servo.setDutyCycle((unsigned int)duty_ns);
|
||||
}
|
||||
@@ -1031,13 +1034,16 @@ static void motor_update(bool zebra_block, bool tl_block)
|
||||
prev_zstate = g_zstate;
|
||||
prev_tlstate = g_tl_state;
|
||||
|
||||
double spd = target_speed * boost_factor();
|
||||
|
||||
// 斑马线起步后 3.3~5s 降速走稳
|
||||
if (g_zstate == Z_COOLDOWN) {
|
||||
double spd;
|
||||
if (boost_factor() > 1.0) {
|
||||
spd = 26.0; // 起步弹射
|
||||
} else if (g_zstate == Z_COOLDOWN) {
|
||||
spd = 16.0; // 冷却期基础速度
|
||||
time_t elapsed = time(nullptr) - g_ztime;
|
||||
if (elapsed >= 3.3 && elapsed < 5)
|
||||
spd = std::min(spd, 13.0);
|
||||
spd = std::min(spd, 13.0); // 3.3~5s 降速
|
||||
} else {
|
||||
spd = target_speed; // 正常行驶
|
||||
}
|
||||
|
||||
// 弯道减速: 舵机偏差越大 → 速度越低
|
||||
|
||||
+10
-5
@@ -69,10 +69,12 @@ cv::Mat image_binerize(cv::Mat &frame)
|
||||
cv::cvtColor(frame, hsvImage, cv::COLOR_BGR2HSV);
|
||||
cv::split(hsvImage, hsvChannels);
|
||||
|
||||
cv::threshold(hsvChannels[0], binarizedFrame,
|
||||
0, 255, cv::THRESH_BINARY_INV | cv::THRESH_OTSU);
|
||||
cv::threshold(hsvChannels[1], output,
|
||||
0, 255, cv::THRESH_BINARY_INV | cv::THRESH_OTSU);
|
||||
cv::adaptiveThreshold(hsvChannels[0], binarizedFrame, 255,
|
||||
cv::ADAPTIVE_THRESH_GAUSSIAN_C,
|
||||
cv::THRESH_BINARY_INV, 11, 2);
|
||||
cv::adaptiveThreshold(hsvChannels[1], output, 255,
|
||||
cv::ADAPTIVE_THRESH_GAUSSIAN_C,
|
||||
cv::THRESH_BINARY_INV, 11, 2);
|
||||
|
||||
cv::bitwise_or(output, binarizedFrame, output);
|
||||
|
||||
@@ -104,7 +106,7 @@ cv::Mat image_binerize(cv::Mat &frame)
|
||||
// ============================================================
|
||||
cv::Mat find_road(cv::Mat &frame)
|
||||
{
|
||||
static cv::Mat kernel = cv::getStructuringElement(cv::MORPH_CROSS, cv::Size(3, 3));
|
||||
static cv::Mat kernel = cv::getStructuringElement(cv::MORPH_CROSS, cv::Size(7, 7));
|
||||
cv::morphologyEx(binarizedFrame, morphologyExFrame, cv::MORPH_OPEN, kernel);
|
||||
|
||||
static cv::Mat mask;
|
||||
@@ -173,6 +175,9 @@ void image_main()
|
||||
cv::merge(labCh, labFrame);
|
||||
cv::cvtColor(labFrame, resizedFrame, cv::COLOR_Lab2BGR);
|
||||
|
||||
// ── 1.6 高斯模糊 → 融合反光噪点 ────────────────────
|
||||
cv::GaussianBlur(resizedFrame, resizedFrame, cv::Size(5, 5), 0);
|
||||
|
||||
// ── 2. HSV 双通道 Otsu 二值化 ─────────────────────
|
||||
// 赛道区域 = 白色(255),背景/边界 = 黑色(0)
|
||||
binarizedFrame = image_binerize(resizedFrame);
|
||||
|
||||
Reference in New Issue
Block a user