コラム

ロボティクス関連で、感じたこと等を載せています。

ロボット開発について

2024/6/21

ロボット開発についての資料を作ったので、載せます。

私が作りましたし、別に、ここまでならば、内容はネット公開情報でも分かると思いますから載せます。


デザインは、主にマイクロソフト365?に標準搭載のモノを使っています。

マイクロソフトの自称で、Web上のものでない・引用であるならば(米国法では)使ってもよいみたいに、

マイクロソフト365のPPTで、画像を挿入する時の説明で、あると思います。

そして、マイクロソフトは米国の会社ですから、そのままにします。

ロボット開発についてです。

目次は次の通りです。

  1. ロボット開発の基礎
    1. 要素技術
    2. 大分類
    3. HWの概要
    4. SWの概要
  2. 開発手順
    1. ROSを用いた方法
      1. HW開発
      2. SW開発
    2. OpenRTM-aistを用いた方法
      1. HW開発
      2. SW開発

1. ロボット開発の基礎

要素技術、大分類、HWの概要、SWの概要

要素技術

ロボットは次のような要素技術で動く

  • IT (システムやプログラム)
  • 電気電子 (WiFiや配線)
  • 機械 (モーターやギア)

大分類

ロボットは次に分類できる

  • HW (ハードウェア)
  • 機械、電気電子的な要素

 

  • SW (ソフトウェア)
  • IT的な要素

一般的な開発方法

  • 汎用制御PCや汎用マイコンを選定する
    • JetsonRaspberry PiM5 StackESP 32Spresense
  • モーターやギアを選定する
    • アクチュエーター、サーボモーター、ギア(変速機・減速機)
      • アクチュエーター: 電気等を機械的な動きに変換し、機器を正確に動かす駆動装置
      • サーボモーター: 位置や速度、回転力(トルク)を正確に実現するモーター
      • 変速機: ギヤの組み合わせで変速を行う装置 (速度は可変)
      • 減速機: 上記のうち、速度が一定速のもの
  • WiFiや配線を考える
    • 電力線: ケーブルを使用する (アースを付ける場合もある)
    • 信号線: ケーブルやWiFi、Bluetoothを使用する (ケーブル長や応答速度を考慮する)
    • 接続: コネクターや、圧着、半田付けを使用する

SWの概要

  • ROS: 実質ミドルウェア
    • 基本Linux系のOS上で動く
    • オープンソースで、世界中の人が開発に使用している
    • 開発言語: C++、Python、Java
  • RT-middleware: OMG(The Object Management Group)の標準仕様
    • Windows、Linux/Unix、Mac OS上で動く
    • オープンソースで、国内団体が開発したものが多い
    • 開発言語: C++、Python、Java

2. 開発手順

ROSを用いた方法

(対応機器導入、HW開発、SW開発)

OpenRTM-aistを用いた方法

(対応機器導入、HW開発、SW開発)

ROSを用いた方法

  1. 対応機器を導入する
    • 購入する (かなり手っ取り早いが高価格になる)
    • 自分で機器を作り対応させる (一気に高難易度化する)
  2. Linuxをインストールする
  3. Linux上にROSをインストールする
  4. ROSにパッケージを入れる
  5. プログラムを作る等し、コマンドで動かす
  • HW開発 (対応機器導入)
  • かなり手軽な方法
    • 巷で売られているカスタマイズ可能なロボットを購入する
    • (PG改造のみの場合)
  • 高難易度な方法 ← 多くは営利のため、これをやりたい
  • 全部、または一部を設計して作る
    • 全部:
    • 運動学や逆運動学に基づいて設計し、機械を作る (モーターやギア等も選定する)
    • カメラやセンサー等を選定する
    • 筐体加工: CADデータを作りファブレスで作る、3Dプリンターで造形する
    • 配線: ノイズ等も考慮して設計する、回路設計・半導体設計等を必要に応じてする
    • 制御: 上記を汎用ロボットOS等で動かせるようにする ← これも、かなり難しい
  • 一部:
    • 上記のウチの一部を作る
  • HWSWの融合が、いずれにしても難しい

SW開発 (準備)

1. 汎用PCにLinuxをインストールする

  • ROSに合わせたバージョンを選定する

2. Linux上にROS 1/2をインストールする

  • バージョンを選定する (Linux と対応する)

3. ROSにパッケージを入れる

  • コマンドを打てば、自動的に入る

4. PGを作る

  • package.xmlを編集する
  • CMakeLists.txtを編集する
  • catkin_makeする

OpenRTM-aistを用いた方法

  1. 対応機器を導入する
    • 購入する (かなり手っ取り早いが高価格になる)
    • 自分で機器を作り対応させる (一気に高難易度化する)
  2. Win、Linux等で動作する
  3. Python等をインストールする
  4. GUIインストーラーでインストールする
  5. GUIでノードを繋いで実行する (パラメーター変更やPG動作も可能)

ROSと特に変わらない

  • HW開発 (対応機器導入)
  • かなり手軽な方法
    • 巷で売られているカスタマイズ可能なロボットを購入する
    • (PG改造のみの場合)
  • 高難易度な方法 ← 多くは営利のため、これをやりたい
  • 全部、または一部を設計して作る
    • 全部:
    • 運動学や逆運動学に基づいて設計し、機械を作る (モーターやギア等も選定する)
    • カメラやセンサー等を選定する
    • 筐体加工: CADデータを作りファブレスで作る、3Dプリンターで造形する
    • 配線: ノイズ等も考慮して設計する、回路設計・半導体設計等を必要に応じてする
    • 制御: 上記を汎用ロボットOS等で動かせるようにする ← これも、かなり難しい
  • 一部:
    • 上記のウチの一部を作る
  • HWSWの融合が、いずれにしても難しい

SW開発 (準備)

1. Pythonをインストールする

  • バージョンを合わせる

2. OpenRTM-aistを導入する

  • ダウンロードし、インストールする

3. VCVerChangerを実行する

  • レジストリーを整えるためである

4. RTSystemEditorを使用する

  • ノードとノードを接続し、適宜パラメーターを入力する

ロボットやAI、資格の今後の予想

2024/6/24

現在、ロボット技術開発により、別に、技術士でなくても、それより、多くの収入が得られる時代になっていると思います。

それ以上の技術士が、いたとしても、多くは、資格によって講演会とか、技術指導とか、出版で、お金を得たりしている位でしょう。

結局、実空間系の技術指導以外の、多くがAIに代替可能な気がしています。

机上の試験が無意味化するかもしれませんから、今後、専門職集団とか、どうなるのでしょうか??

それより、人類とか、どうなるのでしょうか???

更に、ロボットやAIが、自身を作成生成するようになったとしたら、どうなるのでしょうか?

私の予想ですと、人類に残された仕事は、多くが、ロボットやAIに置き換わる中で、

人類という種(しゅ)を絶滅しないようにするとか、人類をサイボーグ化するとかしか無くなる気がしています。

ロボットやAIが、悪用されなければ、よいです。

よい方向にも、そうでない方向にも、絶対値が人間に考えられない位に、大きすぎになるでしょうから。

創薬とかに適切に使われた場合、驚異的なスピードで、もしかすると、不老長寿の薬ができるかもしれません。

ゲノム解読とか、かもしれません。

宇宙の謎が解けるかは、分からないですが。

ただ、結局、高度な倫理観が必要になってくる気がしていて、仮に(大規模な)事故等が起きた場合は、

開発に関連した、法整備がされたり許認可制となっていくような気もしています。

その策定 等は、困難でしょうし、そういったモノを作るのにも、ロボットやAIが使われるのかもしれません。

後、世の中的に、よいロボットやAIと、よくないロボットやAIが、混在していくような気もしています。

もしかすると、よくない学習をしたり、バグ等で壊れて異常な行動を取るモノも出てくるかもしれません。

これからの世の中、技術革新が加速化して不確実性 等があると考えますし、

許認可制であっても、そうでなくても、法整備がどうであろうと、

できるたけ、よいモノを、割合としても、できるだけ沢山作る位しか、社会にとって、よい手は無いといったような気がしています。

Pub-Sub通信

2024/7/2

ロボット開発において、作るための情報が、割合として圧倒的に多い訳です。

しかし、セキュリティーや安全な運用 等、それ以外の情報が、ほとんど公開ネット上に無いと思います。

その話から、原発とかと同じで、作るだけ作っておいて、後で、どうなる/どうする のか、分からない、みたいな状況になるのではないか?と思ってしまいました…

今後、そういったことも含めて、世界中で議論が活発化することを期待します。

次の動画は、ROS上で、次を実施したものです。

“roscore” を起動

“rosrun beginner_tutorials talker”を実行

“rosrun beginner_tutorials listener”を実行

これにより、Pub-Sub 通信をしています。

ROS を使う人には、かなり基本的なモノだと思いますが。

@tiktok_tokyo_jp

Motion of ROS Basic Program, Publisher (Talker) and Subscriber (Listener). 1. "roscore" 2. "rosrun begineer_tutorials talker" 3. "rosrun begineer_tutorials listener" ROS の基本的なプログラムである、Pusbisher (Talker)とSubscriber (Listener)の動作結果です。

♬ オリジナル楽曲 - tiktok_tokyo_jp

turtlesim

2024/7/4

ROS でturtlesim を動かす様子を動画にしました。

“roscore” を起動

“rosrun turtlesim turtlesim_node”を実行

“rosrun teleop_twist_keyboard teleop_twist_keyboard.py cmd_vel:=/turtle1/cmd_vel _speed:=2.0 _turn:=2.0″を実行

 

teleoo_twist_keyboard がインストールされていない場合は、次を実行するとよいです。

https://wiki.ros.org/teleop_twist_keyboard

@tiktok_tokyo_jp

Movie of moving turtlesim on ROS. ROS でturtlesim を動かす様子です。

♬ うさぎとかめ - ひばり児童合唱団/藤家虹二クインテット+α

ロボット開発について(実例)

2024/7/22

2024/6/21 の資料の続きです。

3 の実例からです。

  1. ROSを用いた方法
  2. OpenRTM-aist を用いた方法
  1. ROSを用いた方法
  • 1. Ubuntu Linux等をインストールする (Ver. を合わせる)
  • 2. 適切なVer. のROSをインストールする
  • 3. ROS環境を構築する

1.catkinワークスペースを作る

2.catkin_makeする (自動的にファイルが生成される)

3.catkin_create_pkg パッケージ(任意) 属性 (std_msgs,rospy,roscpp等)

4.source devel/setup.bashを実行する

5.package.xml とCMakeLists.txtを適切に編集する (公式HP等 参照)

6.catkin_makeする (コンパイルのようなモノ)

  • 4. 動作させたいPGをパッケージ配下に入れる (後述)

Pub・Sub 通信の様子は、上図の通りである。

プログラムは、上図の通りである。 (ROS 公式ホームページを参照)

動作結果は、上図の通りである。 (動画参照<2024/7/2の投稿にもある>)

Pub・Sub通信でできること (ROS)

  • 値をデバイス間で転送することができる
  • カメラやセンサーの値を転送することができる
  • PGやCUIで、ロボットを制御できる

2. OpenRTM-aist を用いた方法

OpenRTM-aist 2.0 インストール

  • 1. Winをインストールする (Linux等でもよいはず)
  • 2. OpenRTM-aist環境を構築する

1.Python インストール

2.CMake インストール

3.Doxygen インストール

4.Graphviz インストール

  • 3. 適切なVer. のOpenRTM-aist をインストールする (この場合、2.0.x)
  • 4. VCVerChanger を実行する

Python とCMake、doxygen、Graphviz を、ダウンロードしてインストールする。

OpenRTM-aist-2.0.2 のインストール

OpenRTM-aistをダウンロードし、インストーラーの指示に従いインストールする

※ WinがPCを保護する画面が出た場合でも実行する

VCVerChanger を実行する。

適切なバージョンに合わせる。 (この場合、Visual Studio 16 2019, 2022)

Start Naming Service を実行し、 ConsoleIn.bat と ConsoleOut.bat を起動する

全体起動の様子は、上図の通りである。

RTSystemEditor を開き、

System Diagram を編集する。

ConsoleInとConsoleOut をドラッグ・アンド・ドロップし、矢印を繋ぎ、

Activate Systems を実行する。

OpenRTM-aist 2.0.2 のノード通信の様子は次である。

(YouTube 、TikTok、画像)

@tiktok_tokyo_jp

OpenRTM-aist 2.0 Node Communication result. OpenRTM-aist 2.0 ノード通信の結果です。

♬ オリジナル楽曲 - tiktok_tokyo_jp

ノード間通信でできること (RTM)

  • 値をデバイス間で転送することができる
  • カメラやセンサーの値を転送することができる
  • PGやGUI、CUIで、ロボットを制御できる

GUI で制御できるのが、ROS との違いである。

ご清聴ありがとうございました。

Linuxを外付けストレージから起動

2024/9/26

UEFI(BIOS)が起動するPCのUSBに繋いで「外付け」SSDから起動した場合に、Linuxが起動するようにできました。
 
︎︎他のPC 2台でも、起動確認できました。
 
Linux起動の次の回の、Win起動時に、BitLockerの入力確認を求められる事が判明しました (入力したのでログイン等できました)
 

 

背景としては、PC を全くの更地?(ユーザーファイル等 含む)にする際に、

いっその事、Linux とのデュアルブート化を施して、Linux + ROS2 + Autoware 環境を実現しよう、とか思いました。

(HW 的な性能は足りていると「現在」思っています)

以前は、Autoware がHW 的にGUI起動はしませんでしたが。 (VirtualBox上ではNVIDIAのCUDA直起動ができないからと思っています)

 

ちなみに、Autoware は「趣味」であって、今のところ業務では、ないです。

外部SSD でUbuntu Linuxが起動するように、ガチャガチャやっていました。

 

まず、パーティションで、マウントポイントを指定するところに”/”を入れ忘れているという事に気が付くのに、時間を消費しました。

更に、/cdrom がアンマウントされないといった事が表示されていたので、UEFI設定で、SATAをAHCIからRAIDに変更しましたが、変わりませんでした。

滅茶苦茶、困った訳ですが、インストールを途中で中断すると、更地のUbuntuが使えるので、そこで「端末」を開いて、”umount /cdrom”と入れました。

しかし、まだアンマウントされないと出ていたので、確か”umount -a -t /cdrom”と入れたところ、ビジー状態でアンマウントできないと出ました。

よって、”umount -l /cdrom”とコマンドを叩いたところ、アンマウント「は」できました。

しかし、それまでの設定上、バグったのかどうか知らないですが、エラー画面が出て、先に進めないという状況です。

よって、AHCIに戻して、DVD/CD-ROMをDisabledに変更して実施すると、どうなるのか、試そうとしましたが、それが原因では、ありませんでした。

SATA → RAID → “umount -l /cdrom” or “umount -a -t /cdrom”が正解なのかとか、

SATA → AHCI → DVD → Disabled → “umount -l /cdrom” or “umount -a -t /cdrom”で上手く行くとも思っていましたが…

(実際にアンマウントできたモノの、やはり、先に進めなかったです)

今更、Linuxのインストール時でも”Ctrl + Alt + T”を押すことで「端末(ターミナル)」が開くという事が分かりました。

ここには、インストールには、SSD「と」USBメモリーが必要とあります。

参考にしたのは、次のサイトです。

https://zenn.dev/karaage0703/articles/0ca67e19aa772e

https://zenn.dev/karaage0703/articles/d38e17bd6efbaa

https://magidropack.hatenablog.com/entry/2018/11/04/011715#chapter01

ただ、色々と設定しても、できないことが分かったので、ブートローダーを消す事にしました。参考にしたのは次です。

【Ubuntu】【上級者向け】Grubブートローダを削除する

https://qiita.com/arkoudha/items/98136ddf1432e904d215

https://win.just4fun.biz/?%E3%81%9D%E3%81%AE%E4%BB%96/UEFI%E3%83%96%E3%83%BC%E3%83%88%E3%81%8B%E3%82%89Linux%E3%82%92%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B%E6%89%8B%E9%A0%86

【Ubuntu】【上級者向け】Grubブートローダをインストールする

Ubuntuが起動しないエラーが起きたので、次を参考に直しました。

・ Ubuntuインストール時にエラーが出た

https://askubuntu.com/questions/1425691/ubuntu-freezes-on-first-start-after-installation

・ 最初の起動でUbuntuがフリーズした

https://askubuntu.com/questions/858082/i-o-error-during-ubuntu-installation

・ 次を入れたら直った

https://docs.nvidia.com/datacenter/tesla/tesla-release-notes-515-65-07/index.html

次をやろうと思いました。

https://bbs.archlinux.org/viewtopic.php?id=279602

https://superuser.com/questions/1785200/error-file-boot-not-found-no-such-device-disk-info-no-such-device

結局は、”/dev/sda1″が”/mnt/boot/efi”にマウントされていたので、
単純な”/boot/efi”「か」”./”にマウントしました。 (詳しくは覚えていないです)

本当は、SSD内にブートローダーを入れて、SSDを繋いだ場合にWinやLinuxが選べるようにしたかったですが、それは、諦めました。

(起動時に、起動デバイスをUEFIで指定したら、よいからです)

上図のようにクローニングしました。

ソースとターゲットを間違えると、悲惨ですが。