Commit Graph

8237 Commits

Author SHA1 Message Date
Tyler Veness
2f680ba990 Add Eigen linear algebra library
This imports Eigen 3.3.7, which will be used by the wpilibc implementation of
state-space control and mecanum/swerve forward kinematics (the forward
kinematics requires least-squares solutions via a matrix pseudoinverse).

While Eigen has parts licensed under BSD, MINPACK, and MPL2, the files we need
are only MPL2.
2019-07-24 00:03:18 -07:00
Prateek Machiraju
a885db7d48 Make MotorEncoderTest use LinearFilter (#1775)
Closes #1774
This also eliminates the call to the deprecated setPIDSourceType method.
2019-07-23 23:59:06 -07:00
Prateek Machiraju
ee24101696 Add geometry classes (#1766)
These classes introduce ways to represent poses and provide easy ways to transform, rotate, and translate poses across 2d space. This classes will be especially useful for a planned odometry and kinematics suite.

Furthermore, these classes can also be used to simply represent waypoints on a field, do superstructure motion planning, etc.
2019-07-23 23:57:39 -07:00
Thad House
48fe54271a Add HALSIM_SetSendError implementation (#1773) 2019-07-23 23:55:51 -07:00
Peter Johnson
dff58c87f4 Fix unused warning in release build (#1771) 2019-07-21 22:17:42 -07:00
Tyler Veness
dde61aad32 Remove TimerEventHandler typedef from Notifier class (#1767)
Using std::function<void()> directly makes it much clearer to the user
what kind of function Notifier expects. The Doxygen comments already say
what the function is used for, so the typedef just discards useful
information.
2019-07-20 22:57:16 -07:00
Loki
0f6ef80ab2 Add RobotState#IsEStopped and DriverStation#IsEStopped (#952) 2019-07-16 09:18:23 -05:00
Austin Shalit
e488861877 Move unit tests from integration test suite (#1170) 2019-07-16 00:02:52 -05:00
Oblarg
dffa1a5cba Make null checks more descriptive (#1688) 2019-07-15 20:22:36 -05:00
Oblarg
fe59d854d5 Notifier: add null check (#1684) 2019-07-15 20:20:11 -05:00
Peter Johnson
10731f3d6b Update uv Udp wrapper for latest features 2019-07-15 20:15:37 -05:00
Peter Johnson
89f7b72b6e Update libuv to 1.30.1 release 2019-07-15 20:15:37 -05:00
Peter Johnson
85f2f87400 wpiutil: Add unique_function (#1761)
This is a move-only variant of std::function to support move-only captures.

Imported from LLVM with some small tweaks (changed to 4 pointer internal storage, warnings fixes).
2019-07-15 20:13:57 -05:00
Tyler Veness
73ec940786 Remove SampleRobot (#1658)
SampleRobot provides no benefits over RobotBase to advanced teams and
TimedRobot is recommended for everyone else.

A skeleton template for RobotBase was added.
2019-07-15 20:09:47 -05:00
Tyler Veness
62be0392b6 Replace std::lock_guard and std::lock with std::scoped_lock (#1758)
std::scoped_lock was introduced in C++17 and is strictly better than
std::lock_guard as it supports locking any number of mutexes safely.
It's also easier to use than std::lock for locking multiple mutexes at
once.
2019-07-08 22:58:39 -07:00
Tyler Veness
24d31df55a Make sure move constructor is generated for TrapezoidProfile (#1757)
This wasn't necessarily the case before because defining a nondefault
constructor results in no default move constructor.
2019-07-08 22:19:13 -07:00
Tyler Veness
841ef5d739 Remove template types from lock RAII wrapper usages (#1756)
C++17 has template type autodeduction. These wrappers include
std::lock_guard and std::unique_lock.
2019-07-07 19:17:14 -07:00
Tyler Veness
e582518bae Fix some move constructors (#1754)
Timer didn't have working move semantics because mutexes aren't
moveable, meaning the default implementations were ill-formed.
MotorSafety wasn't locking its mutex.
2019-07-07 19:15:59 -07:00
Peter Johnson
8757bc471b Remove pre-C++17 shims (#1752)
Now that all compilers support C++17, remove some old C++14/C++17 shims.
2019-07-07 15:44:43 -07:00
Tyler Veness
ea9512977c Add replacement PIDController class (#1300)
Originally, PIDController used PIDSource with its "PIDSourceType" to
determine whether a class should return position or velocity to the
controller. However, the supported languages have changed a lot over 10
years and now support lambdas. Instead of using PIDSource and PIDOutput,
users can pass in doubles to the Calculate() function synchronously.
This makes the controller much more flexible for team's needs as they no
longer have to make a separate PIDSource-inheriting class just to
provide a custom input.

The built-in feedforward was removed. Since PIDController is synchronous
now, they can add their own feedforward on top of what Calculate()
returns.

To facilitate running the controller asynchronously, there is a
PIDControllerRunner class that handles that. By separating the loop from
the control law, PIDController can now be composed with others and be
used to control a drivetrain (a multiple input, multiple output system
that requires summing the results from two controllers) much easier.
Also, motion profiling can be used to set the reference over time.

All the classes related to the old PIDController are now deprecated. The
new classes are in an experimental namespace to avoid name conflicts.

While this is a large change, I think it is a necessary one for growth.
The old PIDController design was created in a time when languages only
supported OOP, and we have more tools at our disposal now to solve
problems. This more versatile implementation can be used in more places
like as a replacement for Pathfinder's "EncoderFollower" class.

There has been hesitation to add lambda support to WPILib for a while
now out of concerns for requiring teams to learn more features of C++ or
Java. In my opinion, this change makes PIDController easier to use, not
harder. The concept of a function is a building block of OOP and should
be learned before classes. The ability to store functions as first-class
objects and invoke them just like variables is rather natural.

Note that PID constants for the new controller will be different from
the old one. The original controller didn't take the discretization
period into account. To fix this, teams should just have to divide their
Ki gain by 0.05 and multiply their Kd gain by 0.05 where 0.05 is the
original default period.
2019-07-07 15:37:13 -07:00
Tyler Veness
9b798d228f Add TrapezoidProfile class (#1673) 2019-06-30 23:25:11 -07:00
Thad House
804926fb5b Unconditionally skip athena builds for sim (#1748)
They'll pretty much never work
2019-06-30 19:45:33 -07:00
Tyler Veness
118e9d29d5 Add C++14 units library (#1749) 2019-06-30 19:44:51 -07:00
Tyler Veness
c705953d77 Add usage reporting to LinearFilter (#1750) 2019-06-30 19:44:15 -07:00
Thad House
852d1b9cad Don't cross-build gazebo for raspbian (#1747) 2019-06-30 12:42:32 -07:00
Peter Johnson
eedb3a1adc Fix GCC 9 warnings (#1730) 2019-06-30 00:28:32 -07:00
Peter Johnson
60dce66a4f Remove wpi::ArrayRef std::initializer_list constructor (#1745)
This can be dangerous as it refers to a temporary, and GCC 9.0 warns about
its use.  Instead add std::initializer_list overloads to common places it
was used in an initializer_list sense.
2019-06-29 23:54:02 -07:00
Thad House
9e19b29c31 Use base azure image for primary wpilib build (#1744)
This will ensure everything works with no flags, even without a rio or raspbian compiler
2019-06-29 21:37:34 -07:00
Thad House
2994250714 Update jni library, fix cross builds of the jni symbol check (#1742) 2019-06-29 21:31:55 -07:00
Thad House
a6b0e9b856 Only disable execution of cross compile google tests (#1741)
Still build them and link them, just don't execute them.

Google test is still disabled completely for the HAL and wpilibc.
2019-06-29 21:31:27 -07:00
Peter Johnson
3c2093119e Use docker container to run wpiformat (#1740)
Also update raspbian image to use new unified name.
2019-06-29 21:11:17 -07:00
Thad House
5fe2eebceb Revert "Don't build halsim_gazebo on raspbian (#1737)" (#1743)
This reverts commit d9cb57a429.
2019-06-29 21:05:44 -07:00
Peter Johnson
4b1b92bb74 Replace wpi::optional with C++17 std::optional (#1732)
Keep wpi/optional.h as a shim with deprecated warnings.
2019-06-29 11:20:22 -07:00
Peter Johnson
0fbb0d989e Update to 2020 compilers (#1733)
Also link to libatomic in cmake and for Raspbian only in gradle.
2019-06-29 09:28:28 -07:00
Thad House
2dc94e6052 Disable google tests on cross compilers (#1738)
Removes checks for onlyathena and onlyraspbian, and just disables gtest for cross compilers.
2019-06-29 09:27:11 -07:00
Peter Johnson
d9cb57a429 Don't build halsim_gazebo on raspbian (#1737)
Reference shared/config.gradle instead of shared/plugins/setupBuild.gradle.
2019-06-28 22:30:17 -07:00
Austin Shalit
f7cfdd7cee Replace crlf line endings with lf (#1731) 2019-06-28 20:55:14 -07:00
Austin Shalit
b6d5d90d9d Add JaCoCo Support (#1734) 2019-06-28 20:01:02 -07:00
Thad House
c7ab2baa6e Add way to disable the jni check tasks from a property (#1736) 2019-06-28 20:00:35 -07:00
Thad House
0c45c5b7ea Fix skip athena and skip raspbian flags (#1735) 2019-06-28 20:00:09 -07:00
Thad House
3dfb01d45b Update to new Native Utils (#1696)
Also update to azure 2019 windows image
2019-06-28 14:09:10 -07:00
Tyler Veness
30e936837c Clean up LinearDigitalFilter class (#782)
* Renamed LinearDigitalFilter to LinearFilter
* Filter base class removed since it wasn't useful
* C++: std::shared_ptr<> replaced with double parameter
2019-06-28 13:35:57 -07:00
Tyler Veness
311e2de4c1 Remove deprecated Joystick constants (#1715) 2019-06-26 14:17:11 -07:00
Benjamin Ward
c08fd6682f Update CAN manufacturer list (#1706) 2019-06-26 14:16:12 -07:00
Peter Johnson
258bba0c2d ErrorBase and WPIError improvements (#1727)
* ErrorBase: Use magic static singleton for globals
* ErrorBase: Add testability features for global errors
* Make WPIError definitions inline functions
(This works around cross-DLL variable issues on Windows)

Fixes #1726.
2019-06-23 20:36:52 -07:00
Peter Johnson
372ca4f456 cmake: Enable googletest unit tests (#1720)
Also don't inherit compile warnings from wpiutil

There's not a good way to disable inherited compiler flags.
2019-06-23 12:44:28 -07:00
Peter Johnson
223d47af0e HALSIM: support mocking of HAL_SendError() (#1728) 2019-06-23 11:48:04 -07:00
Peter Johnson
55cb683db4 Change compiler flags to C++17 (#1723)
The current versions of the RoboRIO and Raspbian compilers support the flag but have
minimal actual C++17 support.  Changing the flag is the first step.
2019-06-20 22:32:50 -07:00
Peter Johnson
ee8a33c568 wpiutil: SafeThread: Add thread id, support getting shared_ptr (#1722)
Rename base class function from GetThread to GetThreadSharedPtr.
2019-06-20 19:51:09 -07:00
Peter Johnson
61426d08de wpiutil: Signal: make operator() const (#1721)
This enables const-ness in uv::Handle ReportError() and Invoke() as well.
2019-06-20 17:51:32 -07:00