拔别人的网站做网站合法吗,不收费的企业查询网站,石家庄搭建网站,wordpress 菜单 链接地址一、前言
1.1 项目介绍
【1】项目功能介绍
随着科技的进步和农业现代化的发展#xff0c;农业生产效率与质量的提升成为重要的研究对象。其中#xff0c;果蔬采摘环节在很大程度上影响着整个产业链的效益。传统的手工采摘方式不仅劳动强度大、效率低下#xff0c;而且在劳…一、前言
1.1 项目介绍
【1】项目功能介绍
随着科技的进步和农业现代化的发展农业生产效率与质量的提升成为重要的研究对象。其中果蔬采摘环节在很大程度上影响着整个产业链的效益。传统的手工采摘方式不仅劳动强度大、效率低下而且在劳动力成本逐渐上升的背景下越来越难以满足大规模种植基地的需求。人工采摘还可能因不规范的操作导致果实损伤影响商品果率。
基于视觉识别技术的自动采摘机器人的研发正是针对这一问题提出的创新解决方案。本项目采用树莓派4B作为主控芯片因其具有强大的计算能力和丰富的扩展接口可以方便地集成各种传感器和执行机构实现对复杂环境下的实时图像采集与处理。
项目利用百度飞浆PaddlePaddle深度学习框架中的目标检测和分类算法通过安装在机器人上的高清摄像头获取果树图像并进行实时分析精准识别出果实的位置、大小以及成熟度等信息。当成功识别到目标果实后主控系统将根据识别结果快速计算出机械手臂的最佳运动路径控制其移动至指定位置以最适宜的方式完成果实的高效、无损采摘。
基于视觉识别的自动采摘机器人设计与实现项目旨在解决传统农业中人工采摘的瓶颈问题通过人工智能与自动化技术的深度融合提高果园管理的智能化水平降低劳动成本提高生产效率从而推动我国乃至全球农业产业向更加智能、高效的现代农业转型。 【2】设计实现的功能
1视觉识别借助高性能的摄像头和图像处理算法本项目采用百度飞浆的目标识别和分类算法机器人能够捕捉到果园中的果实图像并准确地从中识别出目标果实。
2定位与导航在识别到果实后系统会通过计算果实的空间坐标和距离确定机械手臂需要到达的精确位置。同时机器人会根据果园内的环境信息和路径规划算法自动导航至目标果实附近。
3机械手臂控制一旦机器人到达目标位置机械手臂会在系统的精确控制下自动调整姿态和动作以轻柔而准确的方式采摘果实。这一过程涉及到复杂的机械动力学和协同控制算法确保采摘动作的高效和安全。
4果实收集与处理采摘下来的果实会被机器人收集到专门的容器中以便后续的分拣、包装和处理。系统还可以对采摘的果实进行数量统计和质量评估为农业生产提供有价值的数据支持。
本项目实现的功能是一个完整的自动采摘机器人系统从视觉识别到机械手臂控制再到果实收集与处理形成了一个高效、智能的自动化采摘流程。这不仅大大提高了农业生产的效率和质量也展示了人工智能技术在现代农业领域的广阔应用前景。
【3】项目硬件模块组成
1主控板采用树莓派4B开发板作为整个系统的主控芯片。树莓派是一款功能强大且易于使用的计算机主板具备高性能的处理器、充足的内存和存储空间以及丰富的接口和扩展功能可以满足本项目对计算和控制的需求。
2视觉系统视觉系统包括高性能的摄像头和图像处理单元。摄像头负责捕捉果园中的图像信息而图像处理单元则基于百度飞浆的目标识别和分类算法对图像进行处理和分析以识别和定位目标果实。
3机械手臂机械手臂是实现自动采摘的关键部件由多个关节和执行器组成可以在三维空间内自由移动和旋转。通过精确的控制算法机械手臂能够准确地到达目标果实的位置并执行采摘动作。
4传感器和导航系统为了实现自动导航和精确定位项目中还集成了多种传感器和导航系统。这些传感器可以感知环境信息如距离、方位、障碍物等而导航系统则根据这些信息规划出机器人的最佳路径。
4电源和供电系统为了保证机器人的持续工作项目中还包括了电源和供电系统。电源负责为各个硬件模块提供稳定的电力供应而供电系统则可以根据实际需要调整电力输出以满足机器人在不同工作状态下的能耗需求。
本项目的硬件模块组成包括主控板、视觉系统、机械手臂、传感器和导航系统、电源和供电系统以及其他辅助模块。这些硬件模块相互协作共同实现了基于视觉识别的自动采摘机器人系统的功能。
【3】功能总结
系统集成了先进的视觉识别技术、机械手臂控制技术以及自动导航技术能够自动识别和定位果园中的目标果实并通过机械手臂完成采摘动作。整个过程无需人工干预实现了果园采摘的自动化和智能化。
功能包括果实的自动识别和定位、机械手臂的自动导航和控制以及果实的自动收集和处理。通过高性能的摄像头和图像处理算法系统能够准确捕捉和识别目标果实的图像信息借助精确的导航和控制算法机械手臂能够自动导航至果实位置并完成采摘最后采摘下来的果实会被自动收集并进行后续处理。
本项目的功能实现不仅提高了果园采摘的效率和准确性降低了人力成本同时也为农业生产的现代化和智能化发展提供了新的解决方案和思路。该系统的成功应用将为农业生产带来革命性的变革推动农业向更高效、更环保、更可持续的方向发展。
1.2 设计思路
1需求分析对果园采摘的实际需求进行分析明确项目需要解决的问题和达到的目标。了解果园的环境特点、果实类型和生长状况以及采摘作业的流程和要求为后续设计提供基础依据。
2技术选型根据需求分析的结果选择合适的技术方案。选用树莓派4B开发板作为主控芯片利用其高性能的处理器和丰富的接口资源实现机器人的控制和管理。同时采用百度飞浆的目标识别和分类算法通过视觉系统实现对目标果实的准确识别和定位。
3硬件设计根据技术选型设计机器人的硬件结构。包括摄像头的选型和布局确保能够捕捉到清晰、稳定的图像信息机械手臂的设计和选型使其能够适应果园环境和采摘需求导航和传感器系统的设计和选型实现机器人的自动导航和精确定位。
4软件设计编写机器人的控制程序和算法。通过图像处理算法实现对目标果实的识别和定位将结果传递给导航和控制系统根据导航和传感器系统提供的信息规划机器人的运动路径和动作控制机械手臂完成采摘动作实现果实的计数、分类和收集等功能以及数据的存储和传输。
5系统集成与测试将各个硬件模块和软件程序进行集成并进行系统测试和调试。确保各个模块之间的通信和协作正常机器人能够准确识别和采摘目标果实并实现自动导航和收集等功能。
1.3 系统功能总结
功能模块功能描述视觉识别- 通过高性能摄像头捕捉果园图像- 利用百度飞浆的目标识别和分类算法识别目标果实- 确定果实的空间坐标和距离导航与定位- 根据果园环境信息和路径规划算法自动导航至目标果实附近- 集成多种传感器感知环境信息如距离、方位、障碍物等机械手臂控制- 在系统精确控制下自动调整姿态和动作采摘果实- 确保采摘动作的高效和安全果实收集与处理- 采摘下来的果实被自动收集到专门容器中- 对采摘的果实进行数量统计和质量评估- 提供数据支持为农业生产决策提供参考通信与监控- 实现远程监控和控制功能
二、树莓派4B环境搭建
【1】硬件环境介绍
树莓派是什么Raspberry Pi(中文名为“树莓派”,简写为RPi或者RasPi/RPi)是为学生计算机编程教育而设计只有信用卡大小的卡片式电脑其系统基于Linux。 【2】资料下载
第一步先将树莓派4B需要使用的资料下载下来。 【3】准备需要的配件
1准备一张至少32G的TFT卡用来烧写系统。
2准备一个读卡器方便插入TFT卡好方便插入到电脑上拷贝系统
3树莓派主板一个
4一根网线方便插路由器上与树莓派连接
5一根type-C的电源线。用自己Android手机的数据线就行拿手机充电器供电。 【4】准备烧写系统
1安装镜像烧写工具 2格式化SD卡
将TFT卡通过读卡器插入到电脑上将TFT卡格式化。 3烧写系统
**接下来准备烧写的系统是这一个系统**将系统解压出来。 然后打开刚才安装好的镜像烧写工具在软件中选择需要安装的 img镜像文件“Device”下选择SD的盘符然后选择“Write”然后就开始安装系统了根据你的SD速度安装过程有快有慢。
注意从网盘下载下来的镜像如果没有解压就先解压释放出img文件。 下面是烧写的流程 点击YES开始烧写。 烧写过程中 安装结束后会弹出完成对话框说明安装就完成了如果不成功需要关闭防火墙一类的软件重新插入SD进行安装。 需要注意的是安装完windows系统下看到SD只有74MB了这是正常现象因为linux下的磁盘分区win下是看不到的。 烧录成功后windows系统可能会因为无法识别分区而提示格式化分区此时**千万不要格式化不要格式化不要格式化**点击取消然后弹出内存卡插入到树莓派上。 至此树莓派烧写成功。
【5】启动系统
1树莓派供电
由于我买的树莓派开发板不带电源线就采用Android手机的充电线供电。 使用Type-C供电时要求电源头的参数要求电压是5V电流是3A。
我的充电器是小米的120W有线快充刚好满足要求。 2启动树莓派以Type-C供电示例
烧写完后把MicroSD卡直接插入树莓派的MicroSD卡插槽如果有显示器就连接显示器有DHMI线机也可以连接外接的显示器有鼠标、键盘都可以插上去就可以进入树莓派系统了。
但是我这块板子就一个主板什么都没有。就拿网线将树莓派的网口与路由器连接。 上电之后开发板的指示灯会闪烁说明已经启动。
3查看开发板的IP地址
现在板子没屏幕想要连接板子只能通过SSH远程登录的方式当前烧写的这个系统默认开机就启动了SSH所以只要知道开发板的IP地址就可以远程登录进去。
**如何知道树莓派板子的IP地址**方法很多最简单是直接登录路由器的后台界面查看连接进入的设备。
我使用的小米路由器登录后台看到了树莓派的IP地址。 4SSH方式登录开发板
当前烧写系统的登录账号和密码如下
账号pi 密码yahboom打开SSH远程登录工具PuTTY_0.67.0.0.exe。 输入IP地址和端口号点击open。 然后输入账号和密码。 输入用户名 pi按下回车然后再输入密码 yahboom。 注意Linux下为了保护隐私输入密码是不可见的你只需要正常输入按下回车键确定 即可。
正常情况下就登录成功了。 接下来看看联网情况。 ping一下百度测试互联网是否畅通因为接下来要在线安装软件包。
ping www.baidu.com可以看到网络没有问题。
提示 按下 Ctrl C 可以终止命令行。 这算是Linux基础。
【6】windows远程登录桌面
为了方便图形化方式开发可以使用windows系统通过远程桌面登录树莓派就可以看到界面了不过需要先安装工具。
1安装xdrp
在树莓派的命令行终端输入命令
sudo apt-get install xrdp按下回车之后会弹出确认窗口。输入 y之后按下回车继续安装。 安装完毕 2打开windows远程桌面
在windows电脑上打开运行命令的窗口输入mstsc来打开远程桌面。 打开远程桌面的窗口 3连接树莓派远程桌面
打开远程桌面后输入树莓派开发板的IP地址点击连接。 如果弹出窗口就选择是。 接下来就进入到树莓派开发板的远程桌面的登录窗口了。 接下来输入面账号和密码。
账号pi 密码yahboom输入后点击OK按钮登录。 正常情况下就顺利的进入树莓派的桌面了。接下来就可以进行远程桌面开发了。 【7】扩展树莓派SD卡可用空间
树莓派系统默认启动时树莓派默认没有把整个存储空间拓展到整张卡中如果需要使用整个SD卡这时候可以通过人为的把存储空间拓展到整张卡上。
1查看内存使用情况
打开命令行终端输入df -h 命令。 2扩展内存
1 打开树莓派命令行终端输入
piraspberrypi:~ $ sudo raspi-config2 在弹出的命令行里选择Advanced Options 3 选择第一个选项。 4 点击确定 5 点击右边的Finish按钮保存退出。
确定之后关闭界面系统会自动重启重启之后使用df命令查看是否扩展成功(我这里插的是32G的SD卡)。
可以看到我的系统已经扩展成功了目前可以内存空间是19G。 【8】树莓派连接WIFI
1配置需要连接的WIFI
点击右上角的数据连接图标打开WIFI列表点击想要的WIFI进行连接。 输入密码 连接成功后的效果 2通过WIFI的IP地址登录远程桌面
在路由器的后台可以看到目前树莓派连入了两个IP地址。接下来把网线拔掉使用WIFI无线也可以直接连接无线桌面这样就不用插网线了。 账号和密码
账号pi 密码yahboom三、代码设计
3.1 舵机控制代码机械手臂控制
C语言代码: 使用wiringPi库控制树莓派上的GPIO引脚实现对舵机的控制。通过servo_rotate()函数可以控制舵机旋转到指定的角度。在main()函数中使用键盘输入获取目标角度并调用servo_rotate()函数控制舵机旋转到目标角度。
舵机的控制方式为PWM脉冲宽度调制即将角度转换为脉宽值并输出对应的高低电平信号。将舵机信号线连接到GPIO18引脚通过digitalWrite()函数输出高低电平来控制舵机旋转。
#include wiringPi.h
#include stdio.h#define SERVO_PIN 18 // SG90舵机信号线连接的GPIO引脚void servo_rotate(int angle) {int pulse_width (angle * 11) 500; // 将角度转换为脉宽值digitalWrite(SERVO_PIN, HIGH); // 输出高电平delayMicroseconds(pulse_width); // 延时脉宽值对应的时间digitalWrite(SERVO_PIN, LOW); // 输出低电平delay(20 - pulse_width / 1000); // 延时剩余时间
}int main(void) {wiringPiSetupGpio(); // 初始化wiringPi库pinMode(SERVO_PIN, OUTPUT); // 将舵机信号线接口设为输出模式while(1) {// 从键盘输入目标角度printf(Enter the angle to rotate (0-180): );fflush(stdout);int angle;scanf(%d, angle);// 旋转到目标角度if(angle 0 angle 180) {servo_rotate(angle);} else {printf(Invalid angle! Please enter an angle between 0 and 180.\n);}}return 0;
}Pyhon代码 使用RPi.GPIO库来控制树莓派上的GPIO引脚实现对舵机的控制。通过setup()函数进行初始化设置并通过set_angle()函数控制舵机旋转到指定的角度。
在main()函数中使用键盘输入获取目标角度并调用set_angle()函数控制舵机旋转到目标角度。
import RPi.GPIO as GPIO
import timeSERVO_PIN 18 # SG90舵机信号线连接的GPIO引脚def setup():GPIO.setmode(GPIO.BCM)GPIO.setup(SERVO_PIN, GPIO.OUT)global servo_pwmservo_pwm GPIO.PWM(SERVO_PIN, 50) # 创建PWM对象频率设置为50Hzservo_pwm.start(0) # 启动PWM输出初始占空比设为0def set_angle(angle):duty_cycle (angle / 18) 2.5 # 将角度转换为占空比值servo_pwm.ChangeDutyCycle(duty_cycle)time.sleep(0.3) # 等待舵机转到指定角度def main():setup()while True:# 从键盘输入目标角度angle int(input(Enter the angle to rotate (0-180): ))# 旋转到目标角度if 0 angle 180:set_angle(angle)else:print(Invalid angle! Please enter an angle between 0 and 180.)if __name__ __main__:try:main()finally:servo_pwm.stop() # 停止PWM输出GPIO.cleanup() # 清理GPIO资源3.2 调用算法识别目标
1安装PaddlePaddle和PaddleDetection库 先安装Python和pip。然后打开终端并执行以下命令安装PaddlePaddle和PaddleDetection库 pip install paddlepaddle paddlepaddle-gpu
pip install paddlehub
pip install paddlehub -i https://pypi.tuna.tsinghua.edu.cn/simple2下载预训练模型
百度飞桨提供了预训练的目标检测模型可以从PaddleDetection的GitHub页面下载这些模型。选择适合的任务的模型并将其解压到合适的目录中。
3编写调用代码 创建一个Python脚本文件例如detect_fruits.py并使用以下代码编写脚本 import paddlehub as hub
import cv2def detect_fruits(image_path, model_path):# 加载模型module hub.Module(nameyolov3_mobilenet_v1_coco2017)input_dict {image: [image_path]}# 目标检测results module.object_detection(datainput_dict)# 处理结果for result in results:if len(result[data]) 0:for obj in result[data]:label obj[label]confidence obj[confidence]left, top, right, bottom obj[left], obj[top], obj[right], obj[bottom]print(fLabel: {label}, Confidence: {confidence:.2f})print(fBounding Box: ({left}, {top}), ({right}, {bottom}))# 可视化结果img cv2.imread(image_path)for result in results:module.visualize(dataresult, output_diroutput, score_thresh0.5, use_visualizeTrue, visualizationTrue, plot_bboxTrue, save_bbox_txtTrue, imageimg)if __name__ __main__:image_path path/to/your/image.jpg # 替换为你的图片路径model_path path/to/your/model # 替换为你的模型路径detect_fruits(image_path, model_path)在上面的代码中使用PaddleHub库加载了预训练的yolov3_mobilenet_v1_coco2017模型并将其应用于指定的图像。然后处理检测结果并进行输出。最后使用OpenCV库可视化结果并保存到指定目录中。
4运行脚本 将目标果实图像放置在与脚本相同的目录下或根据需要修改图像路径。然后在终端中执行以下命令运行脚本 python detect_fruits.py脚本将分析图像并输出检测到的目标果实的标签、置信度和边界框。会生成一个带有目标果实标注的图像。
3.3 机器人小车控制代码
小车的电机驱动采用L298N模块连接在GPIO17、GPIO18、GPIO27和GPIO22上。 使用了wiringPi库来控制树莓派上的GPIO引脚实现对小车电机驱动的控制。通过setup()函数进行初始化设置并通过forward()、backward()、turn_left()和turn_right()函数控制小车前进、后退和转弯。其中stop()函数用于停止小车运动。
#include wiringPi.h#define MOTOR_ENA_PIN 0 // L298N模块ENA引脚连接的GPIO引脚
#define MOTOR_ENB_PIN 2 // L298N模块ENB引脚连接的GPIO引脚
#define MOTOR_IN1_PIN 3 // L298N模块IN1引脚连接的GPIO引脚
#define MOTOR_IN2_PIN 4 // L298N模块IN2引脚连接的GPIO引脚
#define MOTOR_IN3_PIN 5 // L298N模块IN3引脚连接的GPIO引脚
#define MOTOR_IN4_PIN 6 // L298N模块IN4引脚连接的GPIO引脚void setup() {wiringPiSetup(); // 初始化wiringPi库pinMode(MOTOR_ENA_PIN, OUTPUT);pinMode(MOTOR_ENB_PIN, OUTPUT);pinMode(MOTOR_IN1_PIN, OUTPUT);pinMode(MOTOR_IN2_PIN, OUTPUT);pinMode(MOTOR_IN3_PIN, OUTPUT);pinMode(MOTOR_IN4_PIN, OUTPUT);
}void forward() {digitalWrite(MOTOR_IN1_PIN, HIGH);digitalWrite(MOTOR_IN2_PIN, LOW);digitalWrite(MOTOR_IN3_PIN, LOW);digitalWrite(MOTOR_IN4_PIN, HIGH);digitalWrite(MOTOR_ENA_PIN, HIGH);digitalWrite(MOTOR_ENB_PIN, HIGH);
}void backward() {digitalWrite(MOTOR_IN1_PIN, LOW);digitalWrite(MOTOR_IN2_PIN, HIGH);digitalWrite(MOTOR_IN3_PIN, HIGH);digitalWrite(MOTOR_IN4_PIN, LOW);digitalWrite(MOTOR_ENA_PIN, HIGH);digitalWrite(MOTOR_ENB_PIN, HIGH);
}void turn_left() {digitalWrite(MOTOR_IN1_PIN, LOW);digitalWrite(MOTOR_IN2_PIN, HIGH);digitalWrite(MOTOR_IN3_PIN, LOW);digitalWrite(MOTOR_IN4_PIN, HIGH);digitalWrite(MOTOR_ENA_PIN, HIGH);digitalWrite(MOTOR_ENB_PIN, HIGH);
}void turn_right() {digitalWrite(MOTOR_IN1_PIN, HIGH);digitalWrite(MOTOR_IN2_PIN, LOW);digitalWrite(MOTOR_IN3_PIN, HIGH);digitalWrite(MOTOR_IN4_PIN, LOW);digitalWrite(MOTOR_ENA_PIN, HIGH);digitalWrite(MOTOR_ENB_PIN, HIGH);
}void stop() {digitalWrite(MOTOR_ENA_PIN, LOW);digitalWrite(MOTOR_ENB_PIN, LOW);
}int main() {setup();while (1) {// 从键盘输入指令char cmd getchar();getchar(); // 忽略回车符// 根据指令执行动作switch (cmd) {case w: // 前进forward();break;case s: // 后退backward();break;case a: // 左转turn_left();break;case d: // 右转turn_right();break;case x: // 停止stop();break;default:break;}}return 0;
}
四、总结
随着农业技术的不断进步自动化、智能化已成为现代农业生产的重要趋势。本项目通过结合视觉识别技术、机器人技术和自动化控制技术成功设计并实现了基于视觉识别的自动采摘机器人系统。这一创新性的成果不仅提高了果园采摘的效率和准确性降低了人力成本还为农业生产的现代化和智能化发展提供了新的解决方案和思路。