Unable to get Synthesis Code Emulator working in Java

Hello Chief Delphi Community,

Team 612 has been using Synthesis as a means to test/experiment with robot design as a result of the COVID-19 pandemic. Unfortunately, we have run into a few problems with Synthesis and are struggling to figure out how to resolve them. We have successfully used synthesis to test robot CAD designs and see how they interact with the field. However, we are unable to get the code emulator working. Our problem is that when we upload the robot code, the connection light does not show up (as seen in the screenshot below). We initially tried to use full robot code (unsuccessful), then we tried to just get the drivetrain working (also unsuccessful), and finally we are still unable to even get a print statement working in the Robot IO Panel. We use Java and visual studio, and our code successfully builds. We were wondering if there was anyone who knows how to fix this problem.

Thanks,
FRC 612

2 Likes

I’m going to assume you’re using the 2020 version of WPILib. As far as I’m aware, Autodesk Synthesis is incompatible with the 2020 WPILib changes (See here for a bit more info) and hasn’t been updated to support the 2020 Changes.

If you want to get some form of code working with Synthesis, you could downport your code using the 2019 WPILib library, which should work.

I have the same issue but with the officially supported version by synthesis. See more here

Describe the bug
After installing the latest version of Autodesk Inventor Professional 2021 and Synthesis, my code will not run. The status of each process in the driver station eventually turns green except for Robot Code Connected. The driver station log file says that the emulator has the 2019.4.1 version. I have as well built my code using the 2019.4.1 version. It also seems as if there was an error when initializing the robot, a linux file / directory error appears. The log is attached below.

To Reproduce
Steps to reproduce the behavior:

0.1. Download SynthesisRobotCode, extract it and build it using gradle (e.g. gradle build).

  1. Open Synthesis (4.3.3.0)
  2. Select a robot
  3. Go to Emulation
  4. Select “Start Emulator” Wait for the ‘Emulator Connected’ green status light located on the Driver Station.
  5. Select “Select Code” and select the .jar file (located at SynthesisRobotCode/build/libs/SynthesisRobotCode.jar)Wait for the 'Robot Code Uploaded", “Robot Code Running”, and “Robot Code Connected” green status lights located on the Driver Station.
    Step 5 is where the bug happens, “Robot Code Connected” never changes to a green status light.
  6. Click on “Use emulation”.

Expected behavior
it should show all 4 green status lights on the driver station and be able to use all driver station modes.

Screenshots

Desktop (please complete the following information):

  • OS: Windows 10 Home
  • Version 1909
  • Synthesis version 4.3.3.0

Resources

@jdao as you can see here, I am using the 2019.4.1 version.

It’s been a few months since I got this working, but this is what I used:

  • Autodesk Synthesis 4.3.2
    – I forgot to mention that this was done using a slightly older version of Autodesk Synthesis. This is the lastest 2019 release that worked for me.
    – If you want to work with the 2020 field, you can download the latest version and grab the field files from its default download location to use in the 2019 version (Windows: C:\Users<username>\AppData\Roaming\Autodesk\Synthesis\Fields. For Macs, go to the Synthesis Field menu and look at the default path listed there). I think it doesn’t automatically remove the files from this location when you go to uninstall the latest version. I don’t know if there is a separate download link for this and I’m not sure if Autodesk is okay with redistributing their files.
  • WPILib v2019.4.1/2019.4.2
    – 2019.4.2 was a minor patch and isn’t really needed (There is no offical install for this version, but you can modify your build.gradle file to use this version if you want)
    – I recommend installing this version of WPILib separately in order to get this to work to avoid potential issues. You shouldn’t need to uninstall your current install of WPILib 2020, both can exist simultaneously as they are meant to be able to work standalone.
    – In the build.gradle file of the project you linked, it points to 2020.1.2. I would use FRC VS Code 2019 from the 2019 WPILib install to start a new robot project and copy/paste your code into this new robot project.

Using Autodesk Synthesis:

  • Following the official steps at this point should just work.
  • If you are still having issues: On Autodesk Synthesis, go to Emulation > Robot IO Panel in the menus and look at the log printout in there. This log printout is similar to the FRC Dashboard log and can help you identify why the code is potentially not working.
  • From my experience, I wasn’t able to get CAN devices to work. This means you cannot use brushless motors (Falcon 500, Neo, Neo 550) or pneumatics (The PCM is a CAN device).
  • This is primarily why I gave up on this. This was getting too ‘hacky’ for my tastes and was getting far away from what we would actually code on our robots. I was hoping Autodesk would have been able to update Synthesis to work with the 2020 WPILib libraries so I could reevaluate it. My understanding is that Synthesis is primarily updated through their summer internship program and, due to the pandemic, it’s no surprise that updates were deferred/delayed.

Thanks for your reply. I incorrectly linked the project but it’s this one: SynthesisRobotCode. I will be trying to install the Synthesis 4.3.2 version.
Also, where did you find documentation to set up CAN devices? Does that need to be done from Autodesk Inventor? I haven’t really been able to find any documentation at all regarding CAN devices or even setting up normal motors (I have already created a functioning chassis from Inventor), do you know how I can choose the port of my motors, or are they assigned automatically from the Synthesis plugin in Autodesk Inventor?

To set up robot movement where your motors match up to what you’ve set in your code, you need to define joints on the robot model. See the Defining Robot Movement section of the Synthesis Exporting tutorial.