How do you wire a Kick motor in labview?

Hello I am Lead Programmer for Amherst Robotic Team#2632 Comets Unleashed.

I need help for the autonomous mode for labVIEW

My plan is to make the program do this
move forward, stop, kick the ball] Repeat 3 times.

working form the outside in:

ForLoop1(with loop count set at three), Watchdog open, RobotDriveRegerstryGet(Left and Right Motors)

[inside ForLoop1] WhileLoop, ForLoop2(loop count st at 1)
   [inside WhileLoop] Watchdog Feed, Drive TankDrive(75%MaxSpeed), ElapsedTime(set to 3 Seconds)(connected to loop condition)
   [inside ForLoop2] Watchdog Feed, Drive TankDrive(0%Max Speed),
                All the Watchdog's are connected/All the Drive TankDrive's are connected with the Purple Line

So that is what I have. My question is now how do I connect the kick motor so it preforms the way I stated above. I have a program thats like this [MotorControlRegisteryGet(labled KickMotor), connected with a purple line to Motor SetSpeed(Constant at 1). Does that need to go there?

Also as a side Note I would like to connect a Watchdog Kill at the very End of everything, but It won’t let me. It says this after I connect the purple line from the secoon Watchdog Feed to the Watchdog Kill. It connects to the ForLoop2 making a tunnel, then the ForLoop1 making a tunnel. Then there is a broken wire between the ForLoop1 tunnel and the Watchdog Kill. I hovered the mouse over it and it said this:

[i]“Array element conflict
Thetype of source is 2-D array of typedef ‘WatchdogDevRef.ctl’
cluster of 1 element
The type of the sink is typedef ‘WatchdogDevRef.ctl’
clustter of 1 element”

If you could explain what that is and how I could connect it that would be great.

Thanks, any help appreciated.

Kyle Lenox

Sorry there is a typo. this paragrah is supposed to say this"

Also as a side Note I would like to connect a Watchdog Kill at the very End of everything, but It won’t let me. I connect the purple line from the secoon Watchdog Feed to the Watchdog Kill. It connects to the ForLoop2 making a tunnel, then the ForLoop1 making a tunnel. Then there is a broken wire between the ForLoop1 tunnel and the Watchdog Kill. I hovered the mouse over it and it said this:

Sorry for that, didnt mean to cause the confusion!!

Kyle Lenox

It is because the For Loop default to an array for ANY output from a For Loop.
Right click the tunnel going out of the For Loop and select “Disable Indexing”

I have to ask Why do you feel you need to kill the watchdog?
I have never found a need to kill the watchdog.
Are you uning it as a globle means to shut down your robot?

Instead of running while loops in Autonomous Independent (which is what I think you are doing, pictures would help alot), you can feed the watchdog in the Autonomous Iterative, then put Auton code in Autonomous Independent. Autonomous Iterative will be fed with new data packets, so it will run at 50hz and can feed the watchdog while you do other stuff.

You could put all of your autonomous code in a Flat Sequence Structure, that makes things easy to understand. If you have all of your major robot actions in SubVI’s (e.g. drive_x_distance.vi, turn_x_angles.vi, etc). you could alternatively wire a “flow wire” between them, just a wire of any datatype (I use doubles because I like orange), and LabVIEW will make sure they run in sequence because it must follow the path of the data.

Screenshots will help everyone see what you are trying to do much better than text.

I also recommend driving based on distance instead of time, its not really hard to do. See attached VI for example of that. You don’t really need to include the X axis processing, it just helps with drift. All of the constants that are 0 need to be tuned.

I also have a state-machine for my kicker, so I can set the state and another loop (similar to PeriodicTasks.vi) will handle the recoil/kicking. I can set the state in a VI, wire the flow wire to a Drive, and the state-machine will run in the background, not blocking the Drive code.

drive_straight.vi (16.7 KB)


drive_straight.vi (16.7 KB)

you could use something like this





Thanks for the responses

to answer some questions I am using Autonomous __.

I am also using the Watchdog Kill because somehow when working in the autonoous we ran it and found out that some times it will run again for an additional 20 seconds. We have used it for fear of it acting up in the competition.

Also Id send you a picture but I don’t knw how to do that.

Now just to question something. Someone had a thumbnial witha piture of what his program would look like and there was a bunch of question marks in the Kick the ball loop. What are the questions for???

Thanks once again and any help is appreciated!!

Kyle lenox

You did not explane how you are kicking the ball.

How are you going to kick the ball?

What hardware?

Relays?
Solenoids?
Pneumatic?
Rubber bands?

You have to explicitly set the motor speed to 0 to stop your robot. Even if your autonomous code stops, that does not tell the motors to stop.

Killing the watch dog is not a clean way to shut down.

Set the motor speed to 0 before exiting your autonomous mode.

My mentor wanted to acually try if there was a componet to convert 3 digitial inputs and converts it to a decimal value output, which we will use in a case statement to program the robot to run one of three Autonomous Modes.

The idea is that we can taggle back and forth between 3 autonomous modes for the three starting areas of the arena. By fliping a switch on a box we can control which Autonomous mode we want running.

If someone has a way to make 3 choices (I/O 6, 7, and 8), with only 1 choice being true and the other two false, then take case stucture(figured this would work because there are multiple pannels that you could choose to activate) and make it so that the true I/O pulls up its corisponding pannel and runs it.

We are wanting this to work but this is both our first time woring in labVIEW and we don’t know how to do it. We are trying to expirement with it, but some advice and knowhow from the professionals will be great. Thx

Any help is appreciated, thx!!

Kyle Lenox

Sorry about that, we are using motors to kick the ball.

Also the motor speed is set to zero. I am using the watchdog to kill the motors, not to kill the watchdog.

OK?

So how are you using the motor to kick a ball?
Do you just set it to some speed and leave it on?
If so then just do that inside where the ??? were.

Do you need to turn it on for a little while and then turn it off?

What ever you need to do with the motor you need to do it in place of the ???.

How do you need the motor to run to kick a ball?
I bet if you wrote the steps down on paper, you could program it.
Give it a try. Write down what the motor has to do and then tranlate that into code.

Yes there is

In the case statement you can set each case to for a range of values like
1…3 or …-1 or 1…
or for selected values like
1,3,5,7

Untitled.png


Untitled.png

Have you looked at the Get Alliance VI?
The Alliance and field position is set on the driver station and can then be read by you code.

Untitled.png


Untitled.png

Ok heres whats happening.

We are using a motor to pullback a bar, using a dogleg, once it clears the gap, it lets go of the tension and kicks back. Kindof like when you use your foot and bend your knee ato kick something.

What I want to do is build a program where a robot moves forward, kicks a ball, moves forward, kicks a ball, moves forward, kicks a ball. I have it set up so it moves forward, but I dont know if I have it set up right to kick it.

Now, the team want me to devise 3 Autonomous modes. 1 code for each starting position. We can determine which one we want to use by flipping one of three switches on a box to on.

The thing is I dont know how to relate that to programing.

I do know that I have to make 1 of the three I/O true, ant the other two False. Then I need to take the one that is true, and make that ones Autonomous ode pop us and run.

But I dont know how to do that.

RIght now I am work on a possible idea of using elcusive or’s to detrmine which one is true. But I would like it to work smoothly and my inexperiance isn’t going to help with that. so any help from the pro’s is nice

Thx, any help is appreciated

But you still have not fully explaned how you plan on controlling the motor.
Do you turn it on and leave it on? How will you know when it has “let go”
When will you stop your motor?

Use the Get Alliance.VI and forget about flipping switches on a box.
Set the Alliance and field position on the driver station.

Now we have a limit switch that gets activated once the dogleg’s gap passes by. The dog leg winds the kicker back, then it hits the limit switch and lets go.

Now I understand that you are encouraging me to get the Get Alliance Vi. But the box is already on the robot and we have the digitial I/O programed into the Robot Main Vi.

Now What is the Get Alliance Vi. and where would I get it justs incase the box doesnt work.

By the way thanks for all the help youve given me.

Kyle Lenox

This won’t do what you want. The “field position” actually tells which of the three spots behind the glass your driver station is set up on. It has nothing to do with where your robot is placed on the field.

Alan I am very sorry to hear that. We have already built our auto code around that. I misunderstood the term “field position” to mean the position on the field and not the driver station position.

We have even tested it out. We are able to set the field position on the driver station and the robot code reads it correctly. Does this mean that durning commetition they will over write what we set it to?

Are you sure about the mean of “field position”?

I have tried to research this more and feel that when they say field position they mean one of the 3 positions the robot will start from on the field.

In the manual they use the terms “Alliance Stations” and “PLAYER STATIONS” when referring to the area behind the glass and they use the term “field” when referring to the green area that the robots are in.

We can set the field position value on the driver station and then read it from the robot. I feel we can set it to mean what we want it to mean. What ever we want the values 1, 2 or 3 to mean to our robot code.