0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

機(jī)器人學(xué)科建設(shè)沙盤(pán)套件!智慧農(nóng)業(yè)3D分揀套裝詳解

大象機(jī)器人科技 ? 來(lái)源:大象機(jī)器人科技 ? 作者:大象機(jī)器人科技 ? 2023-06-30 18:02 ? 次閱讀

作為最熱門(mén)的技術(shù)領(lǐng)域,機(jī)器人技術(shù)正在徹底改變產(chǎn)業(yè),并推動(dòng)全球的創(chuàng)新。為了滿足這個(gè)快速發(fā)展的領(lǐng)域?qū)夹g(shù)人才日益增長(zhǎng)的需求,開(kāi)發(fā)了一個(gè)開(kāi)創(chuàng)性的機(jī)器人教育解決方案。這個(gè)創(chuàng)新的解決方案將自動(dòng)化水果采摘機(jī)的模擬與水果分揀和運(yùn)送的自動(dòng)化復(fù)合機(jī)器人結(jié)合起來(lái),為學(xué)生提供了一個(gè)在最受歡迎和最有趨勢(shì)的技術(shù)領(lǐng)域中的全面學(xué)習(xí)經(jīng)驗(yàn)。

在本文中我們將詳細(xì)為你介紹水果采摘和分揀機(jī)器人場(chǎng)景。我們將會(huì)從套裝的介紹和使用的場(chǎng)景介紹,到套裝功能機(jī)械臂的實(shí)現(xiàn)。

智慧農(nóng)業(yè)套裝

圖中所展示的就是我們的智慧農(nóng)業(yè)套裝,它是由以下的內(nèi)容組成。

mechArm 270 M5Stack *2
傳送帶 *1
3D攝像頭/深度攝像頭 *2
仿真模擬果樹(shù) *1
結(jié)構(gòu)件 若干

你肯定很好奇這個(gè)套裝是怎么運(yùn)轉(zhuǎn)的,接下來(lái)我將為你介紹這個(gè)套裝的運(yùn)作流程。

首先你可以看到我們有兩臺(tái)機(jī)械臂,他們分別執(zhí)行不同的功能,離果樹(shù)最近的那一臺(tái)機(jī)械臂是采摘機(jī)器人下面簡(jiǎn)稱(chēng)R1;中間那臺(tái)機(jī)械臂是分揀機(jī)器人下面簡(jiǎn)稱(chēng)是R2。從他們的名字上就可以知道它們分別做的是什么工作,R1負(fù)責(zé)將果樹(shù)上的果實(shí)采摘下來(lái)放置在傳送帶上,R2則是將傳送帶上不合格的水果分揀出來(lái)。

流程:

采摘:R1通過(guò)深度攝像頭對(duì)果樹(shù)上果實(shí)的識(shí)別然后對(duì)果子進(jìn)行定位,將果實(shí)的坐標(biāo)發(fā)送給R1去采摘。

運(yùn)輸:通過(guò)R1的采摘,果實(shí)被放置在傳送帶上。傳送帶經(jīng)過(guò)運(yùn)轉(zhuǎn)將果實(shí)運(yùn)輸?shù)絉2可識(shí)別的范圍內(nèi)進(jìn)行果實(shí)好壞的判斷。

分揀:R2上方的攝像頭將視線范圍內(nèi)的果實(shí)進(jìn)行識(shí)別算法的判斷,判斷為好果實(shí)的話,果實(shí)將隨著傳送帶傳輸?shù)焦麑?shí)收集區(qū);判斷為壞果實(shí)的話,將壞果實(shí)的坐標(biāo)信息傳遞給R2,R2將壞果實(shí)目標(biāo)進(jìn)行抓取出來(lái),放置在特定區(qū)域。

持續(xù)循環(huán)上面的流程:采摘->運(yùn)輸->分揀->采摘->運(yùn)輸

產(chǎn)品介紹

下面將簡(jiǎn)要介紹套裝中的產(chǎn)品。

Robotic Arm - mechArm 270 M5Stack

這是一款小六軸機(jī)械臂,以M5Stack-Basic為核心控制,ESP32為輔助控制,結(jié)構(gòu)是中心對(duì)稱(chēng)結(jié)構(gòu)(仿工業(yè)結(jié)構(gòu))。mechArm 270-M5本體重量1kg, 負(fù)載250g,工作半徑270mm,設(shè)計(jì)緊湊便攜,小巧但功能強(qiáng)大,操作簡(jiǎn)單,能與人協(xié)同、安全工作。

傳送帶

傳送帶是一種用于運(yùn)輸物品的機(jī)械設(shè)備,通常由一個(gè)帶狀物體和一個(gè)或多個(gè)滾動(dòng)軸組成。它們可以運(yùn)輸各種物品,例如包裹、箱子、食品、礦石、建筑材料等等。傳送帶的工作原理是將物品放置在運(yùn)動(dòng)的帶子上,然后將其移動(dòng)到目標(biāo)位置。傳送帶通常由電機(jī)、傳動(dòng)系統(tǒng)、帶子和支撐結(jié)構(gòu)組成。電機(jī)提供動(dòng)力,傳動(dòng)系統(tǒng)將動(dòng)力傳遞給帶子,使其移動(dòng)。

目前市面上可以根據(jù)用戶的需求定制各種傳送帶,例如傳送帶的長(zhǎng)寬高,履帶的材質(zhì)等。

深度攝像頭

隨著使用場(chǎng)景的多樣性,普通的2D攝像頭無(wú)法滿足我們使用的需求。在場(chǎng)景中我們使用到的是深度攝像頭。深度攝像頭是一種能夠獲取場(chǎng)景深度信息的相機(jī)。它不僅能夠捕捉場(chǎng)景的顏色和亮度信息,還能夠感知物體之間的距離和深度信息。深度攝像頭通常使用紅外線或其他光源來(lái)進(jìn)行測(cè)量,以獲取物體和場(chǎng)景的深度信息。

攝像頭1.png

它可以獲取很多信息,例如深度的畫(huà)面,彩色的畫(huà)面,紅外線的畫(huà)面,點(diǎn)云畫(huà)面。

有了深度相機(jī),我們就可以精準(zhǔn)的獲取到果樹(shù)上果實(shí)的位置,以及顏色信息。

自適應(yīng)夾爪-機(jī)械臂末端執(zhí)行器

夾爪1.jpeg

自適應(yīng)夾爪是一種用來(lái)抓取、握取或夾持物體的末端執(zhí)行器,它由兩個(gè)可移動(dòng)的爪子組成,可以通過(guò)機(jī)械臂的控制系統(tǒng)來(lái)控制其開(kāi)合程度和開(kāi)合速度。

項(xiàng)目功能的實(shí)現(xiàn)

我們先要準(zhǔn)備好編譯的環(huán)境,該場(chǎng)景是用Python語(yǔ)言來(lái)進(jìn)行編寫(xiě)的。在使用和學(xué)習(xí)的時(shí)候得安裝好環(huán)境。

編譯環(huán)境:

numpy==1.24.3
opencv-contrib-python==4.6.0.66
openni==2.3.0
pymycobot==3.1.2
PyQt5==5.15.9
PyQt5-Qt5==5.15.2
PyQt5-sip==12.12.1
pyserial==3.5

項(xiàng)目的功能點(diǎn)我們主要分為三部分:

機(jī)器視覺(jué)識(shí)別算法,深度識(shí)別算法


            ● 機(jī)械臂的控制,路徑的規(guī)劃


            ● 多臺(tái)機(jī)器之間通信和邏輯的處理

我們先從機(jī)器視覺(jué)識(shí)別算法介紹:

機(jī)器視覺(jué)識(shí)別算法

使用深度攝像頭之前需要進(jìn)行相機(jī)標(biāo)定。相機(jī)標(biāo)定的教程https://docs.opencv.org/4.x/dc/dbb/tutorial_py_calibration.html

相機(jī)標(biāo)定:

相機(jī)標(biāo)定是指通過(guò)對(duì)攝像機(jī)進(jìn)行一系列測(cè)量和計(jì)算,確定攝像機(jī)內(nèi)部參數(shù)和外部參數(shù)的過(guò)程。攝像機(jī)內(nèi)部參數(shù)包括焦距、主點(diǎn)位置、像素間距等,而攝像機(jī)外部參數(shù)則包括攝像機(jī)在世界坐標(biāo)系中的位置和方向等。相機(jī)標(biāo)定的目的是為了使攝像機(jī)能夠準(zhǔn)確地捕捉并記錄世界坐標(biāo)系中物體的位置、大小、形狀等信息。

我們的目標(biāo)物體是果實(shí),它顏色不一,形狀也不一定,有紅的,橙的,黃的。想要準(zhǔn)確的抓取且不傷害到果實(shí),就需要獲取果實(shí)的各個(gè)信息,寬度,厚度等,智能的進(jìn)行抓取。

我們看一下目標(biāo)果實(shí),它們目前較大的區(qū)別就是顏色的不一樣,我們?cè)O(shè)定紅色和橙色的目標(biāo)將被選中,這里就要用到HSV色域來(lái)進(jìn)行目標(biāo)的定位。下面的代碼是用來(lái)檢測(cè)目標(biāo)果實(shí)。

Code:

class Detector:
    class FetchType(Enum):
        FETCH = False
        FETCH_ALL = True

"""
    Detection and identification class
    """

    HSV_DIST = {
# "redA": (np.array([0, 120, 50]), np.array([3, 255, 255])),
# "redB": (np.array([176, 120, 50]), np.array([179, 255, 255])),
"redA": (np.array([0, 120, 50]), np.array([3, 255, 255])),
"redB": (np.array([118, 120, 50]), np.array([179, 255, 255])),
# "orange": (np.array([10, 120, 120]), np.array([15, 255, 255])),
"orange": (np.array([8, 150, 150]), np.array([20, 255, 255])),
"yellow": (np.array([28, 100, 150]), np.array([35, 255, 255])), # old
# "yellow": (np.array([31, 246, 227]), np.array([35, 255, 255])),   # new
}

    default_hough_params = {
"method": cv2.HOUGH_GRADIENT_ALT,
"dp": 1.5,
"minDist": 20,
"param2": 0.6,
"minRadius": 15,
"maxRadius": 40,
}

    def __init__(self, target):
        self.bucket = TargetBucket()
        self.detect_target = target

    def get_target(self):
        return self.detect_target

    def set_target(self, target):
        if self.detect_target == target:
            return
        self.detect_target = target
        if target == "apple":
            self.bucket = TargetBucket(adj_tolerance=25, expire_time=0.2)
        elif target == "orange":
            self.bucket = TargetBucket()
        elif target == "pear":
            self.bucket = TargetBucket(adj_tolerance=35)

    def detect(self, rgb_data):
        if self.detect_target == "apple":
            self.__detect_apple(rgb_data)
        elif self.detect_target == "orange":
            self.__detect_orange(rgb_data)
        elif self.detect_target == "pear":
            self.__detect_pear(rgb_data)

    def __detect_apple(self, rgb_data):
        maskA = color_detect(rgb_data, *self.HSV_DIST["redA"])
        maskB = color_detect(rgb_data, *self.HSV_DIST["redB"])
        mask = maskA + maskB

        kernelA = cv2.getStructuringElement(cv2.MORPH_RECT, (8, 8))
        kernelB = cv2.getStructuringElement(cv2.MORPH_RECT, (2, 2))
        mask = cv2.erode(mask, kernelA)
        mask = cv2.dilate(mask, kernelA)

        targets = circle_detect(
            mask, {"minDist": 15, "param2": 0.5,
"minRadius": 10, "maxRadius": 50}
)
        self.bucket.add_all(targets)
        self.bucket.update()

    def __detect_orange(self, rgb_data):
        mask = color_detect(rgb_data, *self.HSV_DIST["orange"])
        targets = circle_detect(
            mask, {"minDist": 15, "param2": 0.1,
"minRadius": 7, "maxRadius": 30}
)
        self.bucket.add_all(targets)
        self.bucket.update()

    def __detect_pear(self, rgb_data):
        mask = color_detect(rgb_data, *self.HSV_DIST["yellow"])

        kernelA = cv2.getStructuringElement(cv2.MORPH_RECT, (25, 25))
        kernelB = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
        mask = cv2.erode(mask, kernelA)
        mask = cv2.dilate(mask, kernelA)
        mask = cv2.erode(mask, kernelB)

        targets = circle_detect(
            mask, {"minDist": 15, "param2": 0.1,
"minRadius": 15, "maxRadius": 70}
)
        self.bucket.add_all(targets)
        self.bucket.update()

    def fetch(self):
        return self.bucket.fetch()

    def fetch_all(self):
        return self.bucket.fetch_all()

    def debug_view(self, bgr_data, view_all=True):
        if view_all:
            targets = self.bucket.fetch_all()
        else:
            targets = self.bucket.fetch()
            if targets is not None:
                targets = [targets]
        if targets is not None:
            for target in targets:
                x, y, radius = target["x"], target["y"], target["radius"]
# draw outline
                cv2.circle(bgr_data, (x, y), radius, BGR_GREEN, 2)

# draw circle center
                cv2.circle(bgr_data, (x, y), 1, BGR_RED, -1)

左邊為彩色流視頻,右邊為深度視頻

我們的第一步就是要將目標(biāo)果實(shí)能夠正確的檢測(cè)出來(lái),以便后續(xù)獲取目標(biāo)物體的坐標(biāo),深度等其他信息。我們定義需要獲取的信息方便后續(xù)的存儲(chǔ)以及調(diào)用。

code:

class VideoCaptureThread(threading.Thread):
    def __init__(self, detector, detect_type = Detector.FetchType.FETCH_ALL.value):
        threading.Thread.__init__(self)
        self.vp = VideoStreamPipe()
        self.detector = detector                  
        self.finished = True                      
        self.camera_coord_list = []               
        self.old_real_coord_list = []             
        self.real_coord_list = []                 
        self.new_color_frame = None              
        self.fruit_type = detector.detect_target  
        self.detect_type = detect_type            
        self.rgb_show = None
        self.depth_show = None

最后我們要獲取的是果實(shí)的坐標(biāo),能夠發(fā)送給機(jī)械臂去執(zhí)行抓取的坐標(biāo),通過(guò)深度坐標(biāo)轉(zhuǎn)化為世界坐標(biāo),已經(jīng)是成功了一大半了,最后只需要將世界坐標(biāo)跟機(jī)械臂的坐標(biāo)系進(jìn)行轉(zhuǎn)換就可以獲得抓取目標(biāo)果實(shí)的坐標(biāo)了。

# get world coordinate
 def convert_depth_to_world(self, x, y, z):
        fx = 454.367
        fy = 454.367
        cx = 313.847
        cy = 239.89

        ratio = float(z / 1000)
        world_x = float((x - cx) * ratio) / fx
        world_x = world_x * 1000
        world_y = float((y - cy) * ratio) / fy
        world_y = world_y * 1000
        world_z = float(z)

        return world_x, world_y, world_z

該階段,我們實(shí)現(xiàn)了檢測(cè)目標(biāo)物體,并且返回可抓取的坐標(biāo),傳遞給機(jī)械臂。接下來(lái)我們來(lái)處理機(jī)械臂的控制以及軌跡的規(guī)劃。

機(jī)械臂的控制和軌跡規(guī)劃

說(shuō)到機(jī)械臂的控制,一開(kāi)始大家可能都會(huì)覺(jué)得很困難,怎么讓機(jī)械臂按照自己的想法動(dòng)起來(lái)。不用擔(dān)心,我們mechArm270機(jī)械臂有pymycobot,一個(gè)相對(duì)比較成熟的機(jī)械臂控制庫(kù),只需要簡(jiǎn)單的幾行代碼就能夠讓機(jī)械臂運(yùn)動(dòng)起來(lái)。

PS:pymycobot 是pyhon的一個(gè)庫(kù),用于控制機(jī)械臂運(yùn)動(dòng)的一個(gè)庫(kù),我們使用的是最新版,pymycobot==3.1.2

#Introduce two commonly used control methods
'''
Send the degrees of all joints to robot arm.
angle_list_degrees: a list of degree value(List[float]), length 6
speed: (int) 0 ~ 100,robotic arm's speed
'''
send_angles([angle_list_degrees],speed)
send_angles([10,20,30,45,60,0],100)
'''
Send the coordinates to robot arm
coords:a list of coordiantes value(List[float]), length 6
speed: (int) 0 ~ 100,robotic arm's speed
'''
send_coords(coords, speed)
send_coords([125,45,78,-120,77,90],50)

以角度/坐標(biāo)都可以把發(fā)送給機(jī)械臂去進(jìn)行執(zhí)行。

動(dòng)圖1.gif

控制機(jī)械臂運(yùn)動(dòng)

采摘機(jī)器人軌跡規(guī)劃

在實(shí)現(xiàn)簡(jiǎn)單的控制之后,我們就要設(shè)計(jì)機(jī)械臂抓取果實(shí)的軌跡規(guī)劃了。在識(shí)別算法當(dāng)中,我們獲得到了果子的世界坐標(biāo)。處理果子的世界坐標(biāo),轉(zhuǎn)化到機(jī)械臂坐標(biāo)系坐標(biāo)進(jìn)行目標(biāo)抓取。

#處理果實(shí)世界坐標(biāo)的方法
deftarget_coords(self):
        coord = self.ma.get_coords()
whilelen(coord)==0:
            coord = self.ma.get_coords()

        target = self.model_track()
        coord[:3]= target.copy()
        self.end_coords = coord[:3]

if DEBUG ==True:
print("coord: ", coord)
print("self.end_coords: ", self.end_coords)

        self.end_coords = coord

return coord

有了目標(biāo)坐標(biāo)之后,我們規(guī)劃?rùn)C(jī)械臂運(yùn)動(dòng)的軌跡。在機(jī)械臂運(yùn)動(dòng)的途中,不能撞到其他結(jié)構(gòu),打落水果等。

在規(guī)劃的時(shí)候可以考慮設(shè)計(jì):

● 初始姿態(tài)


            ● 待抓取姿態(tài)


            ● 避障姿態(tài)

各種的姿態(tài)應(yīng)該根據(jù)自己的場(chǎng)景需求來(lái)設(shè)定。

分揀機(jī)器人路徑規(guī)劃

前有采摘機(jī)器人,現(xiàn)在來(lái)講解分揀機(jī)器人路徑的規(guī)劃。其實(shí)這兩個(gè)機(jī)器人的路徑規(guī)劃都是大同小異,分揀目標(biāo)是傳送帶上的目標(biāo),通過(guò)深度攝像頭獲取傳送帶上壞果實(shí)的坐標(biāo)將其分揀出來(lái)。

動(dòng)圖2.gif

采摘機(jī)器人和分揀機(jī)器人的控制和軌跡規(guī)劃就到這里了,接下來(lái)我們來(lái)介紹比較重要的,也是這個(gè)套裝的重中之重,這兩臺(tái)機(jī)械臂之間是如何通信的呢,它們是如何有效讓兩臺(tái)機(jī)械臂和一臺(tái)傳送帶不進(jìn)入死循環(huán)能夠運(yùn)行的如此順暢。

多臺(tái)機(jī)械臂的通信和邏輯的處理

如果沒(méi)有一個(gè)完整的邏輯,相信這兩個(gè)機(jī)械臂早就打起架來(lái)了。我們看整個(gè)程序的流程圖。

流程圖.jpeg

就是在R2發(fā)現(xiàn)壞果的時(shí)候,R1是機(jī)械臂是暫停的狀態(tài),等到R2完成分揀工作了之后會(huì)給R1傳遞信息讓R1繼續(xù)進(jìn)行采摘工作。

Socket通信

既然要通信,那就少不了Socket這個(gè)庫(kù)。Socket庫(kù)是一個(gè)在網(wǎng)絡(luò)編程中經(jīng)常使用的標(biāo)準(zhǔn)庫(kù),它提供了一組用于網(wǎng)絡(luò)通信的API,可以方便地實(shí)現(xiàn)不同計(jì)算機(jī)之間的數(shù)據(jù)傳輸。為了解決R1 和R2 之間通信的問(wèn)題,我們的解決方法是簡(jiǎn)歷一個(gè)服務(wù)器,和一個(gè)客戶端的效果。

流程圖2.jpeg

服務(wù)器建立的相關(guān)代碼,提前初始化需要傳遞的信息

Code:

classTcpServer(threading.Thread):
def__init__(self, server_address)- >None:
        threading.Thread.__init__(self)
        self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.s.bind(server_address)
print("server Binding succeeded!")
        self.s.listen(1)
        self.connected_obj =None

        self.good_fruit_str ="apple"
        self.bad_fruit_str ="orange"
        self.invalid_fruit_str ="none"

        self.target = self.invalid_fruit_str
        self.target_copy = self.target
        self.start_move =False

客戶端建立的相關(guān)代碼。

Code:

classTcpClient(threading.Thread):
def__init__(self, host, port, max_fruit =8, recv_interval =0.1, recv_timeout =30):
        threading.Thread.__init__(self)

        self.good_fruit_str ="apple"
        self.bad_fruit_str ="orange"
        self.invalid_fruit_str ="none"

        self.host = host
        self.port = port

# Initializing the TCP socket object
# specifying the usage of the IPv4 address family
#  designating the use of the TCP stream transmission protocol
        self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        self.client_socket.connect((self.host, self.port))
        self.current_extracted =0
        self.max_fruit = max_fruit
        self.recv_interval = recv_interval
        self.recv_timeout = recv_timeout

        self.response_copy = self.invalid_fruit_str
        self.action_ready =True

建立好了服務(wù)器和客戶端,我們就可以讓R1和R2像我們平時(shí)發(fā)信息一樣進(jìn)行通信了。

R1:"我現(xiàn)在在抓果實(shí)“

R2:"收到好的"

技術(shù)要點(diǎn)

這整個(gè)項(xiàng)目下來(lái)關(guān)鍵是多臺(tái)機(jī)械臂之間的通信和邏輯的處理。要讓兩個(gè)機(jī)械臂之間建立通信有很多種辦法,例如常見(jiàn)的物理通信串口通信,以太網(wǎng)口通信,藍(lán)牙通信等。

我們現(xiàn)在使用的就是以太網(wǎng)口通信,使用現(xiàn)有的TCP/IP協(xié)議,用python當(dāng)中的socket庫(kù)來(lái)進(jìn)行實(shí)現(xiàn)。

建房子先建地基這個(gè)道理大家都懂吧,建立一個(gè)項(xiàng)目就要搭建好它的框架也是同一個(gè)道理。此外機(jī)械臂控制的原理也是至關(guān)重要的,學(xué)會(huì)如何將目標(biāo)物體轉(zhuǎn)化為世界坐標(biāo)在換成機(jī)械臂坐標(biāo)系中的目標(biāo)。

總結(jié)

該水果采摘和分揀機(jī)器人的應(yīng)用場(chǎng)景不僅可以幫助學(xué)生更好地理解機(jī)械原理和電子控制技術(shù),還可以促進(jìn)他們對(duì)科學(xué)技術(shù)的興趣和熱愛(ài),并提供一個(gè)鍛煉實(shí)踐能力和競(jìng)賽思維的機(jī)會(huì)。

學(xué)習(xí)機(jī)械臂相關(guān)知識(shí)需要實(shí)踐操作,而該應(yīng)用場(chǎng)景提供了一個(gè)具有實(shí)際意義的機(jī)會(huì),讓學(xué)生通過(guò)實(shí)際操作來(lái)加深對(duì)機(jī)械臂的理解和認(rèn)識(shí)。此外,該場(chǎng)景還可以讓學(xué)生學(xué)習(xí)和掌握機(jī)械臂運(yùn)動(dòng)控制、視覺(jué)識(shí)別和物品抓取等技術(shù),幫助他們更好地掌握機(jī)械臂的相關(guān)知識(shí)和技能。

除此之外,該應(yīng)用場(chǎng)景還可以幫助學(xué)生鍛煉團(tuán)隊(duì)合作、創(chuàng)新思維和競(jìng)賽思維等能力,為他們未來(lái)的職業(yè)發(fā)展打下堅(jiān)實(shí)的基礎(chǔ)。通過(guò)參與機(jī)器人競(jìng)賽、科技展覽等活動(dòng),學(xué)生可以不斷提高自己的競(jìng)賽水平和創(chuàng)新能力,從而更好地適應(yīng)未來(lái)的社會(huì)發(fā)展和科技變革。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 機(jī)器人
    +關(guān)注

    關(guān)注

    210

    文章

    27839

    瀏覽量

    204596
  • 3D
    3D
    +關(guān)注

    關(guān)注

    9

    文章

    2836

    瀏覽量

    107005
  • 人工智能
    +關(guān)注

    關(guān)注

    1787

    文章

    46061

    瀏覽量

    235020
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    機(jī)器人學(xué)導(dǎo)論(原書(shū)第3版)_(美)HLHN J.CRAIG著 贠超等譯

    機(jī)器人學(xué)導(dǎo)論(原書(shū)第3版)_(美)HLHN J.CRAIG著贠超等譯
    發(fā)表于 09-28 11:49

    【KittenBot機(jī)器人試用申請(qǐng)】KittenBot繪圖避障機(jī)器人學(xué)習(xí)課程

    避障機(jī)器人學(xué)習(xí)課程3、預(yù)計(jì)成果:學(xué)生在學(xué)習(xí)過(guò)程中學(xué)會(huì)解決問(wèn)題、自足思考4、試用計(jì)劃:1、拿到機(jī)器后,首先我將會(huì)把機(jī)器人的壁障原理與使用方法弄懂2、開(kāi)展專(zhuān)題課程,講述使用方法
    發(fā)表于 07-07 18:05

    【下載】《機(jī)器人學(xué)、機(jī)器視覺(jué)與控制――MATLAB算法基礎(chǔ)》

    `內(nèi)容簡(jiǎn)介本書(shū)是關(guān)于機(jī)器人學(xué)機(jī)器視覺(jué)的實(shí)用參考書(shū), 第一部分“基礎(chǔ)知識(shí)”(第2章和第3章)介紹機(jī)器人及其操作對(duì)象的位置和姿態(tài)描述,以及機(jī)器人
    發(fā)表于 01-17 17:38

    【下載】《機(jī)器人學(xué)機(jī)器視覺(jué)與控制――MATLAB算法基礎(chǔ)》

    `內(nèi)容簡(jiǎn)介本書(shū)是關(guān)于機(jī)器人學(xué)機(jī)器視覺(jué)的實(shí)用參考書(shū), 第一部分“基礎(chǔ)知識(shí)”(第2章和第3章)介紹機(jī)器人及其操作對(duì)象的位置和姿態(tài)描述,以及機(jī)器人
    發(fā)表于 04-08 18:19

    機(jī)器人學(xué)習(xí)相關(guān)資料文檔!

    分享八本機(jī)器人方面的文檔,其中包括了算法導(dǎo)論,機(jī)器人學(xué)導(dǎo)論,機(jī)器人技術(shù)及應(yīng)用等多本書(shū)籍!喜歡機(jī)器人方面的大家一定不要錯(cuò)過(guò)!
    發(fā)表于 08-25 09:46

    已開(kāi)獎(jiǎng)——【送書(shū)福利】機(jī)器人時(shí)代已來(lái)!送你幾本機(jī)器人學(xué)硬核好書(shū)

    `21世紀(jì)是機(jī)器人的時(shí)代。從學(xué)術(shù)研究到工程應(yīng)用,機(jī)器人引起了學(xué)界和工業(yè)界越來(lái)越多的關(guān)注和興趣。這種日益濃厚的興趣也來(lái)源于機(jī)器人學(xué)作為一門(mén)綜合性學(xué)科的多
    發(fā)表于 11-16 16:14

    機(jī)器人學(xué)

    第一章 緒論 1.1 機(jī)器人學(xué)的發(fā)展1.1.1 機(jī)器人的由來(lái)1.1.2 機(jī)器人的定義1.1.3 機(jī)器人學(xué)的進(jìn)展1.2 機(jī)器人的特點(diǎn)、結(jié)構(gòu)與
    發(fā)表于 01-14 16:45 ?98次下載
    <b class='flag-5'>機(jī)器人學(xué)</b>

    機(jī)器人學(xué)_熊有倫

    機(jī)器人學(xué) 熊有倫 1993版 機(jī)器人學(xué) 熊有倫 1993
    發(fā)表于 11-18 17:12 ?0次下載

    高級(jí)機(jī)器人學(xué)與步行機(jī)器人

    高級(jí)機(jī)器人學(xué)與步行機(jī)器人!資料來(lái)源網(wǎng)絡(luò),如有侵權(quán),敬請(qǐng)見(jiàn)諒
    發(fā)表于 11-20 15:08 ?0次下載

    機(jī)器人學(xué)導(dǎo)論——分析、系統(tǒng)及應(yīng)用

    機(jī)器人學(xué)導(dǎo)論——分析、系統(tǒng)及應(yīng)用!資料來(lái)源網(wǎng)絡(luò),如有侵權(quán),敬請(qǐng)見(jiàn)諒
    發(fā)表于 11-20 15:33 ?0次下載

    基礎(chǔ)機(jī)器人學(xué)與寶貝車(chē)機(jī)器人

    基礎(chǔ)機(jī)器人學(xué)與寶貝車(chē)機(jī)器人!資料來(lái)源網(wǎng)絡(luò),如有侵權(quán),敬請(qǐng)見(jiàn)諒
    發(fā)表于 11-20 15:34 ?0次下載

    機(jī)器人學(xué)習(xí)算法圖解教學(xué)

    本文主要介紹機(jī)器人學(xué)習(xí)算法的編譯及實(shí)際操作
    發(fā)表于 09-14 10:58 ?21次下載

    機(jī)器人學(xué)導(dǎo)論的課后習(xí)題答案資料免費(fèi)下載

    機(jī)器人學(xué)導(dǎo)論是由斯坦福大學(xué)榮譽(yù)教授ohn.J.Craig先生所編寫(xiě)的一本專(zhuān)業(yè)的機(jī)器人理論知識(shí)學(xué)習(xí)書(shū)籍。本書(shū)介紹機(jī)械操作的理論和工程知識(shí),這是機(jī)器人學(xué)的分支學(xué)科,它是建立在幾個(gè)傳統(tǒng)
    發(fā)表于 12-03 08:00 ?0次下載

    機(jī)器人學(xué)—自動(dòng)化的輝煌篇章pdf

    機(jī)器人學(xué)—自動(dòng)化的輝煌篇章pdf
    發(fā)表于 12-10 17:04 ?0次下載

    機(jī)器人學(xué)的幾何基礎(chǔ)(教材資料)

    機(jī)器人學(xué)的幾何基礎(chǔ)(第2版)》是一部關(guān)于機(jī)器人學(xué)中有著重要應(yīng)用的幾何概念的精彩導(dǎo)論。第2版提供了對(duì)相關(guān)領(lǐng)域內(nèi)容的深入講解,并仍保持獨(dú)特的風(fēng)格 它的重點(diǎn)不是集中在運(yùn)動(dòng)學(xué)和機(jī)器人學(xué)的計(jì)算結(jié)果上,而是包含
    發(fā)表于 04-20 14:43 ?0次下載