[原創]智能可編程機器人—— Cozmo 入門及開發指南


原文鏈接:


參考文章:

1. 入坑始末

  • 前幾日,朋友在群里發了一個機器人的小視頻,視頻里機器人可以對話,可以推箱子,開心以后會哈哈大笑,非常有趣。

  • 詳細了解里一下,這是個叫 Cozmo 的智能機器人,可以配合 SDK 用 Python 編程,興趣一下子就來了,詢問了一下價格,閑魚 500 左右。順便跟同事看了一下,同事也感興趣,立馬去閑魚淘了 2個 藍色限量款。

  • 第一天下單,沒想到第二天下午就到了,哈哈哈。滿心激動的打開箱子,里面有:

    • 說明書
    • 充電器
    • 3 個魔方
    • 還有一個就是 Cozmo 本體了
  • 先上張圖

原文鏈接:https://www.cnblogs.com/David-domain/p/11216603.html

2. 啟動 Cozmo

  • 打開箱子以后,接下來就是要啟動 Cozmo 了,拿起 Cozmo 找了好幾圈都沒找到開關,emmm~~什么鬼?

  • 通過閱讀說明書才知道,Cozmo 開機其實很簡單,把充電座接上電,把 Cozmo 放上去就可以了。Cozmo 的底部有 2 個金屬觸點,通電后屏幕就亮了。

  • 屏幕上有 2 行字,這 2 行字的用途稍后說明。

  • 接下來我們需要掏出手機,下載 App。

  • App 有 iOS 和 Android 兩種,值得注意的是:iOS 版本即使在國內,也可以直接從 App Store 下載安裝;而 Android 版需要連接 Google Store 才能下載,不禁吐槽一下,國內的 Go 開發者還真是艱難。

  • 為了方便起見,祭出了我的神器——老古董 5s。下載、安裝完成 App 后,更換 Wi-Fi 。Wi-Fi 名就是 Cozmo 屏幕右上方的一串字,名為 Cozmo_700xxx 的 Wi-Fi,密碼則是第2行的一長串字符串。

  • 連接成功后,切換 App 連接 Cozmo,此時就可以互動了。
    原文鏈接:https://www.cnblogs.com/David-domain/p/11216603.html

3. 開始鼓搗

  • App 上可以互動的功能比較多,但是 App 編程只有一個類似 Scratch 的模塊,對於具有探索精神的程序猿來說,肯定不能滿足於此,so,立馬打開官方手冊,准備搭建開發環境。
  • 官方的 SDK 放在了 GitHub ,鏈接地址: Cozmo Explorer Tool

4. 開發環境搭建——Cozmo Explorer Tool 安裝

4.1. 下載

git clone https://github.com/GrinningHermit/Cozmo-Explorer-Tool.git

4.2. 安裝依賴

4.2.1. Cozmo SDK 安裝

4.2.1.1. Python Installation

# 首先,根據說明安裝最新的 Homebrew
# 如果已經安裝了BREW,請打開終端窗口並鍵入以下內容來更新它:
brew update

# 安裝並更新homebrew后,在終端窗口中鍵入以下內容以安裝最新版本的python 3:
brew install python3

img

4.2.1.2. SDK Installation

# 在終端中輸入以下命令安裝 SDK
pip3 install --user 'cozmo[camera]'
# [camera] 選項增加了對 Cozmo 相機處理圖像。

Install SDK

  • 提示安裝成功:Pillow-6.1.0cozmo-1.4.10cozmoclad-3.4.0numpy-1.16.4

4.2.1.3. SDK Upgrade

# 輸入如下命令升級 SDK
pip3 install --user --upgrade cozmo

Upgrade SDK

  • 提示當前 SDK 已經滿足需求,忽略更新。

4.2.1.4. 手機驅動安裝(補充步驟)

  1. 在 macOS 系統上運行 Cozmo SDK,iOS 設備不需要安裝其他驅動。
  2. 而使用 Android 設備需要安裝 Android Debug Bridge (adb) 才能運行 Cozmo SDK ,並且需要用 USB 線連接手機。

4.2.2. 安裝 Pillow 模塊

  • 一般說來裝Cozmo SDK的時候已經自帶了
pip3 install --user Pillow

4.2.3. 安裝 Flask 模塊

  • FlaskPython 的 Web 應用框架,因為 Cozmo Explorer Tool 是瀏覽器應用,故必須安裝
pip3 install --user flask

img

4.2.4. 安裝 Flask Socket-IO 模塊

pip3 install --user flask-socketio

img

原文鏈接:https://www.cnblogs.com/David-domain/p/11216603.html

5. 啟動 Cozmo Explorer Tool

  • 因為沒有使用 venv 環境,所以直接運行即可
  • 進入 Cozmo Explorer Tool 目錄
cd Cozmo-Explorer-Tool
python3 explorer_tool.py

5.1. 報錯 1

╭─david@MyAir ~/Cozmo-Explorer-Tool  ‹master› 
╰─➤  python3 explorer_tool.py                                                                                                                                     1 ↵
WARNING:root:Cannot import from eventlet: Do `pip3 install --user eventlet` to install
Event monitoring works, but performance is decreased
2019-07-20 09:21:42,886 cozmo.general WARNING  No iOS device found running Cozmo: No connected iOS devices running Cozmo in SDK mode
WARNING:cozmo.general:No iOS device found running Cozmo: No connected iOS devices running Cozmo in SDK mode
2019-07-20 09:21:42,887 cozmo.general WARNING  No Android device found running Cozmo: Failed to execute adb command adb: [Errno 2] No such file or directory: 'adb': 'adb'
WARNING:cozmo.general:No Android device found running Cozmo: Failed to execute adb command adb: [Errno 2] No such file or directory: 'adb': 'adb'
 * Serving Flask app "explorer_tool" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: off
ERROR:flask.app:Exception on / [GET]
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "explorer_tool.py", line 89, in index
    return render_template('index.html', randomID=rndID, animations=lists[0], triggers=lists[1], behaviors=lists[2], hasSocketIO=flask_socketio_installed, hasPillow=active_viewer)
IndexError: list index out of range
  • 提示中有pip3 install --user eventlet ,說明安裝依賴中還有一個包要安裝,docs 中沒有提及
pip3 install --user eventlet

img

  • 提示安裝完成

5.2. 再次啟動,彈出一個網頁顯示 500

  • 頁面500,emmmm~~~,什么情況?

img

5.3. 查看目錄中 README

System requirements
-
- PC with Windows OS, mac OSX or Linux
- Python 3.5.1 or later
- WiFi connection
- An iOS or Android mobile device with the Cozmo app installed, connected to the PC via USB cable
  • 最后一條提示要用 USB 線連接手機和電腦
  • 之后呢?拜托一口氣說完好不好~~~
  • 再次查看 docs,Starting Up the SDK
  • 終於找到了
    • 手機連接 Cozmo Wi-Fi后,用 App 連接 Cozmo
    • 點擊右上角的⚙️設置菜單
    • 開啟 SDK 功能
    • 最后運行 explorer_tool.py

img

  • 點擊開啟 SDK 模式

  • 進入 SDK 模式后

  • 接下來Cozmo 就傻傻的、迷惑的看着你,等待你下指令了

5.4. 啟動 explorer_tool.py

  • 重新運行,哈哈,頁面正常打開 _

  • Terminal 詳細日志輸出

img

6. Python 開發 —— 遠程控制及示例腳本運行

  • 以上是 UI 工具安裝過程,類似與一個調試界面,下面進入真正的 Python 開發部分

6.1. 項目 Anki Cozmo - Python SDK

  • 手冊中第二部分是 GitHub 項目地址:Anki Cozmo - Python SDK
  • 下載完 SDK 案例,就可以准備進行 python 開發了

6.2. 下載 SDK Examples

  • 點擊手冊中下載標簽:SDK Examples
  • 第一部分是 SDK 案例,有 Mac OSX / Linux 和 Windows 版本。

img

6.3. 查看 SDK Examples 內容

╭─david@MyAir ~/Downloads/cozmo_sdk_examples_1.4.10  
╰─➤  ll
total 32
-rw-r--r--@  1 david  staff    10K  3 13 04:32 LICENSE.txt
-rw-r--r--@  1 david  staff   676B  3 13 04:32 README.md
drwxr-xr-x@ 10 david  staff   320B  3 13 04:32 apps
drwxr-xr-x@  7 david  staff   224B  3 13 04:32 face_images
drwxr-xr-x@  7 david  staff   224B  3 13 04:32 if_this_then_that
drwxr-xr-x@  4 david  staff   128B  7 20 13:27 lib
drwxr-xr-x@  4 david  staff   128B  3 13 04:32 multi_robot
drwxr-xr-x@  3 david  staff    96B  3 13 04:32 tools
drwxr-xr-x@  8 david  staff   256B  3 13 04:32 tutorials

╭─david@MyAir ~/Downloads/cozmo_sdk_examples_1.4.10  
╰─➤  tree -Cl .
.
|-- LICENSE.txt
|-- README.md
|-- apps
|   |-- 3d_viewer.py
|   |-- cli.py
|   |-- color_finder.py
|   |-- desk_security_guard.py
|   |-- quick_tap.py
|   |-- quiz_questions.json
|   |-- quizmaster_cozmo.py
|   `-- remote_control_cozmo.py
|-- face_images
|   |-- cozmosdk.png
|   |-- hello_world.png
|   |-- ifttt_gmail.png
|   |-- ifttt_sports.png
|   `-- ifttt_stocks.png
|-- if_this_then_that
|   |-- common
|   |   `-- __init__.py
|   |-- ifttt_gmail.py
|   |-- ifttt_sports.py
|   |-- ifttt_sports_flask.py
|   `-- ifttt_stocks.py
|-- lib
|   `-- flask_helpers.py
|-- multi_robot
|   |-- multi_robot_independent.py
|   `-- multi_robot_unified.py
|-- tools
|   `-- cubes
|       |-- auto_cube_disconnect.py
|       |-- connect_cubes.py
|       |-- disconnect_cubes.py
|       `-- log_cube_battery_levels.py
`-- tutorials
    |-- 01_basics
    |   |-- 01_hello_world.py
    |   |-- 02_drive_and_turn.py
    |   |-- 03_count.py
    |   |-- 04_drive_square.py
    |   |-- 05_motors.py
    |   |-- 06_sing_scales.py
    |   |-- 07_backpack_lights.py
    |   |-- 08_animation.py
    |   |-- 09_cube_lights.py
    |   |-- 10_play_sound.py
    |   |-- 11_play_song.py
    |   `-- 12_random_animation.py
    |-- 02_cozmo_face
    |   |-- 01_cozmo_face_image.py
    |   |-- 02_cozmo_face_mirror.py
    |   `-- 03_alarm_clock.py
    |-- 03_vision
    |   |-- 01_light_when_face.py
    |   |-- 02_face_follower.py
    |   |-- 03_annotate.py
    |   `-- 04_exposure.py
    |-- 04_cubes_and_objects
    |   |-- 01_go_to_pose_test.py
    |   |-- 02_create_wall.py
    |   |-- 03_go_to_object_test.py
    |   |-- 04_stack_or_roll.py
    |   |-- 05_cube_stack.py
    |   |-- 06_pickup_furthest.py
    |   |-- 07_lookaround.py
    |   |-- 08_drive_to_charger_test.py
    |   |-- 09_custom_objects.py
    |   |-- 10_object_moved.py
    |   |-- 11_dock_with_cube.py
    |   |-- 12_roll_cube.py
    |   `-- 13_pop_a_wheelie.py
    |-- 05_async_python
    |   |-- 01_cube_blinker_sync.py
    |   `-- 02_cube_blinker.py
    `-- 06_actions
        `-- 01_parallel_actions.py

15 directories, 62 files
  • 因為梯子故障,docs 里的視頻鏈接無法觀看,所以只能自己摸索
  • tree 目錄后,看到 lib 庫中有一個 flask_helper.py 的文件,通過剛才 Cozmo Explorer Tool 的調試,我們能知道 Cozmo 使用 flask 框架做的 web 。所以,這個應該也是有 flask web 界面的。

6.4. 離成功不遠了

  • 打開 flask_helper.py文件,可以看到頂部注釋部分有一個說明
Flask is a Python web framework. remote_control_cozmo.py and other scripts may use
these utility functions to interact with a web browser.
  • 我們看到了什么?

  • 你說對了!——remote_control_cozmo.py

  • find 一下

╭─david@MyAir ~/Downloads/cozmo_sdk_examples_1.4.10  
╰─➤  find ./* -name "remote_control_cozmo.py"
./apps/remote_control_cozmo.py

6.5. 啟動遠程控制—— remote_control_cozmo.py

╭─david@MyAir ~/Downloads/cozmo_sdk_examples_1.4.10  
╰─➤  python3 apps/remote_control_cozmo.py 
Traceback (most recent call last):
  File "apps/remote_control_cozmo.py", line 29, in <module>
    import flask_helpers
ModuleNotFoundError: No module named 'flask_helpers'
  • what the fuck? 發生了什么?
  • 沒找到 flask_helpers模塊。你覺得在哪?是的,flask_helper.py文件中
  • so,切換到 lib 目錄中
╭─david@MyAir ~/Downloads/cozmo_sdk_examples_1.4.10  
╰─➤  cd lib                                                                                                                                                       1 ↵
╭─david@MyAir ~/Downloads/cozmo_sdk_examples_1.4.10/lib  
╰─➤  python3 ../apps/remote_control_cozmo.py 
2019-07-20 13:27:29,093 cozmo.general WARNING  No iOS device found running Cozmo: No connected iOS devices running Cozmo in SDK mode
2019-07-20 13:27:29,095 cozmo.general WARNING  No Android device found running Cozmo: Failed to execute adb command adb: [Errno 2] No such file or directory: 'adb': 'adb'
A connection error occurred: No devices connected running Cozmo in SDK mode
  • 好吧,你贏了,還是需要用手機連接,開啟 SDK 模式
  • so,念咒:天靈靈,地靈靈,太上老君急急如律令,變~變~變~
  • 屏幕白光一閃,已經打開了一個神奇的頁面

  • 看到這簡(lián)潔(jià)的布局,各位看官就知道我已經成功了😄
  • 讓我們再來看一下 Terminal 中的輸出
╭─david@MyAir ~/Downloads/cozmo_sdk_examples_1.4.10/lib  
╰─➤  python3 ../apps/remote_control_cozmo.py                                                                                                                      1 ↵
2019-07-20 13:33:24,416 cozmo.general INFO     App connection established. sdk_version=1.4.10 cozmoclad_version=3.4.0 app_build_version=00003.00004.00000
2019-07-20 13:33:24,417 cozmo.general INFO     Found robot id=1
2019-07-20 13:33:24,427 cozmo.general INFO     Connected to iOS device_id=4 serial=4189dea05df44b4741d3f5a4fda9173d7e59a8c5
2019-07-20 13:33:24,726 cozmo.general INFO     Robot id=1 serial=08828a31 initialized OK
 * Serving Flask app "remote_control_cozmo" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: off
/Users/david/Library/Python/3.7/lib/python/site-packages/cozmo/annotate.py:181: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working
  if isinstance(text, collections.Iterable):

原文鏈接:https://www.cnblogs.com/David-domain/p/11216603.html

7. 執行示例腳本

  • CTRL+C 退出 flask,保持 SDK 模式連接不中斷
  • 以下是實例腳本運行效果😁

7.1. 執行 tutorials/01_basics/ 腳本

文件 動作
01_hello_world.py 喊出“Hello World”
02_drive_and_turn.py 前進一段距離后,左轉
03_count.py 數數,從 1 數到 5
04_drive_square.py 左轉4次,走一個正方形
05_motors.py 升級機械臂
06_sing_scales.py 從 1 數到 10,並步進升起機械臂
07_backpack_lights.py Cozmo 頂部的燈循環變色
08_animation.py 做 3個動作
09_cube_lights.py 魔方顯示不同顏色的燈光
10_play_sound.py Cozmo 唱歌
11_play_song.py 手機播放音樂
12_random_animation.py Cozmo 做 6 個隨機動作

7.2. 執行 tutorials/02_cozmo_face/ 腳本

文件 動作
01_cozmo_face_image.py Cozmo 抬頭,屏幕循環輸出"WELCOME TO THE COZMO SDK" 和 “HELLO WORLD”
02_cozmo_face_mirror.py Cozmo 抬頭,模仿鏡子,屏幕顯示它看到的畫面
03_alarm_clock.py 15:30 Cozmo 抬頭,設置鬧鍾,傳參 15:30,到時后會說“Wake up lazy human! It's time xxxx”

7.3. 執行 tutorials/03_vision/ 腳本

文件 動作
01_light_when_face.py 人臉識別。打開一個窗口,顯示 Cozmo 看到的實時的圖像。
02_face_follower.py 人臉跟蹤。打開一個窗口,顯示 Cozmo 看到的實時的圖像。如果人臉移動,Cozmo 也會向相同方向轉向。
03_annotate.py 顯示一個圖形用戶界面窗口,顯示帶注釋的相機視圖。
04_exposure.py 演示Cozmo相機的手動和自動曝光設置。

7.4. 執行 tutorials/04_cubes_and_objects/ 腳本

文件 動作 說明
01_go_to_pose_test.py Cozmo 向左前方45度方向前進一段距離
02_create_wall.py 演示 Cozmo 繞過障礙物 需要執行 pip3 install --user 'cozmo[3dviewer]',否則找不到 OpenGL 模塊
03_go_to_object_test Cozmo 環顧四周找到魔方,並向魔方移動
04_stack_or_roll.py Cozmo 四處看看,然后等他看到一定數量的物體,將執行不同的操作。
05_cube_stack.py Como 把第一個看到的魔方放在第二個上
06_pickup_furthest.py Cozmo 找到一個魔方,把它舉起來,並打開一個窗口,顯示Cozmo 的識別過程
07_lookaround.py Cozmo 環顧四周,拿起並放下一個立方體。舉起來后,Cozmo 會高興的大笑。
08_drive_to_charger_test Cozmo 環顧四周,尋找充電器,並向它移動 好像識別不到充電器,哈哈哈😂
09_custom_objects.py 演示如何定義自定義對象。
10_object_moved.py 演示跟蹤Cozmo檢測到立方體正在移動的時間。
11_dock_with_cube.py 在 Cozmo 正前方放一個魔方,Cozmo 與魔方對接
12_roll_cube.py 在 Cozmo 正前方放一個魔方,Cozmo 回去滾動魔方
13_pop_a_wheelie.py 在 Cozmo 正前方放一個魔方,Cozmo 通過機械臂和旋轉,背靠在魔方上

7.5. 執行 tutorials/05_async_python/ 腳本

文件 動作 說明
01_cube_blinker_sync.py Cozmo 先四處尋找一個立方體。一旦找到一個,魔方的燈呈圓形閃爍綠色,人點擊魔方后退出。 同步案例
02_cube_blinker.py Cozmo 先四處尋找一個立方體。一旦找到一個,魔方的燈呈圓形閃爍綠色,人點擊魔方后退出。 異步案例
  • 沒發現有太大區別,哈哈

7.6. 執行 tutorials/06_actions/ 腳本

文件 動作
01_parallel_actions.py Cozmo 前進、升降機械臂並行進行

原文鏈接:https://www.cnblogs.com/David-domain/p/11216603.html

8. 用 IDE 開發 Cozmo Python 程序

8.1. 寫在前面重要的話

The usbmuxd (USB Multiplexor Daemon) must be installed on any computer system paired with an iOS device before running any programs. Installing iTunes will also install the usbmuxd on those systems. Linux users can install the usbmuxd module through the command line with sudo apt-get install usbmuxd.

  • usbmuxd(USB 多路復用器守護程序)必須在連接 iOS設備的電腦上安裝。安裝iTunes會附帶安裝上usbmuxd
  • 官網:http://www.libimobiledevice.org/
  • Linux 用戶需要通過 sudo apt-get install usbmuxd命令安裝。

Make sure adb (Android Debug Bridge) is installed on your system prior to running a program with an Android device. See the Install page for instructions.

  • 在使用Android設備運行程序之前,請確保在系統上安裝了ADB。

8.2. 開始碼代碼

  • 現在,我們可以在 Cozmo 上運行 Python 程序了。接下來我們將討論如何編輯上面的代碼,使 Cozmo 說些新的東西。讓我們編寫第一個程序。

8.3. 編寫 “say 晚安” 程序

8.3.1. 拷貝 01_hello_world.py 重命名為 nightnight.py

cd cozmo_sdk_examples_1.4.10/tutorials/01_basics/
cp 01_hello_world.py nightnight.py

8.3.2. 使用 IDE 或文本編輯器打開 nightnight.py

8.3.3. 對每行內容進行說明

#!/usr/bin/env python3

# Copyright (c) 2016 Anki, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License in the file LICENSE.txt or at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

'''Hello World
Make Cozmo say 'Hello World' in this simple Cozmo SDK example program.
'''

import cozmo		# 導入 cozmo SDK 包


def cozmo_program(robot: cozmo.robot.Robot):
    robot.say_text("Hello World").wait_for_completed()
		
    '''
    robot.say_text(…)  		表示要讓 Cozmo 大聲說出一段文本內容
    "Hello World"			 		是 Cozmo 要說的內容
    wait_for_completed()	表示要讓 Cozmo 說完這段文本后才執行寫下一行代碼,如果沒有這句,Cozmo 不會說出任何內容就停止了
    '''

cozmo.run_program(cozmo_program)

8.3.4. 修改文本內容

import cozmo


def cozmo_program(robot: cozmo.robot.Robot):
    robot.say_text("Night Night").wait_for_completed()


cozmo.run_program(cozmo_program)

8.3.5. 保存並執行

./nightnight.py
  • 如果正確執行,Cozmo 會說出新的短語。

8.4. 后續開發建議

  • 既然我們已經編寫了自己的 CozMo程序,那么可以看一下 CozMo SDK 的其余部分以及其他許多示例程序,以獲得更多的想法。

  • Cozmo SDK 中的 API,可以在http://cozmosdk.anki.com/docs/api.html找到。里面包括了所有組件、動作、事件,參考示例程序,我相信各位看官一定能開發出非常 geek 的程序。

原文鏈接:https://www.cnblogs.com/David-domain/p/11216603.html

9. 后記


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM