UserPreferences

AiboDiary


1. Aibo's Diary

This is the page for the Aibo project at Bryn Mawr College. Participating robots: K-8 and K-9

1.1. Phase I

Writing a Python based robot controller for the Aibo that is goign to be integrated with Pyro.

1.1.1. Daily Log

1.1.1.1. Wed Jan 26 2005
1.1.1.2. Fri Jan 28 2005

Doug

Made some changes to the Tekkotsu server code:

  1. Added a !cmd "Head Remote Control" command that turns on this server. Use !cmd "#Head Remote Control" to turn it off.

  2. Added three throttle settings in tekkotsu.cfg: vision.rawcam_interval, vision.rle_interval, and main.worldState_interval. These three values take 0 to run as fast as possible, or an integer in milliseconds to insert a pause between image grabs. Set them to 100 for 10 FPS, 200 for 5 FPS, or 1000 for a frame/reading a second.

  3. I'm going to change Pyro now to work with the new commands; we'll need to update k-8 on Monday.

1.1.1.3. Mon Jan 31 2005

Doug: All the following applies to k-9

  1. Got the interval working on "World State Serializer" via the config. Interactively, you can "!set main.worldState_interval=100" on the main_control socket to dynamically speed-up or slow down the feed.

  2. Even with the interval set slow enough, anytime we have data stream into Pyro and we need it to be synched, we need to have a separate thread. This is easy to do. See ListenerThread in aibo.py. Takes a listener and a callback function.

  3. Maybe the vision port changed in Tekkotsu 2.3? I still haven't been able to start a vision connection. Will try again later.

1.1.1.4. Tue Feb 1 2005

Doug: k-8 and k-9 are both working, and have the newest BMC Tekkotsu loaded on them. The problems with the vision were many: looks like BMC IT is blocking UDP packets on the wireless, and a couple of bugs in Tekkotsu. The toggling on/off of services is now fixed with an addition to "!select" which allows you to name a controller/file from the control menu. This works with servers, as well as files (like loading a Walk file. The timing interval pause hack doesn't seem to be working right yet. I suspect a problem with event.timeStamp() --- it might be a real, in seconds? You can get a strange behavior in Pyro or ControllerGUI by saying "!set vision.rawcam_interval=1"... it seems to pause 1 second between images, with a few all at once.

1.1.1.5. Thr Feb 3 2005
Ioana :
1.1.1.5.1. getJoint(joint)

The words that can be used in the query are:

The function returns the raw value of the joint and the duty cycle.

1.1.1.5.2. getButton(button)

The words that can be used in the query are:

The function returns the raw value of the button.

1.1.1.5.3. getSensor(sensor)
The robot has 11 sensors:
1.1.1.6. Fri Feb 4 2005
Looking at joint movement in Aibo3DController [WWW]http://www-2.cs.cmu.edu/~tekkotsu/dox/classAibo3DControllerBehavior.html#p1
 //! sends the new joint commands to the motion command
00067   void updateRC() {
00068     RemoteControllerMC *rcontrol = (RemoteControllerMC*)motman->checkoutMotion(rcontrol_id);
00069     for (unsigned int i=0; i<NumPIDJoints; i++)
00070       rcontrol->cmds[i]=val[i];
00071     rcontrol->setDirty();
00072     motman->checkinMotion(rcontrol_id);
00073   }
1.1.1.7. Mon Feb 7 2005
1.1.1.7.1. Update time
There is an option in the controller to change the update time. Maybe this is goign to help Root -> Status Report -> Sensor Observer -> Real-time Update Period It takes in a number and then you can observe the outcome using Real-time View More infor in SensorObserverControl [WWW]http://www-2.cs.cmu.edu/~tekkotsu/dox/SensorObserverControl_8h-source.html#l00063. Look for rtCtl
rtCtl->setPeriod(fr<100?100:fr); //limit to minimum period of 100ms
[WWW]http://www-2.cs.cmu.edu/~tekkotsu/dox/SensorObserverControl_8cc-source.html#l00012
1.1.1.7.2. Tail Wag
There is a class that can do this TailWagMC [WWW]http://www-2.cs.cmu.edu/~tekkotsu/dox/classTailWagMC.html#a1
1.1.1.7.3. Moving Joints
Apparently this motion manager does everything in terms of moving joints. [WWW]http://www-2.cs.cmu.edu/~tekkotsu/dox/MotionManager_8h.html. There is a globar reference motman that all the function use to move joints.
1.1.1.8. Fri Feb 11 2005
I found this class that I think is goign to help up move whatever joint we want (WorldStateJointsWriter.java).

All we need to do is to fiure out the port. Port might be 10051.

 void mirrorWriter(WorldStateJointsWriter wsj) {
    if (wsj.isConnected()) {
      float[] p=new float[18];
      p[0]=-forward.thigh_fl.x;
      p[1]=forward.thigh_fl.z;
      p[2]=-forward.knee_fl.x;
      p[3]=-forward.thigh_fr.x;
      p[4]=-forward.thigh_fr.z;
      p[5]=-forward.knee_fr.x;
      p[6]=forward.thigh_bl.x;
      p[7]=forward.thigh_bl.z;
      p[8]=forward.knee_bl.x;
      p[9]=forward.thigh_br.x;
      p[10]=-forward.thigh_br.z;
      p[11]=forward.knee_br.x;
      p[12]=-forward.neck.x;
      p[13]=forward.head.y;
      p[14]=forward.head.z;
      p[15]=forward.tail.x;
      p[16]=forward.tail.y;
      p[17]=-forward.jaw.x;
      wsj.write(p);
    }
  }

1.1.1.9. Mon Feb 14 2005
We can move the following joints
1.1.1.10. Thr Feb 17 2005
Chnaged all the code for getButton, getSensor, getJoint, setPose to be protected against usage errors. Also changed the interface to setPose. You can specify the values for the whole leg or just for a specific joint. Values are normalized, between -1.0 and 1.0. The normalized values can be found on the pyro modules aibo page. I also normalized the position returned by getJoint to be consistent with setPose().

I haven't figured out exactly the range of tail movement. values between -1.0 and 1.0 work might we might need to do some scalling.

I updated the pyro modules.

I tested the TrackBall behavior and it works with the new architecture.

1.1.1.11. Fri Feb 25 2005
2 new functions playSound(file)
>>>  robot.playSound("3barks")
None
>>>  robot.playSound("mew")
None

inverseKinematics(joint) : returns the value of pan, tilt or roll for the head

>>>  robot.inverseKinematics("pan tilt roll")
{'tilt': -0.53099393844604492, 'roll': 1.0896310000352456, 'pan': 0.0} 

>>>  robot.inverseKinematics("tilt")
{'tilt': -0.53099393844604492}

>>>  robot.inverseKinematics("roll pan")
{'roll': 1.0896310000352456, 'pan': -0.0050429529791710358}

2. Wish List