Arduino MKR IoT CarrierとGrove SCD30搭載CO2センサを使って、長期間の環境測定をしてみる。
人間と共生するロボットは、24時間365日電源を切らないで稼働しなければならないと思うけれど、メンテナンスや省エネのために人間の睡眠に相当するような休息は必要で、ロボットはいつ寝るべきかを調べたいので、お手軽に環境測定と記録が可能なデバイスを用意してみました。
ハードウェアもクラウド連携のソフトウェアも、とても良くできているので、ほとんど買ってくるだけで完了しますが、備忘録のためのソースコードを残します。
購入したもの
ソースコード
// WiFiNINA - Version: 1.8.13 #include <WiFiNINA.h> #include <RTCZero.h> int day; int month; int year; int hours; int minutes; int seconds; int millisCount; #include "thingProperties.h" #include <Arduino_MKRIoTCarrier.h> MKRIoTCarrier carrier; #include "SCD30.h" #if defined(ARDUINO_ARCH_AVR) #pragma message("Defined architecture for ARDUINO_ARCH_AVR.") #define SERIAL Serial #elif defined(ARDUINO_ARCH_SAM) #pragma message("Defined architecture for ARDUINO_ARCH_SAM.") #define SERIAL SerialUSB #elif defined(ARDUINO_ARCH_SAMD) #pragma message("Defined architecture for ARDUINO_ARCH_SAMD.") #define SERIAL SerialUSB #elif defined(ARDUINO_ARCH_STM32F4) #pragma message("Defined architecture for ARDUINO_ARCH_STM32F4.") #define SERIAL SerialUSB #else #pragma message("Not found any architecture.") #define SERIAL Serial #endif File myFile; String filename; /* Create an rtc object */ RTCZero rtcz; void loopRTC() { static int lastSeconds = -1; day = rtcz.getDay(); month = rtcz.getMonth(); year = rtcz.getYear(); hours = rtcz.getHours(); minutes = rtcz.getMinutes(); seconds = rtcz.getSeconds(); // Print date... print2digits(day); Serial.print("/"); print2digits(month); Serial.print("/"); print2digits(year); Serial.print(" "); // ...and time print2digits(hours); Serial.print(":"); print2digits(minutes); Serial.print(":"); print2digits(seconds); Serial.print(":"); if (lastSeconds != seconds) { millisCount = 0; } else { millisCount += 1; } lastSeconds = seconds; print2digits(millisCount); Serial.println(); } void print2digits(int number) { if (number < 10) { Serial.print("0"); // print a 0 before if the number is < than 10 } Serial.print(number); } void loopSCD() { float result[3] = {0}; if (scd30.isAvailable()) { scd30.getCarbonDioxideConcentration(result); CO2Grove = result[0]; temperatureGrove = result[1]; humidityGrove = result[2]; } } void setup() { // Initialize serial and wait for port to open: Serial.begin(115200); // This delay gives the chance to wait for a Serial Monitor without blocking if none is found delay(1500); Serial.println("SCD30 Raw Data"); scd30.initialize(); //connect to WiFi Serial.print("Connecting to "); Serial.println(SSID); WiFi.begin(SSID, PASS); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(" CONNECTED"); rtcz.begin(); //+ unsigned long epoch; int numberOfTries = 0, maxTries = 16; do { epoch = WiFi.getTime(); numberOfTries++; } while ((epoch == 0) && (numberOfTries < maxTries)); Serial.println(epoch); Serial.println(numberOfTries); if (numberOfTries == maxTries) { Serial.print("NTP unreachable!!"); //while (1); } else { Serial.print("Epoch received: "); rtcz.setEpoch(epoch); Serial.println(); } //disconnect WiFi as it's no longer needed WiFi.end(); // Defined in thingProperties.h initProperties(); // Connect to Arduino IoT Cloud ArduinoCloud.begin(ArduinoIoTPreferredConnection); //Get Cloud Info/errors , 0 (only errors) up to 4 setDebugMessageLevel(2); ArduinoCloud.printDebugInfo(); //Wait to get cloud connection to init the carrier while (ArduinoCloud.connected() != 1) { ArduinoCloud.update(); delay(500); } delay(500); CARRIER_CASE = false; carrier.begin(); carrier.display.setRotation(0); delay(1500); // open the file. note that only one file can be open at a time, // so you have to close this one before opening another. SDwritable = false; loopRTC(); String dates = String(month) + String(day); String times = String(hours) + String(minutes); // within 8 characters + 3 charcters filename = dates + times + String(".txt"); myFile = SD.open(filename); if (myFile) { Serial.print("Opening "); Serial.println(filename.c_str()); myFile.println("Year, Month, Day, Hours, Minutes, Seconds, MillisCount, temperature, humidity, pressure, light, r, g, b, Gx, Gy, Gz, Ax, Ay, Az, CO2Grove, temperatureGrove, humidityGrove, batteryVoltage"); myFile.close(); SDwritable = true; } } void loop() { ArduinoCloud.update(); carrier.Buttons.update(); loopRTC(); loopSCD(); temperature = carrier.Env.readTemperature(); humidity = carrier.Env.readHumidity(); pressure = carrier.Pressure.readPressure(); carrier.IMUmodule.readGyroscope(Gx, Gy, Gz); carrier.IMUmodule.readAcceleration(Ax, Ay, Az); batteryVoltage = analogRead(ADC_BATTERY) * 3.3f / 1023.0f / 1.2f * (1.2f + 0.33f); // https://mag.switch-science.com/2021/10/07/arduino-mkr-wifi-1010/ battery = (batteryVoltage - 2.8f) / (4.208f - 2.8f) * 100; //for battery available in % while (!carrier.Light.colorAvailable()) { delay(5); } carrier.Light.readColor(r, g, b, light); if (carrier.Buttons.onTouchDown(TOUCH0)) { carrier.display.fillScreen(ST77XX_WHITE); carrier.display.setTextColor(ST77XX_RED); carrier.display.setTextSize(2); carrier.display.setCursor(20, 80); carrier.display.print("Temp: "); carrier.display.print(temperature); carrier.display.print(" C"); carrier.display.setCursor(20, 120); carrier.display.print("TempGrove: "); carrier.display.print(temperatureGrove); carrier.display.print(" C"); } if (carrier.Buttons.onTouchDown(TOUCH1)) { carrier.display.fillScreen(ST77XX_WHITE); carrier.display.setTextColor(ST77XX_RED); carrier.display.setTextSize(2); carrier.display.setCursor(20, 80); carrier.display.print("Humi: "); carrier.display.print(humidity); carrier.display.print(" %"); carrier.display.setCursor(20, 120); carrier.display.print("HumiGrove: "); carrier.display.print(humidityGrove); carrier.display.print(" %"); } if (carrier.Buttons.onTouchDown(TOUCH2)) { carrier.display.fillScreen(ST77XX_WHITE); carrier.display.setTextColor(ST77XX_RED); carrier.display.setTextSize(2); carrier.display.setCursor(30, 80); carrier.display.print("Light: "); carrier.display.print(light); carrier.display.setCursor(30, 110); carrier.display.print("RGB: "); carrier.display.setCursor(30, 125); carrier.display.print(r); carrier.display.setCursor(30, 140); carrier.display.print(g); carrier.display.setCursor(30, 155); carrier.display.print(b); } if (carrier.Buttons.onTouchDown(TOUCH3)) { carrier.display.fillScreen(ST77XX_WHITE); carrier.display.setTextColor(ST77XX_RED); carrier.display.setTextSize(2); carrier.display.setCursor(30, 80); carrier.display.print("Pressure: "); carrier.display.print(pressure); carrier.display.setCursor(30, 110); carrier.display.print("CO2Grove: "); carrier.display.print(CO2Grove); } if (carrier.Buttons.onTouchDown(TOUCH4)) { carrier.display.fillScreen(ST77XX_WHITE); carrier.display.setTextColor(ST77XX_RED); carrier.display.setCursor(70, 30); carrier.display.print("Gyroscope: "); carrier.display.setCursor(50, 45); carrier.display.print(Gx); carrier.display.setCursor(50, 60); carrier.display.print(Gy); carrier.display.setCursor(50, 75); carrier.display.print(Gz); carrier.display.setCursor(50, 120); carrier.display.print("Accelerometer: "); carrier.display.setCursor(50, 135); carrier.display.print(Ax); carrier.display.setCursor(50, 150); carrier.display.print(Ay); carrier.display.setCursor(50, 165); carrier.display.print(Az); } // if the file opened okay, write to it: myFile = SD.open(filename, FILE_WRITE); if (myFile) { myFile.print(year); myFile.print(","); myFile.print(month); myFile.print(","); myFile.print(day); myFile.print(","); myFile.print(hours); myFile.print(","); myFile.print(minutes); myFile.print(","); myFile.print(seconds); myFile.print(","); myFile.print(millisCount); myFile.print(", "); myFile.print(temperature); myFile.print(","); myFile.print(humidity); myFile.print(","); myFile.print(pressure); myFile.print(","); myFile.print(light); myFile.print(","); myFile.print(r); myFile.print(","); myFile.print(g); myFile.print(","); myFile.print(b); myFile.print(","); myFile.print(Gx); myFile.print(","); myFile.print(Gy); myFile.print(","); myFile.print(Gz); myFile.print(","); myFile.print(Ax); myFile.print(","); myFile.print(Ay); myFile.print(","); myFile.print(Az); myFile.print(","); myFile.print(CO2Grove); myFile.print(","); myFile.print(temperatureGrove); myFile.print(","); myFile.print(humidityGrove); myFile.print(","); myFile.println(batteryVoltage); // close the file: myFile.close(); SDwritable = true; } else { // if the file didn't open, print an error: Serial.print("error opening "); Serial.println(filename.c_str()); SDwritable = false; } if (humidity >= 60 && temperature >= 15) { weather_report = "It is very humid outside"; } else if (temperature >= 15 && light >= 700) { weather_report = "Warm and sunny outside"; } else if (temperature <= 16 && light >= 700) { weather_report = "A little cold, but sunny outside"; } else { weather_report = "Weather is normal"; } } /* Since TemperatureGrove is READ_WRITE variable, onTemperatureGroveChange() is executed every time a new value is received from IoT Cloud. */ void onTemperatureGroveChange() { // Add your code here to act upon TemperatureGrove change }
12月2日追記
Groveセンサーを付けていると、2時間ぐらいでハングアップしてしまいます。まだ、原因不明。
参考文献
[1] 2021年10月7日 スイッチサイエンス "Arduino MKR WiFi 1010 + MKR IoT CarrierでIoTをする" -> バッテリーの電源電圧
[2] GitHub - Seeed-Studio/Seeed_SCD30: carbon dioxide sensor -> SCD30.h, SCD30.cphttps://www.amazon.co.jp/gp/product/B086MN53FX/ref=ppx_yo_dt_b_asin_title_o07_s00?ie=UTF8&psc=1
[3] Grove - CO2 & Temperature & Humidity Sensor (SCD30) - Seeed Wiki
[4] Arduino_MKRIoTCarrier - Arduino Reference
[5] RTCZero - Arduino Reference
[6] はじめてのMKR ZERO (5) RTC - Arduinoクックブック
[7] MKR 1010 WiFi.getTime() returns always zero · Issue #34 · arduino-libraries/WiFiNINA · GitHub -> NTPから時間を拾って調整
[8] ArduinoでIoTにチャレンジ<その4>日付時刻を表示する - Arduinoクックブック
[9] ArduinoでSDメモリカードを読み書きする - なんでも作っちゃう、かも。 -> ArduinoのSDカードのファイルのファイル名の長さは、最大8+3文字まで。FILE_WRITEオプションを付けてopenすると、追記になる。
[10] C言語入門:うるう年判定プログラム:Geekなぺーじ
JINS MEME LoggerのデータをWebSocketServerを立てて取得してみる
新型JINS MEMEが安くておしゃれになっていたので、買ってみました。
JINS MEME、SDKはなくとも WebSocket 経由でリアルタイムにデータを流すアプリは提供されるので、PC連携は困らなそう https://t.co/aUaV7jGS1J
— ミクミンP/Kazuhiro Sasao (@ksasao) 2021年10月6日
ということを、事前に見かけていたので簡単にできるかと思ってやってみたら、本当に簡単にリアルタイムでデータが拾えたので、そのご報告です。
準備
1.新型JINS MEMEを買います。
フレーム形状は4種類、色は2種類、レンズはいろいろから選べます。2.スマホを用意して、JINS MEME Loggerアプリ(¥120 iphone版、Androidは知らず)を購入します。
「JINS MEME Logger」をApp Storeで
JINS MEME Logger - Apps on Google Play
3.スマホとWebSocketServerを立てるPCがつながるローカルのWIFIルータを立てて、それぞれ繋ぎます。
4.WebSocketServerを立てるPCのIPアドレスを調べます。Windowsならcmd.exeを立ち上げてipconfigなど。IPアドレスはメモしておきます。また、データを送るのに使うポートがファイアウォールなどでふさがっていないか確認しておきます。
5.スマホアプリJINS MEME Loggerを起動して、JINS MEMEを接続します。接続後、アプリ中の「ロガー」や「グラフ」上でデータが取れているかどうかを確認して、うまくつながっていたら「設定」を開きます。
「設定」から「WebSocketクライアント」を「追加する」して、適当な「設定名」、「ip address」、「port」、「data type」を埋めたり選択します。
例.
設定名: MEME01
ip address: 192.168.10.17 (WebSocketServerのPCのIPアドレス)
port: 5001 (適度な範囲で適当に)
data_type: currentData (など。ロガーに詳細が出ているので、ほしいものを選ぶ。)
6.PCにPythonを入れて、websocket-serverのライブラリもpipで入れて、コマンドプロンプトからサーバーを実行。
7.スマホアプリの「設定」→「WebSocketクライアント」から登録してある設定を有効にする。うまくつながれば✓のマークが出てデータ送信が始まる。失敗すると×が出て止まる。
サーバー実行
#!/usr/bin/env python3 # reference: https://xp-cloud.jp/blog/2020/09/15/7564/ # pip install git+https://github.com/Pithikos/python-websocket-server from websocket_server import WebsocketServer import time import json import pprint def start(): # Connection event def new_client(client, server): print('New client {}:{} has joined.'.format(client['address'][0], client['address'][1])) # Disconnection event def client_left(client, server): print('Client {}:{} has left.'.format(client['address'][0], client['address'][1])) # Message receive event def message_received(client, server, message): # print(message) d = json.loads(message) # pprint.pprint(d, width=40) # currentData accX = d.get('accX') accY = d.get('accY') accZ = d.get('accZ') blinkSpeed = d.get('blinkSpeed') blinkStrength = d.get('blinkStrength') eyeMoveDown = d.get('eyeMoveDown') eyeMoveLeft = d.get('eyeMoveLeft') eyeMoveRight = d.get('eyeMoveRight') eyeMoveUp = d.get('eyeMoveUp') fitError = d.get('fitError') noiseStatus = d.get('noiseStatus') pitch = d.get('pitch') powerLeft = d.get('powerLeft') roll = d.get('roll') sequenceNumber = d.get('sequenceNumber') walking = d.get('walking') yaw = d.get('yaw') # debug print('accX:', accX, 'accY:', accY, 'accZ:', accZ) print('blinkSpeed:', blinkSpeed, 'blinkStrength:', blinkStrength) print('eyeMoveDown:', eyeMoveDown, 'eyeMoveLeft:', eyeMoveLeft, 'eyeMoveRight:', eyeMoveRight, 'eyeMoveLeft:', eyeMoveLeft, 'eyeMoveUp', eyeMoveUp) print('fitError:', fitError, 'noiseStatus:', noiseStatus) print('pitch:', pitch, 'roll:', roll, 'yaw:', yaw) print('powerLeft:', powerLeft, 'sequenceNumber:', sequenceNumber, 'walking:', walking) # 5001番ポートでサーバーを立ち上げる server = WebsocketServer(port=5001, host='192.168.10.17') # イベントで使うメソッドの設定 server.set_fn_new_client(new_client) server.set_fn_client_left(client_left) server.set_fn_message_received(message_received) # 実行 server.run_forever() if __name__ == "__main__": start()
実行すると、こんな感じ。
開発されたい方向け。このコードが良くまとまっていて使いやすそうです。
JINS MEMEかなり詳細にデータ取れるなー👀
— 高橋 かずひと@孫請級プログラマー🦔 (@KzhtTkhs) 2021年10月18日
取れるデータ列挙してたら、こんな時間になってしまった、、、https://t.co/D25r1EfJkz
Google Mapで日本の「熊のオブジェ」を探しています。
街中の熊のオブジェをご存じでしたら、教えてください。
※絵にかかれただけの看板や、野生ではない生の熊は不要です。
2. 展望レストランとかち亭
goo.gl
4. 上原仲通り商店街
goo.gl
5. 熊のオブジェ
goo.gl
6. TED HYBER(テッド・イベール) a.k.a みどりのくまさん
goo.gl
7. 網元感動市場かに御殿
goo.gl
10. 熊トイレ
goo.gl
12. 嵐山 りらっくま茶房
goo.gl
14. とままえだベアー
goo.gl
15. 金町公園
goo.gl
17. 奇岩親子熊岩
goo.gl
18. パンくま
goo.gl
19. 焼鳥くまちゃん
goo.gl
21. くまぱんの屋根看板
goo.gl
22. 森のくまさん 米子店
goo.gl
23. 石窯パン工房森のくまさん 松江店
goo.gl
24. パンウルス 店内の壁に二頭
goo.gl
25. お食事とご宴会の店 くまげら
goo.gl
26. くまのがっこうジャッキーのゆめ
goo.gl
29. cafe bear
goo.gl
30. ベーグルカフェクマナカ
goo.gl
31. 黒沼公園
goo.gl
32.
goo.gl
33.
goo.gl
34.
goo.gl
35. のぼりべつクマ牧場
goo.gl
36. 熊の穴
goo.gl
38. 大矢相互不動産
goo.gl
41. 光来福
goo.gl
以下、教えてもらったやつ
101. ぢっと手を見る
maps.app.goo.gl
102. FUJIMI CAFE
goo.gl
104. テディベアキングダム
goo.gl
105. 房前公園
goo.gl
106. 北海道博物館
goo.gl
107. ウポポイ (民族共生象徴空間)
goo.gl
111. くまくま園
maps.app.goo.gl
112. LINE FRIENDS FLAGSHIP STORE HARAJUKU
maps.app.goo.gl
113. わずん
maps.app.goo.gl
114. 三毛別ヒグマ事件復元地
maps.app.goo.gl
115. 小樽運河食堂
maps.app.goo.gl
116. 昭和新山熊牧場
maps.app.goo.gl
118. 北海道大学総合博物館 2Fへもどうぞ
goo.gl
120.
maps.app.goo.gl
121. クマカフェ
goo.gl
122. 上野動物園
maps.app.goo.gl
123. 越中國一之宮雄山神社 芦峅中宮祈願殿
maps.app.goo.gl
124. サクラマチクマモト
maps.app.goo.gl
125. 東京中央郵便局
maps.app.goo.gl
126. オリミネベーカーズ勝どき店
goo.gl
127. 阿寒湖アイヌコタン
maps.app.goo.gl
128. 質蔵屋
goo.gl
201. サホロリゾート ベア・マウンテン
goo.gl
今日の本題
ハリオの新型ドリッパーが、一気にお湯を注いでも勝手に上手い具合に調整してくれて、とても良いらしい。
普通に単体で頼んじゃったけど、限定の「お試しキャンペーン」セットにしておけばよかった。
ROS用の小型PCが欲しいので、Intel NUC11PAKi5にUbuntuとROSを入れてみる
無駄に各種センサーを買い集めるのが趣味なので、ベロダインやらLavoxやらHokuyoやらの未使用のLidarが部屋に転がっていて、もったいないお化けが出そうな状態が続いています。
この問題を解決するために、せめて移動ロボットに搭載可能な小型PCを組んで、ROSでこれらのセンサーをすぐに動かせるようにしておきたいと思います。
結論としては、この記事では、Intel NUC11PAKi5でUbuntu20.10とROS Noeticが上手く動いたよー、ということを紹介します。
Intel NUC11を購入
世の中の流れを考えれば、Ryzen 4650Gあたりを積んだベアボーンキットを買ってくるのが、きっと正解なのですが、運悪くAKIBAWatchのこの提灯記事を読んで適当にぽちってしまいました。
akiba-pc.watch.impress.co.jp
Intel NUC11PAKi5
ark.intel.com
買ってから気が付いたのですが、本当に欲しかったのは、「NUC11TNKi5」でした。
Intel NUCは、Intelの製品紹介のページに写真は無いし、似た名前の製品が多すぎるのよなー。
note.com
現在の半導体危機につき、買ってしまったものは仕方ないので、「NUC11PAKi5」を使っていくことにします。
メモリとM2SSDを購入
SODIMM DDR4-3200 32GByte×2
Amazon | Crucial 32GBシングルDDR4 3200 MT/s CL22 SODIMMメモリモデルCT32G4SFD832A | Crucial(クルーシャル) | メモリ 通販
NVMe M2 2280 Gen4 1TB
Amazon | CFD販売 SSD 1TB 内蔵 M.2-2280(MVMe) 接続 PCIe Gen4x4 CFD PG3VNDシリーズ CSSD-M2B1TPG3VND | CFD販売 | 内蔵SSD 通販
とりあえず多けりゃ良いだろ精神で、対応規格のもので、入手可能なメモリ類を手配しました。
Ubuntuをインストール
Ubuntuに入れるROSのバージョンは、Ubuntuのバージョンに強く拘束されていて、基本的にLTSパッケージにしかapt-getで入れられるような便利なインストール方法は対応していません。
そこで、希望のROSバージョンに合わせてUbuntuを入れていくという試行錯誤をしました。
Ubuntu 18.04LTS
まず、本当に使いたいのはROS Melodicなので、対応しているUbuntu18.04LTSをインストールしました。
結果は、Ubuntu本体のインストールは可能ですが、Intel Iris Xe GPUに対応したドライバがどうしても見つけられませんでした。
仕方ないので、ここからapt-get dist-upgradeしようとしたら、クラッシュしてOSがつぶれました。
Ubuntu 20.04LTS
Melodicが良いのは、参考にしたい論文が使っていたから、とかその程度の理由なので、新しいバージョンのROS noeticでも動いてくれれば問題ありません。
そこで、Ubuntu20.04LTSをインストールしてみましたが、18.04LTSと同様に、インストールは可能だが、グラフィックチップのドライバが見つからない、という問題が出ました。
そもそもインストール画面から解像度が合っていないので、画面が見切れてしまい、インストール作業にも難儀します。多少もがいてみましたが、解決方法が見つからないので諦めました。
ROS Noeticをインストール
昔のバージョンのROSだと、ちょっとリポジトリの登録をごにょごにょするだけで、LTSじゃなくても簡単にインストールできた記憶が有ったので、今回もそのつもりでいたのですが、どうにもこうにもお手軽な方法では入ってくれそうもありません。
失敗報告を書いている人もいますね。
qiita.com
ただ、幸いなことにROSはオープンソースなので、自分でコンパイルすることができます。ひたすら面倒くさいですが、動くはずです。ということで、やってみました。結論から言うと、入るし動きます。
まず、参考にするべきページはこちらです。
wiki.ros.org
指示に従って、
$ sudo apt update
$ sudo apt remove rosdep rospkg rosinstall vcstools
$ sudo apt autoremove$ sudo apt-get install python3-rosdep python3-rosinstall-generator python3-vcstool build-essential
$ sudo rosdep init
$ rosdep update
$ mkdir ~/ros_catkin_ws
$ cd ~/ros_catkin_ws
ここまでは、すんなりいくかと思います。(ただ、自分は途中で失敗して試行錯誤して、消したり入れなおしたりしているので、本当にすんなりいくかの自信はないです・・・)
つぎに、マニュアルではdesktopパッケージを入れるように指示していますが、これだとpclやらgazeboやらが入ってくれません。そこで、desktopパッケージの代わりにdesktop_fullパッケージを入れるように書き換えます。
$ rosinstall_generator desktop_full --rosdistro noetic --deps --tar > noetic-desktop_full.rosinstall
$ mkdir ./src
$ vcs import --input noetic-desktop_full.rosinstall ./src
次に、依存関係のあるライブラリをインストールするのですが、ubuntuのバージョンをfocal(20.04LTS)に偽装するために、--os=ubuntu:focalを付けます。
$ rosdep install --from-paths ./src --ignore-packages-from-source --rosdistro noetic --os=ubuntu:focal -y
ここで、上手く入ってくれれば良いのですが、先に入っているライブラリやらなんやらで上手く動かないことが有るようです。少なくとも、最初に試した時はダメでした。
そんな時は、apt removeでros関係のライブラリを片っ端からアンインストールして、最初から再インストールすると上手く行くようです、知らんけど。
historyをとってあるので、あとで時間が有ったら整理して確認します。
適当に入れたライブラリ群。多分、間違いや無駄が多いです。あくまで、参考まで。
409 sudo apt install gazebo
412 sudo apt reinstall python3-rospkg
417 sudo apt reinstall python3-ros
419 sudo apt reinstall python3-catkin-pkg
422 sudo apt reinstall python3-pkg-resources
425 sudo apt install libgazebo-dev
436 sudo apt reinstall libgazebo11
439 sudo apt reinstall python3-catkin
441 sudo apt reinstall python3-rospkg
447 sudo apt install libdart-all-dev
450 sudo apt install libdart-external-odelcpsolver-dev
ROSをビルドします。ros_catkin_ws/install_isolatedがROSのインストール先になります。
$ ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release
次のコマンドを実行するか、~/.bashrcの一番最後の行に追加しておきます。
$ source ~/ros_catkin_ws/install_isolated/setup.bash
rosdepで見かけ上、依存ライブラリのインストールが上手く行っていても実際に進めてみると、いくつか引っかかるライブラリが出てくるかもしれません。
ただ、そのほとんどは、sudo apt install [library-name]-devをその都度してやれば、そのうち先に進めます。
普通のcatkin_wsを作って、velodyneのドライバーをインストール
471 mkdir catkin_ws
473 cd catkin_ws/
487 mkdir src
489 cd src
490 git clone https://github.com/ros-drivers/velodyne
491 ls
492 cd ..
493 catkin_make
494 sudo apt search pcap
495 sudo apt install libpcap-dev
496 catkin_make
次のコマンドを実行するか、~/.bashrcの一番最後の行に追加しておきます。
source ~/catkin_ws/devel/setup.bash
今日の本題
本格クロカン4駆ラジコンのロッククローラが欲しい。
アキシャルSCX10IIIが最強とのことなのですが、コロナのせいでラジコンが人気過ぎて在庫が見つかりません。
駆動モータはESC内蔵のこれがよさそう。1200KVと1800KVでどのくらい実質的にトルクが違うのか、気になるところ。
amzn.to
サーボモータはピンキリだけど、DCブラシレスにこだわってみよう。
Amazon | Savox Sb-2270sg High Voltage Brushless Digital Servo (.12s/13130ml-in) Sb2270sg | ラジコン・ドローン 通販
(続く)
Ubuntu18.04LTSで、Logitech G29 Steering Wheel Controllerを動かそうとして、はまった点2点のメモ
www.codetd.com
すでにROS melodicのインストールは済んでいたので、こちらのサイトを参考に超簡単じゃーんとか思いながら
sudo apt-get install ros-melodic-pacmod*
sudo apt-get install ros-melodic-joy*
をして、必要なドライバ類をインストールしました。
AXISが反応しない問題
jstestやjstest-gtkで見てみても、上記サイトのlaunchファイルを作ってTopicを観察したりしても、
ボタンは反応するけど、ステアリングやアクセルなどの軸が反応しない。
という問題に遭遇しました。
Ubuntuのカーネルをhweの最新のものにしてみたり、xboxdrvを試してみたり、xserverのjoystickドライバを入れてみたり、
あれこれ試行錯誤しようとしてみたのの上手く行かないので、半日ぐらい途方に暮れていたら、
G29ステアリングの上に知らない変なボタンが有ることに気が付きました。
左右の選択式スイッチになっているコレ
を試しに、逆にしてみると動きました!後から調べてみると、これはPS3モードで動かすかPS4モードで動かすかの切り替えスイッチだそうです。
マニュアルを読めば書いてあったのかも知らんので、ちゃんと読まないとだめですね。
ステアリングやクラッチペダルでマウスカーソルが動いてしまう問題
マウスカーソルは、マウスで動かすことができるのですが、ほっておくとカーソルが右や左に流れて言ってしまいます。
調べてみると、ステアリングホイールに反応しているようです。
これも原因が分からずに途方に暮れていたら、xserverのjoystickドライバをインストールしていたことを思い出しました。
多分、いらん子なので
sudo apt-get remove xserver-xorg-input-joystick
で排除してから、再起動してG29をjstestで確認すると、無事に動くことが確認できました!ちゃんと、ステアリングやペダルの軸やボタンだけでなく、シフトレバーもボタンとして認識してくれます。
今日の本題 THX-AAAが欲しい
フィードフォワードで謎補正を掛けることによって脅威の低歪み率を実現するアンプ技術THX-AAAを使ったデバイスが各社から出ています。
Benchmark社
一番良さそうなのは、アメリカのBenchmark社が出している製品、ヘッドホンアンプHPA4やパワーアンプAHB2です。
ただし難点があって、各40万円以上と価格が異様に高いことです。エミライが代理店になので修理保証は安心できるのは良いですが、いかんせん税率高すぎませんかね。。。
www.benchmarkmedia.jp
日本製
日本製が良いのですが、残念ながら該当製品は見つかりませんでした。
中華製 Fiio, S.M.S.L, Drop
中華アンプメーカーから良さげな製品がいくつか出ています。3社見つかり、FiioとS.M.S.LとDropです。
Fiioはもう完全にHiFiヘッドホン界でも市民権を得た処か、AKやソニーに比肩するレベルのいい製品を作っていますね。
Amazon | 【国内正規品1年保証】FiiO Q3 DSD512 | 768K/32ビット AK4462DAC THX AAAアンプテクノロジー 携帯電話&PC用 (2.5/3.5/4.4mm) 出力付き | Fiio | ヘッドホンアンプ
このポタアンとか値段も安いしとても気になります。工場を燃やされてしまったAKMのDACを使っているのでいつまで製品供給が続くかは気がかりです。
安いアンプに興味は無かったのでS.M.S.Lは今回調べるまで知らないメーカーだったのですが、Toppingのように安くて使い勝手の良さそうなアンプ製品群を一杯ラインナップしているようです。
ヘッドホンアンプですが、プリアンプにもなるコレとか良さそうです。回路はメーカーの評価用デザインをそのまま使っているように見えますので、余計なことをしてなさそうなのも魅力です。
Amazon | S.M.S.L SP400 ヘッドホンアンプ フルバランス THX AAA-888アンプ回路 XLRバランス出力・入力端子付き プリ HIFI アンプ | S.M.S.L | ヘッドホンアンプ
Dropはアマゾンでの取り扱いが無いようなので、入手難なのが問題ですが、良さげなヘッドホンアンプを出しています。
Drop + THX AAA™ 789 Linear Amplifier | Price & Reviews | Drop
本家THX
THX-AAAのチップにもいくつかのランクがあり、S/N, THDに-10db単位の違いが有るようです。
www.thx.com
どれも興味あるけどピンとこないなー、とぼやぼやしてたら、本家のTHXからTHX-AAA搭載ポータブルヘッドホンDACアンプが2万円ぐらいで販売されるとのニュースがありました。
しばらく、これかな!発売待ち!
www.phileweb.com
Adobe CC学割ライセンス自動更新の罠の回避方法
Amazon Creative Cloudの学割ライセンス、1年目はとてもお安いのですが、自動更新にしておくと2年目以降は3000円/月ぐらい(39,336 円 / 年)に値上がりしてしまいます。
この出費をできるだけ抑えるための方法として、パッケージ販売されているライセンスを購入して、自分のアカウントに追加しておく、という方法が有ります。
具体的には、
これを買ってください。1年版でも、2年版でも、3年版でも、単価は変わらないようです。
2021年4月2日現在の情報として、
【アドビ製品がお買い得】セール開催中:4/9(金) 23:59まで
とのことで、5%ほどお安いようです。
ライセンス更新時期以前なら、先に購入して登録しておくことで、ライセンス適用期間が積み増しされるようなので安心です。
ご参考まで。
本日の買い物メモ
カラーチャート
https://amzn.to/2PjlSu5
自作系四足歩行ロボットが最近熱いようなので情報収集。2
ちゃんと整理する時間も余裕もないから、差分を並べてみて楽しむだけ。
見かけた自作系四足歩行ロボット
This is no ordinary #Robot; Its an ANYmal
— Ronald van Loon (@Ronald_vanLoon) 2020年12月13日
by @anybotics#AI #IoT #BigData #MachineLearning #MI #Analytics #Robotics #DigitalTransformation #DL #Automation #Innovation
Cc: @timothy_hughes @ogrisel @7wdata pic.twitter.com/Mo5iwia4SZEZH ANYmal
Boston Dynamics Spot Robot powered by Autowarehttps://t.co/XTukMV64Ub
— Shinpei Kato (加藤真平) (@ShinpeiKato) 2021年1月1日
Boston Dynamics Spotと自動走行のAutoware
現在完璧な組立品を見ながらニヤニヤ、シメシメする工程を消化中 pic.twitter.com/49PUjIxUPN
— ものづくりバカ (@mono_baka) 2020年12月6日
小型四脚ロボットで段差に前脚を載せる動きだけを作り直した。工夫すれば、爪先をもう少し高く上げられる pic.twitter.com/jwC0XbOv6M
— tanaka (@h6ichi) 2020年12月29日
なんか勢いでポチって作っちまった pic.twitter.com/BacZRj7Je0
— Danish Ai (@DanishAi8) 2020年12月29日
Quadruped Yuki pic.twitter.com/tPrXC6CJ57
— Lethic (@lethic1) 2020年12月27日— Lethic (@lethic1) 2020年12月8日Quadruped Yuki baby steps pic.twitter.com/xOE9r0Fnt0
— Lethic (@lethic1) 2020年12月8日Quadruped Yuki IK test pic.twitter.com/Vt3z6jsVHM
— Lethic (@lethic1) 2020年12月8日YUKI. 見るたび進化していて楽しい。
— Shuang Peng (@PSrobotics) 2020年12月6日
— Every (@ohaginia218) 2020年12月5日
かわいいねえ😊 pic.twitter.com/WSLuUPnDsE
— inahoi (@inahoio) 2020年12月26日
犬ロボにD435を搭載するための頭を作成。ほぼパクりだが。頭から体へのブリッジ部は足を自由に動かす制約もあるから幅を太くできない。他の犬ロボも画像で見る限り、ここは幅が狭めになっていて衝撃時にすぐ壊れそうな雰囲気。左右の足の間隔を狭くすると頭部が配置しずらくなるという学びを得た。 pic.twitter.com/hXnPzElTgA
— higrademe (@EL2031watson) 2020年12月25日
この動画の後半でも階段昇降やってました。https://t.co/4DmycOM4JS
— Shuuji Kajita (@s_kajita) 2020年12月24日🤶Santa Claus may not be able to come, but Christmas gifts will still be delivered on time🎄 pic.twitter.com/t1RqKK6Qa0
— Unitree Robotics (@UnitreeRobotics) 2020年12月24日Newton stood at 45.6°🙃 pic.twitter.com/HTJxIXLZ1b
— Unitree Robotics (@UnitreeRobotics) 2020年12月25日
A1とは違うの?
すごい。
— 光輝@ HologramableSUI (@koukiwf) 2020年12月18日
人って氷でこけるとき、二回滑るんだけど
(最初に滑ってバランス崩して逆の足でバランス取ろうとしてその足も滑ると転ぶ)
こいつはそれでも転ばないように配置してる凄い。 https://t.co/IBqBmnEaSD
— Tomato (@tomato5356) 2020年12月22日
メカ🦌 pic.twitter.com/2AR3uH1VHz
— パンジャン (@panzyan) 2020年12月24日
巧みな機械設計によって動く小型二足歩行ロボット
— bouncy / バウンシー (@bouncy_news) 2017年6月4日
Courtesy of @IHMCRobotics https://t.co/ktzfngcVB7#機械 #小型 #二足歩行 #ロボット pic.twitter.com/2NKVsiy5iw
2足だけど4足っぽい
Freeze! 👉😳https://t.co/vcOk03ymAA#opencat #nybble pic.twitter.com/xOmghFbqpB
— OpenCat (@PetoiCamp) 2020年10月17日
すごーくなんだか可愛いロボットにアップデート!pic.twitter.com/q1BajtFOEC
— 黒ラブ教授(科学コミュニケーター、理系文系どっちも研究する人) (@kurorabukyouzyu) 2020年10月17日
I liked a @YouTube video https://t.co/QADEknfILV openDog Dog Robot #1, Planning and Explanation | XRobots
— ODrive Robotics (@ODriveRobotics) 2018年6月5日
まぁこのロボットに関しては、僕に言わせるとfour limbedロボット(locomotion とmanipulations両方できる)なので、locomotion全フリのロボットと比較するのはちょっと違うとは思うけど…。locomotionに全振りしてもきついとは思うけど苦笑
— Yuki (@Yuki_Doradora) 2020年10月28日
二脚でボディを支持して、残り二脚で物を置きます。 pic.twitter.com/X3wp4B7Q5Z
四脚ロボでよくある倒れないやつ
— でべ (@devemin) 2020年10月7日
やってみた!
仕事帰って来て速攻やろうと思ってP制御だけでやってみたけど、意外にペットボトル倒れなかったw
わたこさんの進捗見てテンション上がってるぞおおw
俺もどんどんやるぞおおお pic.twitter.com/wb8jHHU01F
— inahoi (@inahoio) 2020年10月2日
逆運動学を完全理解したらしい🎉 pic.twitter.com/oDSoO4mK5h
— たまごっち (@tamagotchi201) 2020年10月1日
【お知らせ】
— 東京大学RoboTech (@UTRoboTech) 2020年9月19日
IEEE SpectrumのVideo Fridayにて、学ロボFESTIVALのためにアップロードした動画「① 一連動作」が取り上げられました!https://t.co/rMjwKndlJt
♾🙆♂️ pic.twitter.com/2ybHq9LoP9
— inahoi (@inahoio) 2020年9月18日
とりあえず,ハードが完成しました。名前は「tapperX」です。#tapperX pic.twitter.com/jiZtH8kco1
— Omuni (@Omuni_999) 2020年9月13日
好き
V60 Q-UGV v4: Blind-Mode Security Trials https://t.co/TEEnnlKAS4 @YouTubeより
— 森山和道/ライター、書評屋 (@kmoriyama) 2020年9月11日
RT
— 森山和道/ライター、書評屋 (@kmoriyama) 2020年8月24日
犬型ロボ「Spot」は買えずとも「AlphaDog」は最安60万円からあるぞ https://t.co/ASkzfMnCJi
Quadruped Robots Can Climb Ladders Now https://t.co/jj7nxATbzq
— Shuuji Kajita (@s_kajita) 2020年7月14日
maker faire tokyoの出展承認いただきましたーー!!!
— inahoi (@inahoio) 2020年7月11日
ポンポンはねる4脚ロボット「kondo-san」で出します!#MFTokyo2020 pic.twitter.com/1KYME4Sv8P
実機で逆運動学#みないでしばこ pic.twitter.com/21zBre7BHa
— 包装紙 (@hou_sou_shi) 2020年6月22日
機構・センサなど、要素部品
磁石を使い非接触で動く歯車賢い。摩擦、振動がなく静かな上にエネルギーの損失も無い。 pic.twitter.com/cg9Srb8NvF
— ロアネア@最多情報源バズニュース (@roaneatan) 2021年1月5日(無)歯車作った。磁石の極同士の噛み合いだから、通常の歯車ではできない傘歯車からの平歯車の組み換え可能❗#3Dプリンター #歯車 pic.twitter.com/bJeOhTlaHT
— アクベンス (@eaFfd32sY4vLuNS) 2020年12月15日磁石を使った変速機。効率とか、ノイズとか、ちゃんと研究してみたい。
二足ロボ、今回の動画はちょっと面白いやも。
— わたこ (@WatakoLab) 2021年1月5日
前回作った、感圧センサ(FSR)付き足裏の実験をば。https://t.co/HfDaF4NmTl
静的な状態であれば、そこそこ重心位置を割り出せていそう?
とりあえず両足分作って、動的な状態でどんな出力になるかも見てみる予定です。 pic.twitter.com/ZneGiY2WLw
すごく魅力的な足裏センサ。二足。
ぷらぎあ on Twitter: "イグスのこれすごい
https://t.co/eUXaaXsrWB
https://t.co/tAKegs1xEq… "
PWM サーボ処理乗っ取り試作と平行で、タイミングベルト機構試すため、モノタロウでこちらのものと近いベルト注文してみた
— でべ (@devemin) 2020年12月18日
今は4脚ロボの各脚を、KRS-2552HV サーボ3個でやっているけど、
そのうち試作で、上2個をPWMハイトルク・スピードサーボの改造版にし、ヒザをベルト駆動にするのやってみたい https://t.co/uVPyQpSfw9 pic.twitter.com/i8YgAdmLH32:10~から、めちゃ飛んでますwhttps://t.co/qGRREVYg5S
— でべ (@devemin) 2020年8月27日Open Dynamic Robot Initiative
Tendon based reducer for small quadruped model. pic.twitter.com/fBHQr6fua2
— Shuang Peng (@PSrobotics) 2020年12月13日
かっこいいだろ。 pic.twitter.com/edHnLxyVew
— Every (@ohaginia218) 2020年12月2日
— inahoi (@inahoio) 2020年11月23日
I liked a @YouTube video https://t.co/RNdG2uKYOm 3D Printed Brushless Cycloidal Actuator
— ODrive Robotics (@ODriveRobotics) 2018年6月4日
模型⽤小型モーターで⼒触覚を伝えるICチップ「AbcCore」、リアルハプティクスを適用した装置の構築へ https://t.co/mnn02f1Hdx
— fabcross (@fabcrossjp) 2020年10月16日
ElaStick: A Handheld Variable Stiffness Display for Rendering Dynamic Haptic Response of Flexible Object #UIST2020 #VR pic.twitter.com/Go5ZMfLB25
— HCI Research (@HCI_Research) 2020年10月12日
こちらのオープンソース四脚はタイミングベルトアクチュエータぽいhttps://t.co/m5wFGawOPc
— でべ (@devemin) 2020年10月7日
足首の長穴減速を本導入。減速比1:1で設定。踝ロール軸はは2500で長穴。踝ピッチ軸は幅の都合で4034のまま長穴。分解性と配線取り回しを見直し。足の長さは組み換えで2段階に調整できるようにした。トリム用簡易ゲージもフレーム上にマーキング。 pic.twitter.com/JP8IPAnsak
— 二名川 (@Ninagawa123) 2020年10月2日
サーボモーターの位置を変えて改良した足 pic.twitter.com/yZ013QFYQB
— なつたろう (@n_72taro) 2020年10月2日
Serenadeusの脚の動画です。
— せんこー@SERENA Lab (@senkou_777) 2020年9月22日
自分でもよく出来たんじゃないかな、と思うのですが実際に動かしてみると不満に思うところも出てくるものです…
今回はスケジューリングがタイトすぎたので、今日から改良のための設計を始めようと思います。頑張ります。 pic.twitter.com/ywsKR4SiV3
2足だけどカッコイイ
ソフトウェア・シミュレータ等
別のツールの使用例
— でべ (@devemin) 2021年1月3日
イナーシャも
Fusion360で描いたロボットモデルをROSのURDF形式に変換する https://t.co/gDxIPLXO2m #Qiitaあああああ
— でべ (@devemin) 2020年12月30日
Fusion360、重心とイナーシャを自動で求めてくれるのか!
URDF書くのに、すご便利https://t.co/9N69ouCnMx
Fusion360からURDF
Normalising Flowを用いた最初のモーション生成手法。特にGlow [Kingma+18] の構造を用いており、更にLSTMを組み込むことで質を向上させている。モーションの種類やスケルトン構造に特段仮定をおかない。確率的。良さそう。
— 小山 裕己 | Yuki Koyama (@bravery_) 2020年12月30日
MoGlow: Probabilistic ... [SIGGRAPH Asia 2020]https://t.co/QMQRDQNva3
標準的歩行を、自作ロボに適用してみました。
— わたこ (@WatakoLab) 2020年12月25日
(ピッチ関節のみ)
人体骨格の関節角を、四節リンク用に計算しなおして適用しています。(地味に変換に苦労した…)
四節リンクの特異点を通過しているので、もうひと工夫必要ですが…。 pic.twitter.com/sHXDPyPONa二足歩行ロボの足の機構検討をば。
— わたこ (@WatakoLab) 2020年12月17日
これで膝関節角は歩行できる程度には速度だせるはず。
また、直立時の過伸展による、サーボ電力削減案も合わせて入れてみたよ。 pic.twitter.com/tWaemFh2Os
2足の綺麗な歩行シミュレーション。まだ軌道だけかな?
それぞれのアクチュエータの制御周期が異なる環境での強化学習。これは重要だけどあまり研究されてなかったトピックだと思う。どういう実験するんだろうと思ったらMuJoCoの各関節の制御周期変えてて面白かった。人間もそうなのだろうか?https://t.co/iXr9YM8RXX pic.twitter.com/6mfuqjm4Sw
— Kei Ohta (@ohtake_i) 2020年12月11日
強化学習でここまでいけるとは。すげーhttps://t.co/pNzhtf1fe0
— OTL (小倉崇) @Smile Robotics スマイルロボティクス (@OTL) 2020年10月22日
強化学習でラフテライン
You can now run 7 quadrupedal robots in Gazebo
— Juan Miguel Jimeno (@joemeno) 2020年9月18日
From left to right:
Open Quadruped
Champ
Mini Cheetah
OpenDogV2
Aliengo
Spot
Anymal#goROS pic.twitter.com/NzBu6hyYF8
あれって #歩行現象 の原理そのものなんじゃね?
— 森 大志 (@mori0091) 2020年7月16日
つまり、動物が歩く時、四肢は「(主として)自律的に間欠動作している」のであって、「脳神経系による中央集権的な制御を主とする考え方は間違い」なんじゃないかな?
要約:考えなくても歩けるんだよ
(おわり)https://t.co/jcvVJEWzFl#Algodoo #機構学 #ロボット #歩行現象 #準受動歩行
— 森 大志 (@mori0091) 2020年7月8日
このモデルに脳は無い
Central Pattern Generator (CPG) も無い
時を刻むクロック信号すら無い
四肢の関節はそれぞれ独立して自律的に動いている
四肢は体や床との相互作用を通じて互いに影響し合い、
その結果(受動的に)歩容が変化している pic.twitter.com/ZUvrM6c4a9
その他
EPFL、動物の動きをマーカーレスでリアルタイムにモーションキャプチャする技術! | Techable(テッカブル) https://t.co/QFXX2D9PVj #CV #DL #brain
— Alain.M (@a23m384) 2020年12月21日
おー、カーナビのデッドレコニング! https://t.co/hB9zs51kSy
— からあげ (@karaage0703) 2020年12月31日先日教えてもらった「アリは歩数で移動距離を把握している」って研究面白い。
— 郡司芽久(キリン研究者) (@AnatomyGiraffe) 2020年12月30日
行きは普通の足・帰りは下駄を履かせた長い足(図真ん中)にすると巣を通りすぎちゃって、行きも帰りも下駄を履かせた長い足だとちゃんと巣に戻れるって、美しい結果。足を短くする(図左)と巣より手前で巣を探すらしい。 pic.twitter.com/MCuBDPpVVq
アリは歩数で移動距離を把握している
RT
— 森山和道/ライター、書評屋 (@kmoriyama) 2020年7月17日
ワシントン大学が「昆虫用GoPro」を開発。虫が背負うロボットカメラ https://t.co/Ou9HKOVaoS @engadgetjpより
ネコ科動物のカラカル(学名:カラカル・カラカル)は夜行性で、視力だけでなく聴力も非常に優れています。耳には20もの筋肉が備わっており、それらを自在に動かして獲物のかすかな物音を察知し、正確な位置を特定します。pic.twitter.com/DuwXL408TW
— エピネシス (@epinesis) 2020年10月8日
猫の障害物回避能力、すさまじいな。
— Shuuji Kajita (@s_kajita) 2020年7月22日
ロボットの歩行軌道計画は、このレベルにはまったく達していない。 #ロボット工学の未解決問題 https://t.co/rzVrFJ9IzX
8月にツイートした75mmのガチャガチャカプセルに仕込んだ目のメカ。
— t2c_okuyama (特殊造形工房A-L-C) (@OkuyamaT2c) 2020年10月8日
カプセルから取り出すとこんな感じ。#アニマトロニクス#animatronics#eyeballmechanism pic.twitter.com/mgJk3jFTSd裏から見るとこんな感じ pic.twitter.com/pBZUnNVhHL
— t2c_okuyama (特殊造形工房A-L-C) (@OkuyamaT2c) 2020年10月8日Precise Positioning and Control featuring Titan™ Integrated Servo Motors. Visit the Overview YouTube channel to see more of our positioning solutions in action 🎥 https://t.co/bGcGvci3BM #bldc #motioncontrol #madeinbritain pic.twitter.com/RoIkpi0EuP
— Overviewltd (@overviewltd) 2020年8月18日先日の3Dプリントしたまばたきメカの義眼を
— t2c_okuyama (特殊造形工房A-L-C) (@OkuyamaT2c) 2020年7月22日
レンズの凸のあるヤツに交換。
何でも良いから皮膚付けたくなって
5mm厚のウレタンに切り込みを入れただけの雑な目蓋😅
これはこれで面白い😊
気が済んだからそろそろモルに戻ろう。#animatronics #blinkmechanical#アニマトロニクス#3Dプリント pic.twitter.com/3DStuDs0yo目の動きにまぶたがついてくるってやつ、すでに13年前に発表されたおもちゃのロボットには装備されていた。(Wowwee: Alive Elvis)
— はたらく植物(人工植物)・運搬機械模型の「お座敷マイクロ重工」 (@GAPUX) 2020年7月14日
固定のしたまぶたと、独立して電動する上瞼と、左右連動回転する目玉の仕掛けが乗った枠ごと、目の間の軸を中心に上下回転させることで目の動きにまぶたがついてくる pic.twitter.com/XbZel6HrYPバイオメタル活用とかの研究やってる同期の資料が教えてくれたん。
— 六畳一間研究室 (@61laboratory) 2020年6月29日
面白そう。ゴクリッ
EAMEX バービー人形目の可動 https://t.co/1oQy20oFRc @YouTubeより pic.twitter.com/PQgzwvRW40
別件