Initial commit: SmartCar Framework v0.1 — 龙芯2K0300智能车开发框架\n\n- HAL: GPIO/PWM/Encoder/Framebuffer 驱动\n- Control: PID/IMU/Motor/Servo 控制\n- Vision: HSV双Otsu→4点标定IPM→洪泛填充→逐行搜线\n- Strategy: 三区前瞻偏差+速度策略\n- Debug: 文件热调参+LCD预览+cv截帧\n- Scheduler: 5ms timerfd+epoll 中央调度器

This commit is contained in:
2026-05-25 10:31:55 +08:00
commit 28d9c6da58
52 changed files with 2599 additions and 0 deletions

56
vision/camera.cpp Normal file
View File

@@ -0,0 +1,56 @@
#include "camera.hpp"
#include <atomic>
#include <mutex>
#include <thread>
static cv::VideoCapture* cap = nullptr;
static cv::Mat pubframe;
static std::mutex frame_mutex;
static std::atomic<bool> stream_running{false};
bool camera_init()
{
cap = new cv::VideoCapture(0);
if (!cap->isOpened()) return false;
cap->set(cv::CAP_PROP_FOURCC, cv::VideoWriter::fourcc('M', 'J', 'P', 'G'));
cap->set(cv::CAP_PROP_FRAME_WIDTH, CAMERA_WIDTH);
cap->set(cv::CAP_PROP_FRAME_HEIGHT, CAMERA_HEIGHT);
cap->set(cv::CAP_PROP_AUTO_EXPOSURE, -1);
return true;
}
void camera_deinit()
{
if (cap) { cap->release(); delete cap; cap = nullptr; }
}
cv::Mat camera_capture()
{
std::lock_guard<std::mutex> lock(frame_mutex);
return pubframe.clone();
}
cv::Mat camera_resize(const cv::Mat& src)
{
cv::Mat resized;
cv::resize(src, resized, cv::Size(IMAGE_WIDTH, IMAGE_HEIGHT));
return resized;
}
void camera_stream_start()
{
stream_running.store(true);
std::thread([]() {
cv::Mat tmp;
while (stream_running.load())
{
if (cap && cap->read(tmp))
{
std::lock_guard<std::mutex> lock(frame_mutex);
pubframe = tmp.clone();
}
}
}).detach();
}