ニュースNEWS

製品情報

2024.04.22

ROS 2でCuGoを動かしてみよう(クローラロボット開発プラットフォームROS対応企画第1回)

クローラロボット開発プラットフォームがROS 2に対応しました!

 

こんにちは。ロボットエンジニアの中村です。

 

CuGoにプログラムを書き込んでロボット開発ができる、クローラロボット開発プラットフォームですが、このたびROS 2に対応しました。

 

内蔵しているRaspberryPiPicoにPCとROS 2の通信をするサンプルスケッチを公開しました。このスケッチを書き込むことでROS 2でCuGoを制御することができるようになります。また、2024/3/1出荷分からUSBケーブルの通し穴を追加しましたので、外部のPCとの通信が容易になりました。

 

以上の変更により、この記事ではクローラロボット開発プラットフォームを応用してROSロボットとして動かす方法を紹介します。ROSは知っているけどどのように動かせばいいのか分からない、屋外を自由に走行できるロボットを作ってみたい、人の役に立つロボットを作ってみたい!と思っている方は必見です!

 

全5回に分けて、

 

  • ROS 2を使ったCuGoの動かし方(この記事)
  • ROS 2のLidarの使い方
  • CartographerによるSLAMのやり方
  • EMCL2による自己位置推定のやり方
  • Navigation 2で自律走行のやり方

 

を解説します。お楽しみに!

 

ROSとは

 

ROSとは、ロボット開発用に作られたオープンソースのフレームワークです。さまざまなセンサのドライバや制御アルゴリズムが実装されており、様々なロボットに自律走行アルゴリズムを試用、移植することができます。

 

今回の記事では、ROS 2 Humble(バージョン名です)を使って、クローラロボット開発プラットフォームを走行させてみます。世界中の人が開発した自律走行ソフトウェアをCuGoで試すことができます。試してみましょう。

 

CuGoのROS対応機能

CuGoのROS対応機能では、以下の2つの機能があります。

 

  • ROS 2の速度指令を受け取ってロボットがその通りに動くことができる。
  • モータの状態をROS 2にフィードバックすることができる。

 

今回の連載では、ROS 2の自律走行機能とCuGoのROS対応機能を組み合わせ、ロボットを動かします。ROS 2とCuGoの構成は以下の通りです。

 

対応機種

 

CuGoでROS 2を動かすことができるモデルは以下の3つのモデルです。

 

  • クローラロボット開発プラットフォーム CuGo V4

販売ページ

 

  • クローラロボット開発プラットフォーム CuGo V3i

販売ページ

  • ROS開発キット CuGo V3

お問い合わせ商品です。こちらよりお問い合わせください。

 

この記事では、ROS 2の機能でクローラロボット開発プラットフォーム CuGo V4 / V3iを動かしていきます。この製品はRaspberryPiPicoを搭載しており、ここにプログラムを書き込むことで様々な動作をさせることが可能です。ここにPCとの通信プログラムを書き込むことで、ROSの信号でロボットが動くようになります。(ROS開発キットはセットアップ済みなので届いてすぐにROSで動作します。)

 

PCを載せてみた

 

この記事では、ROS2をLinux PCで動作させます。OSはUbuntu 22を使用しています。クローラロボット開発プラットフォームには、RaspberryPiPicoしか搭載していないので、ROS 2用のPCを別途用意して、ロボットに搭載させる必要があります。PC搭載用としてミスミフレームで台を作りました。

 

 

クローラロボット開発プラットフォームでは、ミスミの5シリーズのアルミフレーム(20 x 20mm)が構造材となっているため、このような改造が容易にできます。カメラをつけたり、GNSSアンテナをつけたりといった応用が手軽にできます。

 

ROS 2をインストールしよう

 

ROS 2をインストールするUbuntu 22はこちらを参考にインストールしてください。

ここから始める!Ubuntu22のインストール① - AbudoriLab.

ROS 2はこちらを参考にインストールしてください。

ここから始める!ROS 2 Humbleのインストール② - AbudoriLab.

 

ROS 2でCuGoを動かすプログラムをインストールしよう

ROS 2のインストールができたら、CuGoのプログラムをダウンロードしましょう。

インストールするプログラムは以下の通りです。

 

  1. ROS 2の速度指示を出すプログラム
  2. cugo_ros2_control
  3. cugo_ros_motorcontroller

3つのプログラムは以下の図のような関係となっています。

 

①ROS 2ではsensor_msgs型のtwistという形式のトピック(ROSの通信形式の一つ)で扱います。大半のROS 2のプログラムではcmd_velという名前でロボットに対して走行の指示を出します。この手順でインストールするteleop_twist_keyboardというパッケージ(ROSのプログラムの一単位)も、cmd_velを出力します。

 

②cugo_ros2_controlはROS 2で受け取ったcmd_velを分解してCuGoのモータの回転数に変換します。変換した回転数をCuGoを制御するRaspberryPiPicoに通信で指示することでモータの回転数を指示します。また、実際の回転数が返送されてくるので、この回転数をオドメトリに変換して、他のROS パッケージにパブリッシュ(他のROSプログラムに対して送信すること)します。

 

③cugo_ros_motorcontrollerはRaspberryPiPicoにインストールするスケッチ(簡易的な組み込みプログラム)です。PCとシリアル通信をして、モータに指示するべき回転数を受け取り、実際の回転数を送信します。

 

 

ROS 2のプログラムからCuGoを動かしてみよう

 

それでは、インストールしたプログラムを動かします。

PCとRaspberryPiPicoをUSBケーブルで接続します。接続したあとに、USBシリアル通信の権限を変更します。以下のような操作をします。

$ ls /dev/tty*

このような画面でUSBケーブルをつなげる前と後でこのように変化するはずです。ここで増えた項目がLinuxPC上で認識したRaspberryPiPicoのデバイス名です。この図では、“ttyACM0”になります。デバイス名を控えておきましょう(ttyACM1やttyACM2になったりすることがある)。

このデバイス名を指定して読み書き権限を与えましょう。デバイス名は控えたものに適宜変えてください。

例)

$ sudo chmod 777 /dev/ttyACM0

これで、PCとRaspberryPiPicoが通信できる準備ができました。各プログラムを起動します。

①のプログラムの起動

ros2 launch teleop_twist_keyboard teleop_twist_keyboard

②のプログラムを起動

CuGo V4の場合

ros2 launch cugo_ros2_control cugov4_ros2_control_launch.py

CuGo V3iの場合

ros2 launch cugo_ros2_control cugov3i_ros2_control_launch.py

 

③RaspberryPiPicoにプログラムが書き込まれていて、通信ができれば自動的に起動します。

これですべての必要なプログラムが起動しました。

それでは、キーボードからロボットを操作してみましょう。①のプログラムのターミナルをクリック(アクティブにする)して次のキーを押すとロボットが動きます。

 

この画面をクリックしてから、“Moving around”の文字を押します。

 

teleop_twist_keyboardの前進、後退、右回転、左回転のコマンドを教えています。

 

前進:i

後退:,

右回転:l(小文字のエル)

左回転:j

 

これで、

①のプログラムにキーボードで速度指令を出力させました。

②のプログラムが走行指示を受けとり、RaspberryPiPicoに指示を投げました。

③のプログラムが指示通りにモータを制御しました。

という手順でROSの信号の通りにロボットが走行したわけです。

実際の自律走行プログラムでは、今回キーボードで出力した走行指示信号を計算により求めて、出力することで自動的に走行します。

この走行指示するプログラムはROS 2に標準搭載していますので、それをうまく使うことで自律走行を試すことができます。

 

おわりに

 

この記事でCuGoをROS 2で走行指示を出し走行させることができました。次回以降の記事で、実際に環境を認識させたり、自律走行をさせたりして行く予定です。ぜひCuGoで自律走行をためしてみて、研究や業務改善に役立ててみてください!次回もお楽しみに!

WEBからのお問い合わせ

ご相談はお問い合わせフォームをご利用ください。

お問い合わせフォームへ