Showing posts with label code. Show all posts
Showing posts with label code. Show all posts

Tuesday, 17 May 2011

Very Simple Fractal

On my way to geek martyrdom (PhD viva approaching) I'm finding myself becoming increasingly interested in fractal functions.

Here's my first attempt at coding a fractal in Matlab, which was done on my lunchbreak today.



It's based on a tiny part of the Mandelbrot set, which I've still not fully read into yet (I'm impatient!).

Here's the code, I told you it was simple! So simple in fact that it..soon...becomes.....pretty..........slow.............

clc         % clear command window
clf         % clear figure

z_old = 0-0i;   % Some random value to initialise z_old

for (seed = 0.01:0.005:0.2) % For all these values
   
    disp(seed)   % Display seed (not the right term)
   
    z0 = -seed - 0.54i; % The juicy bit
    z = 0;              % Start here
   
    rndclr=[rand, rand, rand];  % random line colour
   
    for (i = 1:1:50)   % number of iterations per seed
        z = z^2 + z0;   % iteration for the nation
        %disp(z);
       
        figure(1)
        hold on     % don't delete old lines
        title(i)    % display iteration
        plot(z,'.','color',[0,0.1,0]);  % draw a point
       
        if (i>1) % if point has a predecessor, connect them together
            line([real(z),real(z_old)],[imag(z),imag(z_old)],'Linesmoothing','on','color',rndclr)
        end
       
        z_old = z;  % Store last point
       
    end

end
   

Monday, 7 March 2011

Simple Dynamixel / Matlab Example Code

Recently I started working with a some Dynamixel RX-28 servos from Robotis. Unlike standard hobby servos, these actuators can provide position, current and velocity feedback and also have various modes of control, including compliance. They also work on a RX485 network, meaning that they can be chained together. These features make the servos a popular choice for building small humanoids, such as the Bioloid (also from Robotis).

Though a MATLAB API is available, I found the on-line examples lacking somewhat, especially when all I wanted to do was drive the servo and log its position. The following code does just that, moving the servo 90 degrees clockwise and anti-clockwise, then displaying a log of the 'present position' and 'moving' registers from the servo EEPROM.
The 'Moving' register is set to '1' when the servo is in motion. This is a bit buggy though as you need a delay in the code for it to read anything other than '1' and it doesn't exactly stop on time. Matlab isn't hard real-time so this pause seems to affect the data logging somewhat (the motion is actually really smooth, unlike what is shown above). Take the 'pause(0.01) out of the code below and you'll see what I mean

Note that you'll need to download and register the dynamixel API with Matlab before using this code.
Here are the instruction from ROBOTIS:
http://support.robotis.com/en/software/dynamixel_sdk/usb2dynamixel/windows/matlab.htm
These instructions from Agave Robotics are also useful
http://www.agaverobotics.com/products/servos/robotis/ax12/docs/Dynamixel-AX12-Matlab.pdf
Note that I had to change the 'open  device' code from the examples given above. They just wouldn't work!

I hope this is useful to someone, I spent some time searching for an example like this but couldn't find one. Of course the dynamixel servos can do much more than this but this is a nice place to start.

The source code can be downloaded from Google Docs here.