import numpy as np
import pensenova_safety as ps
profile = ps.SafetyProfile.from_limits(
"my_robot",
joint_names=["j0", "j1", "j2"],
lo=np.array([-1.0, -1.0, -1.0]), # min angle per joint (rad)
hi=np.array([ 1.0, 1.0, 1.0]), # max angle per joint
max_vel=np.array([2.0, 2.0, 2.0]), # max speed (rad/s)
)
02
env = ps.protect(profile, operator="line_A")
for step in range(n_steps):
state = robot.get_state()
cmd = policy(state) # your AI / teleop / retargeted command
safe, report = env.filter(cmd, state, dt)
robot.send(safe) # only the safe command is ever sent
env.stop()
03
from pensenova_safety import cloud
submission = cloud.package_session(env, robot_id="my_robot")
seal = cloud.submit_session(submission, "https://rhdpwxwqzyjlxegxmnlu.supabase.co/functions/v1")
print(seal["payload"]["verdict"]) # APROVADO / REPROVADOprint(seal["seal_id"]) # registered, verifiable by anyone