Reach Stacker
Model of a generic reach stacker. Features drive, steering, elevated and extended boom, elevated cabin, rotated head and motorized jaws.
Datasheet:
Completion date: 01/04/2012
Power: electric (Power Functions)
Dimensions: length 38 studs (not including the arm) / width 22 studs (not including the arm) / height 22 studs
Weight: 1.565 kg
Suspension: none
Propulsion: 1 x PF XL motor geared 1.4:1
Motors: 2 x PF XL motor, 3 x PF Medium, 2 x micromotor
Reach stackers are highly specialized industrial machines that can be considered a distant variant of a telehandler. They are being used primarily in cargo terminals in ports around the world, where their task is to transport and arrange containers. I have been planning to build such a machine for a very long time, and I finally succeeded.
The model showed a generic, typical reach stacker rather than some particular model. The interesting thing about reach stackers is that they are absent from the offer of most of the European machinery manufacturers, except for the Liebherr company which produces reach stackers with arched booms, which would be extremely difficult to model with LEGO pieces.
The model was intended to be as simple, small and functional as possible. I have used no suspension system in it; I was unable to determine whether real reach stackers have any suspension systems, but it seems unlikely for machines that are designed to carry heavy loads around perfectly flat asphalt areas. For example, most front loaders have no suspension on their front axles to make them more stable with loads, and they are supposed to work in rough terrain.
Most of the model was built entirely studless, with exception for the sides of the hull, consisting of studfull bricks connected to the bearing frame. Thus, they were used to strengthen the chassis in its crucial section between the mounting points of the boom and of the linear actuators.
The model’s front axle was driven by PF XL motor through a single differential, and its four wheels were mounted on two small Technic turntables which acted as bearings, taking load off the axle. It seemed to work, as the model proved to be very agile, with and without the load. The rear axle was steered by a PF Medium motor with a very simple steering mechanism lacking a clutch or a return-to-center function. It had an extreme steering lock, merely thanks to removal of any parts of the body that could collide with wheels.
The boom, made of studless panels and self-container, was elevated by two large linear actuators driven by a single PF XL motor. A PF Medium motor installed at the back of the boom was used to extend it, through a system of a worm gear meshed with racks on the boom’s extendable section. The head at the tip of the boom included two micromotors, one for rotating it and another one for closing and opening its jaws. Since the head was intended to balance itself under own weight, just like in real machines, a weighted brick was attached to its side opposite the latter micromotor to counter-balance it. The head’s rotation range was full 360 degrees, and its jaws had a gripping range from 9 to 31 studs. Finally, a PF Medium motor and a small linear actuator were used to elevate the cabin and move it forward, but due to lack of space in the hull, the range of movement was minimal and the function was quite unimpressive.
One function that I toyed with and eventually abandoned was tilting the head forward and backward. Real reach stackers have such function, although it appears to be very rarely used. I did not expect to really need it, and it added plenty of technical difficulties, requiring another motor near the boom’s tip, or a pneumatic system routed to its tip, or perhaps an extending driveshaft inside the boom.
There were few interesting technical solutions that I’ve tried – other than using turntables as bearings, they included the construction of the boom which can be made much longer, and the jaws extension mechanism which was very simple, compact and yet reliable. In general, the model had a sturdy chassis and boom, but rather delicate head and jaws. Despite that, the jaws worked flawlessly with any kind of load, and the maximum load capacity of the model proved to be almost 0.5 kg, limited only by the torque of the PF XL motor elevating the boom and by the clutches in the linear actuators.
I have also used this opportunity to test my IR Link sensor which allows the NXT brick to control Power Functions devices. I have built a simple NXT controller with one joystick, using three motors and two touch sensors and working in two modes: drive mode and boom control mode. The controller worked rather well using my program written in ROBOTC which is included below, but the IR Link sensor was a disappointment: its range was shorter than that of PF remotes, and it caused delays in the reaction of PF motors. Still, controlling the model in such way, definitely more realistic than with regular Power Functions remotes, was an interesting experience.
Control program:
#pragma config(Sensor, S1, HTIRL, sensorI2CCustom)
#pragma config(Sensor,S3,touch1,sensorTouch)
#pragma config(Sensor,S4,touch2,sensorTouch)
#include "drivers/HTIRL-driver.h"
bool sending = false;
bool drivemode = true;
tPFmotor DriveMotor = pfmotor_S1_C1_A;
tPFmotor SteeringMotor = pfmotor_S1_C1_B;
tPFmotor BoomElevationMotor = pfmotor_S1_C2_A;
tPFmotor BoomExtensionMotor = pfmotor_S1_C2_B;
tPFmotor CabinMotor = pfmotor_S1_C3_A;
tPFmotor HeadCatchMotor = pfmotor_S1_C4_A;
tPFmotor HeadRotationMotor = pfmotor_S1_C4_B;
task Buttons()
{
nNxtButtonTask = -2;
nNxtExitClicks = 2;
nxtDisplayCenteredTextLine(0, "Not sending...");
while(true)
{
if(nNxtButtonPressed == 3)
{
PlaySound(soundBeepBeep);
if(sending == false){
sending = true;
nxtDisplayCenteredTextLine(0, "Sending...");
}
else{
sending = false;
nxtDisplayCenteredTextLine(0, "Not sending...");
}
}
if(nNxtButtonPressed == 1)
{
drivemode = false;
nxtDisplayCenteredTextLine(2, " DRIVE [BOOM]");
}
if(nNxtButtonPressed == 2)
{
drivemode = true;
nxtDisplayCenteredTextLine(2, "[DRIVE] BOOM ");
}
if(nNxtButtonPressed == 0)
{
sending = false;
PlaySound(soundBeepBeep);
wait1Msec(400);
PFMotor(DriveMotor, 0);
PFMotor(SteeringMotor, 0);
PFMotor(BoomElevationMotor, 0);
PFMotor(BoomExtensionMotor, 0);
PFMotor(HeadCatchMotor, 0);
PFMotor(HeadRotationMotor, 0);
PFMotor(CabinMotor, 0);
StopAllTasks();
}
wait1Msec(400);
}
}
task main()
{
StartTask(Buttons);
nxtDisplayCenteredTextLine(2, "[DRIVE] BOOM ");
int LeftMotor = 0;
int RightMotor = 0;
int UpperMotor = 0;
int RightButtons = 0;
while (true) {
if(drivemode == true)
{
LeftMotor = (nMotorEncoder[motorA] / 7) * -1;
if (LeftMotor > 7) LeftMotor = 7;
else if (LeftMotor < -7) LeftMotor = -7;
RightMotor = (nMotorEncoder[motorC] / 10) * -1;
if (RightMotor > 2) RightMotor = 2;
else if (RightMotor < -2) RightMotor = -2;
if (SensorValue(touch1) == 1) RightButtons = 7;
else if (SensorValue(touch2) == 1) RightButtons = -7;
else RightButtons = 0;
nxtDisplayTextLine(4, "Left motor: %d", LeftMotor);
nxtDisplayTextLine(5, "Right motor: %d", RightMotor);
nxtDisplayTextLine(6, "Buttons: %d", RightButtons);
nxtDisplayClearTextLine(7);
if (sending == true)
{
PFMotor(DriveMotor, LeftMotor);
PFMotor(SteeringMotor, RightMotor);
PFMotor(CabinMotor, RightButtons);
}
}
else
{
LeftMotor = nMotorEncoder[motorA] / 20;
if (LeftMotor > 0) LeftMotor = 7;
else if (LeftMotor < 0) LeftMotor = -7;
UpperMotor = nMotorEncoder[motorB] / 20;
if (UpperMotor > 0) UpperMotor = 7;
else if (UpperMotor < 0) UpperMotor = -7;
RightMotor = (nMotorEncoder[motorC] / 20) * -1;
if (RightMotor > 0) RightMotor = 7;
else if (RightMotor < 0) RightMotor = -7;
if (SensorValue(touch1) == 1) RightButtons = 7;
else if (SensorValue(touch2) == 1) RightButtons = -7;
else RightButtons = 0;
nxtDisplayTextLine(4, "Left motor: %d", LeftMotor);
nxtDisplayTextLine(5, "Right motor: %d", RightMotor);
nxtDisplayTextLine(6, "Upper motor: %d", UpperMotor);
nxtDisplayTextLine(7, "Buttons: %d", RightButtons);
if (sending == true)
{
PFMotor(BoomExtensionMotor, LeftMotor);
PFMotor(BoomElevationMotor, UpperMotor);
PFMotor(HeadRotationMotor, RightMotor);
PFMotor(HeadCatchMotor, RightButtons);
}
}
wait1Msec(200);
}
}
@LegoStax
Oops, I meant to use a smiley face.
@Sariel
I installed the Driver Suite and got it to work. Thanks! http://sariel.pl/wp-includes/images/smilies/icon_biggrin.gif
@LegoStax
Documentation as in the whole Help file available when you press F1.
@LegoStax
P.S. It also said in the compile error window that it couldn’t open the IRLink driver (Drivers\HTIRL-driver.h).
@Sariel
I am running 3.54. What do you mean by documentation? The files or…what? By the way I copied over your code to see if it would work but ROBOTC says that it can’t compile it because it doesn’t recognize the PFMotor command. So I know that mine didn’t come with the driver installed. Should I install 3.60?
@LegoStax
I think the driver came together with my RobotC install. Did you check the documentation in your version? Which version are you running?
@LegoStax
P.S. How would I install it? I know I sound really dumb, but I know it’s in “C:\Program Files (x86)\Robomatter Inc\ROBOTC Development Environment\Drivers\NXTDriver”. Do I put it under NXTDriver or just in the Drivers folder?
I looked at your ROBOTC code and I can’t get my IR Link to work and I can’t. I do know that I need the HiTechnic driver for it, but I went to their site and I can’t find one for ROBOTC. Do you know where I might be able to get one?
@Jimmy
Because I don’t work for LEGO.
I mean Why can’t your creations become a lego set@Jimmy
@Nate
Yes, I did.
I agree. Your creations are better then some of the official Lego Technic sets.
Great job Sariel. Did you use worm gears to move the arm and claw?
Sorry i meant to say case.
@unknown
What?
Why did you not just use k select.
Don’t be pessimistic! I think you could make it indeed. @Sariel
@Arjan
Lightbox.
what plug-in do you use to post your photos?
@Alex
Because none of the things I’ve built has any chance of being turned into a LEGO set.
Why don’t you send something to Lego.CUUSOO ?
Great job on your newest creation. I find it genius to Use both Power functions and NXT In This creation. I look foward to more!
@MAN
You know, the description says that. The video shows that. What’s stopping you from reading and watching?
how much it can lift?
@TLT803
It’s secured with liftarms on both sides. It doesn’t get much stronger than this.
I don’t want to be critical but the connection of the LAs with the boom doesn’t look that strong… did nothing else work?
Ingenious creation Paul! And also high quality video in every respect.
@Sariel
They seem to be quite specialized in moving cargo.
http://www.kalmarind.de/show.php?id=2783
Mainly (big) forklifts, reachstackers and so on…
@destructor
Thanks for the info, I must admit I’ve never heard about Kalmar Industries.
Awesome! great quality of the video
> The model showed a generic, typical reach stacker rather than some particular model. The
> interesting thing about reach stackers is that they are absent from the offer of most of the
> European machinery manufacturers, except for the Liebherr company which produces reach
> stackers with arched booms, which would be extremely difficult to model with LEGO pieces.
Not totally true. “Kalmar Industries” produce them in Sweden. (I already drove by that factory myself)
see http://www.cargotec.com/en-global/ps/reachstackers/Pages/default.aspx
@Minotaur
Yes, Furball is a new hamster and this is her first video with LEGO. I think she did very well. Soon we’ll see how her younger sister does 🙂
Awesome creation! i love your cute hamster ^^ Looking forward to more!
Awesome construction Sariel!!! You improve every single time you post a new creation. Also, is Furball a new hamster? 😀