• 方案介紹
  • 附件下載
  • 推薦器件
  • 相關推薦
申請入駐 產(chǎn)業(yè)圖譜

基于樹莓派和STM32F746的智能多功能農(nóng)業(yè)機器人開發(fā)

2024/05/15
1.7萬
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

ROS串口程序.zip

共2個文件

一、項目名稱:

基于樹莓派stm32f746的智能多功能農(nóng)業(yè)機器人開發(fā)

二、項目概述:

隨著技術的不斷進步和發(fā)展,農(nóng)業(yè)機器人逐漸經(jīng)歷了從機械自動化到人工智能機器視覺等新技術加持的轉變。人工智能(Artificial Intelligence,AI)作為一種應用于農(nóng)業(yè)領域的新興技術,正逐漸改變著傳統(tǒng)農(nóng)業(yè)的面貌。智能農(nóng)機作為人工智能在農(nóng)業(yè)中的代表之一,在高效種植施肥和精確農(nóng)藥噴灑方面發(fā)揮著重要作用。

基于樹莓派和stm32f746的智能多功能農(nóng)業(yè)機器人系統(tǒng),可以實現(xiàn)手動遙控和自主導航。完全無人作業(yè)。

本系統(tǒng)主要包括以樹莓派4B為AI中樞,以stm32f746 discovery開發(fā)板為核心、48V轉5V 5A電源模塊、4G /WIFI模塊、3D激光雷達電機驅動模塊,RTK高精度查分定位系統(tǒng)單元,2.4G無線遙控器等設備組成。

遙控器主要由按鍵、指示燈、顯示屏等組成。 按鍵包括前進、后退、左轉、右轉、啟動噴藥、停止噴藥等,通過無線通訊將指令傳輸給智能噴藥車,實現(xiàn)車輛的主動遙控。 指示燈用于顯示遙控器和智能噴藥車的狀態(tài),如電量、工作狀態(tài)、通訊狀態(tài)等。stm32f746 discovery開發(fā)板顯示屏用于顯示智能噴藥車的實時位置、運動狀態(tài)、噴藥狀態(tài)等信息,方便農(nóng)業(yè)管理人員對機器人的管理和監(jiān)控。

智能噴藥車通過樹莓派實現(xiàn)噴藥控制、定位等功能,遙控器通過按鍵、指示燈等方式實現(xiàn)對噴藥車的遙控和監(jiān)測。 智能噴藥車由底盤、行駛控制系統(tǒng)、噴藥控制系統(tǒng)、運動傳感器、GNSS差分定位等組成。

系統(tǒng)的軟件設計主要包括ROS系統(tǒng)Slam算法為核心,以FreeRTOS實時操作系統(tǒng)單片機執(zhí)行器。樹莓派與單片機數(shù)據(jù)傳輸的通訊調試、千尋阿里云物聯(lián)網(wǎng)實現(xiàn)高精度差分定位和4G /WIFI模塊在單片機上的接入以及樹莓派上位機控制軟件的實現(xiàn)。

通過利用深度學習算法實現(xiàn)障礙我的識別與定位,將RTK 信息以及農(nóng)業(yè)機器人的狀態(tài)使用物聯(lián)網(wǎng)技術傳輸?shù)皆贫?,實現(xiàn)噴藥車位置點的采集、路徑的編輯/下發(fā)、模式切換、導航控制功能。

三、作品實物圖

系統(tǒng)架構圖:

實物圖:

部件:

基于樹莓派和stm32f746的智能多功能農(nóng)業(yè)機器人開發(fā)系統(tǒng)主要由3個部分組成:

①環(huán)境感知。涉及多種傳感器,包括土壤、煙感器、測距和溫度檢測傳感器等,在巡檢過程中實現(xiàn)對無人環(huán)境感知實時監(jiān)測。

②執(zhí)行機構。為了方便后期的機器人維護,上層控制器部分與底層執(zhí)行機構部分采用模塊化設計,執(zhí)行機構部分采用 STM32F7作為底層處理器,通過4路PWM實現(xiàn)機器人底層電機的驅動。針對環(huán)境感知系統(tǒng)中存在的導航、傳感器數(shù)據(jù)復雜和信息量較大等問題,上層控制器的處理器采用樹莓派作為主控。

③控制系統(tǒng):需要給樹莓派的SD卡里燒錄系統(tǒng)鏡像。相關配置如下:

操作系統(tǒng):Ubuntu18.04系統(tǒng),基于Debian GNU/Linux,支持x86、amd64(即x64)、ARM和ppc架構。

仿真系統(tǒng):基于開源機器人操作系統(tǒng)ROS melodic,上位機采用ROS melodic,基于Rviz完成全向移動底盤小車slam導航運動規(guī)劃,采用gazebo完成全向移動底盤小車物理運動仿真;下位機采用基于FreertOS STM32F76實現(xiàn)對全向移動底盤運動的控制。

STM32H7采集傳感器將檢測到的數(shù)據(jù)通過IIC協(xié)議的方式傳遞給樹莓派,執(zhí)行機構部分與樹莓派之間、導航RTK與樹莓派之間采用 USB 通信方式,為了方便管理者在后端管理**查看機器人的位置和無人化倉庫的情況,機器人**與終端采用無線的方式實現(xiàn)通信。

為了能夠讓機器人按照一定的路徑進行農(nóng)業(yè)作業(yè),需規(guī)劃出機器人從此刻位置到某一位置的移動路徑,使得機器人從當前位姿到達目標位姿。移動機器人的速度與位置、位姿存在緊密聯(lián)系,要對機器人進行控制,需要對其位姿進行準確表達。

首先建立搭建ROS開發(fā)環(huán)境,進行Slam導航算法,找到合適的坐標系,對主要信息量進行表達,然后分析各坐標系之間存在的位置關系,最后確定速度與位姿之間的數(shù)學關系表達式。

VSLAM則主要用攝像頭來實現(xiàn),主要分為單目、雙目、單目結構光、雙目結構光、ToF幾大類。核心都是獲取RGB和depth map(深度信息)。

STM32與樹莓派交互關鍵代碼

#include <serial/serial.h>
#include "MbotRosSerial.h"
#include <iostream>

/********************************************************
            串口發(fā)送接收相關常量、變量、共用體對象
********************************************************/
const unsigned char ender[2] = { 0x0d, 0x0a };
const unsigned char header[2] = { 0x55, 0xaa };

serial::Serial sp;//創(chuàng)建一個serial對象

//發(fā)送左右輪速控制速度共用體
union sendData
{
    short d;
    unsigned char data[2];
}leftVelSet, rightVelSet;

//接收數(shù)據(jù)(左輪速、右輪速、角度)共用體(-32767 - +32768)
union receiveData
{
    short d;
    unsigned char data[2];
}leftVelNow, rightVelNow, angleNow;

/********************************************************
函數(shù)功能:串口參數(shù)初始化
入口參數(shù):無
出口參數(shù):無
作者:K.Fire
日期:2022.02.10
********************************************************/
void Serial_Init()
{
    
    serial::Timeout to = serial::Timeout::simpleTimeout(100);//創(chuàng)建timeout
        serial::parity_t pt = serial::parity_t::parity_none;//創(chuàng)建校驗位為0位
        serial::bytesize_t bt = serial::bytesize_t::eightbits;//創(chuàng)建發(fā)送字節(jié)數(shù)為8位
        serial::flowcontrol_t ft = serial::flowcontrol_t::flowcontrol_none;//創(chuàng)建數(shù)據(jù)流控制,不使用
        serial::stopbits_t st = serial::stopbits_t::stopbits_one;//創(chuàng)建終止位為1位
    
    sp.setPort("/dev/ttyUSB0");//設置要打開的串口名稱
    sp.setBaudrate(9600);//設置串口通信波特率
    sp.setParity(pt);//設置校驗位
    sp.setBytesize(bt);//設置發(fā)送字節(jié)數(shù)
    sp.setFlowcontrol(ft);//設置數(shù)據(jù)流控制
    sp.setStopbits(st);//設置終止位
    
    sp.setTimeout(to);//串口設置timeout

    try
    {
        //打開串口
        sp.open();
    }
    catch (serial::IOException& e)
    {
        ROS_ERROR_STREAM("Unable to open port.");
        return;
    }
}


/********************************************************
函數(shù)功能:將對機器人的左右輪子控制速度,打包發(fā)送給下位機
入口參數(shù):機器人線速度、角速度
出口參數(shù):無
作者:K.Fire
日期:2022.02.10
********************************************************/
void SendSTM32(double Left_v, double Right_v, unsigned char CtrlCmd)
{
    unsigned char buf[11] = { 0 };//發(fā)送數(shù)組
    int i, length = 4;

    leftVelSet.d = Left_v;//mm/s
    rightVelSet.d = Right_v;

    // 設置消息頭
    for (i = 0; i < 2; i++)
        buf[i] = header[i];             //buf[0]  buf[1]

    //設置控制位
    buf[2] = CtrlCmd;                   //buf[2]

    //設置數(shù)據(jù)長度
    buf[3] = length;                     //buf[3]

    // 設置機器人左右輪速度
    for (i = 0; i < 2; i++)
    {
        buf[i + 4] = leftVelSet.data[i];  //buf[4] buf[5]
        buf[i + 6] = rightVelSet.data[i]; //buf[6] buf[7]
    }

    // 設置校驗值、消息尾
    buf[4 + length] = getCrc8(buf, 3 + length);//buf[8]
    buf[5 + length] = ender[0];     //buf[9]
    buf[6 + length] = ender[1];     //buf[10]

    // 通過串口下發(fā)數(shù)據(jù)
    sp.write(buf, 11);
}


/********************************************************
函數(shù)功能:讀取下位機數(shù)據(jù),左右輪速度值、航向角、控制信息
入口參數(shù):左右輪速度值、航向角、控制信息
出口參數(shù):bool
作者:K.Fire
日期:2022.02.10
********************************************************/
bool ReceiveSTM32(double& Left_v, double& Right_v, double& Angle, unsigned char& CtrlCmd)
{
    char i, length = 0;
    unsigned char checkSum;
    unsigned char buf[150] = { 0 };
    int n;//信息長度

    size_t Receive_N = sp.available();//獲取緩沖區(qū)內(nèi)的字節(jié)數(shù)
    if (n != 0)
    {
        n = sp.read(buf, n);//讀出數(shù)據(jù)

        // 檢查信息頭
        if (buf[0] != header[0] || buf[1] != header[1])   //buf[0] buf[1]
        {
            ROS_ERROR("Received message header error!");
            return false;
        }

        //讀取控制位
        CtrlCmd = buf[2];    //buf[2]

        //讀取數(shù)據(jù)長度
        length = buf[3];    //buf[3]

        // 檢查信息校驗值
        checkSum = getCrc8(buf, 4 + length);             //buf[10] 計算得出
        if (checkSum != buf[4 + length])                 //buf[10] 串口接收
        {
            ROS_ERROR("Received data check sum error!");
            return false;
        }

        // 讀取速度值和航向角
        for (i = 0; i < 2; i++)
        {
            leftVelNow.data[i] = buf[i + 4]; //buf[4] buf[5]
            rightVelNow.data[i] = buf[i + 6]; //buf[6] buf[7]
            angleNow.data[i] = buf[i + 8]; //buf[8] buf[9]
        }
        Left_v = leftVelNow.d;
        Right_v = rightVelNow.d;
        Angle = angleNow.d;

        return true;
    }

}


/********************************************************
函數(shù)功能:獲得8位循環(huán)冗余校驗值
入口參數(shù):數(shù)組地址、長度
出口參數(shù):校驗值
********************************************************/
unsigned char getCrc8(unsigned char* ptr, unsigned short len)
{
    unsigned char crc;
    unsigned char i;
    crc = 0;
    while (len--)
    {
        crc ^= *ptr++;
        for (i = 0; i < 8; i++)
        {
            if (crc & 0x01)
                crc = (crc >> 1) ^ 0x8C;
            else
                crc >>= 1;
        }
    }
    return crc;
}
#include "ros/ros.h"
#include "std_msgs/String.h"
#include "MbotRosSerial.h"

//test send value
double testSend1=5555.0;
double testSend2=2222.0;
unsigned char testSend3=0x07;

//test receive value
double testRece1=0.0;
double testRece2=0.0;
double testRece3=0.0;
unsigned char testRece4=0x00;

int main(int argc,char **argv)
{
        ros::init(argc,argv,"serial_test");//節(jié)點初始化
        ros::NodeHandle n;//創(chuàng)建節(jié)點句柄
        
        ros::Rate loop_rate(10);
        
        //串口初始化
        Serial_Init();
        
        while(ros::ok())
        {
                //發(fā)送數(shù)據(jù)
                SendSTM32(testSend1,testSend2,testSend3);
                //接收數(shù)據(jù)
                ReceiveSTM32(testRece1,testRece2,testRece3,testRece4);
                //打印數(shù)據(jù)
                ROS_INFO("Receive Data is: %f,%f,%f,%dn",testRece1,testRece2,testRece3,testRece4);
                
                ros::spinOnce();
                loop_rate.sleep();
        }
        return 0;
}

RTK 載波相位差分技術,是實時處理兩個測量站載波相位觀測量的差分方法,將基準站采集的載波相位發(fā)給用戶接收機,進行求差解算坐標。一般包含流動站 (移動站) 和基準站 (基站) 。本系統(tǒng)中RTK定位采用千尋定位, 參考的也是千尋CORS基站的坐標,所以需要先登入千尋cors賬號。

RTK接入ROS系統(tǒng),nmea_navsat_driver是一套用于獲取并解析GPS數(shù)據(jù)的ROS驅動包,使用Python語言實現(xiàn)。GPS設備使用此包的條件是:遵守或者兼容NMEA0183協(xié)議。

本次設計結合攝像頭激光雷達和RTK實現(xiàn)融合定位,真正做到厘米級別,屬于國際領先。

噴嘴可以用來噴灑農(nóng)藥也可以進行環(huán)境消毒,也可以進行施肥作業(yè),真正做到一機多用。

四、演示視頻

https://www.bilibili.com/video/BV1uA4m1j7pM/?buvid=XY75B537C416E17A953A00A33EDB883CA28EB&is_story_h5=false&mid=Pw2Hq3t6IhfKj%2FPD%2Bao96g%3D%3D&plat_id=147&share_from=ugc&share_medium=android&share_plat=android&share_session_id=06897bb8-6ae8-4efd-99e7-41f15d1b701d&share_source=WEIXIN&share_tag=s_i&timestamp=1706692332&unique_k=Km1lrk3&up_id=526937168

五、項目文檔

ROS串口程序.zip (7.13 KB)

基于樹莓派和stm32f746的智能多功能農(nóng)業(yè)機器人開發(fā).zip (4.67 MB)

  • ROS串口程序.zip
    下載
  • 基于樹莓派和stm32f746的智能多功能農(nóng)業(yè)機器人開發(fā).zip
    下載

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風險等級 參考價格 更多信息
SN74LVC2G17DCKR 1 Texas Instruments 2-ch, 1.65-V to 5.5-V buffers with Schmitt-Trigger inputs 6-SC70 -40 to 125

ECAD模型

下載ECAD模型
$0.6 查看
74HC595D,118 1 NXP Semiconductors 74HC(T)595 - 8-bit serial-in, serial or parallel-out shift register with output latches; 3-state SOP 16-Pin
$0.44 查看
NC7SZ11P6X 1 Fairchild Semiconductor Corporation AND Gate, LVC/LCX/Z Series, 1-Func, 3-Input, CMOS, PDSO6, 1.25 MM, EIAJ, SC-88, SC-70, 6 PIN
$0.37 查看
意法半導體

意法半導體

意法半導體(ST)集團于1987年6月成立,是由意大利的SGS微電子公司和法國Thomson半導體公司合并而成。1998年5月,SGS-THOMSON Microelectronics將公司名稱改為意法半導體有限公司。意法半導體是世界最大的半導體公司之一,公司銷售收入在半導體工業(yè)五大高速增長市場之間分布均衡(五大市場占2007年銷售收入的百分比):通信(35%),消費(17%),計算機(16%),汽車(16%),工業(yè)(16%)。 據(jù)最新的工業(yè)統(tǒng)計數(shù)據(jù),意法半導體是全球第五大半導體廠商,在很多市場居世界領先水平。例如,意法半導體是世界第一大專用模擬芯片和電源轉換芯片制造商,世界第一大工業(yè)半導體和機頂盒芯片供應商,而且在分立器件、手機相機模塊和車用集成電路領域居世界前列.

意法半導體(ST)集團于1987年6月成立,是由意大利的SGS微電子公司和法國Thomson半導體公司合并而成。1998年5月,SGS-THOMSON Microelectronics將公司名稱改為意法半導體有限公司。意法半導體是世界最大的半導體公司之一,公司銷售收入在半導體工業(yè)五大高速增長市場之間分布均衡(五大市場占2007年銷售收入的百分比):通信(35%),消費(17%),計算機(16%),汽車(16%),工業(yè)(16%)。 據(jù)最新的工業(yè)統(tǒng)計數(shù)據(jù),意法半導體是全球第五大半導體廠商,在很多市場居世界領先水平。例如,意法半導體是世界第一大專用模擬芯片和電源轉換芯片制造商,世界第一大工業(yè)半導體和機頂盒芯片供應商,而且在分立器件、手機相機模塊和車用集成電路領域居世界前列.收起

查看更多

相關推薦