dqrobotics / python

The DQ Robotics library in Python
https://dqrobotics.github.io
GNU Lesser General Public License v3.0
26 stars 9 forks source link

[Question] The available robots models are not working with the DQ_QuadraticProgrammingSolver #25

Closed marcos-pereira closed 3 years ago

marcos-pereira commented 3 years ago

Bug description

To Reproduce

Code

from dqrobotics import *
from dqrobotics.solvers import DQ_QuadraticProgrammingSolver
import dqrobotics.robot_control as dq_controllers
from dqrobotics.robot_control import ControlObjective
from dqrobotics.robots           import KukaLw4Robot

robot = KukaLw4Robot.kinematics()
qp_solver = DQ_QuadraticProgrammingSolver
controller = dq_controllers.DQ_ClassicQPController(robot, qp_solver)
controller.set_control_objective(ControlObjective.Pose)

Output

Traceback (most recent call last):
  File "qp_solver_issue.py", line 9, in <module>
    controller = dq_controllers.DQ_ClassicQPController(robot, qp_solver)
TypeError: __init__(): incompatible constructor arguments. The following argument types are supported:
    1. dqrobotics._dqrobotics._robot_control.DQ_ClassicQPController(arg0: dqrobotics._dqrobotics._robot_modeling.DQ_Kinematics, arg1: dqrobotics._dqrobotics._solvers.DQ_QuadraticProgrammingSolver)

Invoked with: <dqrobotics._dqrobotics._robot_modeling.DQ_SerialManipulatorDH object at 0x7f3b34cfa3f0>, <class 'dqrobotics._dqrobotics._solvers.DQ_QuadraticProgrammingSolver'>

Expected behavior

Environment:

Additional information

mmmarinho commented 3 years ago

@marcos-pereira

Thanks for the report.

I think this bug is not present when using dqrobotics/cpp#34. However, it might take us some time to update it.

marcos-pereira commented 3 years ago

@mmmarinho , thanks for the answer. In the meantime, I will migrate some of my python codes to cplusplus.

mmmarinho commented 3 years ago

@marcos-pereira

Sorry, but there was actually no bug. The minimal example you sent is incorrect because DQ_QuadraticProgrammingSolver is an abstract class and cannot be instanced (it is not supposed to be).

You need to choose a concrete subclass of DQ_QuadraticProgrammingSolver instead. In Python, I recommend starting with DQ_QuadProgSolver.

from dqrobotics import *
from dqrobotics.solvers import DQ_QuadprogSolver
import dqrobotics.robot_control as dq_controllers
from dqrobotics.robot_control import ControlObjective
from dqrobotics.robots import KukaLw4Robot

robot = KukaLw4Robot.kinematics()
qp_solver = DQ_QuadprogSolver()
controller = dq_controllers.DQ_ClassicQPController(robot, qp_solver)
controller.set_control_objective(ControlObjective.Pose)

To use it, don't forget to install quadprog. python3 -m pip install quadprog --user

marcos-pereira commented 3 years ago

@mmmarinho many thanks! I was forgetting to install quadprog. Maybe you could add this information to the ReadTheDocs Python installation. Similar to the C++ interfaces where you mention the need for CPLEX.

mmmarinho commented 3 years ago

@marcos-pereira

Indeed. In fact, you're welcome to update the docs with that information and generate a pull request.