/ Release notes
Improvements
- refacto: use roslibpy instead of rospy
Bug Fixes
fix: Fixed the conveyors modbus registers crashing
fix: publish on program_list topic when service update_program is called
Improvements
Check saved trajectory validity before executing it and output an error message if a waypoint exceeds the soft limits
No wait_for in nodes constructors. Use callbacks / lazy loading instead
Expose /niryo_robot_led_ring/led_ring_status topic though the led ring ros wrapper with 3 new properties:
is_autonomous
animation_mode
color
Expose the service /niryo_robot_led_ring/set_user_animation though the led ring ros wrapper with the function set_user_animation. All the higher animation functions use this one under the hood
New demo program, which do the same actions than the previous one but in a more readable fashion
The demo program is also unique for all the robots
Add missing functions to JointsPosition object to make it set attr compatible
Add the module end_of_production_test to the niryo_robot_utils package
LedRingManager handle the led ring during the EOP test
Disable the timeout of the websocket clients
Add `optional: true` to eth interface
Bug Fixes
Fixed a typo in arm commander stop command service clients which prevented the service from being called during robot shutdown and when using the ROS wrapper
Fixed program player unit tests so that they reflect the entire finite state machine
Fixed Ned3pro calibration tip transform
Fixed a bug in the robot_state publisher which issued a warning when trying to divide by 0
Resolved multiple bugs that were preventing the simulated robot stack from functioning properly
Added missing tool parameters in simulation
Modbus ROS package is not started anymore in simulation mode
Fixed the control loop which is not releasing its lock if the loop frequency is too fast
Fake stepper motors does not require to be calibrated anymore in simulation
Check if a sound file is empty before loading it
The end effector panel still publish the buttons state while calibration is in progress
Fixed a bug which caused the cloud api to not update it’s S/N and rasp_id values when they are updated
Fixed a bug causing the check_connection service to ping the wrong endpoints for the reports micro services
fix: dhcp_server_reachable is more reliable
Improvements
- Improve /niryo_robot/conveyor/feedback reactivity when a conveyor is added or removed
- Added convenience function NiryoRosWrapper.init_with_node which init a ros node and returns a NiryoRosWrapper instance
- Deprecate NiryoRosWrapper.move_relative
- Added a param normalize=True to NiryoRosWrapper.msg_from_pose
- Add security checks to NiryoRosWrapper.unset_conveyor and NiryoRosWrapper.control_conveyor
- NiryoRosWrapper.get_conveyors_feedback now returns a list of dict instead of a list of ConveyorFeedback messages
- Added the following functions to the TCP server:
- GET_POSE_V2
- FORWARD_KINEMATICS_V2
- INVERSE_KINEMATICS_V2
- GET_TCP
- GET_CONVEYORS_FEEDBACK
- Revert –robot_type arg deletion but set it deprecated to avoid breaking changes
Bug Fixes
- Fixed wrong camera and gripper transforms in Ned3pro and Ned2’s URDF for simulation
- Fixed a bug which prevented the jog feature to work
- Use lazy loading from database when getting the joints home position settings to prevent a bug where the robot was unable to access the database at boot time
- Ned3pro digital inputs are now not inverted
- Fixed the jog features
- Fixed NiryoRosWrapper.__get_obj_from_args which didn’t work with JointsPosition
- Fixed NiryoRosWrapper.forward_kinematics which returned v2 metadata despite being a v1 pose
- Fixed NiryoRosWrapper.inverse_kinematics which returned was converting poses to v2 before doing the inverse kinematics
- Fixed a bug in Pose which was allocating the same instance of PoseMetadata when using the constructor’s default metadata value
- Fixed a bug where memory was allocated and not freed each time the program player’s node tried to connect to an inexistant device
- Fixed a bug in Tool ROS wrapper which was not using the correct service type when calling tool reboot service
- Use correct message type for ros subscriber in arm_state
- WifiClient.get_configured_networks now parse correctly SSIDs with characters different than `[0-9a-zA-Z- ]`
- Missing type for environment default insertion in base.py
- Fixed a bug which caused to set the default ethernet mode to DHCP instead of AUTO if not in DB
- WifiClient can handle SSIDs with any unicode characters
Features
- Implemented NED3 hardware changes into the
niryo_robot_rpi
package - Added support for NED3 calibration
- Added support for the conveyor with NED3 stepper motor
- Added support for vacuum pump v2
- Added velocity and acceleration profiles for vacuum pump v2
- Updated the robot’s URDF to follow the Denavit-Hartenberg convention
- Introduced new
Pose
andJointsPosition
classes - The
/niryo_robot_arm_commander/robot_action
action server now handles both old and new TCP versions using thetcp_version
field inArmMoveCommand.msg
- Updated
niryo_robot_poses_handlers
grip files to align with the new TCP orientation - Added
pose_version
andtcp_version
toNiryoPose.msg
- New generic classes designed to represent data:
JointsPosition
JointsPositionMetadata
Pose
PoseMetadata
- New functions in
niryo_robot_poses_handlers/transform_functions
:convert_legacy_rpy_to_dh_convention()
andconvert_dh_convention_to_legacy_rpy()
- Added new functions to
ros_wrapper.NiryoRosWrapper
that can take eitherPose
orJointsPosition
objects:move
, replacingmove_joints
,move_pose
, andmove_linear_pose
jog_shift
, replacingjog_joints_shift
andjog_pose_shift
pick
, replacingpick_from_pose
place
, replacingplace_from_pose
execute_trajectory
, replacingexecute_trajectory_from_poses
andexecute_trajectory_from_poses_and_joints
compute_trajectory
, replacingcompute_trajectory_from_poses
andcompute_trajectory_from_poses_and_joints
- New TCP server commands:
GET_COLLISION_DETECTED
,CLEAR_COLLISION_DETECTED
,HANDSHAKE
,MOVE
,JOG
,PICK
,PLACE
,EXECUTE_TRAJECTORY
- Updated tool translation transforms to match the new TCP orientation
- Added hardware ID to the conveyors (v2 and v3)
- The new robot pose is now published on
/niryo_robot/robot_state_v2
for compatibility with older NiryoStudio versions - The new relative robot pose is published on
/niryo_robot_poses_handlers/relative_pose_v2
for compatibility with older NiryoStudios - Added a service to retrieve the conveyor hardware ID to differentiate between v2 and v3 models, service name:
/niryo_robot/conveyor/get_hardware_id
- Added services for forward and inverse kinematics using the new TCP convention (Z-axis pointing forward)
- Added a ROS wrapper function to get forward kinematics using the new TCP convention (Z-axis pointing forward)
- Introduced a new ROS topic
/niryo_robot_tools_commander/tcp_v2
, which publishes the transform fromhand_link
to the TCP following the new TCP convention - Adjusted robot’s pose limits for NED3 to match its reachability
- New ethernet mode:
auto
- Automatically detects if the robot is connected to a DHCP network; switches to DHCP mode if detected, otherwise defaults to IPV4LL mode
Improvements
- Used the I/O panel version instead of the robot hardware version to differentiate implementations
- Created a set of
gpio_expander_adapters
classes to handle GPIOs similarly to how MCP IOs are handled - Updated the DACx0501 driver
NiryoRosWrapper.vision_pick
now accepts an optional observation pose (obs_pose
)- Added speed limit percentage for the conveyor
- When a tool stops moving, a position-holding command is sent instead of resending the max position command, significantly reducing temperature rise
- Updated Dynamixel PID for axes 4 to 6
Bug Fixes
- Stopping a program now sends
SIGTERM
, followed bySIGKILL
after 3 seconds if the program doesn’t exit gracefully - Grasp and release actions now use feedback to determine completion rather than stopping after a fixed time
- Debounced emergency stop resume to avoid resuming on small 12v spikes
- Renaming a dynamic frame now also updates its name in the transform
- Fixed
NiryoRosWrapper.get_workspace_list
to no longer return an error - The TCP server’s
__send_answer_with_payload
now encodes the payload only if it’s not already encoded - Fixed intermittent delay in the control loop caused by a
ROS spinOnce
call - Fixed a bug causing the FirmwareUpdater to crash when the end effector version was not set
Features
- Implemented NED3 hardware changes into the
niryo_robot_rpi
package - Added support for NED3 calibration
- Added support for the conveyor with NED3 stepper motor
- Added support for vacuum pump v2
- Added velocity and acceleration profiles for vacuum pump v2
- Updated the robot’s URDF to follow the Denavit-Hartenberg convention
- Introduced new
Pose
andJointsPosition
classes - The
/niryo_robot_arm_commander/robot_action
action server now handles both old and new TCP versions using thetcp_version
field inArmMoveCommand.msg
- Updated
niryo_robot_poses_handlers
grip files to align with the new TCP orientation - Added
pose_version
andtcp_version
toNiryoPose.msg
- New generic classes designed to represent data:
JointsPosition
JointsPositionMetadata
Pose
PoseMetadata
- New functions in
niryo_robot_poses_handlers/transform_functions
:convert_legacy_rpy_to_dh_convention()
andconvert_dh_convention_to_legacy_rpy()
- Added new functions to
ros_wrapper.NiryoRosWrapper
that can take eitherPose
orJointsPosition
objects:move
, replacingmove_joints
,move_pose
, andmove_linear_pose
jog_shift
, replacingjog_joints_shift
andjog_pose_shift
pick
, replacingpick_from_pose
place
, replacingplace_from_pose
execute_trajectory
, replacingexecute_trajectory_from_poses
andexecute_trajectory_from_poses_and_joints
compute_trajectory
, replacingcompute_trajectory_from_poses
andcompute_trajectory_from_poses_and_joints
- New TCP server commands:
GET_COLLISION_DETECTED
,CLEAR_COLLISION_DETECTED
,HANDSHAKE
,MOVE
,JOG
,PICK
,PLACE
,EXECUTE_TRAJECTORY
- Updated tool translation transforms to match the new TCP orientation
- Added hardware ID to the conveyors (v2 and v3)
- The new robot pose is now published on
/niryo_robot/robot_state_v2
for compatibility with older NiryoStudio versions - The new relative robot pose is published on
/niryo_robot_poses_handlers/relative_pose_v2
for compatibility with older NiryoStudios - Added a service to retrieve the conveyor hardware ID to differentiate between v2 and v3 models, service name:
/niryo_robot/conveyor/get_hardware_id
- Added services for forward and inverse kinematics using the new TCP convention (Z-axis pointing forward)
- Added a ROS wrapper function to get forward kinematics using the new TCP convention (Z-axis pointing forward)
- Introduced a new ROS topic
/niryo_robot_tools_commander/tcp_v2
, which publishes the transform fromhand_link
to the TCP following the new TCP convention - Adjusted robot’s pose limits for NED3 to match its reachability
- New ethernet mode:
auto
- Automatically detects if the robot is connected to a DHCP network; switches to DHCP mode if detected, otherwise defaults to IPV4LL mode
Improvements
- Used the I/O panel version instead of the robot hardware version to differentiate implementations
- Created a set of
gpio_expander_adapters
classes to handle GPIOs similarly to how MCP IOs are handled - Updated the DACx0501 driver
NiryoRosWrapper.vision_pick
now accepts an optional observation pose (obs_pose
)- Added speed limit percentage for the conveyor
- When a tool stops moving, a position-holding command is sent instead of resending the max position command, significantly reducing temperature rise
- Updated Dynamixel PID for axes 4 to 6
Bug Fixes
- Stopping a program now sends
SIGTERM
, followed bySIGKILL
after 3 seconds if the program doesn’t exit gracefully - Grasp and release actions now use feedback to determine completion rather than stopping after a fixed time
- Debounced emergency stop resume to avoid resuming on small 12v spikes
- Renaming a dynamic frame now also updates its name in the transform
- Fixed
NiryoRosWrapper.get_workspace_list
to no longer return an error - The TCP server’s
__send_answer_with_payload
now encodes the payload only if it’s not already encoded - Fixed intermittent delay in the control loop caused by a
ROS spinOnce
call - Fixed a bug causing the FirmwareUpdater to crash when the end effector version was not set
Improvements
- The service /niryo_robot/kinematics/forward now includes status and message in its response.
- The service /niryo_robot/kinematics/inverse now includes status and message in its response.
- Introduction of a new Modbus server.
- Enhanced functionalities in ros_wrapper: get_current_tool_state, get_tcp, get_digital_io_mode, get_available_disk_size, get_ros_logs_size, control_video_stream.
- Addition of new endpoint in system_api_client: get_system_version_current.
- Increased threshold for end effector collision detection.
Bug Fixes
- The set_program_autorun service did not consider the mode when transitioning to “DISABLE”.
- Correction made to the /niryo_robot/kinematics/forward service, which occasionally crashed due to transformation extrapolation.
In ros_wrapper, __conveyor_id_to_conveyor_number no longer depends on currently attached conveyors. - Fixed incorrect docstrings in ros_wrapper.
- Fixed a bug preventing vision captures with enabled TCP transformation.
- Fixed a bug that prevented a running program process from stopping completely.
- Fixed a bug in NiryoActionClient that did not handle response timeouts.
- Fixed a bug that could cause the tool commander action server to remain permanently blocked in active mode.
- Fixed a bug preventing the tool commander action server from accepting new goals once a goal with a future date was published.