HiroIshida / yamaopt

robotic optimal sensor placement
MIT License
0 stars 1 forks source link

使い方とTODO #1

Open HiroIshida opened 2 years ago

HiroIshida commented 2 years ago

まだプロトタイプで, readmeに書くとcommit logが汚くなるのでとりあえずここに...

install

python2.x ではscikit-robotのインストールのために, 次のapt installが必要: sudo apt-get install -y libspatialindex-dev freeglut3-dev libsuitesparse-dev libblas-dev liblapack-dev その後普通にインストール. pip install -e .

exampleをためす.

cd examples
./examples.py

青い球が観測したい地点( target_pos). 赤いのが制約条件を定めるポリゴン. エンドエフェクタがポリゴンに垂直になるようにIKがとかれている. 青い球の位置をずらすと, IKの解も変化しているのがわかる(下図) ただし, example.pypolygonはポリゴンの頂点を順番(時計回り, 半時計まわりはどっちでもよい)に並べてnumpy行列にしたもの. vertexが4つなら, 4 x 3 行列.

TODO

major 山口

major 石田

708yamaguchi commented 2 years ago

石田さん、ありがとうございます。

可能であれば、ロボットを変えても簡単に試せるようになっていると嬉しいです。(例えば、loadするファイルを買えるだけで、fetchでもPR2でも使えるようにする)

また、ROS化やドキュメンテーションの整備など僕にもできそうなところがあれば、タスクを振ってもらえれば僕も手伝います。

708yamaguchi commented 2 years ago

Python2で実行すると以下のようなエラーが出てしまいます。

$ ./example.py 
Traceback (most recent call last):
  File "./example.py", line 9, in <module>
    from yamaopt.solver import KinematicSolver, SolverConfig
  File "/home/leus/yamaopt/yamaopt/solver.py", line 3, in <module>
    from tinyfk import RobotModel
  File "/home/leus/.local/lib/python2.7/site-packages/tinyfk/__init__.py", line 4, in <module>
    from . import _tinyfk
ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by /home/leus/.local/lib/python2.7/site-packages/tinyfk/_tinyfk.so)

以下のQ&Aをもとにlibstdc++6やgcc9を入れるとこのエラーは解消されました。 https://askubuntu.com/questions/1166292/version-glibcxx-3-4-26-not-found-even-though-libstdc-so-6-recent-enough

しかし、それでも以下のようなエラーが出ます。

$ python example.py 
Traceback (most recent call last):
  File "example.py", line 9, in <module>
    from yamaopt.solver import KinematicSolver, SolverConfig
  File "/home/leus/yamaopt/yamaopt/solver.py", line 8, in <module>
    from yamaopt.polygon_constraint import polygon_to_trans_constraint
  File "/home/leus/yamaopt/yamaopt/polygon_constraint.py", line 6, in <module>
    @attr.s # like a dataclass in python3
AttributeError: 'module' object has no attribute 's'

以下のQ&Aを参考にして、attrを消してattrsをpip installすると動くようになりました。(@attr.sするには、attrではなくattrsパッケージをインストールするらしいです) https://stackoverflow.com/questions/49228744/attributeerror-module-attr-has-no-attribute-s

次のエラーは以下のとおりです。

$ python example.py 
Traceback (most recent call last):
  File "example.py", line 50, in <module>
    kinsol = KinematicSolver(config)
  File "/home/leus/yamaopt/yamaopt/solver.py", line 32, in __init__
    self.kin = RobotModel(urdf_path)
  File "/home/leus/.local/lib/python2.7/site-packages/tinyfk/__init__.py", line 38, in __init__
    with open(urdfpath, 'r') as reader:
IOError: [Errno 2] No such file or directory: '/home/leus/.skrobot/pr2_description/pr2.urdf'

example.pyの中に、以下のように書くことで解決しました。

from skrobot.data import pr2_urdfpath

pr2_urdfpath()

ここまでで、python example.pyによってビューワが出ることを確認できました。

708yamaguchi commented 2 years ago

Python3で実行すると以下のようなエラーが出てしまいます。

$ pip3 install -e .
Obtaining file:///home/leus/yamaopt
    Complete output from command python setup.py egg_info:
    running egg_info
    writing yamaopt.egg-info/PKG-INFO
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/home/leus/yamaopt/setup.py", line 19, in <module>
        install_requires=install_requires,
      File "/home/leus/.local/lib/python3.6/site-packages/setuptools/__init__.py", line 153, in setup
        return distutils.core.setup(**attrs)
      File "/usr/lib/python3.6/distutils/core.py", line 148, in setup
        dist.run_commands()
      File "/usr/lib/python3.6/distutils/dist.py", line 955, in run_commands
        self.run_command(cmd)
      File "/usr/lib/python3.6/distutils/dist.py", line 974, in run_command
        cmd_obj.run()
      File "/home/leus/.local/lib/python3.6/site-packages/setuptools/command/egg_info.py", line 292, in run
        writer(self, ep.name, os.path.join(self.egg_info, ep.name))
      File "/home/leus/.local/lib/python3.6/site-packages/setuptools/command/egg_info.py", line 656, in write_pkg_info
        metadata.write_pkg_info(cmd.egg_info)
      File "/usr/lib/python3.6/distutils/dist.py", line 1106, in write_pkg_info
        self.write_pkg_file(pkg_info)
      File "/home/leus/.local/lib/python3.6/site-packages/setuptools/dist.py", line 185, in write_pkg_file
        license = rfc822_escape(self.get_license())
      File "/usr/lib/python3.6/distutils/util.py", line 474, in rfc822_escape
        lines = header.split('\n')
    AttributeError: '_Printer' object has no attribute 'split'

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /home/leus/yamaopt/

このエラーは、scikit-robotを真似して以下のようにlicenseを書くとなくなりました。

    license='MIT',
    classifiers=[
        'Development Status :: 5 - Production/Stable',
        'Intended Audience :: Developers',
        'Natural Language :: English',
        'License :: OSI Approved :: MIT License',
        'Programming Language :: Python',
        'Programming Language :: Python :: 2.7',
        'Programming Language :: Python :: 3.5',
        'Programming Language :: Python :: 3.6',
        'Programming Language :: Python :: 3.7',
        'Programming Language :: Python :: Implementation :: CPython',
    ],

https://github.com/iory/scikit-robot/blob/7f7427c420f8aeaa91cf380a53f33fac774bb016/setup.py#L72-L83

最終的に、上のPython2と同じく以下のエラーが出てしまいます。

$ python3 example.py 
Traceback (most recent call last):
  File "example.py", line 9, in <module>
    from yamaopt.solver import KinematicSolver, SolverConfig
  File "/home/leus/yamaopt/yamaopt/solver.py", line 8, in <module>
    from yamaopt.polygon_constraint import polygon_to_trans_constraint
  File "/home/leus/yamaopt/yamaopt/polygon_constraint.py", line 6, in <module>
    @attr.s # like a dataclass in python3
AttributeError: module 'attr' has no attribute 's'

これも上記Python2と同様に以下のQ&Aを参考にして、attrを消してattrsをpip3 installすると動くようになりました。(@attr.sするには、attrではなくattrsパッケージをインストールするらしいです) https://stackoverflow.com/questions/49228744/attributeerror-module-attr-has-no-attribute-s

次のエラーは以下のとおりですが、skrobotの使い方はどこを見れば良いでしょう??

$ python example.py 
Traceback (most recent call last):
  File "example.py", line 50, in <module>
    kinsol = KinematicSolver(config)
  File "/home/leus/yamaopt/yamaopt/solver.py", line 32, in __init__
    self.kin = RobotModel(urdf_path)
  File "/home/leus/.local/lib/python2.7/site-packages/tinyfk/__init__.py", line 38, in __init__
    with open(urdfpath, 'r') as reader:
IOError: [Errno 2] No such file or directory: '/home/leus/.skrobot/pr2_description/pr2.urdf'

example.pyの中に、以下のように書くことで解決しました。

from skrobot.data import pr2_urdfpath

pr2_urdfpath()

ここまでで、python example.pyによってビューワが出ることを確認できました。

708yamaguchi commented 2 years ago

上のコメントに関してはプルリクエストを出しました。 https://github.com/HiroIshida/yamaopt/pull/2

ただ、以下の`GLIBCXX_3.4.26' not foundに関してはREADMEに追記してもらえればなと思います。

If you face the following error,

ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26' not found

please install gcc-9 and libstdc++6

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt install gcc-9
sudo apt install libstdc++6

https://askubuntu.com/questions/1166292/version-glibcxx-3-4-26-not-found-even-though-libstdc-so-6-recent-enough https://askubuntu.com/questions/1140183/install-gcc-9-on-ubuntu-18-04

HiroIshida commented 2 years ago

PRありがとう。github workflowでテストするようにしてたんだけど, attrのバグをテストで拾えなかったのは謎だな... あと山口君のPRでテストが走らないのはなんでだろう.. もしかしてprivateだからかな.. 全く同じコミット履歴のPRを僕が作成するとテスト走るんだけど https://github.com/HiroIshida/yamaopt/pull/3 privateレポジトリだからかな.

708yamaguchi commented 2 years ago

attrのバグを拾えなかったのは、example.pyをテストしていないからでしょうか? (pytestでテストされているのかは確認できていないです)

https://github.com/HiroIshida/yamaopt/blob/master/.github/workflows/ci.yaml