Extension: Embedded VS Code for NVIDIA Omniverse

Dear community,

In the same line as Extension: Embedded Jupyter Notebook for NVIDIA Omniverse is the current one, this time for VS Code…

This extension can be described as the VS Code version of Omniverse’s Script Editor. It allows to execute python code, embedded in the current NVIDIA Omniverse application scope, from the VS Code editor and displays the results in the OUTPUT panel (under Embedded VS Code for NVIDIA Omniverse) of the VS Code editor

Target applications: Any NVIDIA Omniverse app
Supported OS: Windows and Linux

Check the README for setup, usage, implementation details, and limitations

1 Like

I’ll try it out today. You should update this post with the link to the repo. ;)

Upss, Already edited 😅

Testing this at the moment. Working flawlessly and seems to be exactly what I was looking for. Nice work and thanks a lot!

Yup! This is really great. One comment:

  1. carb logging doesn’t show up in the VSCode. I’m not bothered by it, but maybe more important for someone running remotely or headless. Then again, maybe carb logging is overkill for these REPL-type workflows.

Questions:

  1. Are you open to having other contributors?
  2. If so, what do you think about including the VSCode extension source in this repo too to keep it all in one place and so others can contribute to both parts easily?

Hi @mati-nvidia

Following your comment, I updated the extension to show carb loggings in the VS Code “Embedded VS Code for NVIDIA Omniverse (carb logging)” output panel. Regarding this feature, there is a limitation:

  • Carb log displaying is only available from Python calls. Logs generated by NVIDIA Omniverse applications/extensions implemented with another programming language (e.g. C/C++) are not displayed in the output panel

Yes, all my public code on GitHub is open to contributors :) …
Then, and following your advice, now both extensions the one for Omniverse and the one for VS Code are in the same place (the repository indicated in the initial post on this topic).

Many thanks for the feedback

Dear community

A new version of the extension (the VS Code extension - version 0.1.0) has been released…
With this version, a custom view container for Omniverse has been included as shown in the image below

The view container includes the followings:

  • Commands: quick access to the extension commands to run Python code locally or remotely

  • Snippets: most common Kit and USD snippets, and the Kit commands

    The Kit commands (with their parameters, default values, and annotations) are automatically generated from the list of commands available from Create, Code, and Isaac Sim on Linux. Some commands may not be available in some Omniverse applications

    Snippets and specific resources for Isaac Sim extensions and robotics will be added soon!!!

  • Resources: quick access to all the Omniverse documentation (without leaving the VS Code editor) and resources for developers. Also, access (as external links) to all the Omniverse forums (and Isaac Sim forum)




1 Like

Dear community

A new version of the extension (the VS Code extension - version 0.2.0) has been released…

With this version, more snippets and resources have been added… with emphasis on those related to Python Scripting Component (Snippets > Kit > Python scripting component) and Isaac Sim Core API.

In addition, a button has been added to expand the list of snippets and facilitate the search among all the available ones:

1 Like

coool!
It’s so useful. thank you very much !!

Hi @pre3ice

Thank you for your comments. Glad to contribute to and in the community :)

Very nicely done @toni-sm! Our team has really started to use this extension in our workflows where we integrate data from various sources into USD for visualization and analysis in VS code.

However, there are some things that we haven’t really got the hang of yet. Maybe you have thoughts on what we can do?

-Typically we like to mix Create visualizations with 2D plots (matplotlib) in our scripts. Our experience so far is that matplotlib in VS code seems to grab the python process and halt Create. Ideally, it would have been nice if we could have multiple 2D plot windows in VS code along with stage updates for a single script launch.

-Stepping through breakpoints when the script is triggered from VS code debugger. Is this supported? We haven’t figured out how to do it…

-It seems changes in imported modules are not typically picked up when a script is rerun. Is there a way to force reloads without restarting Create? We made some attempts with importlib.reload(…) with little luck.

again, fantastic work! A game changer for us.
/Eric

Hi @eric.nordstrom.pettigrew

The extension works following the next steps:

  • Send the text of the active tab code in VSCode to the Omniverse application
  • Execute the code in the Omniverse application’s Python global and local scope
  • Send the print output of the executed code from the Omniverse application to VSCode for display in the output panel

Graph generation and visualization within VSCode are outside the implementation of this extension.

You could display the matplotlib graphs in a non-blocking way (see matplotlib.pyplot.show), but in this case, you would have to ensure that the event loop is running to have responsive figures. For this, you might use the Create’s event loop as indicated in this post: Omniverse Create and Qt - #3 by mati-nvidia

For drawing non-nteractive matplotlib charts inside Omniverse, you can use the semu.data.visualizer user extension. It allows to switch Matplotlib and OpenCV backend to display graphics and images inside NVIDIA Omniverse apps without modifying the code logic

No. Because the execution of the code is not done on the file that contains it (note: it is possible to execute code using the extension without having to save the code to a file), but of its contents, it is not possible to debug the execution through VSCode and the omni.kit.debug.vscode extension

Currently, the extension is not able to automatically reload modules that have changed. A functionality to register the loaded modules during code execution by the extension to reload them later could be implemented but it is not on my roadmap at the moment.