View Single Post
  #3   Spotlight this post!  
Unread 21-03-2007, 05:04
ace123's Avatar
ace123 ace123 is offline
Registered User
AKA: Patrick Horn
FRC #0008 (Paly Robotics - http://robotics.paly.net/)
Team Role: Programmer
 
Join Date: Feb 2005
Rookie Year: 2004
Location: Palo Alto, CA
Posts: 50
ace123 has a spectacular aura aboutace123 has a spectacular aura about
Send a message via AIM to ace123
Re: Is anyone using RoboEmu2 with the 2006/2007 controller

I tried to get it working with this year's robot... I don't think there is any good reason that it shouldn't work... however I recommend applying the roboemu-specific changes to your code rather than trying to start with his files.

Two years ago, I hooked in some camera handlers to RoboEmu which basically used two of the analog or joystick sliders as center x and y coordinates of the camera blob.
Code:
void camera() {
	data_rdy=0;
	if (parse_mode==0) {
		Serial_Char_Callback('A');
		Serial_Char_Callback('C');
		Serial_Char_Callback('K');
		Serial_Char_Callback('\r');
	} else {
		Serial_Char_Callback('T');
		Serial_Char_Callback((char)ana_ins[4]);
		Serial_Char_Callback((char)ana_ins[5]);
		Serial_Char_Callback((char)ana_ins[4]);
		Serial_Char_Callback((char)ana_ins[5]);
		Serial_Char_Callback((char)ana_ins[4]);
		Serial_Char_Callback((char)ana_ins[5]);
		Serial_Char_Callback((char)20);
		Serial_Char_Callback((char)rc_dig_in18?90:0);
		Serial_Char_Callback((char)ana_ins[6]);
		Serial_Char_Callback((char)ana_ins[7]);
		Serial_Char_Callback('\r');
	}
}
all of those are analog inputs just getting fed directly back to the program, I believe, so they were easy to change in runtime and see how the code reacts...

Then, To hook up the camera, make your own copies of "Write_Serial_Port_Two" and "Read_Serial_Port_Two" to replace serial_ports.c and do some additional parsing to see whether the code expects an "ACK" after the command, or if it expects a "T" packet...
Again, this is a lot of work, but if you get it, it may be worthwhile.

For some reason, the auto box still comes greyed out... I think it works if you just enable it in the code, though he claimed "it tended to cause infinite loops."

You might be able to think of a few other easier ways that could involve re_core and using something like the "user_display_mode" checkbox.

In addition, I added pot and encoder code by interpreting the motor output, for example:
Code:
		 hall_effect_add_1 = (pwm01-127)/4;
		 if (hall_effect_add_1<0)
			 hall_effect_add_1=-hall_effect_add_1;
		 
		 hall_effect_add_2 = ((255-pwm02)-127)/4;
		 if (hall_effect_add_2<0)
			 hall_effect_add_2=-hall_effect_add_2;
		 
		 arm_position_2+=(pwm03-127)/4;
		 arm_position_1+=(pwm04-127)/16;

		 if (arm_position_1<0)
			 arm_position_1=0;
		 if (arm_position_1>254)
			 arm_position_1=254;

		 if (arm_position_2<0)
			 arm_position_2=0;
		 if (arm_position_2>254)
			 arm_position_2=254;
}
/* And later in my update inputs function: */

		for (i=0;i<hall_effect_add_1;++i) {
			INTCON3bits.INT2IF=INTCON3bits.INT2IE=1;
			InterruptHandlerLow ();
		}
		
		for (i=0;i<hall_effect_add_2;++i) {
			INTCON3bits.INT3IF=INTCON3bits.INT3IE=1;
			InterruptHandlerLow ();
		}

		ana_ins[0]=arm_position_1;
		ana_ins[1]=arm_position_2;
Anyway, I really liked the idea of RoboEmu2, and it's kind of sad that it's just a little too hard to get working to be worthwhile in most cases.

If you get a nice and clean implementation of these features, I would be interested in seeing it (though in my case it was about as hacked up as you can get).
__________________
-Patrick Horn, Paly Robotics

Check out the space simulator called Vega Strike, modelled after the space simulator games Elite and Wing Commander. It's Open Source too!
If you have ever played Wing Commander, or especially Privateer, and had a feeling of nostalga derived from the you will enjoy these two Vega Strike mods: Privateer Gemini Gold and Privateer Remake!
I'm working on adding multiplayer support this year...