caelan / pybullet-planning

PyBullet Planning
https://pypi.org/project/pybullet-planning/
MIT License
401 stars 113 forks source link

What should I set the "free_joints" in IKFastInfo for my Fetch robot? #5

Closed yuchen-x closed 3 years ago

yuchen-x commented 3 years ago

Hi,

I'd like to build an ikFast module for a Fetch robot and use it in pybullet env.

Based on what you have for the franka_panda robot:

1) I created the ikfast solver for my fetch's arm via "ikmodel.autogenerate()" and get the files "ikfast.h, ikfast_fetch_arm.cpp, ikfast_fetch_arm.so"; 2) I copied the python bindings stuff (line 12835 - 12995) in "ikfast_panda_arm.cpp" into my "ikfast_fetch_arm.cpp"; 3) I also copied all relevant files into my workspace; 4) After running "compile_ikfast", it shows "ikfast module ikfast_fetch_arm imported successful"

I noticed you set a free_joint for panda in ik.py, I was wondering what this free_joint means?

If I leave it as an empty list, I got an error saying "get_ik function takes exactly 3 arguments (2 given)" for line 26 shown below:

Screenshot from 2020-10-13 16-59-12

If I set the free_joint as "wrist_roll_joint", I always get none solution. Is this because I didn't set correct free_joints? if so do you have any idea what the correct joint to be set? Thank you very much!

I also attached the output of dump_body(robot) below:

Screenshot from 2020-10-13 17-01-54

yuchen-x commented 3 years ago

I noticed that there was a comment saying the free joint is for a circular joint. Fetch arm has three circular joints "upperarm_roll_joint", "forearm_roll_joint" and "wrist_roll_joint", so I guess I can set all of them as free joints. And, finally I got ik solver work!