forked from galou/freecad.cross
-
-
Notifications
You must be signed in to change notification settings - Fork 14
/
TODO
74 lines (65 loc) · 4.97 KB
/
TODO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
Bugs
----
- Port all proxies to fpo::Proxy.
- Fix CROSS complaining about non-existing directory when exporting to URDF into a non-existing directory (the directory is created but CROSS complains though).
- Fix "[Cross::Robot] still touched after recompute" when linking a planning scene to a robot.
- Fix the placement of some parts in assembly_from_urdf.py (issue with `forearm_visual` when loading `robot_5r.urdf.xacro`).
- Compute the `Origin` of a joint even if it doesn't have any `Child`.
- Fix the placement of simplified mesh generated via CROSS when selecting the visual- or collision part inside a Cross::Link.
- Clear necessary fields when `XacroObject.InputFile` is reset.
- Handle empty star-style macro parameters (e.g. `*origin` in `robotiq-3f-gripper_articulated.urdf.xacro`).
- Fix bug when setting a prefix in XacroObject, then setting it to ''. Some objects are deleted but not all and the Cross::Robot cannot be rebuilt.
- Fix workbench loading without ROS.
- Bug with units with `SetJoints`:
```
Traceback (most recent call last):
File "/home/gael/.local/share/FreeCAD/Mod/freecad.cross/freecad/cross/ui/set_joints_dialog.py", line 153, in _on_table_edited
self.robot.Proxy.set_joint_values(self._joint_values)
File "/home/gael/.local/share/FreeCAD/Mod/freecad.cross/freecad/cross/robot_proxy.py", line 380, in set_joint_values
value = quantity_as(value, target_units[unit_type])
File "/home/gael/.local/share/FreeCAD/Mod/freecad.cross/freecad/cross/freecad_utils.py", line 602, in quantity_as
return float(q.getValueAs(to_))
ValueError: Unit mismatch
```
Missing features
----------------
- Implement toggling the visibility of a link. (EASY)
- Implement toggling the visibility of joints when the visibility of the robot is toggled. (EASY)
- Use unit (2,1,0,0,0,0,0,0) for moments of inertia. (EASY)
- Validate Label2 (or Label if Label2 is not defined) against valid URDF names ({Robot,Link,Joint}.onBeforeChange()).
The behavior must be configurable: a) Do nothing (but export valid names, as already implemented) b) Warn c) Reject. (MEDIUM)
- Add a xacro export with `robot_macro.xacro` and `robot.urdf.xacro`. For Workcell, use the current URDF export and replace the current URDF export with pure URDF export. (EASY)
- Provide a tool to set the inertial parameters automatically. (DIFFICULT)
- Add two coordinate systems for each Cross::Joint in `assembly_from_urdf` (parent = urdf_joint.origin, child = parent * get_actuation_placement()). (EASY)
- Support all joint types. (MEDIUM)
- Generate a robot from an Assembly4 assembly. (DIFFICULT)
- Ask for the main macro and parameter values in XacroObject before generating the first robot. (EASY)
- Ask for the parameter values in XacroObject when changing the main macro to avoid error on robot generation. (EASY)
Nice to have
------------
- Set `JointAxisLength` to a value adapted to the robot size when importing URDF. (EASY)
- Replace values such as 1.57 with ${pi / 2} in xacro exports. (EASY)
- Visualize inertia. (MEDIUM)
- Do not export twice the same mesh (only to gain time when exporting). (EASY)
- Show a warning when the root link is not base_link and the end-effector is not tool0. Implies detecting single-chain robots. (EASY)
- Disable OutputPath for robots inside XacroObject. (EASY)
- Support Robot inside Workcell. (MEDIUM)
- Reflect parameters from Robot's joint values in XacroObject. (EASY)
- Reflect parameters from all XacroObjects' joint values in Workcell. (EASY)
- Update the robot during editing with `SetJoints`, Assembly4 does update during editing. (EASY, probably)
- Do not inherit from PythonFeatureGroup but manage the view objects ourselves (HARD).
- Implement [yourdf_py](https://github.com/clemense/yourdfpy) as main URDF parsing library. Cf. [rerun_urdf.py](https://github.com/rerun-io/rerun/blob/main/examples/python/ros_node/rerun_urdf.py) for an example.
- Implement [urdf_py](https://github.com/mmatl/urdfpy) as alternative URDF parsing library.
- Implement [xacro2urdf](https://github.com/doctorsrn/xacro2urdf) as a xacro alternative if ROS is not available.
Lower priority
--------------
- Fix unremoved objects and dandling links with a workcell with `panda_arm.xacro` and `hand.xacro` when setting `ns` xacro parameter in `hand.xacro`.
- Fix Attachment for the root link in `assembly_from_urdf`
- URDF editor integrated in Robot
- Fix CROSS complaining that V-HACD is not found on the first time it is set.
- Do not create an extra FreeCAD link when importing a URDF since the part can be directly added to the ROS links (i.e. instead of creating a FreeCAD link and adding the FreeCAD link to the ROS link). FreeCAD links are only necessary if the parts are in a different file.
Implementation
--------------
- Use `convert_units` and `freecad_utils.unit_type` wherever possible
- Use [tenacity](https://tenacity.readthedocs.io/en/latest/) to better manage unreliable functions.
- Use urllib to parse filename element in URDF (cf. [rerun_urdf.py](https://github.com/rerun-io/rerun/blob/main/examples/python/ros_node/rerun_urdf.py))