Ubuntu Coreを搭載したロボットアームが Niryoから登場
by Alex Cattle on 29 October 2019
Niryoがすごい6軸ロボットアーム「Niryo One」を開発しました。3Dプリント部品で構成され、価格も手頃なこのロボットは、主に教育用途向けです。完全にオープンソースで、ROSで動作します。ハード面ではArduinoおよびRaspberry Pi 3(RP3)を搭載しています。このロボットについて知ったとき、私たちはこう思いました。Ubuntu CoreとSnapを使うのにぴったり!
ロボットが手に入るとまず、Niryo Studioを使ってみました。これはNiryoが開発したツールで、ロボットを動かしたり、シーケンスを学習させて保存するなど、さまざまなことが可能です。ロボットは、Pythonや、GoogleのBlockyベースのグラフィカルエディターでプログラムできます。Niryo Studioは、手軽に楽しくロボットに親しむための優れたツールです。
次に、ロボットを制御するROSスタックでSnapの作成に取りかかりました。SnapcraftがROSをサポートしているため、難しいタスクではありません。catkinプラグインでほとんど処理できます。ただし、重要性の高いプロジェクトにはよくあることですが、Niryoスタックにもいくつか対処すべき問題があります。
- WiringPiというライブラリを使用するため、Snapの作成には追加パーツが必要です。
- RPi3でコンパイルするとデバイスのメモリーが不足してGCCがクラッシュしました。Niryoでは既知の問題であり、ビルド時に2つのコアを使用することで解決します(-j2 -l2 makeオプションの使用)。残念ながら、Snapcraftのcatkinプラグインを使用する場合はそこまでの制御はできません。しかし、Snapcraftは非常に拡張性が高いため、Snapcraftに付属するcatkinプラグイン関連をコピーし、必要な修正を加えればローカルプラグインを作成できます。私は作成したcatkin-niryoプラグインで-j2 -l2オプションをビルドコマンドに追加しました。これでGCCのクラッシュは回避できます。
- 変更しなければならないハードコーディングされたパスがたくさんありました。また、不足していた依存関係も追加し、その他の細かいコード修正も行いました。完成したパッチはこちらにあります。
- Snap内の構成ファイルもいくつかコピーする必要がありました。
- 最後に、Node.jsパッケージをビルドに含める必要があります。Node.jsプラグインが効果的に機能したため、問題はありませんでした。
これらすべての作業を経て、RPi3デバイスでSnapを構築できました。作成方法はGitHubのniryo_snap repoにあります。ビルドの簡単な手順も含まれています。Snap Storeではabeato-niryo-oneという名前でリリースしました。このSnapは現時点では制限(confine)されていないため、–devmodeオプションでインストールする必要があります。
続いて、RPi3用にUbuntu CoreイメージをダウンロードしてSDカードに書き込みました。ロボットのRPi3に挿入する前に、UARTシリアルポートに取り付けた別のRPi3を使用してconsole-confを実行しました。このツールでネットワークと、イメージで使用するUbuntu Oneユーザーを設定しました。Nyrioスタックは初期設定を簡単にするためにWiFi APを設定しようとしますが、Snapでは現時点ではサポートされていないため、console-confによるネットワーク設定により、後でロボットに接続する方法が決まります。
この時点で、snapdはおそらくカーネルSnapとコアSnapを更新します。これによりシステムが数回再起動し、それが終われば更新完了です。その後、First Stage Bootloaderのファイルをいくつか修正する必要があります。RPi3がすべてのセンサーとモーターを制御できるようにするために、Niryo OneではデフォルトのGPIO設定の変更が必要となるためです。最初に、/boot/uboot/cmdline.txtを編集します。console=ttyAMA0,115200を削除し、plymouth.ignore-serial-consolesを追加して、以下のようなコードにします。
dwc_otg.lpm_enable=0 console=tty0 elevator=deadline rng_core.default_quality=700 plymouth.ignore-serial-consoles
次に、/boot/uboot/config.txtの後に次の行を追加します。
…
# For niryo
init_uart_clock=16000000
dtparam=i2c1=on
dtparam=uart0=on
次に、必要なSnapをインストールして接続します。
snap install network-manager
snap install –devmode –beta abeato-niryo-one
snap connect abeato-niryo-one:network-manager network-manager
このように簡単なコマンドでフルROSスタックのインストールと構成が完了です!
最後に、ロボットにSDカードを挿入し、ブザー音が鳴るまで待ちます。音が鳴れば、通常の方法でNiryo Studioを使用して接続可能になります。これで元のイメージを使用するのと同じ方法でロボットを操作できるだけでなく、Ubuntu Coreのさまざまな機能(最小フットプリント、アトミックアップデート、制限アプリケーション、アプリストアなど)が使用可能になります。
さらに、Snapをx86 PCにインストールしてシミュレーションモードで使用できるというメリットもあります。サービスを停止して、以下のコマンドでシミュレーションを開始するだけです。
snap install –devmode –beta abeato-niryo-one
snap stop –disable abeato-niryo-one
sudo abeato-niryo-one.simulation
それからNiryo Studioを実行して127.0.0.1に接続します。とても簡単です。ROSアーカイブを追加して多数のdebパッケージを手動でインストールする必要はありません。
ご覧のとおり、ROS DebianベースのプロジェクトからUbuntu CoreおよびSnapには簡単に移行でき、大きなメリットがあります。ほんの少しの手間で、更新が簡単、セキュリティ優先、10年間の更新など、多くの機能を手に入れましょう!
ニュースレターのサインアップ
関連記事
IoTデバイス管理の簡素化:Ubuntu CoreデバイスをLandscapeに追加する方法
Landscapeは、ほぼCanonicalの設立当初から製品リストに存在します。管理者はLandscapeにより、単一の集中型ポータルからデスクトップとサーバーのインスタンスを管理できます。Landscape Serverの最新リリース(23.10)では、Landscapeでsnapパッケージを管理する機能が導入されました。また、CanonicalのSnap Storeで入手できるLandscape Client snapパッケージのベータ版では、Ubuntu CoreベースのデバイスをLandscape環境に追加できます。 Landscapeは、組織のUbuntu環境全体にわたるリモートのフリート管理サービスを提供し、ソフトウェアのバージョンと設定の管理、セキュリティ […]
2024年における自動車業界の注目トレンド
自動車業界では複数の技術革新が同時に進行し、活気に満ちた時代を迎えています。AIから5G、そして各種の周辺技術まで、今年は数多くの画期的なトレンドが浮上すると予想されます。 電気自動車(EV)が市場とOEMメーカーのビジネス戦略を変革し、顧客の目が従来の内燃エンジン(ICE)車から離れる中、自動車の開発や設計のあり方が問われています。 さらに、ソフトウェアの更新とインターネット接続によってシームレスなサービスやエンターテインメントが可能になるとともに、顧客は交通手段に対して従来と異なるアプローチを期待しています。2024年に予想される自動車分野の重要なトレンドのいくつかを詳しく検討しましょう。 車載ソフトウェアのOTA更新 OTA(Over-The-Air)更新は、自動車 […]
エッジAI
オープンソースで何を、なぜ、どのように実現するか エッジAIがデバイスとデータセンターの関係を大きく変える中、組織には常に最新のイノベーションの導入が求められます。AI搭載のヘルスケア機器から自動運転車まで、エッジデバイス上のAI(人工知能)はさまざまな分野で活躍します。これを踏まえて今回のブログ記事では、エッジAIプロジェクトを開始する際の検討事項、利点、課題、オープンソースの役割について考察します。 エッジAIとは エッジにおけるAI、またはエッジAIとは、人工知能とエッジコンピューティングの組み合わせを指します。エッジAIの目的は、接続されたエッジデバイス上で機械学習モデルを実行することです。これにより、デバイスは常にクラウドに接続してデータを処理しなくても、スマー […]