Building good learning modules
This article describes how you as a teacher can build your own virtual world learning modules with your students, using the Adaptive Learning System OpenSimulator add-on from the Oligo Academy tools suite.
The Oligo Dashboard tools allows teachers to control virtual world regions and load different learning modules in them. Students can then login to a virtual world using the FireStorm or Singularity viewer and teachers can follow their activities and learning experience in the Dashboard.
We recommend all students and teachers that want to developer their own learning modules install the following tools:
FireStorm viewer | Best viewer for building 3D design in-world with other students |
Visual Studio Code | Code editor with plugins for LSL scriting and FireStorm LSL preprocessor |
Blender | Free professional 3D design tool, that can be used to import any free 3D model you find on the Internet and convert it to COLLADA (COLLAborative Design Activity), which is an interchange file format for interactive 3D applications. |
Normally only teachers (superusers) , principals (administrators) or a few tech-savvy students acting on behalf of the teacher have access to the Oligo Dashboard, but all students can install the Oligo Academy tools on their laptop, if they want to run an OpenSimulator on their laptop and work at home on designing their own virtual world.
We can provide you with a free render server web application, that your IT department can install on a Windows server, to give students an easy web interface to convert 3D models to Collada or STL for 3D print, if you don’t want your students to get overwhelmed by the Blender application. But teaching students to only use Blender for file import and export is fine for most any student, so that is what we recommend you start with.
Getting started designing your virtual world
After installing the Oligo Academy tools as described in the article How to install, you as a teacher can start OpenSimulator on your laptop using the Oligo trayicon.
The teachers laptop will now act as server for your in-class students. Students from other classes can also connect to your simulator, as long as they are on the same local area network. Student only need to install the FireStorm viewer to connect to a virtual world server learning module or make 3D design in-world.
If you want to work on building a learning module together with another school in an international school project, you must read the article on installing OpenSimulator in grid mode on a real server, that also describes how to install the Oligo Academy OpenSimulator add-ons and Dashboard manually on a grid server. Students from different countries can learn reading and writing a foreign language in the viewer chat to communicate about what to build in a virtual world.
When designing a virtual world make sure students can navigate the learning module using in-world teleport boards to landmarks, even through some add-on chat commands can be found writing “/9 help” in the FireStorm viewer chat. For students the chat should be all about communicating with other students and then in-world information boards or media on a prim pointing to external web content, should explain have they navigate the learning module.
If you implement a Head Up Display (HUD) as an 3D object that is always visible on the screen, you should use it only for showing student progress or points and not as something the students interact with for navigating the virtual world.
The students should focus on the learning module and not the viewer, therefore I hope in the future new viewers like the OnLook viewer or browser based viewers will be available. But for now just install FireStorm or Singularity viewer and instruct your students not to spend all their time dressing up their avatar.
Login to Dashboard and prepare a region
To login in to the dashboard you must specify the simulator server URL like localhost:9080 on your laptop.
For an OpenSimulator in grid mode you would ask your IT department to install the server and use a real domain like dashboard.oligo.academy and then install a reverse proxy like Apache HTTP server, to internally call http://opensim1.oligo.academy:9080, to avoid firewall issues using ports other than standard HTTP (port 80).
When you are logged in to your Dashboard you must choose one of the regions Oligo, Region1, Region2, etc. depending what size you want your virtual world to be. You should then press Delete on the region to load an empty region file. If you don’t want to start from scratch you could download a free OpenSimulator archive (OAR) file made by Linda Kellie Henson and others for a region size of 256×256. When you download these free region files their extension i .tgz, which you must change to .oar, before trying to load it in the Dashboard.
On a standalone OpenSimulator you can use the Oligo Dashboard to create user accounts under Groups, but for an OpenSimulator in grid mode, you should ask your IT department to execute “create user” statements for each student in the Robust command line console.
The Master Avatar user that was the first user created, is used for storing landmarks and other inventory information shared for all students that login to a given region. When you load a new learning module in a region old landmarks for that region are deleted and any new landmarks defined in an .iar file for the learning module are stored in the user Master Avatars inventory under landmarks.
Packaging your learning module and sharing it with other schools
If your learning module is only the OpenSimulator archive file, then you can just share the .OAR file. But if your learning module supports multiple languages, has a Heads Up Display or other learning material, then create a folder structure like in the example below and compress it to a ZIP file called VikingVillage.zip, before sharing it with other teachers and students.
/VikingVillage
/VikingVillage/VikingVillage.oar
/VikingVillage/VikingVillage.dic.csv
/VikingVillage/VikingVillage.hud.iar
/VikingVillage/VikingVillage.landmarks.iar
The dictionary file with translations is a comma separated file (.CSV), you can edit in an Excel spreadsheet or a simple text editor. The OpenSimulator Inventory Archive file (.IAR) will default load the inventory items, to the Master Avatar users inventory.
When users login to a region, the OpenSimulator add-on check if we need to copy a Heads Up Display to the users inventory from Master Avatar. Landmarks loaded to Master Avatar will become teleport points in the learning module, allowing students to jump between learning areas in a virtual world.
Master Avatars landmarks for a given region are shown on the map of active users in the Dashboard, to make it easy for the teacher to see were students are in the virtual world.
Most learning modules don’t need a Heads Up Display, but an example hud.iar file can be found in the OpenSimulator add-on module data objects folder bin/addon-modules/AdaptiveLearningSystem/data/objects. In the same folder you will also find OligoAvatars.iar that has body shapes and textures, that allow students avatar to look like cute alians. You can read more on making Avatars on the wiki. The OSAvatar site is not up to date, but the licence states these avatars are free for educational and non commercial purposes and you might be able to find a copy of the IAR file online.
Viewer chat command list
To support student to student learning the OpenSimulator Adaptive Learning System add-on implements some chat commands, the students can you in the FireStorm or Singularity viewers to ask or answer questions, teleport to landmarks or home and see active users and groups.
Chat command channels gives you access to the , if you type the command in the FireStorm or Singularity chat dialog. Square brackets [ ] mean the parameter is optional and | means an alternative.
Students are created as normal users (user level 0) and teachers are created as superusers (User level 100) and therefore have some additional commands.
Student chat commands | Description |
/9 languages | Show list of available languages in currently loaded learning module |
/9 use [code] | Set preferred language as ISO 639-1 code: da=Danish, en=English, en-us=American English. This language code is stored in the server side Heads Up Display state on the simulator, if the region learning module creates a Heads Up Display in Region.Module.hud.iar that calls LSL script modalsCreateHUD. How this language preference and other HUD state is used is up to the developers of the region learnig module. |
/9 questions | List student questions |
/9 ask [question] | Student can ask for help regarding question |
/9 answer firstname lastname [message] | Student can answer other students questions |
/9 delete | Delete my first question, when I got the answer |
/9 landmarks | Show region landmarks |
/9 teleport [home|landmark name] | Teleport to my home location or region named landmark |
/9 groups | List names of all groups |
/9 users | List names of active users |
/9 help [command|superuser] | Show help for specific command or list superuser commands |
Teachers or students acting as superusers, have some extra commands for testing a learning module that is to be translated into multiple languages. If you for example load the free EnglishGarden archive and want to extent it with some text and dialogs in multiple languages, then you would create a text csv file called EnglishGarden.dic.csv like below:
uuid;en-us;da-dk welcome.to.the.garden;Welcome to the garden;Velkommen til haven what.is.your.name;What is your name?;Hvad er dit navn? my.name.is;My name is {0};Mit navn er {0}
In the above example I have created a dictionary with text in American English and Danish, that I want to use in my learning module. A text can include a placeholder like {0},{1},.. for dynamic text to be inserted at run time. The first column header is a universally unique identifier (uuid), that will be used to reference the text in LSL script to implement virtual world actions.
Superusers can teleport to any location in a region, not just landmarks and home like students. If you in the Dashboard select a region, you will see a map with active students. If you click on the map markers you will get the students position in the virtual world, which you can copy and paste into your FireStorm or Singularity viewer to join the student in the virtual world.
Teacher chat commands | Description |
/9 default language [code] | Set default language as ISO 639-1 language code, to a language that is implemented in a learning module dictionary file as a csv file column header. A dictionary file is for example named EnglishGarden.dic.csv and when loaded in a region it will be prefixed with the region name, for example Region1.EnglishGarden.dic.csv. Default dictionary language is American English (en-US). |
/9 teleport X,Y,Z | Teleport to location like 128,128,22 |
/9 loadcsv [dictionary] | Load dictionary for modalsDictionary LSL script method with region language translations. Example /9 loadcsv Region1.EnglishGarden.dic.csv |
/9 start log | Turn chat and behavior logging on |
/9 stop log | Turn chat and behavior logging off |
/9 log [json object] | Log JSON object like {“debug”:”checkpoint charlie”} |
LSL script extensions in Adaptive Learning System add-on for logging learning progress
When implementing actions in a virtual world you will use the LSL script language. The Adaptive Learning System OpenSimulator add-on extends the LSL script language with methods that have a prefix of modals in their name.
Methods for reading texts from language translation dictionary file and replacing dynamic parts.
modalsDictionary Return translated text for id or translated id for sound modalsStringFormat Replace string place holders {0},{1} and {2}
Methods for logging learning experience in xAPI JSON, with student rating or task links
modalsLog Log learning experiences modalsLogRating Log learning experiences with user rating of personal understanding modalsLogTask Log learning experiences with external task reference modalsLogRatingTask Log learning experiences with user rating and external task reference
Methods for building custom xAPI (TinCan) statements to log learning outcome
modalsActorJSON modalsVerbJSON modalsObjectJSON modalsTimestampJSON modalsContextJSON modalsAuthorityJSON
Methods for building learning space teleport to location boards, Heads Up Display state
modalsTeleport modalsHostname modalsCreateHUD Create Heads Up Display (HUD) server side state in simulator modalsRemoveHUD Remove Heads Up Display (HUD) server side state in simulator modalsGetKeyHUD Get HUD key string values from server side state modalsSetKeyHUD Set HUD key string values in server side state modalsSignalHUD Signal action to HUD like refresh
Methods for logging any JSON or text
modalsLogJSON modalsLogText
LSL script constants
MODALS_LISTEN_CHANNEL Adaptive learning module listen channel defined in AdaptiveLearningSystem.ini Default value: listen_channel = 9 MODALS_WEB_ROOT Web root for Heads Up Display defined in AdaptiveLearningSystem.ini Default value: web_root = "https://oligo.academy/hud"
LSL script constants for xAPI (TinCan) constants. Previously all constants defined below were reserved verbs, but now only the voided verb is a reserved. See xAPI about
Constant Verbs MODALS_VERB_VOIDED http://adlnet.gov/expapi/verbs/voided MODALS_VERB_ABANDONED https://w3id.org/xapi/adl/verbs/abandoned MODALS_VERB_ANSWERED http://adlnet.gov/expapi/verbs/answered MODALS_VERB_ASKED http://adlnet.gov/expapi/verbs/asked MODALS_VERB_ATTEMPTED http://adlnet.gov/expapi/verbs/attempted MODALS_VERB_ATTENDED http://adlnet.gov/expapi/verbs/attended MODALS_VERB_COMMENTED http://adlnet.gov/expapi/verbs/commented MODALS_VERB_COMPLETED http://adlnet.gov/expapi/verbs/completed MODALS_VERB_EXITED http://adlnet.gov/expapi/verbs/exited MODALS_VERB_EXPERIENCED http://adlnet.gov/expapi/verbs/experienced MODALS_VERB_FAILED http://adlnet.gov/expapi/verbs/failed MODALS_VERB_IMPORTED http://adlnet.gov/expapi/verbs/imported MODALS_VERB_INITIALIZED http://adlnet.gov/expapi/verbs/initialized MODALS_VERB_INTERACTED http://adlnet.gov/expapi/verbs/interacted MODALS_VERB_LAUNCHED http://adlnet.gov/expapi/verbs/launched MODALS_VERB_LOGGED_IN https://w3id.org/xapi/adl/verbs/logged-in MODALS_VERB_LOGGED_OUT https://w3id.org/xapi/adl/verbs/logged-out MODALS_VERB_MASTERED http://adlnet.gov/expapi/verbs/mastered MODALS_VERB_PASSED http://adlnet.gov/expapi/verbs/passed MODALS_VERB_PREFERRED http://adlnet.gov/expapi/verbs/preferred MODALS_VERB_PROGRESSED http://adlnet.gov/expapi/verbs/progressed MODALS_VERB_REGISTERED http://adlnet.gov/expapi/verbs/registered MODALS_VERB_RESPONDED http://adlnet.gov/expapi/verbs/responded MODALS_VERB_RESUMED http://adlnet.gov/expapi/verbs/resumed MODALS_VERB_SATISFIED https://w3id.org/xapi/adl/verbs/satisfied MODALS_VERB_SCORED http://adlnet.gov/expapi/verbs/scored MODALS_VERB_SHARED http://adlnet.gov/expapi/verbs/shared MODALS_VERB_SUSPENDED http://adlnet.gov/expapi/verbs/suspended MODALS_VERB_TERMINATED http://adlnet.gov/expapi/verbs/terminated MODALS_VERB_WAIVED https://w3id.org/xapi/adl/verbs/waived Constant Activities MODALS_ACTIVITY_ASSESSMENT http://adlnet.gov/expapi/activities/assessment MODALS_ACTIVITY_ATTEMPT http://adlnet.gov/expapi/activities/attempt MODALS_ACTIVITY_COURSE http://adlnet.gov/expapi/activities/course MODALS_ACTIVITY_FILE http://adlnet.gov/expapi/activities/file MODALS_ACTIVITY_INTERACTION http://adlnet.gov/expapi/activities/interaction MODALS_ACTIVITY_LESSON http://adlnet.gov/expapi/activities/lesson MODALS_ACTIVITY_LINK http://adlnet.gov/expapi/activities/link MODALS_ACTIVITY_MEDIA http://adlnet.gov/expapi/activities/media MODALS_ACTIVITY_MEETING http://adlnet.gov/expapi/activities/meeting MODALS_ACTIVITY_MODULE http://adlnet.gov/expapi/activities/module MODALS_ACTIVITY_OBJECTIVE http://adlnet.gov/expapi/activities/objective MODALS_ACTIVITY_PERFORMANCE . http://adlnet.gov/expapi/activities/performance MODALS_ACTIVITY_PROFILE http://adlnet.gov/expapi/activities/profile MODALS_ACTIVITY_QUESTION http://adlnet.gov/expapi/activities/question MODALS_ACTIVITY_SIMULATION http://adlnet.gov/expapi/activities/simulation