(En español)
This brief post starts the Bioloid programming workshop, using C, C + + and C# languages and different controllers: ATMega (CM-510), PC, SBC.
The first steps in C programming
C language is a simple, powerful and extremely versatile tool used to develop software for industries as diverse as the automobile , medical equipment or for the software industry itself, from Microsoft Office to operating systems like Windows or Linux.
This will be a very practical programming workshop with Robotis Dynamixel servos, so I will include links tutorials anb books that include broader and deeper explanations, like C introduction (pdf). But there are a lot:
C Language Tutorial (html)
How C Programming Works (html)
Several C programming tutorials (html)
One of the simplest programs in C:
[sourcecode language="c"]
// This line that begins with two slashes is a comment
/*
These others, starting with a slash and an asterisk
are a comment too, ending with another asterisk and a slash.
The comments are very useful for explaining what we do and,
especially, why we do so, because after a few months we will not remember the details.
*/
/*
The includes are useful to announce the compiler that we will use
existing functions from other files, such as stdio.h, in this example, to get
the printf function to display information on screen.
(This is not exactly true, but more on that later)
*/
#include
/*
This is one way to start a C program,
Creating the main function as the starting point of every C program:
*/
void main ()
// The body or content of the function starts with the following curly bracket
{
// Guess what does the following function?
printf ("Hello, World");
// And, predictably, the function ends with the closing curly bracket
}
[/sourcecode]
Now we will write the first program for the CM-510
But previously you should install the software needed to program the CM-510. If you install WinAVR in "C:tools WinAVR-20100110" you can download a zip with everything ready to use.
After loading our program in the CM-510, to use RoboPlus Tasks, Motion RoboPlus Robotis and other programs, we will have to restore Robotis firmware.
[sourcecode language="c"]
# Include stdio.h
# Include "myCM510.h"
executeMovement1 void (int ax12Id)
{
dxl_write_word (ax12Id, P_GOAL_POSITION_L, 512);
}
executeMovement2 void (int ax12Id)
{
dxl_write_word (ax12Id, P_GOAL_POSITION_L, 600);
}
int main (void)
{
ax12Id int = 6;
init ();
printf ("\r \n A simple example");
printf ("\r \n Perform movement 1 with the AX-12% i", ax12Id);
executeMovement1 (ax12Id);
printf ("\r \n Pause half a second");
_delay_ms (500); // half-second pause
printf ("\r \n Beep!");
buzzOn (100); // beep
printf ("\r \n Pause for a second");
_delay_ms (1000); // pause for 1 second
printf ("\r \n Perform movement 2 with the AX-12% i", ax12Id);
executeMovement2 (ax12Id);
printf ("\r \n End");
}
[/sourcecode]
The characters "\r \n" are used to jump to the next line in Windows.
If you have installed the necessary software (WinAVR must be installed in "C:tools WinAVR-20100110") and unzip this zip file in the root directory (C: ) you have to be ready to modify, compile, or simply load the executable "hello_world.hex" in the CM-510. You will see something similar to:
[caption id="attachment_584" align="aligncenter" width="300"] 01_Hello_World_CM-510[/caption]
Some explanations
dxl_write_word (ax12Id, P_GOAL_POSITION_L, 600);
This function is included in the Robotis CM-510 libraries allowing us to send commands to a Dynamixel actuator very easily. We only have to indicate the ID of the AX-12 to move (ax12Id), the code of the order that the AX-12 should execute, in this case go to the goal position (P_GOAL_POSITION_L), and the position in which has to be placed between 0 and 1024 (600 in the example).
Highlights:
Decompose the program into different parts
- Having previously created the init () function in myCM510.h/myCM510.c allows us to include it easily in this program.
- In addition to simplifying programming we can reuse the same code in different programs. This saves us from having to repeat the same code many times and, especially, have to correct faults or improve in only one point, . Later we will see how to organize directories and even how to create libraries.
- It also allows us to encapsulate the details, so that when the program starts growing we can handle them easily without being overwhelmed.
Showing what is doing running the program
Using the printf function we can send text to the screen that lets us know what is doing the program (printf sends to the serial port, "RoboPlus Terminal" read it and displays it on the screen. We will lear how to read from the serial port when we start programming Bioloid using a PC or SBC)
Can you think of an easy way to avoid having two similar functions such as "void executeMovement1 (int ax12Id)" and "void executeMovement2 (int ax12Id)"?
Didn't see where is the .zip file that I could download. Can anyone tell me?
ResponderEliminar