Open HiroIshida opened 2 years ago
石田さん、ありがとうございます。
可能であれば、ロボットを変えても簡単に試せるようになっていると嬉しいです。(例えば、loadするファイルを買えるだけで、fetchでもPR2でも使えるようにする)
また、ROS化やドキュメンテーションの整備など僕にもできそうなところがあれば、タスクを振ってもらえれば僕も手伝います。
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によってビューワが出ることを確認できました。
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によってビューワが出ることを確認できました。
上のコメントに関してはプルリクエストを出しました。 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
PRありがとう。github workflowでテストするようにしてたんだけど, attrのバグをテストで拾えなかったのは謎だな... あと山口君のPRでテストが走らないのはなんでだろう.. もしかしてprivateだからかな.. 全く同じコミット履歴のPRを僕が作成するとテスト走るんだけど https://github.com/HiroIshida/yamaopt/pull/3 privateレポジトリだからかな.
attrのバグを拾えなかったのは、example.pyをテストしていないからでしょうか? (pytestでテストされているのかは確認できていないです)
https://github.com/HiroIshida/yamaopt/blob/master/.github/workflows/ci.yaml
まだプロトタイプで, 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をためす.
青い球が観測したい地点(
target_pos
). 赤いのが制約条件を定めるポリゴン. エンドエフェクタがポリゴンに垂直になるようにIKがとかれている. 青い球の位置をずらすと, IKの解も変化しているのがわかる(下図) ただし,example.py
のpolygon
はポリゴンの頂点を順番(時計回り, 半時計まわりはどっちでもよい)に並べてnumpy行列にしたもの. vertexが4つなら, 4 x 3 行列.TODO
major 山口
major 石田
minor 石田