/ Release notes
Améliorations
- refacto : Utilisation de roslibpy au lieu de rospy
Bug Fixes
- Fix : le registre modbus des convoyeurs qui crashait
- Fix : Publication sur le topic quand le serviceupdate_program est appelé
Améliorations
- Verifie la validité de la trajectoire avant de l’exécuter et affiche un message d’erreur si un des points est en dehors de la limite
Pas de wait_for dans les noeuds des constructeurs. Utilisation à la place de callback / lazy loading
Expose le topic /niryo_robot_led_ring/led_ring_status à travers le led ring ros wrapper pour les 3 propriétés suivantes :
is_autonomous
animation_mode
color
Expose le service /niryo_robot_led_ring/set_user_animation à travers le led ring ros wrapper avec la fonction set_user_animation. Toutes les fonctions d’animation de niveau supérieur utilisent celle-ci en interne.
Nouveau programme de démonstration, qui effectue les mêmes actions que le précédent mais de manière plus lisible dans le programme
Le programme de démonstration est également unique pour tous les robots.
Ajouter les fonctions manquantes à l’objet JointsPosition pour le rendre compatible avec set attr.
Désactive le timeout de la WebSocket client.
Ajout optional: true à l’interface eth.
Bug Fixes
- Fix une typo dans le service client arm commander ce qui previent au service d’être appelé pendant l’arret du robot et lors de l’utilisation de ros wrapper
Corrigé la transformation de la pointe de calibration du Ned3pro.
- Fix un bug dans robot_state publisher ce qui évite une alerte quand on divise par 0
- Résolution de plusieurs bugs liés à la simulation du robot qui l’empechait de fonctionner correctement
Ajout d’accessoires manquants dans la simulation
Le package Modbus n’est plus démarré pendant la simulation
Fixed the control loop which is not releasing its lock if the loop frequency is too fast
- Fix les boucles de contrôle qui ne libéraient pas son verrouillage si la fréquence de la boucle était trop rapide.
Les moteurs fictifs ne nécessitent plus d’être calibrés en simulation.
Vérifie si un fichier audio est vide avant de le charger.
Le end effector continuait de publier l’état des boutons pendant que le calibrage est en cours.
Un bug empêchait l’API cloud de mettre à jour ses valeurs S/N et rasp_id
Correction : dhcp_server_reachable est plus fiable.
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
New Features
- Add utility script to configure the robot’s firewall
- Add the ability to allow or prevent multiple NS clients to connect to the robot
- Add utility script to configure the ability to allow or prevent multiple NS clients to connect to the robot simultaneously
- Add database migration to the updater script
- The robot hostname is now dynamically set at boot time. It uses the following format:
<robot_type>-<rasp_id>
- Added a mDNS service to allow the robot to be discovered on the network
Improvements
- Added topic
/niryo_robot/max_acceleration_scaling_factor
to check current acceleration percentage - Refacto of the wifi button handling: the name reflects its real job, managing solely the hotspot
- Disabled torque of steppers not being calibrated during factory calibration
- S3Client: Use internet connection observable to check if the robot is connected to the internet
- S3Client: Use SystemctlWrapper to restart NTP service (used to sync the Raspberry Pi’s clock)
- WebSocket: Return an acknowledge message on the register event containing the robot’s info (name, rasp_id, hw_version)
- Allow multiple NS clients without needing to restart the service
- New config handling: use lazy loading for variables dependent on other variables
- AllowedNSClientsObservable now has a callback for external database updates
- Add remaining number of NS available connections
Bug Fixes
- Fix: use
forward_kinematics_v2
in__ros_poses_from_robot_positions
- Fix: P changes in DXL’s PID
- Fixed a bug while setting acceleration from the
/niryo_robot_arm_commander/set_acceleration_factor
service, which always set it to 40% - Fixed the conveyors’ direction, which was inverted in the Modbus server
- Fixed
PoseMetada.from_dict
, which wasn’t passing the ‘frame’ argument when using aPoseMetadata.v1
- Fixed collision thresholds settings that weren’t correctly calling the setting of the 2nd threshold with the wrong datatype
- Fixed a bug in
__hotspot_state_callback
that still processed the API response even if the request failed - Fixed tools transforms for Ned3 Pro
- Fixed a missing offset in the URDF for Ned3 Pro
- Fixed a goal tolerance too low for joint 1
- Fix: increase
remaining_ns_clients_slots
instead of decreasing it - Fixed a misuse of
Marker
instead ofPrefix
in the S3Client - Fixed type errors in some
standard_response
calls - UpdateManager no longer bypasses the
config_file_manager
- Safe deserialization in the SocketIO event
- Correct type hint for
__auto_control_loop_thread
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.