§4 xArm 6
How the Machine Works
How the controller turns commands into joint motion, how the arm knows where its tool is, and how it senses a bump.
Start Here
This section explains how the controller turns a command into joint motion, how the arm knows where its tool is, and how it senses a bump. Every tier below starts from the same three facts.
6
rotary joints, one degree of freedom each1
7 and 6
motion modes and states the controller provides2
250 Hz
fastest command rate in servo mode3
- The arm has six rotary joints, numbered from Joint 1 at the bottom up to the tool side1.
- The control box is the core of the system: it holds the arm's control system4.
- TCP stands for Tool Center Point. With no offset set, it sits at the center of the flange at the end of the arm5.
S6 in one line: S6 is the xArm 6 arm that handles parts after processing, routing them to inspection, rework or shipping6.
Look Back
A question from earlier on, to keep it fresh. Skip it if you like; nothing depends on it.
Choose your depth
1Beginner
The Ideas Behind the Motion
For: Anyone with no robotics background: a visitor, a new operator, a manager
Kind of task: Recognize and recall, with plain-language explanations and pictures
In this part you learn the few ideas that explain every move the arm makes: joints that turn, a box that decides, a point on the tool that the arm aims, and a way of sensing a bump that is useful but is not a safeguard. No robotics background is needed.
Six Joints, One After Another
The arm is made up of a base and rotary joints, numbered from the bottom up: Joint 1, Joint 2 and so on. Each joint is one degree of freedom, and the xArm 6 has six. The last joint is the tool side, where the tool attaches1.
The Control Box Decides
- The control box is the core of the system: it holds the arm's control system4.
- UFACTORY describes Studio as software that runs inside the control box7. In the lab you open it with the Studio desktop app8.
The Point the Arm Aims
- TCP stands for Tool Center Point. If no offset is set, it sits at the center of the flange at the end of the arm. An offset, in millimeters, moves it to the real tool point5.
- The base coordinate system is a frame on the arm's mounting base. X is front and back, Y is left and right, and Z is up and down9.
Two Ways to Move
- A joint move takes the fastest path to the target, and the tool's path is not a straight line10.
- A linear move keeps the Tool Center Point on a straight line, while each joint makes a more complex movement to hold it there10.
Teaching by Hand
- In manual mode the arm compensates for gravity, which UFACTORY calls "zero gravity", so a person can guide it by hand11.
- Hand teaching is one of the features on UFACTORY's product page12.
When the Power Fails
When the power fails, brakes inside the joints hold the arm in its pose13.
Sensing a Bump
- UFACTORY's product page says collision detection is available on all its cobots12.
- The same page calls the xArm a collaborative robot, yet the manual says no people or other equipment should be in the working area while the arm operates. Neither source says how the two fit together14.
- This project's advice is to treat collision detection as a controller function you can configure, not as a validated safeguard15.
- So the rule stays the same: keep out of the arm's working area while it runs16.
Check Yourself
Answer, then check. Each option has its own feedback, and nothing is scored.
2Novice
Modes and Motion Types
For: Someone who will work near or with the cell: operator, trainee technician
Kind of task: Explain and sequence: put steps in order, match parts to their functions
In this part you learn what six joints buy you, what is inside a joint, how the parts connect, how the arm senses a bump, and what hand teaching needs first. It is for someone who will work near or with the cell.
Why Six Joints Matter
UFACTORY says the xArm 6 has a full six degrees of freedom in Cartesian space. On the xArm 5, straight-line and circular moves have only four: x, y, z and yaw18.
What Is Inside a Joint
- UFACTORY's product page says the joints use industrial-grade harmonic drives and servomotors19.
- The joint modules also contain brakes that hold the arm's pose when the power fails. The manual says to take protective measures when releasing them20.
How the Parts Connect
The xArm manual describes the connections part by part21.
- A computer, through Studio or the SDK, connects to the control box over Ethernet, using UFACTORY's private TCP protocol2122.
- The control box holds the arm's control system4.
- The arm's power supply and signal cables plug into the control box, and the cable connector lists separate RS-485 lines for the arm and for the tool21.
- The 12-pin tool connector provides power and control signals for grippers and sensors21.
Sensing a Bump from Motor Current
- For each joint, a dynamic model of the arm works out the current the joint should draw. Collision detection compares that with the joint's actual current, and triggers when the difference passes a pre-set threshold23.
- The model takes in the joint positions, speeds and accelerations, the load's weight and center of mass, the mounting direction and the joint friction23.
- Studio's Settings page says that when a joint's torque deviation leaves its normal range during motion, the arm stops on its own to prevent injury to the arm or operator24.
- This project's advice: treat it as a controller function, not a validated safeguard15.
Hand Teaching Has a Number, and a Checklist
- The controller numbers manual mode, for hand teaching, as mode 2. In it the arm enters zero-gravity mode so its links can be dragged, and it should be switched back to mode 0 afterwards25.
- Before turning manual mode on, set the mounting direction and the TCP load correctly. Otherwise, UFACTORY says, inaccurate gravity compensation may leave the arm unable to stay still26.
- A wrong mounting direction also causes frequent collision warnings and uncontrolled motion in manual mode11.
- Studio can record a hand-guided path by sampling the joint positions at 250 Hz for up to 5 minutes, and play it back at x1, x2 or x4 speed27.
Check Yourself
Answer, then check. Each option has its own feedback, and nothing is scored.
3Intermediate
Modes, States and What They Mean
For: Someone who will set up, program or maintain the arm: technician, student engineer
Kind of task: Apply: work through written scenarios that need a decision (which mode, which setting, what to do about this error), with feedback on each choice
In this part you learn to read the controller's modes and states, so you can tell why the arm is ignoring you, and you meet the maths that turns a tool pose into joint angles. It is for someone who will set up, program or maintain the arm.
Modes: How the Arm Takes Commands
The controller provides 7 motion modes and 6 states, which match the Python SDK calls set_mode() and set_state()2.
- Mode 0, position control. The control box enters it by default after start-up. In it, set_servo_angle makes point-to-point joint moves, set_position makes straight-line moves, move_arc_lines inserts arcs between straight lines, and move_circle makes a circle through three points29.
- Mode 1, servo mode. It moves to each joint target at the fastest speed, 180°/s, with no buffer, running only the latest target received3.
- Mode 2, manual mode, for teaching by hand. It must be set via mode 0: from any other mode, the first request switches to mode 0 and only a second one takes effect25.
- Modes 6 and 7, online planning for joint and Cartesian moves: each new command interrupts the current one and is planned from where the arm is. Mode 7 can use only the base coordinate system30.
States: What the Arm Is Doing Now
- State 0 is what you set to put the arm in standby and clear the error code. The reported state then changes to 2 on its own31.
- State 1 means the arm is moving. State 2 means it is ready to receive and execute commands31. The Python SDK calls state 2 "sleeping", so the sources disagree on its name32.
- State 3 pauses a running motion; setting state 0 resumes it33.
- State 4 stops the arm at once, and it then accepts no new command until it is set back to standby. The controller also goes to state 4 on its own when any error occurs33.
- State 5 comes on its own after a critical setting changes, such as the mode, the payload, the TCP offset or the collision sensitivity. The arm accepts no command until state 0 is set34.
- State 6 makes the arm perform a decelerated stop at once34.
- Errors and warnings are not reported actively: they come back in the reply to the next command you send. After such an error the arm stops at once and discards its cached commands, and you must clear the error by hand35.
From a Tool Pose to Joint Angles
- Straight-line and circular moves are planned in Cartesian space and solved by inverse kinematics, so there may be no solution, several, or only an approximate one. Because joint space and Cartesian space are related non-linearly, the joints may also exceed their maximum speed and acceleration36.
- UFACTORY gives the tool's orientation as roll, pitch and yaw: successive rotations about the fixed X, Y and Z axes of the base frame. +180° and -180° are the same point, so the arm may report either37.
- Units depend on the interface. The Python SDK and Blockly use degrees for joint angles and for roll, pitch and yaw; the communication protocol uses radians. X, Y and Z are in millimeters in all three38.
False Bumps from a Wrong Setting
- UFACTORY's support article says collision detection is sometimes triggered falsely, often in connection with the end-effector load, center of mass, mounting direction or friction parameters39.
- It recommends updating the weight and center of mass after changing the tool or workpiece, updating the payload after the pick and the release in pick-and-place programs, and setting the mounting direction correctly39.
- Changing the payload is itself a critical setting, so the arm then waits in state 5 until you set state 034.
Check Yourself
Answer, then check. Each option has its own feedback, and nothing is scored.
4Expert
Kinematics and Its Limits
For: Someone who designs, integrates or changes the cell: integrator, engineer, agent developer
Kind of task: Analyze and decide: weigh trade-offs, resolve contradictions, critique a configuration
In this part you work with the arm's kinematics directly, see where Cartesian control breaks down, and learn how fast the controller can be fed commands. It is for someone who designs, integrates or changes the cell.
Forward and Inverse
- The Python SDK computes both directions: get_forward_kinematics takes one joint angle per axis, and get_inverse_kinematics takes a pose [x, y, z, roll, pitch, yaw]42.
- Inverse kinematics may find no solution, several, or only an approximate one36.
- UFACTORY publishes modified and standard Denavit-Hartenberg (D-H) parameters and link mass parameters for the xArm 643. Section 3's expert tier lists the link lengths; for example, Joint 1 has d = 267 mm44.
- The mass parameters come in four sets, one for each hardware version, Model 1 to Model 445. This project's advice: read the arm's serial number first, because its version decides which set applies46.
Where Cartesian Control Breaks Down
- A singularity occurs when the axes of any two joints lie on one straight line. There the arm's degrees of freedom are degraded, and some joints may turn too fast47.
- Near one, planned straight-line and circular moves stop to avoid high joint speed; joint moves do not. UFACTORY advises avoiding the singularity or passing it with a joint move47.
- Studio advises avoiding the central area near the base. Moving the wrist close to the cylinder directly above and below the base makes the joints move fast even when the arm moves slowly, and makes a risk assessment difficult48.
- In Cartesian moves the joints may exceed their maximum speed and acceleration, because joint space and Cartesian space are related non-linearly36.
- Error code C24 means a joint's speed is over its limit. The Studio manual as read on 2026-10-13 says to check whether the arm is out of its working range, or to turn on "Use Approximate Solution" in the Advanced Settings; until that date it said to check whether the arm is at a singularity, or to reduce the speed and acceleration495051. "Use Approximate Solution" is an Advanced Settings option that the manual describes as using an approximate solution to pass singularities, and that page needs a password5253.
Feeding Servo Mode
- In servo mode the control box accepts commands at up to 250 Hz. Commands sent faster are lost3.
- UFACTORY suggests sending smoothed, interpolated track points at a set rate, preferably 100 Hz or 200 Hz, and warns, for safety, not to give a distant target at once3.
- Servo Cartesian motion moves to each target at the fastest speed, 1 m/s, with no buffer. UFACTORY recommends 30–250 Hz, since below 30 Hz the motion may be discontinuous54.
Reading Mode and State from Outside
- In UFACTORY's Modbus TCP map, holding registers 32 and 33 (0x20, 0x21) hold the robot mode and state55.
- That record is Inferred: the map comes from a UFACTORY document that names no robot model, and reading those registers on a real controller would confirm it55.
- Mode 3, Cartesian teaching, is marked invalid in the Python SDK, so do not plan on it40.
Check Yourself
Answer, then check. Each option has its own feedback, and nothing is scored.
Not settledOpen Questions · 5
What the sources do not settle for this section. Nothing here is papered over with a plausible number.
- Kind: Contradiction
UFACTORY's xArm product page presents the xArm as a collaborative robot ('cobot'), while the xArm manual says no people or other equipment should be in the working area when the arm is in operation. Neither source says how the two fit together.
See reference 14 - Kind: Contradiction
The Python SDK and the Studio manual name state 2 differently: the SDK's state list calls it 'sleeping', while the Studio manual says the robot is ready to receive and execute commands.
See reference 32 - Kind: Contradiction
UFACTORY's Studio manual has given two readings of controller error C24. Until 2026-10-13 the row was titled 'Speed Exceeds Limit' and said to check whether the xArm is at a singularity point, or to reduce the speed and acceleration values. As read on 2026-10-13 it is titled 'Joints Speed Exceeds Limit', shows the joint and its speed, and says to check whether the robot is out of its working range, or to turn on 'Use Approximate Solution' under General > Advanced Settings; the row no longer names a singularity or reducing the speed and acceleration, though the manual's Settings chapter describes 'Use Approximate Solution' as using an approximate solution to pass singularities. The Python SDK's code list gives 24 as 'Speed Exceeds Limit', a title only. The manual does not say the earlier handling no longer applies, and no fetched source says which Studio versions show which text.
See reference 50 - Kind: Gap
Per-joint component data for the xArm 6 (motor model and rating, harmonic-drive ratio, encoder type and resolution, joint-module sizes) is not published in the xArm manual or the product page; the product page names only harmonic drives and servomotors and, unlike the 850's page, gives no encoder resolution.
See reference 62 - Kind: Contradiction
Sources disagree on how the xArm AC control box powers the arm: the manual's controller chapter says its internal supply converts 100-240 V AC into 12 V and 48 V DC for the control box and the arm, while the common specification table gives the arm's input as 24 V DC, 20.8 A and the AC controller's output as 24 V DC, 20.8 A.
See reference 63
ProvenanceReferences · 63
Each number in the text points here. Every entry states its confidence class in words and keeps its evidence one click away. How to read the labels.
Key to the badges
- Confidence: Verified
- A manufacturer or IntelliMake document says so, or it was observed directly. It does not mean anyone measured it at S6.
- Confidence: Inferred
- Reasoned from Verified facts. The reasoning is printed with the record.
- Confidence: Assumed
- Plausible but untested. The record says how it would be checked.
- Kind: Gap
- Not known. No figure or answer is given in its place.
- Kind: Contradiction
- Sources disagree. Both sides are shown, and the site does not pick one silently.
- Kind: Recommendation
- Project advice drawn from the records it cites. Not a fact about the machine and not a confidence class, so the filter never hides it.
- Awaiting cell access
- Awaiting cell access: could be confirmed or corrected once the physical S6 cell can be observed.
- This project's simulation and agent design, not the physical cell
- This project's simulation and agent design, not the physical cell.
Image Credits
- 3D model: © 2018 UFACTORY Inc., BSD-3-Clause, from UFACTORY Inc. (xArm-Developer/xarm_ros2). License text · Source
Sources for This Section
- Collision Detection in UFACTORY Robotic Arms: Current and Dynamic Model-based Feature (UFACTORY support article) · UFACTORY (manufacturer)
- IntelliMake Phase 1 Factory: Autonomous Production Demonstrator (infographic) · IntelliMake.org (IntelliMake)
- Kinematic and Dynamic Parameters of xArm Series: telling the model by SN (support article) · UFACTORY (manufacturer)
- Kinematic and Dynamic Parameters: xArm 6 (support article) · UFACTORY (manufacturer)
- Owner statements from 2026-09-24 onward (verbatim; S40 and later) · Derek Stringfellow (project owner)
- The difference between UFACTORY xArm5, UFACTORY xArm6 and UFACTORY xArm7 (Help Center article) · UFACTORY (manufacturer)
- UFACTORY 850 product page · UFACTORY (manufacturer)
- UFACTORY ModbusTCP User Instructions (xArm-Python-SDK doc/UF_ModbusTCP_Manual.md) · UFACTORY (manufacturer)
- UFACTORY Studio User Manual (online), 10. Robotic Arm Motion Mode and State · UFACTORY (manufacturer)
- UFACTORY Studio User Manual (online), 12. Error Handling · UFACTORY (manufacturer)
- UFACTORY Studio User Manual (online), 2. Glossary · UFACTORY (manufacturer)
- UFACTORY Studio User Manual (online), 4. Live Control · UFACTORY (manufacturer)
- UFACTORY Studio User Manual (online), 7. Settings · UFACTORY (manufacturer)
- UFACTORY Studio User Manual (online), 9. Motion Characteristics · UFACTORY (manufacturer)
- UFACTORY Studio User Manual, 12. Error Handling, as it read until 2026-10-13 (publisher's repository, commit 533b75d) · UFACTORY (manufacturer)
- UFACTORY xArm Hardware Manual (online), 1. Safety · UFACTORY (manufacturer)
- UFACTORY xArm Hardware Manual (online), 2. Hardware Installation · UFACTORY (manufacturer)
- UFACTORY xArm Hardware Manual (online), 3. Controller Electrical Interface · UFACTORY (manufacturer)
- UFACTORY xArm Hardware Manual (online), 4. Robotic Electrical Interface · UFACTORY (manufacturer)
- UFACTORY xArm Hardware Manual (online), 7. Production Information · UFACTORY (manufacturer)
- UFACTORY xArm Hardware Manual (online), 8. Technical Specifications · UFACTORY (manufacturer)
- UFACTORY xArm Hardware Manual (online), Preface · UFACTORY (manufacturer)
- UFACTORY xArm product page · UFACTORY (manufacturer)
- xArm-Python-SDK API code description (doc/api/xarm_api_code.md) · UFACTORY (manufacturer)
- xArm-Python-SDK API documentation (doc/api/xarm_api.md) · UFACTORY (manufacturer)
- xarm_ros2 (branch humble), xarm_description/config/kinematics/default/xarm6_default_kinematics.yaml · UFACTORY (manufacturer)
IntelliMake diagrams are redrawn as native figures, © IntelliMake.org. UFACTORY does not endorse this platform.