Legacy Forum: Preserving Nearly 20 Years of Community History - A Time Capsule of Discussions, Memories, and Shared Experiences.

libavr/libbioloid C library for CM5 released!

Bioloid robot kit from Korean company Robotis; CM5 controller block, AX12 servos..
289 postsPage 15 of 201 ... 12, 13, 14, 15, 16, 17, 18 ... 20
289 postsPage 15 of 201 ... 12, 13, 14, 15, 16, 17, 18 ... 20

Post by RandomMatt » Tue Feb 23, 2010 12:03 am

Post by RandomMatt
Tue Feb 23, 2010 12:03 am

27Loco wrote:I started to do some simple servo movements but I am facing some problems.

As long as I am doing everything in the main function the code works fine but when I try something like the following:

Code: Select all
void WalkForward(dx_stance_t s) {//some code here}

int main void() {
    // init stuff
    WalkForward(s) // not working
}


I just created a simple C function copying the code from main into that function but nothin happens.

What are the reasons?

Thanks for the help :)


You are probably being bitten by a subtly of C99... the dx_stance_t structure doesn't have a fixed length. (so gcc will not be able to do what you consider the right thing to be).

This isn't really a problem, because you should take care to pass pointers around (rather than copying huge structures) because you only have 4K of ram in total (of which, about 1K is used by libbioloid).
27Loco wrote:I started to do some simple servo movements but I am facing some problems.

As long as I am doing everything in the main function the code works fine but when I try something like the following:

Code: Select all
void WalkForward(dx_stance_t s) {//some code here}

int main void() {
    // init stuff
    WalkForward(s) // not working
}


I just created a simple C function copying the code from main into that function but nothin happens.

What are the reasons?

Thanks for the help :)


You are probably being bitten by a subtly of C99... the dx_stance_t structure doesn't have a fixed length. (so gcc will not be able to do what you consider the right thing to be).

This isn't really a problem, because you should take care to pass pointers around (rather than copying huge structures) because you only have 4K of ram in total (of which, about 1K is used by libbioloid).
RandomMatt
Savvy Roboteer
Savvy Roboteer
Posts: 117
Joined: Sat Dec 20, 2008 11:16 pm

Post by 27Loco » Tue Feb 23, 2010 9:06 pm

Post by 27Loco
Tue Feb 23, 2010 9:06 pm

I trying to modify the code so that it works with a walker using 4 servos, but unfortunately the code is not reliable. The ResetServo function does not work at all and sometimes he starts walking and sometimes not or he is doing not all the movements. What are my mistakes?

Code: Select all
#includes
....


#define tdel   15 // delay timer
#define RF      3 // right foot
#define LF      4 // left foot
#define RL      1 // right leg
#define LL      2 // left leg

void WalkForward(dx_stance_t *s) // walk straight forward
{
   // step left
   s->servo[RF].position -= 65;
   s->servo[LF].position -= A45;
   dx_set_stance(s);
   timer_delay(tdel);

   s->servo[LL].position -= A90;
   s->servo[RL].position -= A90;
   dx_set_stance(s);
   timer_delay(tdel);

   s->servo[RF].position += 65;
   s->servo[LF].position += A45;
   dx_set_stance(s);
   timer_delay(tdel);

   // step right
   s->servo[RF].position += A45;
   s->servo[LF].position += 65;
   dx_set_stance(s);
   timer_delay(tdel);

   s->servo[LL].position += A90;
   s->servo[RL].position += A90;
   dx_set_stance(s);
   timer_delay(tdel);

   s->servo[LF].position -= 65;
   s->servo[RF].position -= A45;
   dx_set_stance(s);
   timer_delay(tdel);
}

// Reset Servos to 0°
void ResetServo(dx_stance_t *s)
{
   printf("Reset Servo from Position 1: %d, 2: %d, 3: %d, 4:%d\n"
      , s->servo[RL].position
      , s->servo[LL].position
      , s->servo[RF].position
      , s->servo[LF].position);

   s->servo[LL].position = 0;
   s->servo[LF].position = 0;
   timer_delay(tdel);

   s->servo[RL].position = 0;
   s->servo[RF].position = 0;
   timer_delay(tdel);
}

const robot_t FLASH robot = {
   60, // Temp max
   {
   // Servo 1-4 is limited to approx half the rotational range and half the
   // torque. In practice you would set the range limits such that the
   // robot didn't try and overstress the servos.
   //
   // The easiest way to do this is to use the supervisor to output the
   // servo positions (using i) while manually moving them to the extreme
   // values
      { 1, MODEL_AX12, -256, 256, TORQUE_MAX / 2 },
      { 2, MODEL_AX12, -256, 256, TORQUE_MAX / 2 },
      { 3, MODEL_AX12, -256, 256, TORQUE_MAX / 2 },
      { 4, MODEL_AX12, -256, 256, TORQUE_MAX / 2 },

      { DX_NOID }
   }
};

static dx_adc_t imu_cal = {0, {
   [0] = {256, (-308L - 22) * 256L, 192},
      [1] = {256, (-308L - 24) * 256L, 192},
      [2] = {256, (-308L -  4) * 256L, 192},
      [3] = {256, (-308L - 11) * 256L, 256},
      [4] = {256, (-308L - 13) * 256L, 256},
      [5] = {0, 0, 128}
   } };

int main(void) {
   static dx_stance_t s = { 0, { [4] = { DX_NOID } } };
   uint8_t irc = 0; // IR center
   static dx_imu_t imu = { &imu_cal };

   s.servo[0].id = DX_NOSERVO; // Prevent accidentally trying to init servo 0
   for (int i = 1; i <= 4; i++) {
      s.servo[i].id = i;
      s.servo[i].position = 0;
      }

   printf("Set compliance\n");
   for (int i = 1; i <= 4; i++) {
      dx_set_compliance(i, 30, 1, 0);
   }

   // Print IMU outputs for one second
   for (int i = 0; i < HZ; i++) {
      //        dx_get_huv_imu(120, &imu);
      printf("(%d %d %d)\n", imu.accel.x, imu.accel.y, imu.accel.z);
      timer_delay(1);
      }

   printf("Ready!\n");

   for (int i = 1; i <= 4; i++) {
      dx_set_torque_enable(i, 1);
   }

   while (1) {

      if (button_pressed(BUTTON_UP)) {
         printf("Button up pressed\n");

         // first step
         s.servo[RF].position += A45;
         s.servo[LF].position += 65;
         dx_set_stance(&s);
         timer_delay(tdel);

         s.servo[LL].position += A45;
         s.servo[RL].position += A45;
         dx_set_stance(&s);
         timer_delay(tdel);

         s.servo[LF].position -= 65;
         s.servo[RF].position -= A45;
         dx_set_stance(&s);
         timer_delay(tdel);

         printf("Start walking forward\n");
         while ( irc < 130 ) {
            WalkForward(&s);
            irc = dx_get_IR_data_center(100);
         }

         printf("Obstacle detected: %d\n", irc);
         ResetServo(&s);
         // set back to 0
         irc = 0;

      } else if (button_pressed(BUTTON_DOWN)) {
         ResetServo(&s);
      }

      fflush(); // Ensure all of the printf() is complete before looping, inherent delay
   } // while end

}
I trying to modify the code so that it works with a walker using 4 servos, but unfortunately the code is not reliable. The ResetServo function does not work at all and sometimes he starts walking and sometimes not or he is doing not all the movements. What are my mistakes?

Code: Select all
#includes
....


#define tdel   15 // delay timer
#define RF      3 // right foot
#define LF      4 // left foot
#define RL      1 // right leg
#define LL      2 // left leg

void WalkForward(dx_stance_t *s) // walk straight forward
{
   // step left
   s->servo[RF].position -= 65;
   s->servo[LF].position -= A45;
   dx_set_stance(s);
   timer_delay(tdel);

   s->servo[LL].position -= A90;
   s->servo[RL].position -= A90;
   dx_set_stance(s);
   timer_delay(tdel);

   s->servo[RF].position += 65;
   s->servo[LF].position += A45;
   dx_set_stance(s);
   timer_delay(tdel);

   // step right
   s->servo[RF].position += A45;
   s->servo[LF].position += 65;
   dx_set_stance(s);
   timer_delay(tdel);

   s->servo[LL].position += A90;
   s->servo[RL].position += A90;
   dx_set_stance(s);
   timer_delay(tdel);

   s->servo[LF].position -= 65;
   s->servo[RF].position -= A45;
   dx_set_stance(s);
   timer_delay(tdel);
}

// Reset Servos to 0°
void ResetServo(dx_stance_t *s)
{
   printf("Reset Servo from Position 1: %d, 2: %d, 3: %d, 4:%d\n"
      , s->servo[RL].position
      , s->servo[LL].position
      , s->servo[RF].position
      , s->servo[LF].position);

   s->servo[LL].position = 0;
   s->servo[LF].position = 0;
   timer_delay(tdel);

   s->servo[RL].position = 0;
   s->servo[RF].position = 0;
   timer_delay(tdel);
}

const robot_t FLASH robot = {
   60, // Temp max
   {
   // Servo 1-4 is limited to approx half the rotational range and half the
   // torque. In practice you would set the range limits such that the
   // robot didn't try and overstress the servos.
   //
   // The easiest way to do this is to use the supervisor to output the
   // servo positions (using i) while manually moving them to the extreme
   // values
      { 1, MODEL_AX12, -256, 256, TORQUE_MAX / 2 },
      { 2, MODEL_AX12, -256, 256, TORQUE_MAX / 2 },
      { 3, MODEL_AX12, -256, 256, TORQUE_MAX / 2 },
      { 4, MODEL_AX12, -256, 256, TORQUE_MAX / 2 },

      { DX_NOID }
   }
};

static dx_adc_t imu_cal = {0, {
   [0] = {256, (-308L - 22) * 256L, 192},
      [1] = {256, (-308L - 24) * 256L, 192},
      [2] = {256, (-308L -  4) * 256L, 192},
      [3] = {256, (-308L - 11) * 256L, 256},
      [4] = {256, (-308L - 13) * 256L, 256},
      [5] = {0, 0, 128}
   } };

int main(void) {
   static dx_stance_t s = { 0, { [4] = { DX_NOID } } };
   uint8_t irc = 0; // IR center
   static dx_imu_t imu = { &imu_cal };

   s.servo[0].id = DX_NOSERVO; // Prevent accidentally trying to init servo 0
   for (int i = 1; i <= 4; i++) {
      s.servo[i].id = i;
      s.servo[i].position = 0;
      }

   printf("Set compliance\n");
   for (int i = 1; i <= 4; i++) {
      dx_set_compliance(i, 30, 1, 0);
   }

   // Print IMU outputs for one second
   for (int i = 0; i < HZ; i++) {
      //        dx_get_huv_imu(120, &imu);
      printf("(%d %d %d)\n", imu.accel.x, imu.accel.y, imu.accel.z);
      timer_delay(1);
      }

   printf("Ready!\n");

   for (int i = 1; i <= 4; i++) {
      dx_set_torque_enable(i, 1);
   }

   while (1) {

      if (button_pressed(BUTTON_UP)) {
         printf("Button up pressed\n");

         // first step
         s.servo[RF].position += A45;
         s.servo[LF].position += 65;
         dx_set_stance(&s);
         timer_delay(tdel);

         s.servo[LL].position += A45;
         s.servo[RL].position += A45;
         dx_set_stance(&s);
         timer_delay(tdel);

         s.servo[LF].position -= 65;
         s.servo[RF].position -= A45;
         dx_set_stance(&s);
         timer_delay(tdel);

         printf("Start walking forward\n");
         while ( irc < 130 ) {
            WalkForward(&s);
            irc = dx_get_IR_data_center(100);
         }

         printf("Obstacle detected: %d\n", irc);
         ResetServo(&s);
         // set back to 0
         irc = 0;

      } else if (button_pressed(BUTTON_DOWN)) {
         ResetServo(&s);
      }

      fflush(); // Ensure all of the printf() is complete before looping, inherent delay
   } // while end

}
27Loco
Savvy Roboteer
Savvy Roboteer
Posts: 63
Joined: Sat Feb 20, 2010 10:16 pm

Post by RandomMatt » Tue Feb 23, 2010 10:03 pm

Post by RandomMatt
Tue Feb 23, 2010 10:03 pm

I notice two minor things...
* You should probably add the AXS1 to the robot definition.
* You should probably delete the unused IMU stuff.

One important thing...
* You should call dx_set_stance in ResetServo

And one serious problem...
* You have a buffer overflow - so all bets are off.
I notice two minor things...
* You should probably add the AXS1 to the robot definition.
* You should probably delete the unused IMU stuff.

One important thing...
* You should call dx_set_stance in ResetServo

And one serious problem...
* You have a buffer overflow - so all bets are off.
RandomMatt
Savvy Roboteer
Savvy Roboteer
Posts: 117
Joined: Sat Dec 20, 2008 11:16 pm

Post by 27Loco » Tue Feb 23, 2010 10:41 pm

Post by 27Loco
Tue Feb 23, 2010 10:41 pm

Okay I added the AXS1 to the definition:
Code: Select all
const robot_t FLASH robot = {
   60, // Temp max
   {
      { 1, MODEL_AX12, -256, 256, TORQUE_MAX / 2 },
      { 2, MODEL_AX12, -256, 256, TORQUE_MAX / 2 },
      { 3, MODEL_AX12, -256, 256, TORQUE_MAX / 2 },
      { 4, MODEL_AX12, -256, 256, TORQUE_MAX / 2 },
      { 100, MODEL_AXS1 },

      { DX_NOID }
   }
};


The IMU stuff is removed. I added dx_set_stance(s); to ResetServo:
Code: Select all
// Reset Servos to 0°
void ResetServo(dx_stance_t *s)
{
   s->servo[LL].position = 0;
   s->servo[LF].position = 0;
   dx_set_stance(s);
   timer_delay(tdel);

   s->servo[RL].position = 0;
   s->servo[RF].position = 0;
   dx_set_stance(s);
   timer_delay(tdel);
}


And I changed dx_stance to static dx_stance_t s =
Code: Select all
{ 0, { [6] = { DX_NOID } } };


But still no movement at all :/
Okay I added the AXS1 to the definition:
Code: Select all
const robot_t FLASH robot = {
   60, // Temp max
   {
      { 1, MODEL_AX12, -256, 256, TORQUE_MAX / 2 },
      { 2, MODEL_AX12, -256, 256, TORQUE_MAX / 2 },
      { 3, MODEL_AX12, -256, 256, TORQUE_MAX / 2 },
      { 4, MODEL_AX12, -256, 256, TORQUE_MAX / 2 },
      { 100, MODEL_AXS1 },

      { DX_NOID }
   }
};


The IMU stuff is removed. I added dx_set_stance(s); to ResetServo:
Code: Select all
// Reset Servos to 0°
void ResetServo(dx_stance_t *s)
{
   s->servo[LL].position = 0;
   s->servo[LF].position = 0;
   dx_set_stance(s);
   timer_delay(tdel);

   s->servo[RL].position = 0;
   s->servo[RF].position = 0;
   dx_set_stance(s);
   timer_delay(tdel);
}


And I changed dx_stance to static dx_stance_t s =
Code: Select all
{ 0, { [6] = { DX_NOID } } };


But still no movement at all :/
27Loco
Savvy Roboteer
Savvy Roboteer
Posts: 63
Joined: Sat Feb 20, 2010 10:16 pm

Post by RandomMatt » Tue Feb 23, 2010 10:54 pm

Post by RandomMatt
Tue Feb 23, 2010 10:54 pm

okay... add some printfs to output the desired positions. are you sure that they are in the servo ranges? (you have specified -256 to 256, which strikes me as a bit small for the angles you have in mind).
okay... add some printfs to output the desired positions. are you sure that they are in the servo ranges? (you have specified -256 to 256, which strikes me as a bit small for the angles you have in mind).
RandomMatt
Savvy Roboteer
Savvy Roboteer
Posts: 117
Joined: Sat Dec 20, 2008 11:16 pm

Post by RandomMatt » Tue Feb 23, 2010 11:15 pm

Post by RandomMatt
Tue Feb 23, 2010 11:15 pm

I have finally got off my bottom and made a website for libbioloid:

http://braincell.cx/bioloid/

---

It only took ~1.25 ears to get around to it... a new record.
I have finally got off my bottom and made a website for libbioloid:

http://braincell.cx/bioloid/

---

It only took ~1.25 ears to get around to it... a new record.
RandomMatt
Savvy Roboteer
Savvy Roboteer
Posts: 117
Joined: Sat Dec 20, 2008 11:16 pm

Post by 27Loco » Tue Feb 23, 2010 11:35 pm

Post by 27Loco
Tue Feb 23, 2010 11:35 pm

Changed the ranges temporarily to SERVO_MIN and MAX. Just to be sure that this is not the problem. There is no line in the code where it stops unexpected.

Your Example code works perfectly :? so the AX12 are also working.
Changed the ranges temporarily to SERVO_MIN and MAX. Just to be sure that this is not the problem. There is no line in the code where it stops unexpected.

Your Example code works perfectly :? so the AX12 are also working.
27Loco
Savvy Roboteer
Savvy Roboteer
Posts: 63
Joined: Sat Feb 20, 2010 10:16 pm

Post by RandomMatt » Tue Feb 23, 2010 11:53 pm

Post by RandomMatt
Tue Feb 23, 2010 11:53 pm

27Loco wrote:Changed the ranges temporarily to SERVO_MIN and MAX. Just to be sure that this is not the problem. There is no line in the code where it stops unexpected.

Your Example code works perfectly :? so the AX12 are also working.


try rewriting a dx_set_stance call as a loop of printfs (to display the positions) and dx_set_position (to actually set the servos).

if the printfs show silly numbers then you'll know that you have a bug somewhere else, if the dx_set_posititions work then you'll know that you've done something weird that is confusing the dx_set_stance code.

My instinct is that you want to set element 5 of the stance structure to DX_NOID. (i.e. element 0 is a missing servo, elements 1 to 4 are servos and element 5 is the end of list marker).
27Loco wrote:Changed the ranges temporarily to SERVO_MIN and MAX. Just to be sure that this is not the problem. There is no line in the code where it stops unexpected.

Your Example code works perfectly :? so the AX12 are also working.


try rewriting a dx_set_stance call as a loop of printfs (to display the positions) and dx_set_position (to actually set the servos).

if the printfs show silly numbers then you'll know that you have a bug somewhere else, if the dx_set_posititions work then you'll know that you've done something weird that is confusing the dx_set_stance code.

My instinct is that you want to set element 5 of the stance structure to DX_NOID. (i.e. element 0 is a missing servo, elements 1 to 4 are servos and element 5 is the end of list marker).
RandomMatt
Savvy Roboteer
Savvy Roboteer
Posts: 117
Joined: Sat Dec 20, 2008 11:16 pm

Post by 27Loco » Wed Feb 24, 2010 12:05 am

Post by 27Loco
Wed Feb 24, 2010 12:05 am

As soon as I comment the very first ResetServo out the robot is moving. Do you have an idea how this function call is influencing the rest of the code?

And thanks for your great and fast help!
As soon as I comment the very first ResetServo out the robot is moving. Do you have an idea how this function call is influencing the rest of the code?

And thanks for your great and fast help!
27Loco
Savvy Roboteer
Savvy Roboteer
Posts: 63
Joined: Sat Feb 20, 2010 10:16 pm

make error

Post by Dimitris » Sat May 08, 2010 2:39 am

Post by Dimitris
Sat May 08, 2010 2:39 am

Hi,

First off congrats for the amazing work, this library seems perfect for programming in C and making life easier!

I've just tried compiling the example file today but I get errors when running make. I'm using Linux and have make, gcc and avr-gcc installed. Errors dump:

crt-hack.c: Assembler messages:
crt-hack.c:766: Error: garbage at end of line
crt-hack.c:774: Error: garbage at end of line
crt-hack.c:780: Error: garbage at end of line
...
...
crt-hack.c:964: Error: garbage at end of line
crt-hack.c:970: Error: garbage at end of line
crt-hack.c:976: Error: garbage at end of line
crt-hack.c:982: Error: garbage at end of line
make: *** [example_cm5.elf] Error 1
Hi,

First off congrats for the amazing work, this library seems perfect for programming in C and making life easier!

I've just tried compiling the example file today but I get errors when running make. I'm using Linux and have make, gcc and avr-gcc installed. Errors dump:

crt-hack.c: Assembler messages:
crt-hack.c:766: Error: garbage at end of line
crt-hack.c:774: Error: garbage at end of line
crt-hack.c:780: Error: garbage at end of line
...
...
crt-hack.c:964: Error: garbage at end of line
crt-hack.c:970: Error: garbage at end of line
crt-hack.c:976: Error: garbage at end of line
crt-hack.c:982: Error: garbage at end of line
make: *** [example_cm5.elf] Error 1
Dimitris
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 53
Joined: Thu Jun 29, 2006 1:00 am

Re: make error

Post by RandomMatt » Sat May 08, 2010 4:19 pm

Post by RandomMatt
Sat May 08, 2010 4:19 pm

Dimitris wrote:I've just tried compiling the example file today but I get errors when running make. I'm using Linux and have make, gcc and avr-gcc installed.


Interesting... that should have worked. what version of avr-gcc do you have?
(mine, version 4.1.2, works fine under linux).

A quick fix (regardless of the version of avr-gcc) would be to use the standard crt... you can do this by editing common.mk. delete some stuff from CFLAGS_AVR and LDFLAGS_AVR so that they read...
Code: Select all
CFLAGS_AVR = ${CFLAGS_ALL} -I${LIBAVR} -Os -ffreestanding \
        -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
        -ffunction-sections
LDFLAGS_AVR = -I${LIBAVR} -Wl,--gc-sections,--relax

and tweak the definition of AVR_COMPILE so that it reads...
Code: Select all
define AVR_COMPILE
        ${AVR_CC} $(call CFLAGS_${1}) $(call LDFLAGS_${1}) -o ${3} ${2}
endef
Dimitris wrote:I've just tried compiling the example file today but I get errors when running make. I'm using Linux and have make, gcc and avr-gcc installed.


Interesting... that should have worked. what version of avr-gcc do you have?
(mine, version 4.1.2, works fine under linux).

A quick fix (regardless of the version of avr-gcc) would be to use the standard crt... you can do this by editing common.mk. delete some stuff from CFLAGS_AVR and LDFLAGS_AVR so that they read...
Code: Select all
CFLAGS_AVR = ${CFLAGS_ALL} -I${LIBAVR} -Os -ffreestanding \
        -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
        -ffunction-sections
LDFLAGS_AVR = -I${LIBAVR} -Wl,--gc-sections,--relax

and tweak the definition of AVR_COMPILE so that it reads...
Code: Select all
define AVR_COMPILE
        ${AVR_CC} $(call CFLAGS_${1}) $(call LDFLAGS_${1}) -o ${3} ${2}
endef
RandomMatt
Savvy Roboteer
Savvy Roboteer
Posts: 117
Joined: Sat Dec 20, 2008 11:16 pm

Post by Dimitris » Sun May 09, 2010 5:54 pm

Post by Dimitris
Sun May 09, 2010 5:54 pm

I think gcc was v. 4.4.3, but I formatted my laptop over the weekend so don't know further, sorry. But now I've installed the latest Ubuntu, again with the 4.4.3 version of gcc, and managed to compile successfully (I also had problems with serial comms, it was time to start fresh)!

As a note for other users: I had to install gcc-avr as well as avr-libc because otherwise a "-lc not found" error is thrown.

Keep up the good work!

Cheers,
Dimitris
I think gcc was v. 4.4.3, but I formatted my laptop over the weekend so don't know further, sorry. But now I've installed the latest Ubuntu, again with the 4.4.3 version of gcc, and managed to compile successfully (I also had problems with serial comms, it was time to start fresh)!

As a note for other users: I had to install gcc-avr as well as avr-libc because otherwise a "-lc not found" error is thrown.

Keep up the good work!

Cheers,
Dimitris
Dimitris
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 53
Joined: Thu Jun 29, 2006 1:00 am

Post by Dimitris » Sun May 09, 2010 7:32 pm

Post by Dimitris
Sun May 09, 2010 7:32 pm

Right, I managed to download the bin file (hex wouldn't work) to the CM-5 and the program runs, recognises servos, allows ID change etc, servo LEDs turn on when scanned, but when the main loop runs ('g') and q,a,w,s keys are pressed, the servos don't move. Any ideas?
Right, I managed to download the bin file (hex wouldn't work) to the CM-5 and the program runs, recognises servos, allows ID change etc, servo LEDs turn on when scanned, but when the main loop runs ('g') and q,a,w,s keys are pressed, the servos don't move. Any ideas?
Dimitris
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 53
Joined: Thu Jun 29, 2006 1:00 am

Post by RandomMatt » Sun May 09, 2010 8:17 pm

Post by RandomMatt
Sun May 09, 2010 8:17 pm

Dimitris wrote:..., the servos don't move. Any ideas?


Dunno. Three thoughts:
Is it my example code? i.e. what happens if you press ',' and '.'?
What happens if you try capital letters (such as 'Q')?
What happens if you use the 'w' command in the supervisor is set the memory locations by hand?
Dimitris wrote:..., the servos don't move. Any ideas?


Dunno. Three thoughts:
Is it my example code? i.e. what happens if you press ',' and '.'?
What happens if you try capital letters (such as 'Q')?
What happens if you use the 'w' command in the supervisor is set the memory locations by hand?
RandomMatt
Savvy Roboteer
Savvy Roboteer
Posts: 117
Joined: Sat Dec 20, 2008 11:16 pm

Post by animemastr » Sun May 09, 2010 11:10 pm

Post by animemastr
Sun May 09, 2010 11:10 pm

Hey Dimitris, i just got my example to compile, but now i need to load it to the cm-5, what did you use to do this? i'm using ubuntu as well and tried using GtkTerm to load my file, but it doesnt seem to do anything when i do. does the bioloid have to be in any certain mode for you to load the file? then once it is loaded, how do you run the example? do you interface with the bioloid through GtkTerm (or whatever other terminal client you're using)?
Hey Dimitris, i just got my example to compile, but now i need to load it to the cm-5, what did you use to do this? i'm using ubuntu as well and tried using GtkTerm to load my file, but it doesnt seem to do anything when i do. does the bioloid have to be in any certain mode for you to load the file? then once it is loaded, how do you run the example? do you interface with the bioloid through GtkTerm (or whatever other terminal client you're using)?
animemastr
Newbie
Newbie
Posts: 5
Joined: Sun Jul 12, 2009 6:43 pm

PreviousNext
289 postsPage 15 of 201 ... 12, 13, 14, 15, 16, 17, 18 ... 20
289 postsPage 15 of 201 ... 12, 13, 14, 15, 16, 17, 18 ... 20