Useful NXT-G Motor Block: Absolute position control

HiTechnic has released a new motor block that you can use in NXT-G. Here's an excerpt from the description found on the HiTechnic website.

Why the HiTechnic Motor PID Block?
This block is an alternative to the standard LEGO Motor Block. Unlike the Motor block, which when used with a duration of degrees or rotations, gives you relative control over the position of the motor, the PID Block is designed to give you absolute position control. With the standard Motor block, you might use it to go forward 45 degrees, go another 45 degrees, then go backward 90 degrees. Each time the motor turns an amount that is relative to the position that the block starts in. With the PID Block you specify an absolute position. For example, if you want the motor to go to position 45, you can pass in that value to the Set Point input of the PID Block and it will drive the motor to that position. If the motor starts at position 100, then it will go backward to 45; if it starts at 0 then it will go forward.

This type of control makes sense when your motor has a limited range of motion. For example, if you are using the motor to control the position of a robotic arm, you will likely want to make the arm go to a certain position and then have it do something. Since you may not want to keep track of the current position, it is often easier if you can just specify the position to go to. That is what this block lets you do. If you use the standard Motor block, then the direction and duration needed to get to a certain position will depend on the current position.

Here are some possible uses for the Motor PID Block:

- Steering mechanism on a car
- Linkage control system to follow the input from a sensor
- A selector mechanism for a sorter.
- A gripper mechanism that has multiple positions that you want to select between. Perhaps: Open, Closed, Crunch.
- A panning control mechanism where you want to accurately control the direction something is pointing.

Gus Jansson from HiTechnic demonstrates the block in the video below. Find more information and a download link here.


Unknown said…
Amazing block! This is going to be very useful for pretty much everyone.

Dave Parker said…
Very nice Gus, thanks for making this!

Interesting coindicence, I recently made a similar block in NXT-G for my own use, which I may post at some point. Because NXT-G is not good at the "thread-safe" part, and PID control requires some state variables, it required making 3 different blocks, though. And in NXT-G the (MyBlock) interface is not as friendly as your fully custom block. So it is great and very useful that you have posted this, thanks again!
Unknown said…
hey.. nice blog man! appreciate you :)

Affiliates review
Anonymous said…
NXC also offer this kind of regulation in recent versions, see PosRegEnable, PosRegSetAngle and PosRegSetMax. It also supports speed and acceleration limitation.

See for a presentation of the feature.
Menno Gorter said…
Very usefull block indeed; I see good possibilities in at least three of my walkers!

Thanks Gus.
Thanks Gus, fantastic block, I'm using it in 3 out of my 17 motors (so far) in programming project w.5 ;)

Popular Posts