Skip to content

Commit 56d696c

Browse files
Concitus Quattuor (#920)
2 parents 663de4c + ea90981 commit 56d696c

File tree

187 files changed

+16789
-4156
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

187 files changed

+16789
-4156
lines changed

.github/CODEOWNERS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
# https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners
44

55
# 2023 Dev Team
6-
* @a-crowell @BrandonPacewic @KyroVibe @Markytt @PepperLola @LucaHaverty
6+
* @a-crowell @BrandonPacewic @KyroVibe @PepperLola @LucaHaverty

CONTRIBUTING.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
![Synthesis: An Autodesk Technology](/engine/Assets/Resources/Branding/Synthesis/Synthesis-An-Autodesk-Technology-2023-lockup-Blk-OL-No-Year-stacked.png#gh-light-mode-only)
2+
![Synthesis: An Autodesk Technology](/engine/Assets/Resources/Branding/Synthesis/Synthesis-An-Autodesk-Technology-2023-lockup-Wht-OL-No-Year-stacked.png#gh-dark-mode-only)
3+
4+
# Synthesis Contribution Guide
5+
Synthesis is 100% open source and relies on the FIRST community to help make it better. The Synthesis Contribution Guide suggests ways in which you can get involved through development and non-development avenues.
6+
7+
# Why Contribute? Benefits to Contributing
8+
* Prepare for an internship - share your contributions when applying to the [Synthesis Summer Internship.](https://synthesis.autodesk.com/internship.html)
9+
* Add your contributions to Synthesis: An Autodesk Technology to your portfolio
10+
* Meet other members of the FIRST community
11+
* Get involved and learn more about Autodesk products
12+
13+
# How to Contribute
14+
### Found a bug? Have an idea for a feature?
15+
Please [contact us](#Contact-Us) to let us know about the issue or feature!
16+
17+
*A Note to Developers*: When contributing to this repository and making large changes, please first discuss the change you wish to make via issue, email, or any other method with the owners of this repository before making a change. This way, we can ensure that there is no overlap between contributions and internal development work. You may contact us using any of [these methods](#Contact-Us), although email is preferred in this case.
18+
19+
For smaller changes, just submit a pull request and be sure to include a clear and detailed description of the changes you've made so that we can verify them and eventually merge.
20+
21+
### Submit a CAD Model
22+
Submit your team's CAD model to be added to the Synthesis robot and field libraries by emailing your designs to frc@autodesk.com. Please share them in the form of a Fusion360 Share-link. Raw Mirabuf files will not be accepted.
23+
24+
### Write Tutorials, Increase Documentation
25+
We are always interested in ways to make our tutorials and documentation more clear to our end users. If there is content missing or could be refined, please follow our [contribution guidelines](#How-to-Contribute) for submitting a change.
26+
27+
### Translate our Tutorials and Documentation
28+
If you or someone you know can read and write in another language, we would like to translate our text-based resources to make them available in more languages. Contact frc@autodesk.com for more details.
29+
30+
### Create How-To or Project DIY and Inspiration Guides
31+
Did you add a feature to Synthesis, or learn how to use a specific feature? Write a how-to guide or [share your project with us](#Contact-Us).
32+
33+
### Share a Use Case Story
34+
Hearing how you use Synthesis is valuable feedback to our team. Share your stories by tagging us [@synthesis.adsk](https://www.instagram.com/synthesis.adsk/) on Instagram, posting on [ChiefDelphi](https://www.chiefdelphi.com/), or talking about it on [Discord](https://discord.gg/FuuQ9UGycM).
35+
36+
### Expand FIRST Support
37+
FIRST control systems and essentials like sensors, cameras, various motors, etc. would greatly increase simulation support. Learn more about [contributing development here](#How-to-Contribute).
38+
39+
### Beta Testing
40+
Help us try and break Synthesis! At the end of summer development, we provide a Synthesis beta for users to test and sometimes in exchange for your time we offer incentives to users. You can stay up-to-date with any Synthesis releases by joining our [Discord server](https://www.discord.gg/hHcF9AVgZA) and/or following us on Instagram [@synthesis.adsk](https://www.instagram.com/synthesis.adsk/).
41+
42+
### Contact Us
43+
| Platform | Link |
44+
| :--- | :---: |
45+
| Discord | [Synthesis Community Discord](https://discord.gg/FuuQ9UGycM) |
46+
| Email | [frc@autodesk.com](mailto:frc@autodesk.com) |
47+
| Instagram | [@synthesis.adsk](https://www.instagram.com/synthesis.adsk/) |
48+
| Reddit | [u/synthesis_adsk](https://www.reddit.com/user/synthesis_adsk/) |
49+
| ChiefDelphi | [synthesis_adsk](https://www.chiefdelphi.com/u/synthesis_adsk/summary) |
50+
51+
To let us know about an issue with Synthesis, you can submit a [GitHub issue](https://github.com/Autodesk/synthesis/issues/new/choose).

README.md

Lines changed: 111 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,139 @@
11
![Synthesis: An Autodesk Technology](/engine/Assets/Resources/Branding/Synthesis/Synthesis-An-Autodesk-Technology-2023-lockup-Blk-OL-No-Year-stacked.png#gh-light-mode-only)
22
![Synthesis: An Autodesk Technology](/engine/Assets/Resources/Branding/Synthesis/Synthesis-An-Autodesk-Technology-2023-lockup-Wht-OL-No-Year-stacked.png#gh-dark-mode-only)
3+
4+
<br/>
5+
36
[![Engine](https://github.com/Autodesk/synthesis/actions/workflows/Engine.yml/badge.svg?branch=master)](https://github.com/Autodesk/synthesis/actions/workflows/Engine.yml)
47
[![API](https://github.com/Autodesk/synthesis/actions/workflows/API.yml/badge.svg?branch=master)](https://github.com/Autodesk/synthesis/actions/workflows/API.yml)
8+
[![Clang Format](https://github.com/Autodesk/synthesis/actions/workflows/ClangFormat.yml/badge.svg?branch=master)](https://github.com/Autodesk/synthesis/actions/workflows/ClangFormat.yml)
9+
[![Black Format](https://github.com/Autodesk/synthesis/actions/workflows/BlackFormat.yml/badge.svg?branch=master)](https://github.com/Autodesk/synthesis/actions/workflows/BlackFormat.yml)
10+
11+
Synthesis is a robotics simulator designed by and for FIRST robotics students to help teams design, strategize, test and practice. Teams have the ability to import their own robots and fields using our [Fusion 360 Exporter](/exporter/) or use the pre-packaged ones that come included with every release of Synthesis.
12+
13+
For more information on the product itself or the team, visit [http://synthesis.autodesk.com](http://synthesis.autodesk.com/).
514

6-
Synthesis is a robotics simulator designed to help FIRST Robotics teams design, strategize, test, and practice. Teams can import their own robot and field designs or use preexisting ones into the simulator for a variety of uses, including:
7-
* Testing robot designs
8-
* Exploring the field environment
9-
* Driver practice & strategy
15+
## Goals
1016

11-
Developed solely by FIRST students, Synthesis is built with a direct focus on the FIRST community. We've also made the project completely open source in order to better involve the community. This way contributors can help make Synthesis better or modify Synthesis to better suit their team’s needs.
17+
Synthesis is built with a direct focus on the FIRST community. Every single one of our developers is a FIRST student. We've also made the project completely open source in order to better involve the community. This way contributors can help make Synthesis better or modify Synthesis to better suit their team’s needs.
1218

13-
For more information on the product itself or the team, visit http://synthesis.autodesk.com/
19+
Here are some of our primary goals for Synthesis:
20+
21+
- **Ease of Use**: It's important for us that Synthesis is out of the box ready for teams to use. We want to make sure that teams can get up and running with Synthesis as quickly as possible. To that end, every release of Synthesis comes pre-packaged with a variety of robots and fields; in addition to the ability to export and import your own.
22+
- **Testing Robot Designs**: Synthesis is designed to be a tool for teams to quickly test their robot designs in a semi-realistic environment. Are you a builder who wants to use some crazy virtual four-bar linkage and your team says it's a waste of time? Well now you can prove them wrong by testing it in Synthesis!
23+
- **Exploring the Field Environment**: Every year on kickoff, for both FTC and FRC FIRST competitions, Synthesis has a new release with the brand new field for that year included. This allows teams to explore the field through a 3D model, drive a robot around, and begin to strategize for the upcoming season's game.
24+
- **Driver Practice & Strategy**: Not getting enough driver practice or don't have a full field available to you? Synthesis has you covered with the ability to drive your robot around with a gamepad from a first-person view at the driver station; allowing you to get a feel for potential control scheme layouts and any line-of-sight challenges that may arise. This also allows the drive team and the programmers to communicate about what control layouts work best for each driver.
1425

1526
## Getting Started
1627

17-
Synthesis is comprised of 4 separate components that are mostly developed independently of each other. You will want to clone the entire repository first, then follow a different set of steps depending on which component you wish to work on. The links below will lead you to specific instructions that will get you a copy of that component up and running on your local machine for development and testing purposes.
28+
If you are a FIRST robotics student who just wants to use Synthesis, you *don't* need this repo. Simply **install the latest release of Synthesis from [synthesis.autodesk.com/download](https://synthesis.autodesk.com/download.html)**.
29+
30+
If you're a developer who wants to contribute to Synthesis, you're in the right place. Synthesis is comprised of 3 main components that can be developed separately. These components include:
31+
32+
- [Synthesis API](/api/)
33+
- [Simulation Engine](/engine/)
34+
- [Fusion Robot Exporter (Fusion 360 Plugin)](/exporter/)
35+
36+
Each of this components can be manually compiled separately, but this is not recommended. Instead, we recommend using the *init* scripts provided (`init.bat` & `init.sh`) to build and link each component together (excluding the Fusion Robot Exporter).
1837

19-
* [Simulation Engine](/engine/README.md)
20-
* [Fusion Robot Exporter (Fusion 360 Plugin)](/exporter/SynthesisFusionAddin/)
21-
* [API](/api/)
38+
### Compatibility Notes
2239

23-
## Installing
40+
As Fusion 360 is not supported on linux the linux installer does not come with the Fusion 360 Addin for exporting robots and fields.
2441

25-
Get the latest release [here](https://github.com/Autodesk/synthesis/releases/latest/).
26-
You can find all of our other releases on the [releases page](https://github.com/Autodesk/synthesis/releases/)
42+
Also note that the linux installer is tailored for Debian based distributions. Synthesis can be installed and ran on other distros but the installer is not guaranteed for your operating system.
2743

28-
### Windows
44+
### Dependencies
2945

30-
Download and run SynthesisWin[Version Number].exe.
46+
Synthesis Version `6.0.0` has the following dependencies:
3147

32-
### MacOS
48+
- [.NET Standard 2.0](https://learn.microsoft.com/en-us/dotnet/standard/net-standard?tabs=net-standard-1-0)
49+
- [.NET 7.0](https://dotnet.microsoft.com/en-us/download/dotnet/7.0)
50+
- [Protobuf 23.3](https://github.com/protocolbuffers/protobuf/releases/tag/v23.3)
51+
- Unity Version 2022.3.2f1 (d74737c6db50)
3352

34-
Download and Unzip SynthesisOSX[Version Number].zip.
35-
Navigate to the Synthesis.pkg, and use that to install Synthesis.
53+
These dependencies need to be satisfied before attempting to build Synthesis with unity. You can either install these dependencies manually or use the *resolve dependencies* scripts (`scripts/win/resolve_deps.bat` & `scripts/osx/resolve_deps.sh`) to install some of them for you.
3654

37-
### Linux
55+
To automatically install .NET and Protobuf run the following script depending on your operating system:
56+
- Windows: `scripts/win/resolve_deps.bat`
57+
- MacOS & Linux: `scripts/osx/resolve_deps.sh`
3858

39-
Download the Synthesis_x86_64.appimage file.
40-
You can run that directly or move it to your ~/Applications/ directory to have it registered as an app within ubuntu or whatever debian system you are using.
59+
Dependency Notes:
4160

42-
The linux installer does not come with the Fusion360 Addin for exporting robots and fields.
61+
- The windows script requires admin privileges to install .NET and Protobuf to the system PATH. For this reason it is not included by default in `init.bat` unlike how `init.sh` includes `resolve_deps.sh`.
62+
- Unity must be installed manually through the Unity Hub app which can be downloaded from [https://unity.com/download](https://unity.com/download).
4363

44-
**NOTE FOR NON DEBIAN USERS**: Synthesis can be installed and ran on other distros, however our linux package is tailored to Debian.
64+
### How To Build Synthesis Using An `init` Script And Unity
65+
66+
Before attempting to build Synthesis, ensure you have all dependencies installed.
67+
68+
1. Open a command prompt.
69+
2. Change directories to a location where you'd like to clone the Synthesis repository.
70+
3. Clone the Synthesis repository using `git clone https://github.com/Autodesk/synthesis --recurse-submodules`.
71+
4. Change directories into the root of the Synthesis repository and run the `init` script for your operating system.
72+
- Windows: `init.bat`
73+
- MacOS & Linux: `init.sh`
74+
5. Open `synthesis/engine` in Unity.
75+
6. From there, you can run the simulation engine inside the Unity editor by opening `MainScene` from the `Assets/Scenes` directory or build it as a standalone application.
76+
- To build Synthesis as a standalone application, go to `File -> Build Settings` and select your target platform. Then, click `Build` and select a location to save the built application.
4577

4678
## Contributing
4779

48-
When contributing to this repository, please first discuss the change you wish to make via issue, email, or any other method with the owners of this repository before making a change. This way, we can ensure that there is no overlap between contributions and internal development work. You may contact us at frc@autodesk.com.
80+
This project welcomes community suggestions and contributions. Synthesis is 100% open source and relies on the FIRST community to help make it better. The [Synthesis Contribution Guide](/CONTRIBUTING.md) suggests ways in which you can get involved through development and non-development avenues.
81+
82+
Before you contribute to this repository, please first discuss the change you wish to make via a GitHub issue, email us ([frc@autodesk.com](mailto:frc@autodesk.com)), or reach out through our [community discord](https://www.discord.gg/hHcF9AVgZA). This way we can ensure that there is no overlap between outside contributors and internal development work.
83+
84+
When ready to contribute, just submit a pull request and be sure to fill out the template accordingly so that we can verify them and eventually merge. Feel free to check out our [contributing guidelines](/CONTRIBUTING.md) to learn more.
85+
86+
## Code Formatting And Style
87+
88+
Synthesis uses [clang-format](https://clang.llvm.org/docs/ClangFormat.html) and [black](https://black.readthedocs.io/en/stable/) to format all of our `C++`, `C#` and `Python` code. Additionally we have GitHub workflows that verify these formatting standards for each and every pull request. For more information about how to run these formatters yourself, check out the [formatting tools](/scripts/format/) we use.
89+
90+
## Components
4991

50-
When ready to contribute, just submit a pull request and be sure to include a clear and detailed description of the changes you've made so that we can verify them and eventually merge. Feel free to check out our [contributing guidlines](contributing.md) to learn more.
92+
Here is a brief overview of each of the components found in this repository. For more information about each component, their dependencies and their individual build processes, check out their respective *READMEs*.
93+
94+
- [Synthesis API](/api/)
95+
- Components used to extend Synthesis' functionality while remaining Unity agnostic.
96+
- [Code Emulation](/emulation/)
97+
- Synthesis tool designed to help users test their FRC robot code in a simulated environment.
98+
- Code emulation is an advanced feature that is still under development, functionality and support is limited.
99+
- [Core Engine](/engine/)
100+
- The core of Synthesis, the Unity project that contains the simulation engine.
101+
- [Fusion Exporter](/exporter/SynthesisFusionAddin/)
102+
- The Fusion 360 plugin that allows users to export their robots and fields into Synthesis.
103+
- [Installer](/installer/)
104+
- Tools used to build the Synthesis installer for Windows, MacOS and Linux featured on our [Download Page](https://synthesis.autodesk.com/download.html).
105+
- [Mirabuf](https://github.com/HiceS/mirabuf/)
106+
- A custom 3D file format developed by [@HiceS](https://github.com/HiceS) that our Fusion 360 exporter uses.
107+
- [Tutorials](/tutorials/)
108+
- Our source code for the tutorials featured on our [Tutorials Page](https://synthesis.autodesk.com/tutorials.html).
109+
110+
## Tutorials
111+
112+
We have a variety of tutorials available to help you get started with Synthesis. These tutorials can be found on our [Tutorials Page](https://synthesis.autodesk.com/tutorials.html) on our website. Additionally, you can view these same tutorials as Markdown files in the [tutorials](/tutorials/) directory of this repository.
113+
114+
Updating our tutorials is a ongoing process. If you are at all interested in helping, checkout the [Synthesis Contribution Guide](/CONTRIBUTING.md) for more information on how to get started.
115+
116+
## Immersion Program
117+
118+
Annually, since 2014, Autodesk has sponsored the Synthesis Immersion Program for FIRST robotics students to develop Synthesis. The immersion program is a 10 week paid work experience at the Portland, Oregon Autodesk office from June 20th to August 25th. The immersion program focuses on not only developing Synthesis, but also allowing for opportunities to meet and collaborate with other Autodesk employees. For more information about the immersion program, visit our website at [synthesis.autodesk.com/internship](https://synthesis.autodesk.com/internship.html).
119+
120+
### Want To Be A Part Of The Team?
121+
122+
If you're a FIRST robotics student who wants to be a part of the Synthesis development team here is some basic information about applying.
123+
124+
Applicants must be:
125+
126+
- At least 16 years of age
127+
- Been a member of a FIRST Robotics team for at least one full season
128+
129+
Applications open each year during the spring. For more information about applying, exceptions to these requirements or for more info about specific positions offered, please visit the [Synthesis Immersion Program](https://synthesis.autodesk.com/internship.html) website.
51130

52131
## Contact
53132

54-
If you have any questions, you can contact us using the email mentioned above.
55-
We also have a [community discord](https://www.discord.gg/hHcF9AVgZA) you can join to get updates about Synthesis and consult directly with the students who make it.
133+
If you have any questions about Synthesis or the Immersion Program, you can contact us through email ([frc@autodesk.com](mailto:frc@autodesk.com)). Additionally please reach out through our [community discord](https://www.discord.gg/hHcF9AVgZA). It's the best way to get in touch with not only the community, but Synthesis' current development team.
134+
135+
## License
136+
137+
Copyright (c) Autodesk
138+
139+
SPDX-License-Identifier: Apache-2.0

api/Api/Controller/ControllableState.cs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,18 @@ private Dictionary<string, bool> ModifiedSignals {
2323

2424
public bool HasUpdates => ModifiedSignals.Count > 0;
2525

26-
public ControllableState(Signals signals) {
27-
signals.SignalMap.ForEach(x => {
28-
SignalMap.Add(
29-
x.Key,
30-
new SignalData {
31-
SignalGuid = x.Key,
32-
Name = x.Value.Info.Name,
33-
Value = Value.ForNull()
34-
}
35-
);
36-
});
26+
public ControllableState(params Signals[] allSignals) {
27+
allSignals.ForEach(partSignals => partSignals.SignalMap.ForEach(x => {
28+
if (!SignalMap.ContainsKey(x.Key))
29+
SignalMap.Add(
30+
x.Key,
31+
new SignalData {
32+
SignalGuid = x.Key,
33+
Name = x.Value.Info.Name,
34+
Value = Value.ForNull()
35+
}
36+
);
37+
}));
3738
}
3839

3940
public Value? GetValue(string signal_guid) {

0 commit comments

Comments
 (0)