Military Armed Reconaissance Combat (MARC) ROBOT

The Laser 4 doesn’t have much for mixing aside from Vtail. But I assume you are using the sabertooth mixing?

If you are using the sabertooth mixing, then it should work fine.

Check to be sure you have the auto calibrate feature enabled on the sabertooth.
Dipswitch 5 should be in the on position.

This will auto center the forward and turning channels on the sabertooth mixing to the stick centers when you turn it on.

just checked. All the DIP switches on my sabertooth are set to on.

Set Back: Since the body is now complete, and the sabertooth not posing much of a problem, I decided to begin building the pan/tilt that will be used to aim the gun. After trying many different configurations ( arm like pan/tilt, 2 servos per joint, centering the gun over the servos etc) I conlcuded that there just are’nt any servos that are going to lift the gun. Its just too heavy! :angry:

I really wish the gearhead motors and SES were available, since this was my original idea to move the arm. However, this project is due in late march and Im running out of time to have the bot and 50pgs of work complete as well as tests and backboard etc…

Does anyone have an idea of what I can do to move the arm. I have 12v 200rmp motors @ hand, I’d love to be able to turn them into servos! I don’t know how much the gun weighs, maybe Seamus has an idea of what his weighs? I don’t have a digital scale to measure.

EDIT: If I could do something like this: http://www.lynxmotion.com/images/howto/monster.jpg
and center the gun in the middle, I think it could work! It just seems really complicated becuase there is the fact of if the guts of the servo can handle the voltage. If I were to use this motor: http://www.lynxmotion.com/images/Products/ghm01.jpg @ 7.2 volts, thinks its plausible?

Look for rpm in the range of 20 to 60 for a motor to be converted to a servo. Or add additional gear reduction. :wink:

This meets your specs! :smiley: And not a bad price either. however, its a 12v motor. Would I have to run it @ 6v for it to work with the guts of a servo? That would reduce pretty much everything by half (torque and RPM). Plus, I still need to find an h-bridge, and than a pot with a 4-6mm shaft, and than hope it all works with my RC system 9which it should since it will be using regular PMW signals).

robotshop.ca/home/products/r … motor.html

13.6 ounces with batteries, 10.2 ounces without.

When I originally got my hands on the thing, my thought was to simply chop off the extraneous bits and work from there. When I discovered how dismal its performance was, I abandoned even that idea.

As it sits, the unit is mostly fluff, made to look vaguely like a gun, and house the mechanism and a few pellets. The mechanism is a simple DC-motor-driven gear reduction, with a simple slide switch controlling power to the motor through a plastic spring-loaded trigger with a thumb-operated “safety” catch, also spring-loaded. The final gear/cam has a simple spring-loaded pawl to keep the spring from backdriving the loader/piston assembly when the motor is switched off in mid-cycle. No switching or electronics are involved, other than powering the motor - it’s a purely mechanical system. In its unmodified state, without batteries, the center of gravity is located approximately where indicated in the image below. If you want to mount it to a pan-tilt mecahnism in this form, a simple yoke, with the axis of rotation running through that approximate spot, would balance out most of the mass, and require the least amount of torque to swing it around. Note that this will require a fairly deep yoke, to allow the grip and “magazine” parts to clear without interference.

A lot of mass can be saved by chopping off the extra gun-shaped bits in the stock, grip, and magazine-shaped areas, which are, for the most part, just open air. The grip holds four AA batteries in normal use, but those are bulky, heavy, and unnecessary if you intend to drive the mechanism from an external power source. The only really important parts of the structure are the pellet hopper on top (which would do well to be replaced by a unit that fed more reliably), and the structural plastic that supports the mechanism and holds everything in line, and holds the two halves of the body together. Removing the decorative plastic bits and switching power directly to the motor would remove a goodly amount of mass and unnecessary volume from the unit, and make for a much more compact package. This would move the CG, probably a bit forward of the marked spot, just due to the sheer amount of useless plastic involved. You could also lop off the top inch or so of the “ammo magazine” that houses the anti-backdrive pawl, but you’d have to find a new place to mount it, or work out a way to eliminate the need for it altogether, such as replacing the motor and gear reduction with a different system which may allow you to better control the loading/firing of the mechanism.

Truth be told, I wouldn’t spend too much time or effort on it. To call this toy a “gun” is a grave insult to airguns everywhere. The power, range, muzzle velocity, and accuracy are abysmal, and pellet feed is unreliable at best and extremely sensitive to the angle at which it is being held. At the rate that the mechanism cycles, pellets frequently fail to load, resulting in many dry-fires (feed reliability probably improves as the batteries die and the cycle-rate slows down, but I’m not inclined to test it further). Even when it does feed properly, the velocity and power are such that you could almost throw the pellets about as effectively as it shoots them. I realize that this is a toy, marketed towards kids, and is designed to be relatively safe when they get stupid with it, but even bearing all of that in mind, its performance was weak enough that I never bothered to even consider doing any of the above modifications, as they would only have been a waste of time and effort better spent on other projects.

ALSO NOTE: I do not know what the legal statutes have to say about the legality of modifying even toy guns in the manner described above. All information is presented for informational purposes only. Nothing that I have said involves modifying the actual loading/firing mechanism - just the physical and aesthetic properties of the unit - but for all I know, even that may not be considered to be legal in all states/provinces/countries/cantons/etc. You do this stuff at your own risk, and are responsible for researching the legalities of your own situation. All responsibility for your actions is yours, and yours alone.

Do not try this at home.
No user serviceable parts inside.
For external use only.
Wear a sweater - it’s cold outside.

http://www.rthtg.net/i/airsoft_chop.jpg

Don’t worry, I won’t hold you to it :laughing:

I was thinking I could move the batteries from the gun to the bot and run the wires to the gun alone, which would reduce about 3 ounces (according to your post). This being done, would it give me the ability to move this around with a 645mg servo @ the center of gravity? Torque is 133 oz/in.

That all depends on how you mount it, and how you move it around.

If it’s placed in a well-balanced, smoothly-supported mount, then the only resistance that the servo would see would be due to friction and the intertia of the gum/mount combination. This is not going to be the case, however, as construction techniques, pellet loads, etc. will add up to non-zero forces being applied to the axes.

I would recommend building a mount that puts the axis of rotation just slightly above the CG, so that gravity would tend to pull it toward a neutral position, but not so far away that your servo(s) is/are constantly struggling to keep it in position where you want it. If you find that you need more torque than a single direct-drive servo can provide, then you might wish to look at ganging two of them together (as done in the shoulder-lift axis of the Lynx arms), or working out some sort of mechanical advantage system (gears, levers, chains, etc.) that gives you more effective torque at the cost of a smaller range of motion. If you wanted to get especially tricky, you could go with a mechanical advantage drive, a servo mechanically modified for full-rotation, and remote-mount the feedback pot at the axis of the gun mount, so you get full range of motion and more torque at the same time. A servo controller board doesn’t care what it looks like physically - it just acts like a servo.

thanks for the advice. I will begin experimenting with positioning right away.

UPDATE: Excellent news! After taking out the batteries and mounting the gun under the COG, and using 2 645mg’s with a “y” adapter I made, I was able to move the gun effortlessly!

The design is a bit rough, so time will now be taked to design a good support that will center the gun better and sturdier on the SES bracket. Than everything will be mounted.

thanks.

If you balance the gun with a pivot point near the CG, it can be moved easily with a standard servo. I’ve seen similar setups to pan/tilt the older large camcorders which weighed more than the gun. When balanced, a simple paperclip linkage could be used to move the gun angle (the needed gun tilt range is small). I’d hot glue a strong piece of wire or a long nail sideways in the triggerguard for the pivot point. Then make a light wooden support for both sides of the nail to rest the pivot nail in so the gun can tilt. Below shows a paperclip linkage in use.

geocities.com/zoomkat/cam.htm
geocities.com/zoomkat/t-stat.htm

UPDATE: After frying my reciever for my laser 4 (yes it actually did fry!), I unhooked it and hooked up the abb to my bot. I downloaded the program from the 4WD1 totorial made by Brian Nave. It works pretty good, but I wish only one joystick was needed to control the bot rather than two, but oh well. I want to hook up my pan/tilt to ch12 and ch13, but they were programmed to handle the little grip. I geuss I need to change that right? Also, I need to add a way to mogve the gun servo for up/down aiming and I want to make “X” controll the shooting on pin 11. I’ve never programmed the atom 28 before or anything. Im in need of assistance at this point.\

here is the code for reference:

'Program name: PS2ROV4.BAS
'Author: Jim Frye / Nathan Scherdin (PS2 stuff)
'Modified by Laurent Gay : speed limit control with L1/L2
'Modified by Brian Nave : Normalized analog joysticks, named button variables, positive boolean logic, audio feedback on speed limit

' This program allows the remote control of a differentially steered robot 
' from the Sony Play Station 2 game controller. 

' The Scorpion has two modes of operation. The default is the mixer mode. This
' is where you have a Throttle for forward and reverse speed control, and a 
' Steering control for turning. In this mode the left input is throttle and 
' the right input is steering. The other mode is a differential style control. 
' This is where the left and right channels are controled indepentantly to 
' steer like a tank. This program uses the mixing mode. It also requires the 
' BEC (battery eliminator circuit to be dissabled. See the Scorpion manual.

'Connections
'Pin 0	Left Scorpion channel.
'Pin 1	Right Scorpion channel.
'Pin 2	Pan servo.
'Pin 3	Tilt servo.
'Pin 4	PS2 Data
'Pin 5	PS2 Command
'Pin 6	PS2 Select
'Pin 7	PS2 Clock
'Pin 8	NA
'Pin 9	Speaker
'Pin 10	1/0 Controlled from Triangel Button
'Pin 11	1/0 Controlled from "X" button
'Pin 12	Gripper up/down servo.
'Pin 13	Gripper rotate servo.
'Pin 14	Gripper open/close servo.
'Pin 15	NA

DAT		con	P4		' Play Station game controller connections.
CMD		con	P5
SEL		con	P6
CLK		con	P7

temp	var	byte	' Variable definitions.
buttons	var	word
Lastbuttons var word

bpress1	var	bit
bpress2	var	bit

rhori	var	byte
rvert	var	byte
lhori	var	byte
lvert	var	byte

rhori_null	var	byte
rvert_null	var	byte
lhori_null	var	byte
lvert_null	var	byte

NormalizeValue	var	byte
NormalizeNull	var	byte
DeadBand		con	2

ldrive					var word
rdrive					var word
PanPosition				var	word
TiltPosition			var	word

GripperVertPosition		var	word
GripperTurnPosition	var	word
GripperGripPosition		var	word
servo5	var	word

GEAR var byte

Button_START 	var bit 	
Button_SELECT 	var bit 	

Button_L1 		var bit 	
Button_L2 		var bit 	
Button_R1 		var bit 	
Button_R2 		var bit 	

Button_A 		var bit 	
Button_O 		var bit 	
Button_X 		var bit 	
Button_S 		var bit 	

Dpad_UP 		var bit 	
Dpad_RIGHT 		var bit 	
Dpad_LEFT 		var bit 	
Dpad_DOWN 		var bit 	

GEAR = 3			' Start at Gear 3 (from 1 to 4)
PanPosition = 1500		' Start the servos at mid position.
TiltPosition = 1500
GripperVertPosition 	= 1500
GripperTurnPosition 	= 1500
GripperGripPosition 	= 1500

low	p0				' Ensure pulsout commands are positive going.
low	p1
low	p2
low	p3
low	p12
low	p13
low	p14

low P10				' Ensure device connected to pin 10 and 11 is off on startup
low P11

high CLK			' Ensure CLK is negative going.

sound 9, [100\880, 100\988, 100\1046, 100\1175]		'four quick ascending notes.

pause 1000

setup		' This section sets the PSX Controller to Analog Mode. (red LED should light)
			' This will work with Sony and Madcatz wired, but not with Medcatz wireless.
			' You must press the analog button on the controller to set to analog mode.
	low SEL
	shiftout CMD,CLK,FASTLSBPRE,$01\8,$43\8,$00\8,$01\8,$00\8]	;Config Mode Enable
	high SEL

	pause 100

	low SEL
	shiftout CMD,CLK,FASTLSBPRE,$01\8,$44\8,$00\8,$01\8,$03\8,$00\8,$00\8,$00\8,$00\8]	;Set Mode to Analog and Lock 
	high SEL

	pause 100

	low SEL
	shiftout CMD,CLK,FASTLSBPRE,$01\8,$43\8,$00\8,$00\8,$00\8,$00\8,$00\8,$00\8,$00\8]	;Config Exit
	high SEL

	gosub get_PSX_data
	gosub NullJoysticks
	
main
	gosub get_PSX_data
	
	if Button_START then : gosub NullJoysticks : endif
		
'SET LINEARIZED JOYSTICK DISPLACEMENT BASED ON JOYSTICK CENTER POSITION
	NormalizeValue = lhori : NormalizeNull = lhori_null : Gosub Normalize : lhori = NormalizeValue
	NormalizeValue = lvert : NormalizeNull = lvert_null : Gosub Normalize : lvert = NormalizeValue
	NormalizeValue = rhori : NormalizeNull = rhori_null : Gosub Normalize : rhori = NormalizeValue
	NormalizeValue = rvert : NormalizeNull = rvert_null : Gosub Normalize : rvert = NormalizeValue
		
	'   remove the rems (') to see the NORMALIZED joystick values in terminal 1.
	'	serout S_OUT,i57600,[dec3 lhori\3," ",dec3 lvert\3," ",dec3 rhori\3," ",dec3 rvert\3," ", 13]
	
'SET MAX MOVEMENT SPEED TO ONE OF FOUR CHOICES AND GIVE AUDIO FEEDBACK
	if Button_L1 and (Lastbuttons.bit10 = 0) then 
		GEAR = (GEAR + 1) MAX 4
		for temp = 1 to GEAR: sound 9, [100\880]:pause 10:next		
	elseif BUTTON_L2 and (Lastbuttons.bit8 = 0)
		GEAR = (GEAR - 1) MIN 1
		for temp = 1 to GEAR: sound 9, [100\880]:pause 10:next		
	endif

'	lvert=255-lvert				' Changes vertical up from 0 to 255 and vertical down from 255 to 0.
	lhori=255-lhori

'CALCULATE DRIVE SPEEDS FROM JOYSTICK POSITIONS AND SPEED LIMIT	
	ldrive=((lvert*GEAR) + 1500 - (GEAR *128)) ' Forward / backward
	rdrive=((lhori*3) + 1500 - (3 *128)) ' steering
	
	'   remove the rems (') to see the calculated drive motor speeds in terminal 1.
	'	serout S_OUT,i57600,[dec5 ldrive\5," ",dec5 rdrive\5," ",13]
	
	
	PanPosition  = (PanPosition  + (rhori-127)/5) MAX 2250 MIN 750
	TiltPosition = (TiltPosition + (rvert-127)/5) MAX 2250 MIN 750

	GripperVertPosition = (GripperVertPosition - Dpad_UP*25    + Dpad_DOWN*25) 	MAX 2250 MIN 750 	'Move Gripper Vertically.
	GripperTurnPosition = (GripperTurnPosition - Dpad_RIGHT*25 + Dpad_LEFT*25) 	MAX 2250 MIN 750 	'Rotate Gripper.
	GripperGripPosition = (GripperGripPosition - Button_R2*25  + Button_R1*25) 	MAX 2250 MIN 750 	'Grip Gripper.
	
	'   remove the rems (') to see the gripper and pan positions in terminal 1.
	'	serout S_OUT,i57600,[dec4 GripperVertPosition\4," ",dec4 GripperTurnPosition\4," ",dec4 GripperGripPosition\4," ",dec4 PanPosition\4," ",dec4 TiltPosition\4, 13]
	
' I/O on/off	

	if Button_A and (bpress1=0) then	' This makes a latching output pin that responds to button presses.
		bpress1=1
		toggle p10
	endif
	if (Button_A=0) and bpress1 then
		bpress1=0
	endif 

	if Button_X and (bpress2=0) then	' This makes a latching output pin that responds to button presses.
		bpress2=1
		toggle p11
	endif
	if (Button_X=0) and bpress2 then
		bpress2=0
	endif 


' Send out the servo pulses	
	pulsout 0,ldrive					' Left Scorpion channel.
	pulsout 1,rdrive					' Right Scorpion channel.
	pulsout 2,PanPosition				' Pan servo.
	pulsout 3,TiltPosition				' Tilt servo.
	pulsout 12,GripperVertPosition		' Gripper up/down servo.
	pulsout 13,GripperTurnPosition	' Gripper rotate servo.
	pulsout 14,GripperGripPosition		' Gripper open/close servo.
'	pulsout 15,servo5
	pause 20
goto main


get_PSX_data	' This section gets the data from the PSX controller.
				' The first shiftin gets the mode. (73)
				' The next 2 shiftins gets the pushbutton data.
				' The next 4 shiftins gets the analog joystick data.
	Lastbuttons = buttons
	
	low SEL
	shiftout CMD,CLK,FASTLSBPRE,$1\8,$42\8]							' Initiate request for data from PSX controller.
	shiftin DAT,CLK,FASTLSBPOST,[temp\8]								' This is the Mode value, it will be dumped. 
	shiftin DAT,CLK,FASTLSBPOST,[buttons.LOWBYTE\8, buttons.HIGHBYTE\8]	' This puts the button data into two byte variables.
	shiftin DAT,CLK,FASTLSBPOST,[rhori\8,rvert\8,lhori\8,lvert\8]
	high SEL
	
	buttons = buttons ^ $FFFF	' SO WE CAN USE POSITIVE BOOLEAN LOGIC WHEN EVALUATING BUTTONS
	
	Button_SELECT 	= Buttons.bit0
	Button_START 	= Buttons.bit3
	
	Dpad_UP 		= Buttons.bit4
	Dpad_RIGHT 		= Buttons.bit5
	Dpad_DOWN 		= buttons.bit6
	Dpad_LEFT 		= Buttons.bit7
	
	Button_L2 		= Buttons.bit8
	Button_R2 		= Buttons.bit9
	Button_L1 		= Buttons.bit10
	Button_R1 		= Buttons.bit11
	
	Button_A 		= Buttons.bit12
	Button_O 		= Buttons.bit13
	Button_X 		= Buttons.bit14
	Button_S 		= Buttons.bit15	
	
'   remove the rems (') to see the RAW joystick and Button values in terminal 1.
'	serout S_OUT,i57600,[bin buttons\16," "]
'	serout S_OUT,i57600,[dec3 rhori\3," ",dec3 rvert\3," ",dec3 lhori\3," ",dec3 lvert\3," "]
'	serout S_OUT,i57600,[13]
return

Normalize
	if NormalizeValue < (NormalizeNull-DeadBand) then
		NormalizeValue = (127*NormalizeValue)/(NormalizeNull-DeadBand) MAX 127
	elseif NormalizeValue > (NormalizeNull+DeadBand)
		NormalizeValue = (127*(NormalizeValue-NormalizeNull)/(255-DeadBand-NormalizeNull) + 127) MAX 255
	else
		NormalizeValue = 127
	endif
return	

NullJoysticks  'READ ANALOG JOYSTICKS TO NULL OFF-CENTER VALUES
	rhori_null	= rhori
	rvert_null	= rvert
	lhori_null	= lhori
	lvert_null	= lvert
return

I just want to know how I am to go about doing this. Im a noob at electronics :confused:

Do you have any progress piccies?

:slight_smile:

sigh ok ok, but than we have to get down to business, I need help with the code :wink:

http://i101.photobucket.com/albums/m51/Italian_guy299/000_0010-3.jpg

http://i101.photobucket.com/albums/m51/Italian_guy299/000_0008-3.jpg

Neeto!

Sorry friend but I’m a mechanical designer, I’m afriad that if I were to try to help you with code it would be a case of the blind leading the… well you know.

:slight_smile:

It looks good joe :slight_smile:

one thing im curious about though, how well does that pan and tilt work? it seems the gun may have too much leverage on it because thet yoke is pretty long and you might want to shorten it up aa bit for optimal performance :slight_smile:

I haven’t had any problems with it at all, infact its been pretty good. I don’t want to modify the gun or temper with the shooting mechanism. You have to remember, this project is not a toy - especially the gun. Im not sure if it would be legal to modify the gun anyways since it could be taken as a serious weapon by the government and laws.

I was thinking the exact same thing. It looks a bit high.

Perhaps a couple of asb-03s would be better.

disregard my previous post, misunderstood.

Yeah, but the gun looks like it’s in plastic, very light, Depending on the servos, but they can probably be up to the task if the drawback of the gun isn’t too big. I would go more for esthetics, maybe shorter C brackets. waht servos are you using?