# ESP-streaming **Repository Path**: MOLATERS/esp-streaming ## Basic Information - **Project Name**: ESP-streaming - **Description**: 本科毕业设计 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-03-04 - **Last Updated**: 2026-05-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: 本科项目 ## README # 基于轻量化DDS和ROS2的实时视频监控视频系统实现 --- ## 项目简介 本项目是一个基于ROS2和DDS(Data Distribution Service)的实时视频监控系统,旨在实现高效、实时的视频传输和处理。该系统采用了轻量级的DDS协议和ROS2框架,以满足对实时性能和可扩展性的需求 ## 项目环境 [传感器](./各个传感器的说明.md) [相关的配置和备忘命令](所需配置.md) ## 项目日志 ### 2025-4-10 在中期之后对项目的内容进行梳理和整改: - [x] 修改并精简ESP32-cam中的代码,去除uart模块,使用rtps方案或者http方案建立连接,这样能够提高视频传输效率; - [x] 在s3中设置传感器模块,并考虑使用传感器中的数据进行压缩传输,降低延迟并且体现出轻量化dds的特点,直接使用二进制数据流来完成(再进行进一步的探索) --- ### 2025-4-13 在之前的设想中进行了更大幅度的变化,变化的主要内容在于使用了不一样的系统架构来进行完成; 1. 系统模块考虑采用全新模块;考虑到中期时期当时完成的内容较少,而且esp32-cam的性能有限,所以考虑使用esp32-s3-cam来进行开发;**最主要的目的**是减少模块的数量,同时由于UART确实传输速度有待提升所以才减少模块数; 2. 在新的模块上暂时未做实验,目前的设想是通过生成rtps视频流的方式来发布视频流,在这个过程中就可以不用设计复杂的micro-dds方法,尽量简单,但是也没有绕过其中的dds 3. 原来的esp32-s3模块用来进行传感器的发送和接收,主要作用便是实现轻量化的信息传输,目前正在对这方面进行微调;争取在`2025-4-14`之前完成全部调试工作。在`2025-4-15`稳步开始esp32-s3-cam的开发进度。 4. 设计前端界面;目前考虑通过树莓派进行中转,获取必要的信息之后输出,设计的前端界面大致样式为: image-20250421165626250 5. 根据我的功能列举我将要完成的部分为: - 完成传感器的数据分发并实时显示 :white_check_mark: - 完成视频流的产生和发布订阅机制 :white_check_mark: - ~~完成舵机的控制功能~~ :negative_squared_cross_mark: - 完成前端页面的设计(移动端和网页端)并绑定功能 :white_check_mark: - 测试结果并给出具体的优化方向 :white_check_mark: --- ### 2025-4-14 发现传感器的连接存在问题,花费一些精力重新组织传感器的接口,目前时钟模块还没有正常工作,需要继续调试 今日任务是完成: - [x] 所有传感器模块的调试工作,如果还是没有正确的输出,那就寻找替代方案。(暂时不使用替代方案) - [x] 设计树莓派的后端结点作为视频监控部分的前端。(只完成了对应的传感器的部分,另外视频流的部分在模块中进行选择) 另外的构想是,既然很难实现推流的有效性,不如不进行视频流的传输,只进行cam的局域网地址传输,这样就能够完成局域网内的视频访问了,如果是在局域网的阶段肯定是可以实现的。 还有一个构想是通过web_video_server的方式进行树莓派的推流,这样的好处是能够将树莓派统一作为输出结点,便于之后在非局域网环境下进行操作。 --- ### 2025-4-16 之前进行推流的方案测试失败,没有找到相关的AP可以进行完成的代码,现在第一方案是使用之前弃用的ROS发布image的方式来进行传输,这样或许会增加时间,降低实时性但是可以进行尝试;在树莓派端使用对应的Image来进行解码完成。 - [x] 完成esp32-s3-cam的视频发布模块(最后还是只完成了http的视频流) - [ ] ~~在树莓派端测试最后发布的结果的完整性。~~ --- ### 2025-4-18 完成初稿,在此做一个存档 目前已经完成: 1. 使用esp32-s3-cam完成视频流传输 2. 使用esp32-s3-cam完成ip地址的发布 3. 使用树莓派 **`micro-dds-agent`:用于处理Micro-ROS结点的数据发布** ​ `/sensor_data`:用于发布传感器的获取内容,将其发布到dds数据域中 ​ `/ip_address`:用于发布在当前局域网所有可用的ip地址,用于视频流的切换 **`ros2bridge`:用于将发布数据序列化到树莓派端口,用于实现网络传输,转化成为Web模式** **`http.server`:用于将index.html进行分发** 4. 使用esp32-s3和声音传感器,温度传感器,湿度传感器以及时钟模块来部署基本的多模态信息流传输 **具体的操作方式** 树莓派端: ```shell bash setup.sh // 用于启动对应的dds-agent结点信息 ``` ```shell bash start_server.sh // 用于启动ros2bridge ``` ```shell cd ~ && python -m http.server // 用于启动http服务器模式 ``` esp32-s3-cam端: 烧录`sketch_esp32_s3_cam`模块代码,配置wifi和密码 esp32-s3端: 烧录`sketch_sensor`模块代码,同样配置wifi和密码 最后访问`http://%your_pi_ip_address%:8000`查看监控 --- ### 2025-4-21 局域网内的视频监控系统设计成功,目前遇到的困难和待解决的问题以及之后添加的功能列举如下: - [x] 完成远程推流访问,做到移动端的视频监控 - [x] 实现人脸识别功能,录入个人信息(**涉及到对开发板的代码进行裁剪**) - [x] 时钟模块的正确使用调试(**如果有时间的话**) - [ ] 毕业论文撰写 --- 推流结点设计: 服务器模式,通过使用GET方法来访问到暴露在公网主机的端口,获取到对应的可以使用的IP地址,也就是视频流的地址。 开放8888作为监听端口; 使用`ffmpeg`来进行推流操作;在初始化时不进行推流操作,等待远程的按钮进行触发,最开始监控摄像头都处于未选择状态,这样能够进行初始化选择。 在切换推流的源视频流的时候触发:关闭之前的视频推流进程,并使用GET获取到的新的IP地址初始化新的视频推流,如果和当前的IP地址一致,忽略这个操作。 示例的IP源地址为192.168.137.105,公网服务器的地址为182.92.188.73 ---