その他

[Raspbot V2]専用のRaspbotライブラリを使って動かしてみよう

その他
この記事は約9分で読めます。

はじめに

こんにちは。

ロボットの手順、第3回です。

前回は、ラズパイを使ってロボットを動かすための基本的なセットアップ手順についてご紹介しました。

今回はRaspbot V2専用の外部ライブラリについて紹介します。

今回やること

Raspbot V2には、Yahboom社から公式のPythonライブラリが提供されています。

これを利用することで、複雑なモーター制御の知識がなくても、直感的にロボットを動かすことが可能です。

この記事では、Raspbotライブラリを使って以下のステップを実践していきます。

  1. ライブラリのインストール方法: 開発環境の準備
  2. 基本コードの作成: ライブラリの呼び出しと初期設定
  3. 動作テスト:
    • 車輪の制御: 前進・後退・旋回などの移動
    • カメラの制御: 2軸サーボモーターによる首振り動作

Raspbotライブラリ

Raspbotライブラリは、Raspberry PiのGPIOピンを介して、ロボットのハードウェア制御するよう設計されています。このライブラリを導入することで、主に以下の制御が可能です。

モーター制御: 前進、後退、旋回、スピード調整。
・サーボ制御: カメラの首振り(パン・チルト)やアームの動き。
・センサー利用: 超音波センサーによる障害物回避、ライン追従センサーの読み取り。
・LED演出: RGB LEDの点灯や色の変更。

ダウンロード方法

以下、ライブラリのダウンロード方法です。

  1. 公式サイト([https://www.yahboom.net/study/RASPBOT-V2])へアクセスします。
  2. 画面左側のメニューにある [Download] > [Code] を選択し、ダウンロードしてください。
  3. Code > RaspbotV2-Code > Library Files > Chassis driver library > py_install > Raspbot_Lib > Raspbot_Lib.pyが該当ファイルです。

このファイルを自分のプロジェクト用ディレクトリに配置することで、ライブラリを呼び出せるようになります。

from Raspbot_Lib import Raspbot
Yahboom
Yahboom

動かしてみる

Ctrl_Car(車輪の制御)

ライブラリで扱える関数のうち、まずは基本となる車輪の制御について紹介します。

Raspbot V2には、車体の向きを変えずに全方位へ移動できる「メカナムホイール」が搭載されています。

ライブラリ Raspbot_Lib.py 内の Ctrl_Car 関数を見ると、4つのモーターを個別に制御できるようになっています。

【Ctrl_Car 関数の仕様】

  • motor_id: モーター番号(0〜3)
  • motor_dir: 回転方向(0 または 1)
  • motor_speed: 速度(0〜255)
#Raspbot_Lib.py
#モーター制御
    def Ctrl_Car(self, motor_id, motor_dir,motor_speed):
        try:
            if(motor_dir !=1)and(motor_dir != 0):  #パラメータ不正、方向はデフォルトで前進
                motor_dir = 0
            if(motor_speed>255):
                motor_speed = 255
            elif(motor_speed<0):
                motor_speed = 0

            reg = 0x01
            data = [motor_id, motor_dir, motor_speed]
            self.write_array(reg, data)
        except:
            print ('Ctrl_Car I2C error')

メカナムホイールは、各車輪の回転方向を組み合わせることで、前後だけでなく「真横」へのスライド移動も可能です。

#motor_test.py
from Raspbot_Lib import Raspbot
import time

rb = Raspbot()

def move_right(speed=30, duration=2):
    """右方向に移動"""
    print("右方向に移動中...")
    rb.Ctrl_Car(0, 0, speed)  
    rb.Ctrl_Car(1, 1, speed)  
    rb.Ctrl_Car(2, 1, speed)  
    rb.Ctrl_Car(3, 0, speed)  
    time.sleep(duration)

def move_left(speed=30, duration=2):
    """左方向に移動"""
    print("左方向に移動中...")
    rb.Ctrl_Car(0, 1, speed)
    rb.Ctrl_Car(1, 0, speed)
    rb.Ctrl_Car(2, 1, speed)
    rb.Ctrl_Car(3, 0, speed)
    time.sleep(duration)

def move_front(speed=30, duration=2):
    """前方向に移動"""
    print("前方向に移動中...")
    rb.Ctrl_Car(0, 1, speed)
    rb.Ctrl_Car(1, 1, speed)
    rb.Ctrl_Car(2, 1, speed)
    rb.Ctrl_Car(3, 1, speed)
    time.sleep(duration)

def move_back(speed=30, duration=2):
    """後方向に移動"""
    print("後方向に移動中...")
    rb.Ctrl_Car(0, 0, speed)
    rb.Ctrl_Car(1, 0, speed)
    rb.Ctrl_Car(2, 0, speed)
    rb.Ctrl_Car(3, 0, speed)
    time.sleep(duration)

def stop_all():
    """全モーター停止"""
    print("停止中...")
    rb.Ctrl_Car(0, 0, 0)
    rb.Ctrl_Car(1, 0, 0)
    rb.Ctrl_Car(2, 0, 0)
    rb.Ctrl_Car(3, 0, 0)

try:
    while True:
        # 右方向に移動
        move_right(speed=30, duration=2)
        stop_all()
        time.sleep(3)
        
        # 左方向に移動
        move_left(speed=30, duration=2)
        stop_all()
        time.sleep(3)

        # 前方向に移動
        move_front(speed=30, duration=2)
        stop_all()
        time.sleep(3)

        # 後方向に移動
        move_back(speed=30, duration=2)
        stop_all()
        time.sleep(3)

Ctrl_Servo(カメラの制御)

続いて、カメラを動かすためのサーボモーター制御を紹介します。

Raspbot V2に付属しているUSBカメラは、台座のサーボモーターによって「パン(横振り)」と「チルト(縦振り)」の2軸操作が可能です。

【Ctrl_Servo 関数の仕様

・id: 1(パン:横方向)、2(チルト:縦方向)
angle: 0〜180(度) ※ID 2番は構造上の理由から最大110度までに制限されています。

#Raspbot_Lib.py
#サーボ制御
    def Ctrl_Servo(self, id, angle):
        try:
            reg = 0x02
            data = [id, angle]
            if angle < 0:
                angle = 0
            elif angle > 180:
                angle = 180
            if(id==2 and angle > 110):angle = 110
            self.write_array(reg, data)
        except:
            print ('Ctrl_Servo I2C error')

特定の角度へカメラを向けるサンプルコードです。

これを応用すれば、例えば物体検知の結果に合わせて追従機能も実装できるはずです。

def move_pan(bot: Raspbot, angle: int) -> None:
    """横方向(パン)を動かす。angle: 0〜180"""
    bot.Ctrl_Servo(1, angle)


def move_tilt(bot: Raspbot, angle: int) -> None:
    """縦方向(チルト)を動かす。angle: 0〜110"""
    bot.Ctrl_Servo(2, angle)

if __name__ == "__main__":
    bot = Raspbot()
    move_pan(bot, 90)
    move_tilt(bot, 55)
    time.sleep(1)
    move_pan(bot, 120)
    move_tilt(bot, 80)
    time.sleep(1)
    move_pan(bot, 90)
    move_tilt(bot, 55)

おわりに

いかがでしたでしょうか。

今回はraspbot v2専用のraspbotライブラリを用いて、基本的な動作を作成してみました。

今回は数ある制御の中から2つを取り上げましたが、この他にも音を出したり、超音波センサーの制御が可能です。

今後は、これらの機能を組み合わせたより実践的なシステムの設計や、ロボット開発には欠かせない「ROS 2」 への対応についても共有していく予定です。

参考URL

Yahboom
Yahboom
メカナムホイールの特徴と使用例―AGVや重量物の搬送装置に自在な動きを
メカナムホイールは特殊な構造により、前後左右だけでなく真横や斜め方向にも自在に移動できるホイールです。これを生産現場で活躍する搬送装置に組み込むことで、さまざまなメリットが生まれます。本記事では、メカナムホイールの原理や特徴、使用例をご紹介します。メカナムホイ
【ロボット】micro:bitでメカナムホイールロボットを制御する | micro:bit Lab.【マイクロビット】
メカナムホイールを搭載した四輪駆動ロボットをmicro:bitで制御する手順を解説します。