GithubHelp home page GithubHelp logo

open-rdc / ros2_walking_pattern_generator Goto Github PK

View Code? Open in Web Editor NEW
36.0 6.0 2.0 28.39 MB

Walking Pattern Generator (= Walking Controller) using ROS2 for Humanoid Robots

Home Page: https://twitter.com/OdoOdomeme555

License: Apache License 2.0

CMake 8.49% C++ 72.52% Python 15.47% C 0.44% MATLAB 3.08%
humanoid-robot humanoid-walking robotics ros2 ros

ros2_walking_pattern_generator's Introduction

This README was created by translating the Japanese text using Google Translate.

ROS2_Walking_Pattern_Generator

Walking Controller using ROS_2 for Humanoid Robots.

A walking control software for humanoid robots using ROS 2. We are proceeding with development with an emphasis on scalability, versatility, and simplicity, and we plan to be able to make humanoid robots walk without any advanced work.

Emvironment

It is compatible with the following OS:

Not tested on other OSes, but may work.

Dependencies

It depends on the following software:

The version of this dependency is determined based on your development environment, so it may work with other versions.

Install

Step1

Please install dependencies.

Step2

Please clone this repository.

Example:

mkdir -p ~/ros2_ws/src/ && cd ~/ros2_ws/src/
git clone https://github.com/open-rdc/ROS2_Walking_Pattern_Generator.git

Step3

Please build packages.

Example:

cd ~/ros2_ws/
colcon build --symlink-install
source install/setup.bash

Usage

Run the program with the following command:

ros2 launch robot_bringup robot_bringup_launch.py

Example of operation by executing this command:

example_walking_motion_with_rviz2.mp4


Software Architecture

software structure



License & Author

The robot_description package contains parts of ROBOTIS-GIT/ROBOTIS-OP2-Common (license: Apache-2.0 license).
For details, see README.md in robot_description/models/robotis_op2.

This repository is licensed under Apache License 2.0.

Main developer & maintainer: Yusuke-Yamasaki-555 (GitHub, X (twitter), blog (jp))

ros2_walking_pattern_generator's People

Contributors

yusuke-yamasaki-555 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

ros2_walking_pattern_generator's Issues

Gazeboへの対応

Rviz2を考えたときに、URDFに対応していたりと、相性が良いのはGazeboだろう。
動歩行も完了したことだし、Webotsに加えてGazeboへの対応に取り組んで見ようと思う。

汎用性確保のためのURDF->PROTOとパラメータ設定スクリプト

  • urdf -> protoはwebots公式のpython scriptを使う。
  • パラメータはユーザからのテキストファイル記述と、urdfから抜き出す。
  • 速度は気にする必要ない。launch実行時に1番最初に実行して、その処理が終了次第、本処理を開始すれば良い。
  • パラメータは、pythonスクリプトかそれをimportしている奴がnodeになって、パラメータサーバやserviceで提供するなりすれば良い。
    • 結局パラメータサーバもserviceで実装されていたはずだから、どっちも同じなはず。
    • 外部ファイルに書き込む手法でROSから切り離しても良いだろう。可視化にもなるし。

WPGの開発

参考書に準ずる。3次元線形倒立振子モデルで進めたい。

pinocchioへの移行と実装

**学周りを、pinocchioに移行する。事前に、ロボットモデルをURDFに移行しておく必要がある。
自作よりもpinocchioのほうが汎用性がある。

Life Cycleの構成、設定、適用

ライフサイクルを定めることができれば、もっと質のいいソフトウェアになるだろう。ROS 2の機能も最大限に活かせるだろうし。

ライフサイクルの構成を定めて、それを適用する別nodeを作成する。

起動したい順番としては、
  Kinematics -> WSC -> WRH -> WPG
が良いと思っている。

WRHを起動してinitの動作が完了したらWPGを適用した動作を行うイメージ。

結構、優先度は高いかな。と思う。

ParameterServerの実装、移行

今、DEBUG_ParameterSettingとして各Nodeで設定している値やCustom_QoS_Profileの値などを、ParameterServerから読むようにしたい。LifeCycleの実装の後に取り組む。一番最初に、ParameterServerから値を設定して、WebotsRobotHandlerのinitを実行して、みたいな感じ。

静歩行の実装

静歩行ができた。

逆**学で足の座標のパターンを、ロボットの重心位置を基準点とするローカル座標系で指定。
各関節角速度、足の座標のパターン、動作周期は、実験的に求めた。というか決めた。つまりは理論をあまり考えていない。

一応、決めた値を以下に記録しておく。

  • 歩行パターン loop(step1 ~ step4)
    | step | right [m] | left [m] |
    | ------- | -------------------------------- | ------------------------------- |
    | 1 | {-0.01, -0.000, -0.3000} | {0.01, 0.072, -0.2800} |
    | 2 | {-0.01, -0.000, -0.3000} | {0.01, 0.072, -0.2800} |
    | 3 | {0.01, -0.072, -0.2800} | {-0.01, 0.000, -0.3000} |
    | 4 | {0.01, -0.072, -0.2800} | {-0.01, 0.000, -0.3000} |

  • 関節角速度パターン loop(step1 ~ step4)
    | step | right [m] | left [m] |
    | ------- | -------------------------- | -------------------------- |
    | 1 | {1, 1, 0.5, 1, 0.5, 1} | {1, 1, 0.5, 1, 0.5, 1} |
    | 2 | {1, 1, 0.5, 1, 0.5, 1} | {1, 1, 0.5, 1, 0.5, 1} |
    | 3 | {1, 1, 0.5, 1, 0.5, 1} | {1, 1, 0.5, 1, 0.5, 1} |
    | 4 | {1, 1, 0.5, 1, 0.5, 1} | {1, 1, 0.5, 1, 0.5, 1} |

  • 動作周期
    600ms (歩行パターンを600msでPublish)

 歩行している動画を以下に示す。途中で転倒しているが、これは歩行パターンが雑すぎることが原因の1つと考えられる。
 また、動画には反映されていないかもしれないが、途中で周期が乱れることが、試行錯誤の中でよく見られた。この原因として、node間のTopic、Service通信の周期の乱れが直接ロボットに反映されていることが考えられる。現状、すべての通信に対してQoSを設定していないことから通信にTCP並の保証が掛かって、周期が乱れていることも考えられる。

 この静歩行の動作に、ZMPの観測や加速度・ジャイロセンサを元にした姿勢など、理論的な要素を加えていければと思う。
(直立姿勢に対しても行うが、静歩行動作に対してのほうがモチベが上がる)
 加えて、通信周りに懸念点が見つかったので、QoSの設定にも取り掛かっていく。

Screencast_2023_04_07.mov

Webots内のロボットの動作周期が時々狂う問題

一定周期で歩行パターンをPubして、数回の通信を挟んだ先でWebotsのロボットに動作命令を送っている。
他の状況とかは、静歩行のissueを参照。
以上の状態からして、パッケージ内での通信に原因がありそう。なので、まずはQoSの設定から検証(実験)していく。

以下、参考動作動画。動画の途中で倒れるのだが、その転倒の原因が今回の問題点。

huge.mp4

ロボットの各種情報を可視化

タイトル通り。ロボットのZMPやCoM、姿勢などをRviz2やProcessingなどで可視化したい。
ロボットのモデルを表示するならURDFへの移行が必要だろうが、各種情報だけなら不要だと思われる。

docker

dockerへの対応というよりも、docker内で環境を作ろうとしたメモ。

  • 動機
    • gazeboがうまく行かない理由に、WMやDEが純正ubuntuと異なることもあるのではと考え、純正Ubuntu22.04環境を新規作成した。また環境を作り直すのと一緒にDockerで環境が組めたら楽だと考えて、数時間格闘してみた。

以下、記録。

  • Docker側から、LocalのGUI環境を借りる感じで組んだ。(参考元サイト)。GitHubにもBackupで上げるつもり。
  • DockerでRviz2を動かすことはできた。
  • gazeboはエラーを吐きながら、かろうじて動いたり動かなかったりした。
    • ERROR文からして、どうもGPUを指定していないからだと思われる。failed tp load driver: irisとか言ってるし、立ち上がるとCPU使用率がほぼ頭打ちするし。GPUを使えるように設定すれば進展が生まれるだろう。
  • 他の動作確認は行っていない。ただsudoのpasswordが不明なままなので、新しいPackageをinstallしたいならDockerfileに書いてBuildする必要がある。

Launchファイルの作成

今の所、WRH, WSC, FK, IK, WPGをすべて別々で起動している。WRHはlaunchで、他はrunで起動している状態。

ので、全部をまとめて起動したい。そのLaunchファイルを作りたい。

ros2_controlへの対応

まずは、モデルをprotoのままで対応させてみる。有益かどうかは分からん。モータ名やセンサ名をproto内の名前に合わせてやれば良い。webots_ros2のturtlebot3のsampleが参考になる。あれもproto+ros2_control.

最終的には、モデルはurdfに移行したい。上記が達成できれば、後はモデルを入れ替えて名前の微調整をすれば勝てるはず。

逆**学解で、片足重心立ち

片足立ちをロボットにさせたい。

足踏みよりもこっちのほうが簡単で、見栄えもそこそこある。さらにZMPも意識する必要がある。から、足踏みよりもこっちを先に達成したい。

完成までの ToDo Flow

以下の手順で進めていく。それぞれのissueも立てているので、詳細な議論(?)はそこで。

  • 動歩行の実装
  • WPGの開発
  • ソフトウェアアーキテクチャの考え直し、実装
  • ロボットの各種情報を可視化
  • Webots内のロボットの動作周期が時々狂う問題
    • Webots内のロボットの動作周期を設定
    • ros2_controlへの対応
  • WSCの開発
  • Life Cycleの構成、設定、適用
  • ParameterServerの実装、移行
  • QoSの設定の追加、調整
  • ロボットモデルのURDFへの移行
  • pinocchioへの移行と実装

issueにするまでは行かない、やりたいこと

  • CI/CDも回せるようにしてバッジをつけたい。
  • ソフトウェアの名前を変えたい。良い固有名詞をつけたい。
  • ZennかQiitaに記事を書きたい。ちゃんと1つの技術がまとまった技術記事を。
  • Autowareなどのアーキテクチャを解析(?)したい。参考にできるかも(レベル差が雲泥だが)。

foxy -> humble移行

現コードをhumbleにやってもコンパイルが通らないので、コードの整理をしながら移行もしたい。
型宣言とか、ちょい変更されてる箇所とか、もっと綺麗にできるところを綺麗にして移行させたい。

foxy -> humble
Webots R2022b -> Webots R2023a
Ubuntu20.04 -> Kubuntu22.04(Ubuntu22.04相当)

QoSの設定の追加、調整

信頼性をどのくらいもたせるかの検証は必要。基本的にUDP基準でいいとは思うが。

QoSのプロファイルを決めて、それを適用する。
QoSのプロファイルに応じた変化を定量的に得られればPerfect。

ソフトウェアアーキテクチャの考え直し、実装

・1つのnodeで、Topic通信とService通信で競合が起きている可能性、歩行パターンのPublishとWebotsのstepの大きさの不一致から来る何らかの不具合の可能性
 ー> 考えられる問題はすべてコード云々ではなく、ソフトウェアアーキテクチャに問題があると判断。もし違ったとしても、アーキテクチャからくる可能性は除去できる(競合と不一致を解消すれば)。

=> ソフトウェアのアーキテクチャを考え直し、改めて適用する。

モデルの決定&欲しい情報(=データ)の取得

・制御に用いるモデルを決める。
 ・そのモデルが必要とする情報を把握しておき、それを判断基準の1つとする。
・欲しい情報を観測・取得する。
 ・できれば、実時間にあった取得タイミングが取れれば最高。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.