cadop / fusion360descriptor Goto Github PK
View Code? Open in Web Editor NEWA URDF Exporter for Fusion 360
A URDF Exporter for Fusion 360
For some reason the bodies are all exporting even when they are not visible. It seems like the top level component can use the isLightBulbOn
https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-90B68AA9-EADE-4597-8201-1371CCA96E38 but that doesn't consider if its visible in the scene. IsVisible
cares about visibility https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-bc2399ce-a9b0-4247-9779-e4aae936abad
I can't remember why we did this and not isVisible
I think it might have been because we turned off the lightbulb at some point, and was then just checking if it was on as well?
Option 1. Normal version. Current output method with a single mesh file.
Option 2. Detail version. Separate meshes with each component, Export meshes by every component, and put it XML as visual attributes.
EX)
fusion360descriptor/FullBody_description/urdf/FullBody.urdf
Lines 1 to 44 in 9e69bd0
So multiple visual and collision attributes are ok. And we should not forget to put color info like this way at just below of robot name.
Maybe option 4. Simplified with a detailed version. If we separate mesh with components then it could be better to build convex hulls.
I am not sure if this makes the simulator slower or not. So this might need some test.
These images shows the "nut and bolt" model where the nut is on the bolt with a cylindrical joint and is able to move up and down while rotating on the bolt.
This is the same model but in the physics simulator (pybullet). The bolt is displayed but the nut on it is not created/displayed in the simulator.
If there is a component within a component, get_flat_body()
will not populate body_list
with the bodies from that specific component that houses other bodies and the component.
For example, here is a hierarchy with components only having bodies within:
These are the bodies that are generated in body_list:
Then here is another hierarchy with a component within another component:
These are the bodies that are generated in body_list:
It is shown here that the bodies from the component that houses another component do not appear.
The rod in the gear appears to "fall over" as there is no gear generated in the simulator to support it.
This is what the model should look like (displayed in Fusion 360)
This is the model in the physics simulator (pybullet), appears to be a rod that starts standing up and then falls over. No gear shown and only one rod in the simulator, however there should be two gears and two rods as shown in the first image.
Make sure that the joints will not move the components they are attached to if it is locked, not sure if problem, will test. If this is a problem:
if joint.isLocked:
joint_dict['upper_limit'] = joint_angle
joint_dict['lower_limit'] = joint_angle
or something along these lines
For omniverse in future.
file:///C:/Users/local%20user/AppData/Local/ov/pkg/create-2022.1.3/kit/extsPhysics/omni.physx.ui-1.4.13-5.1/docs/main/source/extensions/omni.physx/docs/index.html#joints
I found that this parameter(document unit cm, and target unit m) is working very well for joints and inertia info. I don't know why but it might be default output of fusion might be cm. I checked it with another project. Could I share this with some people in the lab for more cases?
There seems to be some sort of issue (possibly on just my end), when the script is launched through Fusion 360 by pressing "Edit", I can't debug the Descriptor.py file.
This is the error message in the Debug Console:
I can debug the other Fusion 360 sample scripts such as Bolt.py and Bottle.py, however VSCode says it can't read this python script. I've uninstalled and reinstalled the Python extensions to have the correct versions by using Fusion 360 to install what's needed.
(The steps I've taken are in comment 17 of this autodesk forum post, part B: https://forums.autodesk.com/t5/fusion-360-api-and-scripts/not-able-to-debug-scripts-add-ins-in-visual-studio-code/td-p/9174815 )
However, issue persists.
There is an error when exporting urdf with slider joints.
Sliderjoint does not have rotationAxisVector as a property.
Current we ignore the joint angle being set by the joint (maybe?)
Currently it is extremely difficult to switch or change the link configuration. For example, if we put the ground joint in the middle and then switch to the end, the parent/child relationship is wrong for all of these joints. We should make either a tool or some checkbox that gets generated for each joint that can be set to switch them.
The first case had a problem with the joint order. UI's component 1 doesn't work. review is working well. So if the robot model joint in fusion has component1 as a child link then always works. So UI doesn't make a different result.
Could you check it? I found the comment about it. https://github.com/cadop/fusion360xml/blob/c63b5ddf8c9fb6e408efd490b80aa9175c6da2a1/Descriptor/core/parser.py#L276
Should we move the tutorial to the readme and keep the rest in the getting started (faq, etc)?
The get_flat_bodies()
function does not append any bodies to the body list, so the mass function _inertia
does not work
There has to be a joint connected/attached to a component otherwise it will not be generated in the URDF. The .stl file is still generated
This issue is likely caused by the second half of the _build_links()
function from for k, joint...
onwards
https://en.wikipedia.org/wiki/Denavit%E2%80%93Hartenberg_parameters
The joint position is taken as the control point of numerous algorithms. And those algorithms have some function or parameters to put some offset from joint position to the control point. But many robotics people utilize DH parameter joint position decision because we learn this at lectures or in textbooks. And even DH does not guarantee a unique solution. Because the revolute joint can be placed at any point of the actuator axis. But this is quite a good feature for convenience. The joint position will be the same as with the instinctive point of the student who learns and solves the DH-parameter at school.
But this is not much matter stuff for now.
When changing between units or setting the directory, the UI maintains its reference. However, when using the preview button, it seems that the UI is lost, and after it calculates the joint configuration, changing any of the other dropdowns does not get registered.
I suspect it could be a handler
issue. The other possibility is that something is reloading the autodesk core which ends up overwriting its callbacks to the UI we implemented. At the moment not sure how to debug this as the program already terminates early from the callback.
When I use the same file for the same robot as a link, stl meshes are just overwritten. so in this case we need to warn about it or make some additional file name.
URDF does not support ball joints
Hack can be created by creating fake bodies in place with a hinge joint for each axis of the ball joint
This is an image of the ball joint model in Fusion 360.
Error displayed when pressing on "Preview Links" button in the UI. Nothing happens when pressing on "Preview"
Error displayed when pressing on "Generate" button in the UI.
Currently readme is not very convincing of how easy it is to use the project. We should have some GIF
showing the GUI and such.
error message: connect ECONNREFUSED 127.0.0.1:9000
Fix: (taken from https://forums.autodesk.com/t5/fusion-360-api-and-scripts/not-able-to-debug-scripts-add-ins-in-visual-studio-code/td-p/9174815 comment 17)
Clean install of python extensions using Fusion 360
There should be a demo scene for us to internally test and people to try out.
Perhaps it should also include different ways fusion can construct the joints so we can test particular issues?
The images in the getting started are different sizes, making it hard to read.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.