|
14 | 14 | from functools import wraps
|
15 | 15 | from numpy import ndarray, cos, sin, array
|
16 | 16 | from spatialgeometry import Shape
|
| 17 | +from copy import deepcopy |
17 | 18 |
|
18 | 19 | # _eps = np.finfo(np.float64).eps
|
19 | 20 |
|
@@ -389,6 +390,47 @@ def __repr__(self):
|
389 | 390 | args.extend(super()._params())
|
390 | 391 | return name + "(" + ", ".join(args) + ")"
|
391 | 392 |
|
| 393 | + def __deepcopy__(self, memo): |
| 394 | + kwargs = { |
| 395 | + "name": deepcopy(self.name), |
| 396 | + "joint_name": deepcopy(self._joint_name), |
| 397 | + "m": deepcopy(self.m), |
| 398 | + "r": deepcopy(self.r), |
| 399 | + "I": deepcopy(self.I), |
| 400 | + "Jm": deepcopy(self.Jm), |
| 401 | + "B": deepcopy(self.B), |
| 402 | + "Tc": deepcopy(self.Tc), |
| 403 | + "G": deepcopy(self.G), |
| 404 | + "qlim": deepcopy(self.qlim), |
| 405 | + "geometry": [shape.copy() for shape in self._geometry], |
| 406 | + "collision": [shape.copy() for shape in self._collision], |
| 407 | + "d": deepcopy(self.d), |
| 408 | + "alpha": deepcopy(self.alpha), |
| 409 | + "theta": deepcopy(self.theta), |
| 410 | + "a": deepcopy(self.a), |
| 411 | + "sigma": deepcopy(self.sigma), |
| 412 | + "mdh": deepcopy(self.mdh), |
| 413 | + "offset": deepcopy(self.offset), |
| 414 | + "flip": deepcopy(self.isflip), |
| 415 | + } |
| 416 | + |
| 417 | + cls = self.__class__ |
| 418 | + |
| 419 | + if "Revolute" in str(cls): |
| 420 | + del kwargs["theta"] |
| 421 | + del kwargs["sigma"] |
| 422 | + del kwargs["mdh"] |
| 423 | + elif "Prismatic" in str(cls): |
| 424 | + del kwargs["d"] |
| 425 | + del kwargs["sigma"] |
| 426 | + del kwargs["mdh"] |
| 427 | + |
| 428 | + result = cls(**kwargs) |
| 429 | + |
| 430 | + result.sigma = self.sigma |
| 431 | + memo[id(self)] = result |
| 432 | + return result |
| 433 | + |
392 | 434 | # -------------------------------------------------------------------------- #
|
393 | 435 |
|
394 | 436 | @property
|
|
0 commit comments