【Unitree Go2】キーボードからGo2を操作する2次開発方法

【Unitree Go2】キーボードからGo2を操作する2次開発方法

初めに


本記事では、unitree_ros2を用いて、Go2をキーボードから操作する2次開発方法についてご案内します。 ※ 参考資料:Robot Innovation Week 2024 発表スライド  

環境


環境は、次のようなものを想定しています。
  • 機種: Go2 R&D(Edu), R&D+(Edu+)(AIR/PROではないもの)
  • Docking Station or 外部PC:ubuntu20/22, ROS2 foxy/humble
 

1.環境設定


【Unitree Go2】SDK or ROSを使う方法 を参考に、unitree_ros2の環境構築が完了しているものとします。  

2.開発に必要な参考情報


が参考になります。 ただしサンプルコードは、TrajectoryFollowの用法になり、今回使用したいMove関数は使っておりません。  

3.実装例:cmd_vel_control


今回作成したもの cmd_vel_control.cppが新たに作成したプログラムになります。 このコードは、ROS2ノードを使用して/cmd_velトピックを購読し、Go2ロボットの動作を制御します。特に、cmdVelCallback関数で、キーボード操作から得た速度指令(/cmd_vel)をGo2ロボットの制御コマンドに変換しています
#include <iostream>
#include "rclcpp/rclcpp.hpp"
#include "unitree_api/msg/request.hpp"
#include "geometry_msgs/msg/twist.hpp"
#include "common/ros2_sport_client.h"

using namespace std::placeholders;

class CmdVelToSportRequest : public rclcpp::Node
{
public:
    CmdVelToSportRequest() : Node("cmd_vel_to_sport_request")
    {
        // コマンド速度トピックを購読
        cmd_vel_subscriber_ = this->create_subscription<geometry_msgs::msg::Twist>(
            "/cmd_vel", 10, std::bind(&CmdVelToSportRequest::cmdVelCallback, this, _1));

        // リクエスト送信用パブリッシャ
        request_publisher_ = this->create_publisher<unitree_api::msg::Request>("/api/sport/request", 10);
    }

private:
    void cmdVelCallback(const geometry_msgs::msg::Twist::SharedPtr cmd_vel_msg)
    {
        // 受け取った/cmd_velメッセージを出力
        RCLCPP_INFO(this->get_logger(), "Received cmd_vel: LinearX=%f, LinearY=%f, AngularZ=%f",
                    cmd_vel_msg->linear.x, cmd_vel_msg->linear.y, cmd_vel_msg->angular.z);

        // /cmd_velメッセージをスポーツリクエストに変換
        unitree_api::msg::Request req;
        sport_client_.Move(req, cmd_vel_msg->linear.x, cmd_vel_msg->linear.y, cmd_vel_msg->angular.z);

        // リクエストを送信
        request_publisher_->publish(req);
        // RCLCPP_INFO(this->get_logger(), "Published Request: LinearX=%f, LinearY=%f, AngularZ=%f",
        //             cmd_vel_msg->linear.x, cmd_vel_msg->linear.y, cmd_vel_msg->angular.z);
    }

    // 購読者
    rclcpp::Subscription<geometry_msgs::msg::Twist>::SharedPtr cmd_vel_subscriber_;

    // パブリッシャ
    rclcpp::Publisher<unitree_api::msg::Request>::SharedPtr request_publisher_;

    // SportClientインスタンス
    SportClient sport_client_;
};

int main(int argc, char *argv[])
{
    rclcpp::init(argc, argv);
    auto node = std::make_shared<CmdVelToSportRequest>();
    rclcpp::spin(node);
    rclcpp::shutdown();
    return 0;
}
 

4.実行

$ cd example_ws
$ colcon build
terminal 1:
$ source unitree_ros2/setup.sh
$ ros2 run unitree_ros2_examaple cmd_vel_control
terminal 2:
$ source unitree_ros2/setup.sh
$ ros2 run teleop_twist_keyboard teleop_twist_keyboard
実行後、terminal 1で動作ログが確認でき、terminal 2でキーボード操作を行います。 実行の様子:動画リンク ※動画は、Payloadに外部PC(Ubuntu22/humble)を搭載して行っているが、JetsonOrinからでも問題なく実行できる。 このように行うと、Go2をキーボードから操作することができます。
 

おわりに

本記事では、unitree_ros2を用いて、Go2をキーボードから操作する2次開発方法について、解説しました。 本記事を参考に、Move関数の使い方や他の制御方法を使用する際のヒントになれば幸いです。 この記事が少しでも役に立てたのなら幸いです。  


    • Related Articles

    • 【Unitree Go2】SDK or ROSを使う方法

      初めに 本記事では、ユーザー側で用意した外部PCを用いて、SDK(unitree_sdk2)やROS(unitree_ros2)を動かす方法についてご案内します。 環境 環境は、次のようなものを想定しています。 機種: Go2 R&D(Edu), R&D+(Edu+)(AIR/PROではないもの) Docking Station or 外部PC:ubuntu20 / ROS2 foxy 0.参考公式ドキュメント unitree_sdk2 Obtain SDK - Go2 SDK ...
    • 【Unitree Go2】メーカー資料について

      本記事ではGo2のメーカー公式資料等についてご案内します。 (1) スマホアプリ Unitree Go - Google Play Unitree Go - Apple Store app 注意:12/4現在開発中のため、一部動作しない機種がございます。 (2) オンラインSDK資料 R&D(EDU)版について: Go2 SDK Development Guide - UnitreeRobotics R&D(EDU)版githubになります: unitree_sdk2 - github ...
    • 【Unitree Go2】一問一答FAQ

      初めに 本記事では、Unitree Go2を購入されたお客様からよくあるご質問内容を、一問一答形式でまとめたものになります。 一問一答(すべての機種について) Q: Go2を歩かせると、右方向に行くことがあまりにも多いですがこれは正常ですか? A: 初期姿勢が少しずれていると、右に行きやすくなることは他のGo2でも確認されています。初期姿勢が正しいか今一度確認ください。 ...
    • 【Unitree Go2】SDKの概要について【unitree_sdk2】

      初めに Go2 R&Dがついに日本上陸しました。 SDKもGo1の時から大幅アップデートしています。 本記事では、Go2 SDKのexampleの概略についてご案内します。 環境 環境は、次のようなものを想定しています。 機種: Go2 R&D(Edu), R&D+(Edu+)(AIR/PROではないもの) 実行コンピュータ:ubuntu20 ...
    • 【Unitree Go2】Mid360を動かしてみる

      初めに 本記事では、オプションのMid360版の動作確認方法を案内します。 環境 環境は、次のようなものを想定しています。 機種: Go2 R&D(Edu), R&D+(Edu+)(AIR/PROではないもの) 付属LiDAR:Mid-360 1.mid360のip設定 ※追記(24/3/29) 最新のMid360をご購入の場合は、メーカー側で以下のLivox Viewerを用いた設定変更が行われているようです。 $ ping 192.168.123.20 ...