Most experimental AI/robotics research involves a simulation component. Typical simulations involve very simplified environments - often 2D environments with polygonal objects and circular robots. The aim of this project is to create a tool for higher-fidelity real-time simulations of autonomous mobile robots. Real-time simulation also allows hardware-in-the-loop simulations. We're working toward a 3D simulator that uses OpenGL for real-time rendering of the robot environment as realistically as possible, including a physics engine to simulate dynamics in real-time (collision between arbitrary polyhedral objects with friction).
|
Thus far only a handful of simple sensors are implemented, but I plan to add simulated visual input based on the 3D rendering once it becomes more realistic (i.e. once shadows, sky, vegetation have been added for outdoor scenes). The current implementation also contains a component called IKOR (Inverse Kinematics Of Redundant systems) which can quickly solve the IK problem with constraints (holonomic & non-holonomic) for arbitrary kinematic systems (i.e. robot manipulators).
Development has been ongoing for a while, however the simulator is a long way from rendering realistic scenes and only has a limited set of simulated sensors. It has been mostly used for research into inverse kinematics of redundant manipulators with constraints for tool use (for environmental restoration, dissasembly and dismantlement tasks).
The current development snapshot contains terrain rendering and some primitive shapes using Open Scene Graph (OSG) and Demeter (OpenGL); an implementation of physics using Open Dynamics Engine (ODE) with collision detection/response; and some inverse kinematics solution code for redundant manipulators (IKOR). Everything is written in modern ANSI C++ (namespaces, exceptions, STL, etc.). The system compiles on Linux (using gcc 3.4.2).
Feel free to scavange code. All the code is GPL'd. Contact me if you'd like to use the code in another project that uses a different OSS license.
<David Jung>Development of OpenSim has been suspected. I no longer have the time to pursue it, though I am still interested in developing it further and it may be resumed in future. The source code is still available. Please contact me if you have any queries or would like to take the lead with development or if you're interested in using this project name for your own project. Thank you to all the users who contributed over the years.
<David Jung>Development of OpenSim per-se hasn't been active lately. I am still using OpenSim in my other projects, but mostly the IK and robot infrastructure components and not the graphics/physics stuff. Consequently, I haven't been enhancing those parts lately. I hope to get back to it in future. Note that the last snapshot in the download area is slightly out-of-date with respect to the SVN repository, but the code in SVN has some changes that may cause build problems against the last OSG.
Due to the non-standard nature of FTJam, I've switched the SVN build over to standard Makefiles, but my Makefiles are simple and eventually need to be re-written to be more sophisticated (e.g. to include dependency checking). So, currently, make clean is needed after editing headers some times. Once Source Forge supports SVN, I'll probably move it there instead of my own server.
<David Jung>I'm currently re-working the robot simulation graphics to support arbitrary mesh models, so it won't work currently. Also, some minor fixes for clean building under g++ 4.0 have been made.
<David Jung>I've setup a subversion repository for the sources with the URL http://callisto.ornl.gov/svn/opensim_repos/.
The trunk directory is the main-line and where I'll be developing - so don't expect it to be stable (or necessarily compile). However, there is also a tags directory where you will find the latest 'release' version (keeping in mind that the version numbers are still 0.4.x - so it is definitely alpha code). I'll try to make regular snapshots here that will compile and run.
The newest version is currently v0.4.6 which represents some minor fixes and a switch to .h extensions on all header files. I decided to switch to .h extensions from extensionless headers to make porting to MS Windows easier in future. Although it shouldn't have strictly been necessary, there are too many tools under Windows that have difficulty with extensionless files and guessing their types.
The subversion web interface is currently fairly vanilla, but I'll probably put something more sophisticated in place sometime.
<David Jung>I've posted another development snapshot to the file area. Main changes are:
I'm still working on getting arbitrary geometry for robot parts, but it isn't ready yet (and I'm only able to work on it in my spare time)
<David Jung>I've been spending alot of time writing developer and user documentation, which I'll post to this site soon. The manual is slowly taking shape - currently at about 70 pages. I'll also update the Doxygen generated pages. Note that I have given up on DOCBOOK and moved to OpenOffice Writer instead - from which I generated the PDF.
<David Jung>I've updated OpenSim to use the latest verions of OSG and OpenProducer. Since the GLOW GUI framework used GLUT and isn't actively developed anymore, I've switched the GUI to another toolkit.
After considering many choices, I settled on GTKmm, the C++ API for GTK+/GNOME. I considered vxWindows - due to cross-platform portability - but it has a very old API, and also Qt, which also has a less than modern C++ API. Because of its large user base, GTK+/GTKmm has ports for Windows, Mac OS and other OSes readily available.
I've written a new graphical viewer program, but I am not ready to post another snapshot until I finish re-writing the ikortestviewer and do some cleanups and checkins. No SOLID3 integration yet. Stay tuned.
I've also posted a new screenshot.
<David Jung>Development is still proceeding. I'll post another snapshot soon. Now that OpenSim is at the stage where it could be usefully used (though far from complete and still definitely in development), I'm considering using a public CVS service.
I've completely re-written the Orient class, which is now a complete implementation that can interconvert between the many different representations of orientation (e.g. Quat, Matrix, EulerRPY, EulerXYZ etc.). It is now based on some of the code from one of the Graphics Gems books. Some bugs in the inverse kinematics solver have been fixed, but there is still at least one problem remaining that we hope to fix soon.
<David Jung>I've posted another source snapshot to the SF.net file area (it is just source this time, no Doxgen docs). It is tagged as version 0.4.3 in CVS (tag v0_4_3). Some of the code is in flux as I'm in the process of adding obstacle avoidance constraint support to the inverse kinematics code. That also involved a re-organization of the collision system API and implementation of proximity pseudo-sensors for manipulator links. There may also be the odd debug output statement in there that shouldn't be. The inverse kinematics code is still not well tested. I'd still advice against trying to build OpenSim unless you really want to, as it will take some work. I'll happily help via email if you're stuck. Obviously I'll make building easier sometime in the future (I think I'll probably switch back to the GNU toolchain (i.e. make etc.)).
I've also updated the Doxgen API docs on the manual page and uploaded the beginnings of a user/developer manual.
<David Jung>I've posted another source and binary snapshot to the SF.net file area. This comes a bit sooner than I'd planned - and as such there are a couple of bugs still in the code. The inverse kinematics code is not well tested - but seems stable. The exception is the non-holonomic constraint code - used for when you want to include the platform degrees-of-freedom in the chain - which doesn't work properly. The binary snapshot archive file doesn't contain the Open Scene Graph binaries like the last binary archive, as they were too big. Consequently, you'll have to get the Open Scene Graph distribution installed yourself to run the demo (and it may not work if OSG changes too much from the CVS version against which the binaries are linked - see the release notes). So... I'd advice against trying to build OpenSim unless you really want to, as it will take some work. I'll happily help via email if you're stuck. Obviously I'll make building easier sometime in the future.
I've also put a later screenshot on the screenshots page, and some Doxygen API documentation on the manual page.
<David Jung>I've done alot of development lately and will post another snapshot soon. The Apache Xerces XML parser has been integrated and I've developed XML formats for specifying simple environments, robots, platforms and manipulators. The robot platforms are currently limited to a fixed base or a mobile base that is based on an autonomous HMMV (two back drive wheels and two front wheels for steering). The first stable code for inverse kinematics of redundant manipulators is almost done.
The code is now in sync with the latest CVS versions of OSG and ODE too. The GUI is rendered directly to OpenGL using GLOW (but that may change in the future). I'm also considering yet another change to math base. Currently the code uses my own Matrix3/4 and Vector3 fixed dimension classes for 3D stuff and the boost.org uBlas templated matrix/vector classes for everything else. I'd like to unify everything - and may rewrite the uBlas code to my liking.
<David Jung>I've posted another snapshot in the sf file area. I included a source tarball and a very large binary tarball that includes the sources and binaries for the important external libraries (OSG, ODE, MTL). The build is for Redhat Linux beta2 (null) [probably will become Redhat 8.0 soon I'm guessing].
<David Jung>I have not found much spare time to to devote to development. However, I am using OpenSim for a funded work project to implement simulations of redundant manipulators. So I'm working on it 1/2-time at work - concentrating less on graphics, terrain etc. and more on inverse-kinematics code. The physics API has been re-written and I've implemented an ODE wrapper. All the additions will be open-source'd.
<David Jung>I've put up my latest development sources. There is almost no new functionality, just rearrangements (see the changelog on sf.net). Main differences: (1) Threw out my scene-graph implementation in favor of OpenScenegraph. (2) Switched from make builds to FTJam.
Next I plan to re-do the physics API so that is it source code pluggable, and plug in Russell Smith's ODE physics engine.
NB: Same applies as to last snapshot: May not even compile and not much functionality at this stage. I am aiming for a first usable release at the end of 2003.
<David Jung>I've released the current development CVS tree in the sourceforge file area for your viewing pleasure.
This probably won't be updated very often until development is further along. As a system still in the early planning/design/implementation it is likely to change significantly, and may not even compile. The collision detector and collision response code in the physics engine are known to be broken (as well as incomplete of course). Nothing is well tested. I'd advice not trying to use OpenSim as a package until development progresses significantly. You may of course scavange code if you wish. Please drop me a note if you use any significant portion of the code.
<David Jung>There will not be anything interesting at this site for a while.
In the next month or two I will fill out this web-site. However, because the existing implementation will be undergoing continuous re-design and re-implementation for some time, we're not looking for any development help at the moment.
If you were looking for something useable or to help with development, please check back in about a year!
<David Jung>