1Simbody Changelog and Release Notes 2=================================== 3 4This is not a comprehensive list of changes but rather a hand-curated collection of the more notable ones. For a comprehensive history, see the [Simbody GitHub repo](https://github.com/simbody/simbody). You can use the release dates below to find all the PRs and issues that were included in a particular release. 5 6**Heads up**: Simbody 3.5 was the last release that will build with C++03 (patch builds with version numbers like 3.5.1, will work too). For 3.6 and above we will permit Simbody developers to use C++11, restricted to the subset that is currently supported on all our platforms. Since the C++03 and C++11 ABIs are not compatible, code that uses Simbody 3.6 will also have to be built with C++11. Time to move up, if you haven't already! 7 83.7 (December 2019) 9------------------- 10* The new SmoothSphereHalfSpaceForce provides a continuous and differentiable 11 contact model, ideal for use with gradient-based optimization algorithms (PR 12 #667). 13* Fixed a memory issue with CPodes (PR #642). 14* Created a CMake variable to control whether docs are installed (PR #655). 15* Fixed a bug with calculating constraint acceleration errors (PR #670). 16* Fixed Pathname::getThisExecutablePath() for FreeBSD (PR #672). 17* Fixed scaling issue of simbody-visualizer on macOS 10.15 Catalina. Now, 18 simbody-visualizer is an app bundle (simbody-visualizer.app) on Mac (PR #676). 19 203.6.1 (11 June 2018) 21-------------------- 22* Fixed bug wherein a program may crash when using the visualizer if the 23 visualizer window was closed manually (PR #633). 24 253.6 (21 February 2018) 26---------------------- 27* Forced GCC to be at least 4.9.0, so that new C++11 features like regular 28 expressions can be used (PR #485). 29* Minimum Ubuntu version supported 14.04 LTS (Trusty), with a [manual update of GCC](http://askubuntu.com/questions/466651/how-do-i-use-the-latest-gcc-on-ubuntu-14-04). 30* Recommended minimum Ubuntu version : 15.04 (Vivid), that is shipped with GCC 4.9.2. 31* Added mixin classes `ResetOnCopy<T>` and `ReinitOnCopy<T>` to force default 32 construction or reinitialization of data members on copy construction or copy 33 assignment, without requiring a user written copy constructor and copy 34 assignment operator just to get those reinitializations done. 35* Added clone() method to `SimTK::Function_` base class and implemented it for 36 Simbody-defined concrete Function classes. Made concrete Function members 37 non-const to permit assignment, and modified Function_<T>::Step to allow 38 changing its parameters after construction. 39* Added C++11 features to the `SimTK::Array_` container including `std::initializer_list` construction, move construction, move assignment, and `emplace` methods. 40* Prevented copy construction of `Array_<T>` from `Array_<T2>` unless T2 is *implicitly* 41 convertible to T. Previously this was allowed if there was any conversion possible 42 even if it was explicit. Array_ was being too relaxed about this, causing hidden 43 copies to occur. 44* Added CloneOnWritePtr smart pointer (acts like ClonePtr but with deferred cloning). 45* Updated ClonePtr and ReferencePtr APIs to follow C++11 standard smart pointer 46 terminology. This required deprecating some existing methods and operators, so 47 you can expect to get annoying warnings until you switch to the new API. 48* Possible BREAKING CHANGE: ClonePtr's operator==() previously delegated 49 to the managed object; now it just operates on the managed pointer as is done 50 in other smart pointers. Consequently now only a clone() method is required for a type 51 to be contained in a ClonePtr; previously it had to support comparison also. 52* Make doxygen run silently so errors will be easier to see. 53* Added new methods to `Pathname` class for interpreting pathnames against a specified working directory instead 54of the current working directory (thanks to Carmichael Ong). See [Issue #264](https://github.com/simbody/simbody/issues/264) and [PR #307](https://github.com/simbody/simbody/pull/307). 55* Added the ability to parallelize forces, robustness/performance improvements 56to ParallelExecutor, mutex state lock. 57[PR #414](https://github.com/simbody/simbody/pull/414). 58* Added move constructor and move assignment to State (very fast). 59* Added "stage version" counters for time, q, u, and z that are incremented 60 whenever one of these changes. 61* Separated time-independent position and kinematics calculations so that 62 they are not invalidated by a time change. These can also be initiated 63 explicitly with new methods `realizePositionKinematics()` and 64 `realizeVelocityKinematics()`. They are invalidated by a change to q or 65 to u, respectively. 66* Modified floating point-to-String conversions to use lossless number of 67 digits by default. An attempt to use the default type-to-String conversion 68 when no stream insertion operator is available is now a runtime rather than 69 compile time error. [PR #459](https://github.com/simbody/simbody/pull/459). 70* Upgraded `SimTK::Xml` from class to namespace; local classes like `Xml::Element` 71 were promoted to namespace level within Xml. This was necessary to untangle 72 Array_ and Xml classes which can be mutually dependent. This change is backwards 73 compatible for those following the recommended use of the previously-available 74 `Xml::Document` typedef instead of Xml directly. Otherwise you will have to change 75 uses of `SimTK::Xml` to `SimTK::Xml::Document`. Also any `using SimTK::Xml;` 76 must be removed or replaced with `using namespace SimTK::Xml` or 77 `using SimTK::Xml::Document` depending on the intent. 78 [PR #460](https://github.com/simbody/simbody/pull/460) 79* Improved `NiceTypeName<T>::namestr()` to produce a canonicalized name that is 80 the same on all platforms (with a few exceptions). Added `xmlstr()` method to 81 make an XML-friendly modification of `namestr()` that replaces angle brackets 82 with curly braces. Added a new regression test to verify that the names come 83 out right. [PR #461](https://github.com/simbody/simbody/pull/461) 84* Added helper class IteratorRange to use range-based for loops with a pair of 85 iterators. [PR#467](https://github.com/simbody/simbody/pull/467) 86* Added the method `State::isConsistent()` to compare two states 87 [PR #469](https://github.com/simbody/simbody/pull/469). 88* Started using RPATH on OSX so that users need not set `DYLD_LIBRARY_PATH` to 89 run `simbody-visualizer` or the example executables, regardless of where you 90 install Simbody. 91* Improved the ability to find the simbody-visualizer executable when Simbody 92 is installed in non-standard locations or if the Simbody installation is 93 relocated (even to different computers). This enhancement is only for 94 non-Windows operating systems. 95* Fixed a bug when compiling on macOS (OSX) with SDK MacOSX10.12.sdk, related 96 to the POSIX function `clock_gettime()`. 97 [Issue #523](https://github.com/simbody/simbody/issues/523), 98 [PR #524](https://github.com/simbody/simbody/pull/524) 99* Replaced usages of pthreads with C++11 classes. Removed the following classes: 100 - ThreadLocal 101 - AtomicInteger 102* Deprecated some badly-named methods in MobilizedBody::Translation 103 [Issue #604](https://github.com/simbody/simbody/issues/604) 104* Removed support for `long double`. 105 [PR #597](https://github.com/simbody/simbody/pull/597) 106* Fixed a bug in `MultibodyGraphMaker` where massless bodies were handled 107 incorrectly. 108 [PR #592](https://github.com/simbody/simbody/pull/592) and 109 [PR #594](https://github.com/simbody/simbody/pull/594). 110* Moved Ipopt into the namespace `SimTKIpopt` to avoid duplicate symbols when 111 combining Simbody with an independent Ipopt. 112* Fixed a bug where RowVectors could not be constructed with 0 elements. 113* CMake: Downstream projects no longer need to use `include_directories()`. 114* CMAES: You can now specify a different initial step size (standard deviation) 115 for each variable. [PR #540](https://github.com/simbody/simbody/pull/540) 116* SimbodyMatterSubsystem now provides a function for the error in 117 acceleration-level constraint equations. 118 [PR #517](https://github.com/simbody/simbody/pull/517) 119* The visualizer now supports lazily loading mesh geometry from a file. 120 [PR #475](https://github.com/simbody/simbody/pull/475) 121* Simbody can now be built with MinGW on Windows. 122 [PR #441](https://github.com/simbody/simbody/pull/441) 123 124 1253.5.3 (15 June 2015) 126------------------- 127This is the release that shipped with OpenSim 3.3. 128* Small changes to allow compilation with Visual Studio 2015 (PRs [#395](https://github.com/simbody/simbody/pull/395) and [#396](https://github.com/simbody/simbody/pull/396)). 129* Fixed a problem with SpatialInertia::shift() with non-zero COM offset, see issue [#334](https://github.com/simbody/simbody/issues/334). This also affected calcCompositeBodyInertias(). These are not commonly used. 130* Fixed a problem with VectorIterator which could unnecessary copying, possibly affecting mesh handling performance. See issue [#349](https://github.com/simbody/simbody/issues/349). 131 132 1333.5.2 (15 May 2015) 134------------------- 135Same as 3.5.1 except on 64 bit Windows which has a patched version of Lapack that 136addresses an error handling problem that caused trouble for some OpenSim users. 137This is a patch to Lapack 3.4.2 (64 bit) to fix the bug discussed in [Issue #177](https://github.com/simbody/simbody/issues/177) and [PR #342](https://github.com/simbody/simbody/pull/342). 138There were two functions where convergence failures incorrectly caused an abort (XERBLA in Lapack-speak). See discussion on Lapack forum: 139http://icl.cs.utk.edu/lapack-forum/viewtopic.php?f=13&t=4586 140This Lapack DLL is binary compatible with the previous one, same functions and ordinals. 141 142 1433.5.1 (31 Dec 2014) 144------------------- 145This patch release fixed an installation problem but is otherwise identical to 3.5. 146### Bugs fixed 147* Fixed a Mac installation problem reported [here](https://github.com/osrf/homebrew-simulation/issues/33). 148See [PR #321](https://github.com/simbody/simbody/pull/321). Probably affects Linux too; we think it is due to a change in CMake behavior, noticed with CMake 3.1 but could have happened earlier. 149* Updated Travis-CI script to attempt installation to catch these problems earlier. See [PR #322](https://github.com/simbody/simbody/pull/322). 150 151 1523.5 (18 Dec 2014) 153----------------- 154This release focused primarily on infrastructure for and prototyping of rigid contact and impact, and the development of examples showing how to perform task space control using Simbody. These two projects were supported by our DARPA research subcontract with Open Source Robotics Foundation, and were integrated with Gazebo. Further development for rigid contact is required for smooth integration into Simbody; this is planned for Simbody 4.0 and only the bravest among you should attempt to use rigid contact before then. The task space control examples `TaskSpaceControl-UR10` and `TaskSpaceControl-Atlas` can be found in the Simbody examples directory. 155 156Chris Dembia integrated Nikolaus Hansen's [Covariant Matrix Adaptation Evolution Strategy](https://www.lri.fr/~hansen/cmaesintro.html) (CMA-ES) global optimizer into Simbody's existing Optimizer class framework, and implemented a multithreading capability for it. This is ready to use and we would like feedback. 157 158There were numerous smaller improvements to Simbody since the previous release, in build and installation, documentation, performance, bug fixes, and small enhancements. There are no known incompatibilities with previous release 3.4.1 and we highly recommend that you upgrade. 159 160### New features 161* Added Task Space control examples (pr #237 #238) (work supported by OSRF) 162* Added IMU (orientation) tracking assembly condition for IK (pr #239) 163* Added STL file reader to PolygonalMesh class (issue #57, pr #176) 164* Added CMA-ES global optimizer with multithreading support (pr #249 #253 #267 #268) 165* Initial rigid contact support (pr #137). Includes a collection of new unilateral constraints and a specialized solver. Not yet well integrated into Simbody overall. (work supported by OSRF) 166* Implemented PLUS method impact handling (issue #115 #205, pr #226) (work supported by OSRF) 167 168### Bugs fixed 169* Fixed bug in orientation of non-camera-facing text in visualizer (issue #214, pr #215) 170* Fixed bug in mesh triangulation (issue #198, pr #199) 171* Fixed Assembler bugs; could sometimes make initial solution worse or report spurious failure (issue #164 #167, pr #165 #168) 172* Fixed Debug visualizer name to have "_d" (issue #5) 173 174### Misc. improvements 175* Improved regression test timing framework to make it useful for multithreaded tests (pr #265) 176* Much nicer Doxygen for Rotation class (issue #183) 177* Reorganized Simbody example programs (pr #238) 178* Added HalfSpace-ConvexImplicitSurface contact tracker (issue #232, pr #233) 179* Added methods for principal curvatures and directions on arbitrary implicit surface (pr #231) 180* Added missing calcContactPatch() functionality for Hertz contacts (pr #224) 181* Added Brick ContactGeometry shape (pr #218) 182* Added several new bilateral constraints useful as the basis for unilateral constraints in rigid contact: Constraint::PointOnPlaneContact, SphereOnPlaneContact, SphereOnSphereContact, LineOnLineContact (edge/edge) (pr #137 #169) 183* Improved constraint performance for several basic constraints (pr #137) 184* Moved install instructions to README.md where they can be kept up to date (pr #144 and others) 185* Replaced distance constraint equations to use length rather than length^2 (issue #3). This improves scaling when distance constraint is combined with other constraints. 186* Numerous improvements to build, install, documentation, and performance. 187* Added CONTRIBUTING.md file explaining ways to contribute to the Simbody project. 188 189 1903.4.1 (31 Mar 2014) 191------------------- 192 193This is primarily a release for improving our build and install process to comply with Debian's requirements. Thanks to José Rivero and Steve Peters at Open Source Robotics Foundation, and Chris Dembia at Stanford for the bulk of this effort. 194 195* Fixed `SimbodyMatterSubsystem::getTotalCentrifugalForces()` (issue #112, pr #116). 196* Many changes to build and install, mostly affecting Linux and OSX. Should now conform better to standards on those platforms and in general be better and finding its dependencies. (pr #114 #118 #120 #121 #122 #127 #130 #131 #133, issue #48 #68 #92 #113) 197* Started using the -Werror flag (treat warnings as errors) in Travis builds to ensure that we are warning-free. (issue #128, pr #129 #131) 198* Compile with C++11 enabled by default. However, the code will still build in C++03. (pr #123, #126) 199 200 2013.3.1 (21 Jan 2014) 202------------------- 203This is the first release built for use in Open Source Robotic Foundation's Gazebo robot simulator and is also the version of Simbody that ships with OpenSim 3.2. It incorporates many fixes and enhancements prompted by the integration effort with OSRF, and a new Debian package builder for smooth incorporation into the Gazebo build. 204 205* Improved matrix/vector documentation and reorganized source to break up large files (pr #70 #76 #77 #78 #87) 206* Improved Force::Gravity to make it more flexible and avoid NaNs (pr #33) 207* Fix multiplyByMInv() to be usable in forces and controllers; now only requires state to be realized to position stage. (issue #29, pr #31) 208* Make MobilizedBody::lock() and lockAt() method immediately modify the state (issue #20, pr #23) 209* Added Debian/Ubuntu package building (pr #24 #32 #52 #58 #59 #64) 210* Improved TestMultibodyPerformance timing information (pr #22) 211* Fixed bug in MobilizedBody::isSameMobilizedBody() (issue #15, pr #16) 212* Started using Travis-CI for continuous integration testing (pr #25) 213* Improved DecorativeGeometry classes (issue #34, pr #35 #61) 214* Improved installation, esp. Linux and OSX (issue #38 #65 #101, pr #64 #91 #102 #107) 215* Added uninstall (issue #104, pr #106) 216* Visualizer name changed to "simbody-visualizer" (issue #27, pr #53) 217* Added torque-limited motor examples 218* Added ability to lock/unlock mobilizers and disble/enable Motion objects on the fly, for flexible mixed forward/inverse dynamics 219* Re-engineered Force::Gravity for speed and run time flexibility (for Gazebo) 220* Extended Force::Gravity to support gravity compensation controllers 221* Allow runtime changes to MobilityLinear{Spring,Damper} (for Gazebo) 222* Added Theo Jansen Strandbeest example 223* Ported some Gazebo regression tests to Simbody's regression suite. 224* Added dirent.h support on Windows (for directory searching) 225* Many bug fixes, doxygen improvements, and small performance improvements 226* Added Semi-Explicit Euler integrators, with and without error control (for Gazebo) 227* Added O(n) methods for task space Jacobians 228 229 2303.1 (22 Apr 2013) 231----------------- 232This is the Simbody release that shipped with OpenSim 3.1 and contains the initial 233work done with Open Source Robotics Foundation for the Gazebo simulator. The source was managed on Subversion, although its code and history were transferred to GitHub. The source zip is available on the GitHub release page [here](https://github.com/simbody/simbody/releases/tag/Simbody-3.1). 234 235* Added MobilityLinearStop for joint stops (for Gazebo) 236* Added Simbody example for reading Gazebo sdf files 237* Added MultibodyGraphMaker to map bodies and joints to mobilizers and constraints (for Gazebo) 238* Added a variety of prototype implementations of unilateral contact as adhoc tests 239* Added some pre-built mesh types to PolygonalMesh (for Gazebo) 240* Modified Force::Gravity to allow excluded bodies (needed by Gazebo) 241* Added DiscreteForces and MobilityDiscreteForces elements for Gazebo 242* Added Measure::Delay for time-delay of input signal 243* Added scissor-lift example to show behavior on highly constrained mechanisms 244* Added RK2 integrator 245* Modified Gimbal mobilizer to use Euler angle derivatives as generalized speeds 246* Added Bushing (6 dof) mobilizer parameterized like Gimbal 247* Added methods for calculating geodesics over smooth contact geometry 248* Added infrastructure for fast cable wrapping and some prototypes 249* Many small performance improvements and bug fixes 250