We’re excited to announce the latest software updates for MachineMotion v2 (v2.18.0) and the Teach Pendant (v3.8.0)! This release includes powerful new capabilities designed to make your automation experience even more flexible—especially when it comes to digital I/O and robot programming.
Below is a quick summary of what’s new, followed by the detailed release notes.
More Digital I/O Modules: You can now configure more than 8 Digital I/O modules per controller—perfect for larger or more complex setups.
New Code-Free Python Instruction: Add Python snippets directly into your no-code MachineLogic programs for more advanced behavior.
Smarter State Machine Transitions: Enhanced MQTT message handling gives you better control over transitions—like responding to an e-stop in real time.
More Powerful Robot Control with Python: New robot reconnect options, joint constraint support, and real-time state feedback give you greater precision and flexibility.
🛠️ Full Release Notes
General
Digital IO devices: Added the ability to configure more than 8 Digital IO module device IDs via the file mm-config.json.
For example, "available_device_ids": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] would allow 10 devices to be configured through ControlCenter.
MachineLogic - Code Free
Python instruction: Added a new instruction that can execute a Python script.
Disable instructions: Added the ability to disable instructions from the instruction tree to skip them during execution.
State Machine instruction: Added the ability to transition on a specific MQTT message.
When the field is empty, the state machine will transition on any MQTT message received with the given topic.
In particular, this allows transitions to happen in response to estop being triggered.
Fixed a bug that occasionally caused mm-execution-engine memory usage to continue increasing after reconnecting to robots, eventually crashing the process.
MachineLogic - Python programming
Added access to Machine.state, including Machine.state.safety_state, and Machine.state.operational_state
Added reset method off of Machine class used to reset the operational state of the machine programmatically.
Added on_system_state_change method off of Machine class which adds a change listener to execute when the Machine state changes.
Added joint_constraints optional argument to Robot.compute_inverse_kinematics. joint_constraints (Optional[List[IGenericJointConstraint]], optional): A list of joint constraints. Length of list can be between 1 and number of joints on robot.
Added seed_position optional argument to Robot.compute_inverse_kinematics. seed_position (Optional[JointAnglesDegrees], optional): The seed joint angles, in degrees (as start position for IK search)
Added a GenericJointConstraint helper class, imported directly off of machinelogic to help build the new joint_constraints parameter. AGenericJointConstraint dictionary contains the following keys: joint_index, position, tolerance_above, tolerance_below, weighting_factor.
Added reconnect method off of Robot class to programatically reconnect a robot configured through MachineLogic.
Deprecated Robot.state.cartesian_position.
Deprecated Robot.state.joint_angles.
Added Robot.state.cartesian_position_data which returns a tuple of the CartesianPose and Timestamp, in seconds and nanoseconds to epoch, relating to the exact moment the position was recorded in ROS.
Added Robot.state.joint_angles_data which returns a tuple of the JoitnAnglesDegrees and a Timestamp, in seconds and nanoseconds to epoch, relating to the exact moment the position was recorded in ROS.
Firmware
Removed the MQTT database from the base image to prevent publishing retained topics for non-existent drives, specifically for One-Drive MachineMotions.