Search This Blog

Saturday 9 July 2016

Sla Studios #1 - Resurrecting my dead projects

It's time to get a heads up on what's going on this summer in my projects, I'm writing this post to clarify some things and announce new things that might come. I hope you're excited as I am.



First, I will talk about a long forgotten project that I haven't touched for.. six years. Sla Mod YR, yes.. that forgotten mod for Yuri's Revenge I've been working on six years ago. It has been a very long time since I haven't touched Yuri's Revenge modding, I want to make a new version of SMY for this fall. Nothing is set in stone, as I don't know what will happen next, but I will do my best to bring SMY back.

Second, another forgotten project, a more serious project that was left behind three years ago, The Third Tiberium War. Some people recently told me to resurrect this project, I decided to give it a try in a series of maps for Command & Conquer: Renegade. There will be a co-op map and few AOW maps.

Third, a project I'm currently working on but suspended because of college, Sla's Games Gallery, a games gallery (as the name implies) that is also free to play, I hope to get more done for this project and maybe have a release this summer or fall.

Fourth, a map I promised some time ago for my server, Mutant Co-Op, that I will make based on a fictional story about robots and robotics in general.

So it's all going nice, this summer I'm resurrecting projects that were gone for some time, I hope I will get them well and you guys will like it! I'm also working on a project for my college ;)

Wednesday 6 July 2016

C&C Renegade Tutorial - How to make a scenario for Sla's Mutant Co-Op?

It's been five years of Mutant Co-Op, a lot of things did happen during all this time, lot of changes, improvements and new maps for this server. Now It's time for you to give a helping hand (if you want) to our project, the first time we want you to contribute to the scenarios of Mutant Co-Op. Making a scenario requires some good skills, but you don't need to know programming nor 3D design, you just need to have lot of ideas! We will give you all the files you need. This will be a long post, you'll need some time to read all this ;)

Before you start, make sure you have C&C Renegade installed correctly and with latest Tiberian Technologies patch (at the time of writing this was TT 4.2). TFD should be just fine as long LevelEditor accepts it.

Tools you need: 

- Renegade LevelEditor - it's all you need to create a scenario for Mutant Co-Op, if you're interested in making a whole new map please contact me ;p

Files you need:

- LevelEditor missing files (some dlls are missing from Renegade Tools link)
- Mutant Co-Op Presets (we use custom spawns for bots)
- Custom Scripts.dll 4.2 (for custom scripts, like sla_on_enter_message etc.)
- Example M00_Tutorial leveleditor source map (a good starting point to learn how to make a scenario)
- Original Renegede Levels (all the mission maps source for leveleditor)

Usefull links:

- Tutorials
- Tools and stuff
- More downloads for Renegade
- Exodus' modding forum
- Renegade forums

You don't need to visit every site from Usefull links, but I recommend you to give a look and learn more from there.

Setuping the working environment:

1. Download Renegade LevelEditor and extract it to a empty folder where you'll work on the maps, take just leveledit folder.

2. Download LevelEditor missing files and extract them in leveledit folder.
This is how the folder should look like, also with first time launch of Renegade Leveleditor (it might ask for video driver first, just click ok).
If the leveleditor doesn't open, there's a stupid solution to copy all these files in Renegade folder, it might work, this is how I do it.

3. Download Custom Scripts (Files you need section) and copy the scripts.dll file in your Renegade directory, example: C:\Westwood\Renegade, overwrite the file. You must do this to have all scripts available for Mutant Co-Op, I highly recommend to make a backup of your scripts.dll!

4. Download Example M00_Tutorial (Files you need section) and extract it in LevelEditor's folder.
M00_Tutorial map in leveledit folder
5. Create a folder called 'Missions' in leveledit folder, in Missions folder create a folder called 'levels', download Original Renegede Levels and extract the files in Missions/levels folder.


You're now done to work on the maps, now it's time to explain how to make the actual scenarios!

Making the scenario: (making of a example M03)


1. Open leveleditor, double click on 'Missions' you've created before, load M03 map now from levels folder. (File->Open)

2. Watch the tutorial video ;)



Monday 4 July 2016

The Story of RatedR - Before the beginning

Before I get started with the story, this is a fictional story of a robotics team, based on a real story. Any resemblance to actual persons, living or dead, or actual events is purely coincidental. I have the hope that you'll have fun reading the story. I will post Mondays a new part of the story.

Image source
It's seven o'clock in the morning, preparing myself for a new day of school. My school is not far away from my home so I take my time to drink the morning coffee and eat something as usual. This isn't just an ordinary day, it's the first time I will meet this new teacher. The class started, I'm sitting in first row and listing the teacher as he presents himself to the class. The teacher ends his own presentation, starts talking about technology, I'm excited by this subject, technology being my favourite, I start talking with him about it, telling him that I've worked with 3D software before and I also have some knowledge in programming (C++, Lua, PHP, etc). He was happy about it and invited me this weekend to his robotics group from school, I accept the invitation with no hesitation. I'm thinking how wonderful would it be to work with people with the same interests in technology as for myself.

The weekend has come, I'm going to the workshop to see what's all about. I meet few new people here that I will work with, I'm the only programmer from the team. It was shown to me this new software RobotC, which I will use for the robot we're making for FTC contest. I'm using C++ for the coding of the robot, just perfect as I started to learn C++ few months ago for a server mode in C&C Renegade. I try understand what is the propose of this robot in this contest, after I while I figure out and start writing the code. I get home and still continue writing code.

Weeks pasts, I write more and more code, more complex. The teacher tells me that it's too complex and might not work as expected, I don't listen, I trust my knowledge, I'm sure it's done all right.

It's the weekend of the contest, first day it's the testing day, we're coming to this place and setup everything up after travelling with a crazy taxi driver (I wish we took the subway). Doing some tests of my code, everything works as expected, I'm happy about my code, it appears I was right.
Image source (not the actual robot we've used)

The important day comes, we take the subway this time, hah, and get there just in time for the contest to start, actually just few rounds of testing, everything works. After a while, we're informed that the real round will start in few minutes, no worries, everything works. In this contest you have two phases, the autonomous phase were my code is ran to take some objects and put them somewhere and then get on the ramp and second phase being the control mode, where you have joysticks to control the robot and take other objects with the built-in crane from the robot. The round starts, it takes a while to connect to all robots, I'm there to supervise that everything works in the communication phase, they start the round and... surprise, my robot breaks. We get to the control mode with a broken robot and we stop, they'll continue the round without us.

More rounds, more trouble, the robot motors are breaking up, smoke coming from them, everything breaks up, nothing works as did in the testing phase.. what the hell. We start arguing on all things and of course my code, being way too complex, something might of gone wrong inside the core of my code. I'm mad and sad, I have no idea what to do to fix all things, nothing happen as I predicted, just more and more trouble. We've lost the contest in between the last, with a broken controller and motor. I was feeling like the black sheep of the team, being my code running and probably broken. We took the loss and continued on.

After a week or two, I started researching what was going on, what made my code to stop running, I was not sure. I'm reading trough the help manual of the RobotC software, after a while, and some maths, I discover that I was wrong in a part... a integer was too small to hold big numbers, like time in milliseconds, I never seen such a problem before, being a Lua programmer most of time, I never encountered such a problem, was something new, I was mad on myself, I've made such a small mistake that could've caused big trouble. I was supposed to use 'long' instead of 'int' in my code, if I was doing that, everything would've worked. To be even more sure that will work, I could've put a 'unsigned' before 'long', I didn't know that is possible.

With this mistake fixed, I told them about the mistake and I apologized for the mistake. I continued working with them.

..some months later..

The team got smaller, we're only two people in this team right now, me and Harley. Harley being the mechanic of the team, I'm the programmer, we try to make a great team together, with all the mistakes we make, we're learning from the mistakes every time and improve to get what we want from our work better.

I started to make a even more complex code, yeah.. you've heard it right. This time, with all the knowledge and readings I did, it will work as expected. I make a code that will record movement of the robots by using joystick and then play the recording. It works almost perfect in testing, of course. We get this code to a real test in a contest, but surprise as always.. it doesn't work well because Harley is nervous in front of a lot of people and we can't get the robot to do what it should do. We think that we'll lose as previously done, but we actually get fourth place, it could've been worse. A new contest, this time I have to present my code to the public, I do all my best to explain to the judges that It's really cool what I've made, did the most stupid example I could've done, telling them that this robot can bring you the coffee every morning after being programmed very easily, well.. for me that's a great thing, because I'm kinda lazy to even get that done in some mornings :-). I did get the max score.

-In the next part you'll see a brand new name for the team that will struggle to get known-

Saturday 2 July 2016

V-REP - What makes it the greatest free virtual robot simulator?

Main screen with empty scene

V-REP it stands for Virtual Robot Experimentation Platform, as the name implies, its designed to simulate virtual worlds with all kind of robots, from mobile to immobile, even industrial robots.

JEL's SCARA Robot with three commanded axis

It was presented to me by my teacher Mario Ivan for my ControlJEL project (I posted about ControlJEL here). I've started learning it by examples, loading every example project and model and checking how they're done. I've learned a lot about how this awesome software works and how I can make my robot work, after hours of research and work I've finally got it going.

V-REP is completely free for education and commercially available by some special licensing. I'm using the education version of the software and it's great!

Welding robot with 6 numerically commanded axis from ABB

It's possible to simulate almost any industrial robot using V-REP, there are few examples included with V-REP from ABB, Adept, Kuka and more. You can include your own robot or concept of a robot and see how it works in a virtual environment. Simulate the movement of the axis, kinematics and even communication protocol.

Example line follower robot

If you're a fan of contest robots, like me, you can also simulate robots for sumo, line follower, football and even drones! Customize the UI how you want, you have the power to do a lot of things that other virtual robotics environments doesn't let you to do, even if they're commercially available.

The Lua code of the line follower robot

Codding it's even easier! You can write your own code using Lua programming language, customize UI, customize axis movement, setup a communication protocol using TCP/UDP by remote controlling from distance or from another software (I'm using this for ControlJEL to communicate with V-REP).

A showcase of mobile robots by default in V-REP


You can extend using C++ calls with Lua or even more by using included plugins.
It's the perfect tool for a student to learn more about robotics without having to use a real robot, or even for high schools.


I'm not affiliated with V-REP, I've wrote this article to showcase an awesome free educational software for everyone interested in robots and virtual worlds.

Visit V-REP site here for more information

Friday 1 July 2016

ControlJEL - The journey of my first research project


ControlJEL is a command interface made by me for my university on a research project, it's designed to command and control a JEL SCARA robot with three numerically commanded axis.
The JEL robot having just three commanded axis, wasn't that hard at start, these axis where: Z translation, rotation around the base and translation of the effector. Combining all these you can build a cylinder.

The challenge is how to command such an old robot with so low knowledge about it's communication capabilities and working states.

I had only few lines that I know to send to the robot using RS232 Serial communication (an antique way of communication used in older computers, a standard in industry still, being replaced by USB, I will detail more about this in another blog post), with these few lines I had to make the robot move how I want in this 'cylinder'.

Started by writing a simple command interface using my previous work in Love2D for a robot I made for a contest (a line follower contest, where you could command the robot using bluetooth), with this I made the communication possible and got going the interface development.

I had only few hours of testing on the real robot and then I had to do all work at home, writing code that might not work on the real robot was a real pain, but It's all I had but it was worth it, only few tweaks and things were going well.



The interface starts with a connect phase, where you choose what port to use to connect on (where the robot is supposed to be), I've also included a virtual mode using V-REP by using localhost TCP socket.

After you get the interface connected to the robot, you can start to command every axis how you want and get things you want done, you can record the movement (using recorded points) and then play it again.

In between the computer and robot are two major components, one of which we can remove. There is an Arduino Uno controller and the robot controller, we use the Arduino to get a bluetooth link going between the computer and robot as I proposed to myself to make (I will talk more about radio links using Bluetooth in a future post). We can remove Arduino and connect directly to robot's controller using RS232, but in future, we want to remove robot's controller and make our own controller based on Arduino or something similar to command the motors how we want, without having to use JEL's protocol.



JEL's protocol, the tricky part. The most annoying thing I had to work with is the protocol used in the communication between JEL and a computer. The computer sends commands using a prefix '$1' for talking to the 'first' controller of the JEL arhitecture, after this prefix you'll get the command you want to send, for example, to get the current position on axis 1, you need to send '$101', the '01' being the command for getting position of the axis and '1' is the axis number. The very low documented protocol that I had to work with didn't explain anything about $1 or anything else, I've learned more by reverse engineering their software that didn't command motors directly, just uploaded or downloaded the points from the robot, this set me back with few steps, didn't help me at all, more confusion than progress. After a while, I figured a way to get what I want from the robot, using lot of workarounds.

After doing all the communication and getting the interface better, I've decided to give a try to the wonderful world of virtual worlds, or in short virtualization. I started using V-REP (a special software for virtualizing any type of robot that you can imagine on this world, I will make a full post in future about this). V-REP is awesome and it uses my favourite language, Lua (what can be better?), also I can use LuaSockets (TCP and UDP the easiest way possible). I got the 1:1 3D model of the JEL robot on the software and started adding the axis controls while writing the code, it took a while to get going something but it was worth the try, in few hours I got the robot working as it does in the real world (even better..). I didn't know its the most important part of my project while making it, I took it as a side challenge from the sweat taken from communicating with the real controller. The only thing I had to copy from the real controller was the annoying protocol... heh.. but I got it working as I wanted, because was my territory, I could've done anything I want to make it work.



I didn't get the virtual going just in V-REP, I was going to implement it directly to the interface in realtime with the robot or virtual robot. Got the model imported in my interface and added controls for it. Was fun to learn more about 3D programming by directly working with it for my interface.

After all this, the presentation was closer than I expected, I had only two weeks to write my power point presentation (I hate to make power point presentations to be honest, I will try my best to replace power point with something better, if you have a suggestion, hit me!). Done, power point presentation was done, but.. I've got to make now a document to publish in a book about my project, but after doing reverse engineering, making things that nobody had an idea how to make it work, I've got it all going!

Presented the interface that I've been working for the past one-two months, it was all nice, until I had to go back home and get my laptop in the most fast possible way, waiting for the bus and praying (I'm not a religious person at all, but it 'appears' it worked this time, no, I won't change ;-P) to get it faster. Got the laptop and waited my turn, I was nervous, it was the first time I ever presented something to university teachers, but for me, it wasn't the first time I presented something to a large public (20-30 persons for me is a large public and adding the value of professors, it adds up to 50-60 >:P). Got it all nice with a help of a college, I was tired after a night I haven't sleep because I had to help someone and myself to make projects done until the day of the presentation.

A week after all this, I've got the news that I received first place on this research projects, being on first year of college.

This was a part of my journey on making ControlJEL, an interface for JEL SCARA Robot, that I've been developing for a research project for my college. It doesn't end here as I need to get new challenges completed for this project, like making Arduino control the robot directly, Internet remote control and more!

I hope you did like my post about the journey I had, it was a real pleasure to work with all this people and do researching, it was like a hobby, I'm a big hobbyist so it was really fun! I hope to get more research projects to work on, currently I work on making a robot to play Chess with a human player (more information soon), it can even be JEL doing it! (we'll never know, well.. actually, we will know in few weeks).

PS: I did not talk about all I've done on this project, it would probably take a book or two to write ;-)