본문으로 건너뛰기

변경 이력

v0.10.1​

최신

호환성 주의1

  • 개발자 SDK: plem init 이 --example 을 받지 않고 늘 골격 패키지를 만듭니다. 중력·코리올리(ManipulatorDynamics)·공구 무게(ToolLoad) 헬퍼가 들어 있고 PID 예제는 없어졌습니다(헬퍼를 쓰는 PD 예시는 CONTROLLER_PLUGIN_GUIDE.md, 게인 튜닝 안 됨). --example 을 넘기는 스크립트는 그 인자를 지우세요.

새 기능4

  • 펜던트: 하단 로봇 제어 바의 「정지」 왼쪽 「위치 저장」을 한 번 누르면 대화상자 없이 지금 자세가 웨이포인트로 저장됩니다. 이름은 날짜·시각으로 자동으로 붙고(예: wp_20261007_093015) 알림과 웨이포인트 목록에 바로 나타납니다.
  • 펜던트: 로봇 › 웨이포인트 목록의 ⋯ 메뉴에서 웨이포인트 이름을 바꿀 수 있습니다. 그 웨이포인트를 쓰는 워크플로우와 배포된 Job 은 그대로 실행되고 보이는 이름도 함께 바뀝니다. 워크플로우나 Job 이 쓰는 웨이포인트는 지워지지 않고, 어디서 쓰는지 그 행 아래에 알려 줍니다.
  • 서보 드라이브: 모델 파일을 써 주는 에이전트 스킬 add-drive 가 함께 설치됩니다 — plem code 는 설치만으로 바로 쓰고, Claude Code 는 스킬 폴더에 링크 한 줄로 씁니다. 드라이브를 읽기 전용으로 읽고 매뉴얼·ESI 를 찾아 값마다 출처를 달고, 한계 같은 결정은 사용자에게 묻고, 근거 없는 값은 비워 두어 plem drive check 가 거부하게 합니다. 벤치는 사용자가 돌립니다.
  • 서보 드라이브: 모델 파일을 짧게 쓸 수 있습니다. 같은 드라이브 여러 대는 ring_position: [0, 1] 로 한 항목에 적고 축 이름·flip·zero_offset_count 만 드라이브마다 적습니다. 위치·속도 unit 과 매핑에 0x603F 가 있을 때의 error_code_pdo 는 빼도 되고, pdo_mapping: standard 는 PLEM 이 쓰는 CiA 402 객체로 매핑을 만들어 씁니다.

개선·변경2

  • 서버 API: 이동 노드가 웨이포인트를 이름과 함께 고유 id(waypoint_id)로 가리킵니다. 이름만 있는 워크플로우도 그대로 동작하며 저장·배포 때 id 가 채워집니다. 이 로봇에 없는 웨이포인트를 가리키는 노드는 실행 중이 아니라 배포·Job 시작·재개 때 거부됩니다(이미 배포된 Job 도). waypoint_rename·waypoint_usage 가 생겼고 waypoint_delete 는 쓰이는 웨이포인트를 거부합니다.
  • 펜던트: 새 워크플로우 이름 입력칸이 장갑으로 누르기 쉬운 크기로 커졌습니다. 열린 워크플로우를 저장하지 못해 만들지 못하면 입력한 이름을 그대로 두고 그 이유를 보여 주며, Esc 로 입력을 닫을 수 있습니다.

수정5

  • 펜던트: 오른쪽 패널이 좁을 때(세로 태블릿, 또는 패널을 최소 폭으로 줄였을 때) 조그 패널의 「관절 목표」 탭이 패널 끝에서 잘리고 「세션 해제」·속도 버튼이 어긋나 보이던 것을 고쳤습니다. 좁으면 버튼이 전체 폭 줄로 정돈되어 쌓입니다.
  • 펜던트: 워크플로우를 열어 둔 상태에서 새 워크플로우를 만들면 열려 있던 워크플로우가 서버에서 빈 새 워크플로우로 덮어써지던 문제를 수정했습니다. 새 워크플로우는 자기 이름으로 따로 저장됩니다.
  • 설치·업데이트: 개발용 설정을 거치지 않고 설치한 기기에서 plem 을 켜면 로봇 스택과 서버가 「error creating node」로 바로 멈추던 문제를 고쳤습니다(JP7 에서 확인, JP6 도 같은 조건이면 발생). 이제 설치·업데이트가 ROS 2 통신에 필요한 커널 수신 버퍼 설정을 함께 깔고 바로 적용합니다.
  • plem code: 로봇 스택 기동·모션 준비·프리드라이브·오류 해제를 승인한 뒤 실제로 실행되기 전에 취소하면 실행하지 않습니다(이전에는 취소해도 스택이 뜨거나 브레이크가 풀릴 수 있었습니다). 이동·그리퍼도 보내기 전에 취소하면 AI 에게 실행된 것으로 잘못 알리지 않습니다.
  • plem code: 끝난 로봇 스택의 가동 시간이 종료 뒤에도 계속 늘어나 보이던 것을 고쳤습니다.

v0.10.0​

변경 171건 보기

호환성 주의21

  • TUI: plem env 명령을 없앴습니다. 새 터미널은 열릴 때 로봇과 같은 ROS 2 환경으로 자동 설정됩니다. 설정을 바꿨다면 plem 을 다시 시작한 뒤 새 터미널을 여세요.
  • ROS 2: 셸에서 export 한 ROS_DOMAIN_ID·CYCLONEDDS_URI·RMW_IMPLEMENTATION 은 로봇 기동에 반영되지 않습니다. ~/.bashrc 등의 그 줄은 지우고(남기면 그 셸의 ros2 만 로봇을 못 봅니다) 도메인은 TUI 설정(,)에서 바꾸세요. 업데이트한 뒤에는 새 터미널에서 ros2 daemon stop 을 한 번 실행하세요.
  • ROS 2: PLEM_CYCLONEDDS_SYSTEM_DEFAULT=off 는 더 이상 읽지 않습니다. 원격 PC 접속을 열어 둔 기기는 /usr/share/plem/cyclonedds-localhost.xml 을 /etc/plem/cyclonedds.xml 로 복사해 네트워크 인터페이스 줄만 바꾸세요(PLEM Docs 「ROS 2 통합」). 옮기지 않으면 기기 안에서만 통신합니다.
  • ROS 2: RtRawBatch(/rt_raw)·RtEvent(/rt_events)·SetControlCommand(<로봇>/plem/control_command)의 패키지가 plem_msgs 에서 plem_drive_msgs 로 바뀝니다. 토픽·서비스 경로와 필드 이름은 그대로이니, 직접 구독·호출하는 코드는 import 와 타입 이름만 바꾸세요.
  • ROS 2: /rt_raw 메시지에 applied_command·axis_count·dc_sync_monitor_ns 가 더해져, 이전 버전에서 녹화한 /rt_raw·/rt_events bag 은 이 버전에서 풀리지 않습니다. 그 bag 은 녹화한 버전에서 분석하고, 직접 구독하는 도구는 관절 값을 주기마다 axis_count 개씩 읽으세요.
  • ROS 2: 이동 계획 액션(plem/plan_trajectory)의 목표에서 workspace 필드가 빠지고, 실패 사유 workspace_invalid·workspace_violation_* 도 더 이상 나오지 않습니다. 이 액션을 직접 부르는 스크립트는 workspace 를 채우지 않도록 고치세요.
  • ROS 2: ros2 launch 로 직접 기동할 때 profile_dir 를 생략하면 ~/.plem(또는 $PLEM_HOME)을 쓰고, 그 아래 프로필이 없는 로봇이나 로봇 수보다 짧은 masters 는 장비 없는 기본 프로필·추정 버스로 뜨는 대신 기동 전에 멈춥니다. 로봇마다 TUI 에서 프로필을 만들고 마스터를 적으세요.
  • 로봇: 모션 계획 진단 로그를 켜는 환경변수 IKFAST_AUDIT_LOG 가 PLEM_MOTION_AUDIT_LOG 로 바뀝니다. 셸 프로필 등에 적어 둔 값은 새 이름으로 옮기세요.
  • 펜던트: 관절·직선 이동 노드의 목표는 웨이포인트 이름으로만 지정합니다. 각도를 직접 넣은 옛 노드는 배포가 거부되고, 그 노드가 실행 경로에 있는 배포된 작업은 새 시작·체크포인트 복구가 거부됩니다(일시정지 중인 작업의 재개는 됩니다). 노드 상세에서 이름을 적고 「웨이포인트로 저장」을 누른 뒤 다시 배포하세요(로봇은 움직이지 않습니다).
  • 펜던트: 그리퍼 노드는 「물체 잡고 멈춤」과 「지정 위치 도달」 중 하나만 결과로 냅니다. 물체를 잡으면 「지정 위치 도달」 쪽은 실행되지 않으니, 집은 뒤 이어갈 단계는 「물체 잡고 멈춤」에 연결하세요.
  • 펜던트: 반복 상자의 「반복 중단」 출구가 「반복 끝난 뒤」로 합쳐집니다. 옛 파일은 열 때 옮겨지지만 두 출구를 다 쓰던 경우 「반복 중단」 쪽 연결이 끊기니 열어서 확인하세요. 식에서 outputs.<반복 ID>.exit 를 참조하면 실행 경로에 있는 한 배포가 거부되고 고칠 곳을 알려 줍니다.
  • 펜던트: 변수가 로봇별 변수 목록에 저장되고 값은 실행이 끝나도 유지됩니다. persistent: false 는 없어졌으니 시작 때 초기값이 필요하면 첫머리에 변수 설정 노드를 두세요. 옛 선언은 저장할 때 목록에 자동 등록되고 같은 이름이 다른 타입으로 있으면 저장이 거부되며, 병렬 갈래는 변수를 공유합니다(마지막에 쓴 값이 남음).
  • 서버 API: 변수를 다루는 GET/PUT/PATCH/DELETE /api/variables 가 추가되고, 저장·배포되는 워크플로 문서에서 variables 블록이 빠집니다(참조만 남음). 실행 중에는 값·타입 변경과 삭제가 거부됩니다(409).
  • 서버 API: AI 워크플로 작성용 WebSocket 메시지(workflow_agent_*)·/api/agent-sessions·/api/stt/token·/api/setup/settings, 도달 범위 조회(/api/robots/{robot_id}/reach_envelope)와 환경변수 PLEM_URDF_XACRO_PATH 가 제거됩니다. 이를 쓰던 외부 클라이언트는 고쳐야 합니다.
  • 서버 API: GET /api/calibration/extrinsics·GET /api/calibration/robots 가 없어지니 로봇 단위 GET …/robots/{robot} 로 옮기세요(해제용 DELETE …/extrinsic-ref 추가). 로봇 단위 조회와 PUT·DELETE …/extrinsic-ref 는 이 서버가 구동하는 로봇만 다루고 다른 로봇은 403 이니 plem 화면의 로봇 설정에서 바꾸세요.
  • 서버 API: WebSocket capture_seed 는 첫 시드만 찍고 secondView.token 을 돌려주니, generate_plan 전에 새 capture_second_seed {token} 을 불러 두 번째 시드를 찍으세요(로봇이 조금 움직였다 돌아옵니다). save_camera_extrinsic 의 mount 는 선택이 되고(비우면 오늘 날짜) missing_mount 는 없어집니다.
  • 서버 API: WebSocket 액션 move_to_waypoint·gripper_command·waypoint_save·waypoint_get·get_state 와 ping 을 없앴습니다. 대신 move_to_joints(waypoint_name)·waypoint_save_joints·waypoint_list·robot_state 브로드캐스트·ROS 그리퍼 액션을 씁니다.
  • 설치·업데이트: 업데이트한 뒤 첫 기동 때 저장돼 있던 AI 워크플로 세션 기록을 지웁니다. 보존하려면 업데이트 전에 ~/.plem/<기기 ID>/plem.db(PLEM_DATA_DIR 을 바꿨다면 그 아래)를 백업하세요.
  • 라이선스: 기기 토큰은 라이선스 만료일을 따릅니다. 만료되면 plem update 가 거부되고 plem code 도 다음 키 갱신부터 거부되며(원격 지원은 열립니다), 담당자가 연장하면 다시 쓸 수 있습니다. 기기를 다시 설치하거나 교체할 때는 새 토큰을 쓰세요 — 담당자가 기기를 삭제하면 그 토큰도 폐기됩니다.
  • 개발자 SDK: 커스텀 토크 컨트롤러에서 calculate_torque() override 가 없어졌습니다. 이미 빌드한 플러그인은 그대로 동작하지만, 다시 빌드하려면 본문을 compute() 로 옮기고 measured.position(j) 같은 접근자를 쓰세요(PLEM Docs 「커스텀 토크 컨트롤러」).
  • 로봇: 직접 작성한 URDF 의 gripper_payload_*·camera_payload_* 파라미터는 더 이상 받지 않고 로봇이 기동하지 않습니다. 장착물 전체를 tool_payload_mass·tool_payload_com_x·tool_payload_com_y·tool_payload_com_z 하나로 합쳐 적으세요. plem 이 만드는 로봇 설명은 자동으로 바뀝니다.

보안1

  • 서버 API: QA 전용 /api/debug/* 경로(작업 감사 로그 조회·P-STOP 시험)가 기본으로 꺼집니다. 이전에는 같은 네트워크의 누구나 인증 없이 감사 로그를 읽을 수 있었습니다. 시험용으로만 PLEM_DEBUG_ROUTES=1 로 켭니다.

새 기능43

  • 센서: 펜던트 F/T 카드의 「무게 측정」이 공구(그리퍼·카메라 등) 질량과 무게중심을 재서 복사해 줍니다. plem init --example pd/pid 로 만든 플러그인의 새 tool_load.hpp 에 붙여 넣으면 자세가 바뀌어도 공구 무게를 뺀 힘·토크를 씁니다. 선택 기능이며 지금은 Indy7 만 지원합니다.
  • ROS 2: plem_drive_msgs/RtEvent 가 이벤트 종류·심각도·LIMIT_STOP 사유 번호를 상수로 싣습니다(RtEvent.LIMIT_STOP·RtEvent.SEVERITY_ERROR 등). /rt_events 를 직접 구독하는 코드는 숫자 대신 이 이름으로 비교하세요. 메시지 형식은 그대로입니다.
  • 로봇: 기체별 실측 기구학이 등록된 로봇은 기동할 때 검증을 거쳐 그 실측값으로 동작합니다. 기동 로그에 적용 여부가 한 줄 남고, 검증에 실패하면 잘못된 기하로 움직이지 않도록 기동을 멈춥니다.
  • 로봇: 등록된 기기는 로봇 스택을 띄울 때 로봇 프로필·설정 사본, 운전·안전 모드, 제어기 종류·튜닝 값, 제어 이벤트, 진단 통계, 관절 데이터(브레이크 정지 중 제외, 10 ms 구간 요약으로 초당 약 100회)와 운영 로그·작업 감사 기록 등을 WIM 으로 보내는 수집 에이전트가 함께 뜹니다. 항목·목적·보존 기간은 라이선스 계약 별표 제6호(판 1.1)에, 끄는 방법은 PLEM Docs 「라이선스」에 있습니다.
  • 서보 드라이브: 로봇팔 없이 CiA 402 서보 드라이브 버스 하나를 돌릴 수 있습니다. 축마다 토크(cst)·위치(csp)·속도(csv) 모드를 고르며, 드라이브는 YAML 파일로 정의합니다(예제 example_drive.yaml 의 값은 지어낸 값입니다). 도구는 plem-drive check·plem-drive run(또는 plem drive …)으로 씁니다(PLEM Docs 「내 서보 드라이브 붙이기」).
  • 서보 드라이브: 엔코더는 절대형이어야 합니다 — PLEM 은 원점 복귀가 없어 증분 엔코더에서는 영점과 위치 한계가 맞지 않습니다.
  • 서보 드라이브: plem-drive run 은 버스를 ros2_control 로 띄워 위치 축은 FollowJointTrajectory(MoveIt 포함), 속도·토크 축은 스트림 토픽으로 움직입니다.
  • 서보 드라이브: Python plem.drive 의 bus.move_to({...})(위치 축, 사다리꼴·SCurve·자작 Profile)와 bus.stream({...})(속도·토크 축)이 명령을 파일 한계로 검사합니다. bus.reset() 은 fault·보호정지를 풀고 남은 원인을 오류로 알리며, bus.status·bus.velocities 로 상태를 봅니다.
  • 서보 드라이브: 모델 파일에 버스 이름 bus.name 이 필수가 되고, 버스는 /<bus.name> 에서 뜨며 Python 은 Bus("<bus.name>") 로 붙습니다(--ns 는 없어짐). 이름은 승인에 들어가지 않고, 같은 이름의 버스가 떠 있으면 plem-drive run 이 거부합니다. with Bus(...) 가 예외로 끝나면 축을 세웁니다.
  • 서보 드라이브: 한 기기에서 버스 둘을 돌릴 때는 plem-drive run --rt-cpu N 으로 두 RT 루프를 서로 다른 CPU 에 둡니다.
  • 서보 드라이브: 모션은 승인된 파일로만 열립니다. plem-drive check 가 버스가 거부할 파일을 드라이브 없이 JSON(plem-drive-check/1)으로 알리고, 승인 전 파일은 plem-drive run 이 터미널에서 드라이브 앞 벤치(모드·극성·토크·브레이크 등)를 제안해 통과하면 파일의 approval 블록에 승인을 적습니다. 파일·드라이브·펌웨어를 바꾸면 다시 벤치합니다.
  • 서보 드라이브: 기동 때 링 위치의 vendor_id·product_code 와 매핑을 스캔하는 드라이브의 매핑·리비전이 파일·승인 때와 다르면 양쪽 값을 보여 주며 활성화 전에 멈춥니다. 벤치 시작 전 남아 있던 드라이브 fault 는 경고 뒤 한 번 리셋하고, 그래도 남으면 멈추니 드라이브 알람을 해제하고 다시 실행하세요.
  • 서보 드라이브: 위치·속도 명령이 한계를 넘거나 명령 발행이 50 ms 넘게 끊기면 값을 자르지 않고 바로 보호정지한 뒤 브레이크를 물립니다. 이때는 PLEM 이 감속하지 않으니 드라이브의 정지 감속(0x6084·0x6085 등)을 startup_sdo 로 설정하세요. 토크 한계 limits.torque_nm 은 토크(cst) 축에만 적습니다(위치·속도 축은 드라이브의 0x6072).
  • 서보 드라이브: protective_stop 과 plem-drive run 의 Ctrl-C 는 위치·속도 축을 축마다 적는 limits.acceleration_rad_s2(필수)로 감속해 세운 뒤 브레이크를 걸고, 제때 서지 않으면 드라이브 Quick Stop(0x6085·0x605A)으로 넘깁니다. 토크 축이 있는 버스는 바로 끕니다. 체결을 확인하지 못하면 축별 statusword 와 함께 오류 로그를 남깁니다.
  • 서보 드라이브: 토크 축이 없는 버스는 브레이크를 풀면 그 순간 위치를 지키고(속도 축은 0) 첫 명령부터 따르며, 토크 축이 있으면 풀기 전에 토크 명령을 보내고 있어야 합니다. release_brake·protective_stop 은 requested 로 답하니 status 의 operation_enabled·brake_engaged 로 확인하고, 거부 원인은 rt_events 에서 보세요.
  • 서보 드라이브: 끝 멈춤이 없는 축(limits.position: null)을 위치(csp) 축으로도 쓸 수 있고 32비트 카운트 끝을 넘어도 끊기지 않습니다. 재시작하면 드라이브 값부터 세고, 한 방향 2⁴⁸ 카운트를 넘으면 멈추며, 32비트 범위 밖에서 끝나면 종료 때 경고합니다. 드라이브의 소프트웨어 위치 한계는 끄고, 그 밖의 드라이브 쪽 설정은 PLEM Docs 「드라이브 모델 파일」을 따르세요.
  • 서보 드라이브: 모델 파일에 토크 단위 rated_per_mille, SYNC0 주기를 0x1C32:02 에 쓰는 dc.write_cycle_time(드라이브가 rw 로 적을 때만), dc.sync0_shift_ns, 기동 때 드라이브 저장값을 대조해 경고만 하는 stored_sdo 를 적을 수 있습니다. DC 기준 클록은 링에서 가장 앞 드라이브입니다(PLEM Docs 「드라이브 모델 파일」).
  • 서보 드라이브: plem-drive run 은 기본으로 시작 요약과 경고·오류만 보여 주고 전체 로그는 --verbose 로 봅니다. --monitor 는 버스 상태를 1초에 한 행씩 표로, --plot 은 PlotJuggler 로 제어 주기마다의 기록을 보여 줍니다(PlotJuggler 는 ROS apt 저장소에 닿으면 함께 설치됩니다).
  • 서보 드라이브: Panasonic MINAS A6B 두 축 예제 폴더 a6b_pair(DC 운전, 21:1 감속기 출력축 기준)에 맞물린 두 축을 거울처럼 움직이는 demo.py 와 동기 그래프 레이아웃이 함께 설치됩니다. 정지 감속(모터 기준 3200 rad/s²)은 무부하 벤치 값이니 설비에 맞게 정하고, 첫 운전은 부하를 떼고 시작하세요.
  • 센서: Neuromeka Indy7 v3 에 Aidin AFT200-D80 F/T 센서를 로봇 프로필에서 지정하면 힘·토크가 /<로봇 이름>/ft_sensor/wrench(측정 원점 <로봇 이름>_ft_sensor_frame 기준)로 나오고, 펜던트 3D 화면과 TUI 에 값과 상태가 보이며 펜던트나 ft_sensor/zero 서비스로 영점을 잡습니다. 워크플로에서는 아직 쓸 수 없습니다(PLEM Docs 「F/T 센서」).
  • 센서: F/T 센서가 펜던트 3D 화면에 커넥터까지 실제 모양으로 그려지고 경로 계획도 커넥터까지 피합니다. 값이 갱신되지 않으면(케이블 빠짐 등) 센서 상태에 알리고 값을 내보내지 않으며, 다시 바뀌면 저절로 풀립니다. 프로그램은 상태 토픽의 state 값으로 이유를 구분합니다. 중력 보상은 하지 않습니다.
  • 센서: 현장에 맞춘 인식 설정(충돌 격자·nvblox 지도 범위·복셀 크기 등)을 ~/.plem/perception_overrides.yaml 에 적으면 PLEM 파일을 고치지 않고 덮어씁니다. 잘못된 키나 값은 기동을 거부하며, TUI 인식 프로파일 미리보기에서 적용될 값을 확인할 수 있습니다(파일이 깨졌거나 읽을 수 없으면 미리보기가 거부 사유를 보여 줍니다).
  • 캘리브레이션: 카메라 캘리브레이션이 있는 로봇에서 그리퍼나 F/T 센서를 바꿔 저장하면, 캘리브레이션을 이전 구성으로 측정했으니 다시 하라는 경고가 한 번 나옵니다(펜던트·TUI 로봇 설정·plem profile·plem code). 저장과 기동은 막지 않습니다.
  • 펜던트: 조그에 관절 목표 탭이 생겼습니다. 관절 각도 여섯 개를 적고 「누르는 동안 이동」을 누르고 있으면 그 자세로 이동하고, 떼거나 창이 포커스를 잃거나 연결이 끊기면 그 이동을 취소합니다(즉시 정지는 비상정지).
  • 펜던트: 작업 › 변수 탭에서 변수를 등록·편집·삭제하고 실행 중 값을 봅니다. 등록되지 않은 변수를 쓰는 노드는 검증에서 막히고, 이미 있는 이름의 추가와 저장된 워크플로가 쓰는 변수의 삭제는 거부됩니다(쓰는 곳을 알려 줌). 실행 중에는 삭제가 잠기고 타입을 바꾸면 저장 전에 알립니다.
  • 펜던트: 하단 바의 ⏸ ⏹ ▶ 를 눌렀는데 서버 확인이 오지 않으면 「확정 안 됨」으로 바뀌고 다시 보내기 버튼이 생깁니다. 정지·일시정지가 확정되지 않으면 비상정지를 안내하며, 명령을 저절로 다시 보내지는 않습니다.
  • 펜던트: 실행 상태 연결이 끊기면 캔버스와 하단 바가 회색으로 바뀌고 끊긴 시각이 표시되어, 로봇의 지금 상태가 아님을 알 수 있습니다. 3D 뷰도 로봇 연결이 끊기면 마지막 자세를 회색으로 남깁니다.
  • 펜던트: 배포된 Job 을 보는 중 「화면 고정」으로 노드 상태 표시를 멈춰 둘 수 있고, 「따라가기」로 실시간으로 돌아옵니다.
  • 펜던트: 사이드바에 구조 탭이 생겨 열린 워크플로·Job 을 시작 노드부터 순서대로 볼 수 있습니다. 줄을 누르면 캔버스에서 그 노드로 이동하고, 실행 중에는 현재 노드를 따라갑니다.
  • 펜던트: 선택한 노드는 Enter 로 상세 창을 열고(배포된 Job 의 노드는 두 번 눌러 저장된 값을 읽기 전용으로 봅니다), 연결선은 선택해 Delete 로 지웁니다. 캔버스 빈 곳을 두 번 눌러 확대하는 동작은 없어졌습니다.
  • 펜던트: 하단 바에서 보낸 일시정지·재개·정지도 누가 왜 보냈는지 감사 기록에 남습니다.
  • 펜던트: 한글과 영문을 한 서체(Wanted Sans)로 내장해, 기기와 관계없이 오프라인에서도 같은 글꼴로 보입니다.
  • Lab: F/T 센서가 있는 로봇에 연결하면 신호 트리에 ft_sensor 가 나타나 힘·토크를 그래프로 보고 CSV·JSON 으로 내보낼 수 있습니다(Runs 녹화에는 담기지 않습니다).
  • TUI: plem profile set-gripper·set-ft-sensor <로봇> <모델|none> 으로 명령줄에서 로봇 프로필의 그리퍼·F/T 센서를 바꿉니다(다음 기동부터 적용). 모델 이름의 앞뒤 공백은 무시하고 none 은 대소문자와 관계없이 해제입니다.
  • 서버 API: /plem 액션에 move_to_joints(관절 각도 또는 waypoint_name, request_id 필수, cancel_action 으로 취소)와 waypoint_save_joints(관절 각도를 웨이포인트로 등록)가 추가됩니다.
  • 서버 API: GET /api/calibration/robots/{robot}/pending-result 가 측정했지만 적용하지 않은 결과(측정 시각·잔차·통과 여부)를 돌려줍니다. 이 서버가 구동하는 로봇만 다루고 다른 로봇은 403 입니다.
  • 서버 API: GET /api/jobs/{id}/resume-preview 가 추가되고, resume 과 체크포인트를 이어받는 start 는 로봇이 기준 자세를 벗어나 있으면 거부합니다(422). 허용치는 PLEM_RESUME_ALIGN_TOLERANCE_DEG 로 정합니다.
  • plem code: AI 코딩 에이전트 plem code 가 베타로 기본 설치에 포함됩니다. 기기 등록 때 받은 기기 키(/etc/plem/code/plem-code-key.json)로 동작하는데 plem 그룹이 이 키를 바꿀 수 있으니 필요한 계정만 그룹에 넣으세요. 로봇 이동·그리퍼는 운영자 확인을 받고 실행 중인 Job 이 있으면 거부합니다. 화면은 영어입니다.
  • 라이선스: 담당자가 라이선스를 연장하면 기기에서 sudo plem-register --refresh 로 새 라이선스를 받고, 로봇 스택을 다시 시작하면 적용됩니다(PLEM Docs 「업데이트」).
  • 개발자 SDK: 커스텀 토크 컨트롤러가 measured.wrench() 로 F/T 센서의 힘·토크를 제어 주기마다 읽을 수 있습니다. 값은 중력 보상 없는 센서 좌표 값이며, wrench_state()·wrench_zero_seq() 로 값이 없는 이유와 영점이 바뀐 때를 알 수 있습니다. 기존 플러그인은 다시 빌드하지 않아도 동작합니다(PLEM Docs 「커스텀 토크 컨트롤러」).
  • 설치·업데이트: plem uninstall --remove-cumotion(--all 에 포함)으로 설치 때 깐 충돌 회피 구성 요소(cuMotion·nvblox)의 패키지와 저장소 등록도 제거할 수 있습니다. 다른 Isaac ROS 패키지와 torch 등 pip 패키지는 남습니다.
  • 펜던트: 하단 로봇 제어 바 오른쪽 끝에 「정지」(■) 버튼이 생겼습니다. 다른 조작이 잠겨 있어도 로봇 팔과 그리퍼 동작의 취소를 요청하고 BRAKED 모드 버튼처럼 진행 중인 전환을 기다리지 않고 곧바로 브레이크를 겁니다. 멈춘 그리퍼는 부품을 약하게 잡은 채이거나 놓을 수 있습니다. 비상정지가 아니니 위험할 때는 물리 비상정지를 누르세요.
  • 설치·업데이트: plem 명령을 새 plem-cli 패키지가 설치합니다. plem <명령> 은 이 기기에 설치된 plem-<명령> 을 실행하고 plem --help 는 설치된 명령을 보여 주므로, 쓸 수 있는 명령은 설치한 패키지에 따라 다릅니다(드라이브만 설치한 기기는 plem drive). 기존 plem <명령> 은 그대로 동작합니다.

개선·변경56

  • 서보 드라이브: 드라이브 도구의 사용법·안내 문장이 plem drive … 로 바뀝니다. plem-drive … 로 직접 불러도 그대로 동작합니다.
  • 서버 API: 기동 로그·TUI 로그와 서버의 오류·응답 문장(펜던트 알림·검증 패널·AI 채팅에 실리는 것 포함)을 영어로 통일했습니다(예: rejected:). 이 문구로 로그를 걸러 보던 스크립트는 새 문구로 바꾸세요. 펜던트 자체 화면 문구는 그대로입니다.
  • 펜던트: 하단 바의 로봇 모드 전환이 글자 없이 아이콘만 보입니다 — 자물쇠 BRAKED, 곡선 TRAJ(실행 ▶ 와 헷갈리던 재생 아이콘을 바꿈), 손 FREE. 이름은 툴팁으로 보입니다.
  • 로봇: 브레이크 해제나 TRAJ→FREEDRIVE 감속 같은 다른 모드 전환이 진행 중이어도 BRAKED 요청은 거부되지 않고 그 전환을 끊어 바로 걸립니다.
  • 로봇: EtherCAT 슬레이브가 OP 가 아닌 축은 브레이크 해제가 거부되고 rt_events 에 SLAVE_NOT_OPERATIONAL 이 남습니다(서보 드라이브 버스도 같습니다). 기동 직후 OP 에 닿기 전이면 잠시 뒤 다시 보내고, 계속되면 sudo dmesg | grep -i ethercat 에서 원인을 찾으세요.
  • 로봇: 기동할 때 드라이브의 통신 매핑을 검증해, 필요한 항목이 빠졌거나 어긋나면 로봇을 움직이기 전에 원인을 알리고 기동을 멈춥니다.
  • 로봇: 오류 초기화 요청을 보낼 때마다 새 신호를 내, 고장이 이어지는 동안 반복한 요청도 매번 전달됩니다. 오류 표시가 사라졌는데 로봇이 멈춰 있으면 BRAKED 로 돌아온 것을 확인한 뒤 목표 모드를 다시 고르세요.
  • 로봇: Neuromeka 로봇은 고장 난 축에 초기화 명령을 자동으로 보내지 않으니(브레이크 체결 마지막 단계 포함), 원인을 해결한 뒤 초기화를 요청하세요. Huayan Elfin 은 고장이 이어지는 드라이브의 자동 초기화 요청을 약 200 ms 마다, 한 번의 고장에 최대 25회 보냅니다(1 kHz 제어에서는 전과 같습니다).
  • 로봇: Neuromeka Indy7 v3 의 충돌 모델 여유를 12 mm 로 넓혀, 좁은 공간의 경로 계획이 조금 보수적으로 동작할 수 있습니다.
  • 로봇: JP6(Humble) 기기의 모션 계획 IK 솔버가 IKFast 에서 pick_ik 로 바뀌어 실측 기구학을 적용한 로봇도 정확히 풉니다(JP7 은 전처럼 TRAC-IK). Neuromeka IKFast 자산과 로봇 카탈로그의 motion_solver 키가 없어지니, 직접 고친 robot_models.yaml 에 그 줄이 있으면 지워도 됩니다.
  • ROS 2: 새로 연 터미널의 ros2 가 로봇 스택과 같은 CycloneDDS 로 고정되어(필요한 패키지는 함께 설치) ros2 topic list 같은 명령이 바로 로봇을 봅니다.
  • ROS 2: plem/control_command 에 protective_stop 과 브레이크 해제(release_brake·free_drive)를 한 요청에 보내면 정지만 실행하고 실패로 응답합니다. 전에는 해제가 정지를 덮을 수 있었으니, 해제는 정지 뒤 별도 요청으로 보내세요.
  • 캘리브레이션: 「레코드」·「로봇」 화면이 연결된 로봇의 「현재 값」 카드로 합쳐지고 「새 캘리브레이션」은 「새 측정」이 됩니다. 카드는 실행 중/재시작 필요·다음 기동 실패 경고·재측정 권장을 보여 주고 값 사용·해제·가져오기·이름 변경·내보내기·폐기를 하며, 기준 미달이거나 판정이 없는 값은 「실기 확인」 전에 잠깁니다.
  • 캘리브레이션: 저장 버튼이 바뀔 값(이전 → 새)을 보여 주는 「적용(재시작 후)」이 됩니다. 적용하지 않은 결과는 기기에 남아 스택을 다시 시작한 뒤에도 「현재 값」 카드에서 적용할 수 있습니다. 기록 이름 입력은 없어지고 라벨은 선택이며, 비우면 카메라 모델과 날짜로 이름이 붙습니다(예: zedxm-2026-10-01-v1). 기록의 측정 시각은 계산을 마친 시각입니다.
  • 캘리브레이션: 화면 용어가 「Hand-eye 캘리브레이션」·「통과」/「기준 미달」·「실기 확인」으로 정리되고, 오류 메시지가 무엇을 확인할지 알려 줍니다(오류 코드는 그대로). 측정 중 안내와 측정 엔진·서버 메시지는 영어로 나오고, 로봇 스택 재시작 안내는 plem 화면의 S 키 절차입니다.
  • 캘리브레이션: 새 측정은 카메라 화면을 가운데 크게 보여 주고, 자율 구동 중에는 조그·모드 전환 등 다른 조작을 잠급니다(E-Stop 제외). 종료를 확인하지 못하면 원인 후보와 조치를 보여 주고 E-Stop 을 확인하기 전까지 새 구동을 막습니다. 측정 중이거나 저장하지 않은 결과가 있을 때 페이지를 떠나면 브라우저가 묻습니다.
  • 캘리브레이션: 측정이 실패하면 원인에 맞춰 「같은 계획으로 다시 구동」·「조준부터 다시」·「보드 사양부터 다시」 중 한 곳에서 이어 합니다. 보드 사양 입력은 현재 값의 보드로 미리 채워지고, 저장한 뒤에도 결과를 복사할 수 있습니다.
  • 캘리브레이션: 자율 측정의 시드는 보드를 한 번 조준하고 이동을 승인하면 로봇이 두 번째 시드를 찍고 돌아옵니다. 두 번째 자세를 찾지 못하면 물러날 거리를 안내하고, 돌아온 자세가 처음과 5 mm·5° 넘게 다르면 다시 조준하게 합니다. 캡처 방식 기본값은 자율 구동이며, 시드 캡처·이동·계획 생성은 취소할 수 있습니다(새로고침도 취소).
  • 캘리브레이션: 실측 기구학을 쓰는 로봇에서도 정밀 마스터링과 도달성 계획을 쓸 수 있습니다. 세션 뒤 기하가 바뀌면 승인이 거부되니 세션을 다시 하고, 실측으로 바꾼 로봇의 기존 자동 캡처 계획은 다시 만드세요.
  • 펜던트: 화면 아래 로봇 제어 바에 로봇 모드(BRAKED·TRAJ·FREE)와 ▶ ⏸ ⏹, 진행 상태, 오류가 한 줄로 모이고 상태는 한글(정지됨·실패·오류)로 보입니다. 상단에는 로봇·서버·실행 채널·서버 요청의 연결 상태가 남습니다. ⏸ 는 현재 노드가 끝난 뒤 멈추며, 기다리는 동안 그렇게 표시합니다.
  • 펜던트: 보호정지 복구 뒤 뜨던 「어떻게 재개할까요?」 창이 없어지고 하단 바의 ▶ 이어서 실행·⏹ Job 정지가 맡습니다. 이어서 실행 전에 로봇이 재개 기준 자세와의 차이를 하단 바(좁은 화면에서는 ⓘ 를 눌러)에, 기준 자세를 3D 뷰에 반투명으로 보여 주고, 「시작 위치로 이동」을 누르고 있으면 그 자세로 갑니다. 허용치(기본 5°) 밖이면 재개가 거부됩니다.
  • 펜던트: 아직 보호정지 중이면 ▶ 이어서 실행이 잠기고 이유가 보입니다. 자세를 기록하지 않은 옛 체크포인트는 기준 자세가 없어 이어서 실행이 거부되니 ⏹ Job 정지 뒤 처음부터 실행하세요.
  • 펜던트: 서버가 종료되거나 멈춘 뒤 다시 켜지면, 실행 중이던 Job 은 체크포인트가 있을 때 「복구 대기」로 표시되어 이어서 실행하거나 정지할 수 있습니다. 일시정지·복구 대기 Job 은 새로고침하거나 다른 기기에서도 이어서 실행하거나 정지할 수 있습니다.
  • 펜던트: 왼쪽 사이드바가 아이콘 막대(작업·로봇·캘리브레이션)와 패널로 나뉘고 좁은 화면에서는 패널이 캔버스 위에 떠서 열립니다. 오른쪽 아래 탭 4개는 없어지고 조그는 3D 뷰 아래에 붙으며, 오른쪽 3D 열은 접을 수 있습니다(실행하면 펼쳐집니다). 노드 추가는 작업 › 노드 탭으로 모이고 상단 「+」는 없어집니다.
  • 펜던트: 화면 테두리가 어두운 배경 하나로 통일되고 가운데 작업 화면이 밝아지며, 캔버스 도구 버튼과 노드 상세의 섹션 링크가 장갑 낀 손으로 누르기 쉽게 커집니다. 목록의 행 동작(이름 변경·삭제 등)은 행 오른쪽 「⋯」 메뉴로 들어가고 삭제는 한 번 더 확인합니다.
  • 펜던트: 서버가 로봇 이름을 알려 주기 전에도 화면이 먼저 뜨고, 로봇을 움직이는 조작만 「로봇 연결 확인 중」으로 잠깁니다. 연결에 계속 실패하면 상단 배너에 재시도 버튼이 뜹니다.
  • 펜던트: 수동 조작 중 로봇 모드가 바뀌거나 3D 뷰를 접거나 연결이 끊기면 조작이 자동으로 멈추고 그 이유가 조그 패널에 남습니다. 펜던트를 모두 닫으면 서버가 조작 세션 해제를 시도합니다.
  • 펜던트: 조그의 서보 표시가 「서보 정상」이 되고 직교 ± 버튼에 3D 뷰와 같은 축 색(X 빨강·Y 초록·Z 파랑)이 들어갑니다. 웨이포인트 목록의 「이 위치로 이동」은 누르고 있는 동안만 이동하고 떼면 취소하며, 이름이 정확히 같은 웨이포인트만 움직입니다.
  • 펜던트: 이동 노드 상세의 「현재 위치로 갱신」이 확인 창을 거치며, 그 이름을 쓰는 모든 노드에 적용된다고 먼저 알립니다.
  • 펜던트: 실행 목록은 끝난 Job 을 최근 20건씩 보여 주고 「더 보기」로 펼치며, 다른 클라이언트가 저장 없이 돌리는 실행은 맨 위에 「서버 실행」으로 표시됩니다. 배포 직후와 실행 시작 때 캔버스가 그 Job 을 보여 주고, 상단 바는 열린 문서의 이름과 상태만 표시합니다.
  • 펜던트: 로봇 편집의 그리퍼·F/T 센서 선택에서 이 기기에 설치되지 않은 모델이 「(없음)」 대신 「<모델> (미설치)」로 보입니다.
  • 펜던트: 병렬 노드가 레인(모션·보조)으로 바뀝니다. 로봇을 움직이는 노드는 모션 레인에서만 실행되고 레인 안 노드는 같은 레인끼리만 연결됩니다. 옛 파일은 열 때 변환되며, 갈래가 노드를 공유하던 파일은 고쳐야 합니다.
  • 펜던트: 반복 상자에 유형(항상·횟수·조건)이 생기고 머리글에 실행 중 회차가 보입니다. 「반복 끝내기」·「다음 회차로」 인렛으로 중단과 다음 회차(남은 본문 건너뜀)를 잇고, 이전 저장본은 횟수가 있으면 「횟수」, 없으면 「항상」으로 읽힙니다. 최대 실행 단계(max_steps)는 반복·병렬 안에도 적용됩니다.
  • 펜던트: switch 가 비교 대상 하나와 case 행, 「그 외」 출구로 바뀌고 옛 switch 는 열 때 바뀝니다. 대상 타입과 맞지 않던 출구(예: 2.50)는 미설정 case 로 남으니 지우거나 값을 고치세요. 조건 노드 상세는 저장된 식을 맨 위에 보여 주고, 비교는 ==·> 처럼 식과 같은 기호로 고릅니다.
  • 펜던트: 노드의 출구가 슬롯 행이 되어 빈 슬롯을 누르면 노드 팔레트가 열리고 캔버스의 노드를 누르면 바로 연결됩니다. 노드 위의 「+」는 없어졌고, 반복을 끝내는 연결은 상자 머리글을 눌러 만듭니다.
  • 펜던트: 연결하지 않은 출구에서 흐름이 끝나면 정상 완료로 기록되고 하단 바의 완료 표시에 그 출구가 보입니다. 한 노드에서 여러 출구가 참이면 저장된 출구 순서에서 앞선 것(빈 슬롯 포함)을 고르고, 실행 중 캔버스는 실제로 지나간 연결선과 나간 출구만 색으로 표시합니다.
  • 펜던트: 노드 카드와 노드 목록은 스킬 코드(motion.move_linear 등) 대신 종류별 색 아이콘을 보입니다(코드는 노드 상세 창). 반복·조건 상자에는 긴 식 대신 「항상」·「5회」·「조건」 같은 요약이 보이고 전문은 상세 창에서 봅니다. 상세 창 검증의 오류·경고는 한국어로 보입니다.
  • 펜던트: 반복·병렬 상자에 실선 테두리와 안쪽 여백이 생깁니다(옛 파일은 열 때 상자가 한 번 넓어질 수 있고 노드 위치는 그대로). 팔레트로 만든 노드는 겹치지 않는 자리에 놓이고 반복 상자는 필요한 만큼 늘어나며, 자리가 없으면 노드를 만들지 않고 이유를 보여 줍니다.
  • 펜던트: 반복 상자에서 노드를 빼거나 넣으면 경계를 넘는 연결이 끊기고 끊긴 수를 알려 줍니다. 상자를 지우면 안의 노드는 바깥으로 나오고 상자 안에 상자를 새로 만들 수는 없습니다. 상자를 복사하면 안의 노드와 연결·조건식 참조가 함께 복사됩니다(시작 노드 제외).
  • 펜던트: 노드 ID 의 - 는 조건식에서 쓸 수 있도록 열거나 배포할 때 _ 로 바뀌고 연결·참조도 함께 갱신됩니다. 반복 안에서 시작 슬롯과 이어지지 않은 노드는 「도달 불가」로 표시되고 실행되지 않습니다.
  • 펜던트: 배율은 25–150% 이고 80% 미만에서는 개요로 보이며, 노드를 누르면 그 노드 중심으로 확대됩니다. 워크플로를 열면 시작 노드 주변을 보여 주고 전체 보기는 ⤢ 버튼입니다.
  • 펜던트: 보호정지는 화면 위 띠 대신 하단 바의 로봇 모드 옆 P-STOP 표시와 ↻ 복구 버튼으로 알립니다. 그동안 TRAJ·▶·조그·웨이포인트 이동·캘리브레이션 구동은 잠기고, BRAKED·FREE·⏸·⏹ Job 정지와 오른쪽 끝 「정지」는 남습니다(로봇이 보호정지를 보고하는 동안은 BRAKED 도 잠김). 복구 대기의 「시작 위치로 이동」은 하단 바 ▶ ⏹ 옆으로 옮겼습니다.
  • TUI: TUI 와 로봇 스택(launch·노드·서버) 로그가 ~/.plem/log 에 모입니다. TUI 는 켤 때마다 plem_tui_<시각>.log 를, 로봇 스택은 기동할 때마다 <시각>/ 폴더를 새로 만들고 각각 최근 20개만 남깁니다(이전 위치의 로그는 지우지 않습니다). RViz 같은 보조 도구와 손으로 띄운 ros2 launch 는 전처럼 ~/.ros/log 에 남습니다.
  • TUI: 설정 화면과 상태줄의 도메인 표시는 기동 때 적용된 값이고, 바꾸면 plem 을 다시 시작할 때까지 「restart plem to apply」가 붙습니다. ~/.plem/settings.yaml 의 ros_domain_id 가 1–101 정수가 아니면 도메인 0 으로 뜨는 대신 파일 경로와 허용 범위를 보여 주며 시작을 거부하니 그 줄을 고치거나 지우세요.
  • TUI: Joint Move 기본 포즈(zero·packaging·jog left/right)가 첫 실행 때 ~/.plem/settings.yaml 의 poses 에 기록되고, 그 뒤로는 이 파일이 기준입니다. 지운 포즈는 되살아나지 않으며 파일을 직접 고쳐도 됩니다.
  • 설치·업데이트: 드라이브 기능이 새 패키지 plem-drive 로 나뉩니다. plem update 가 함께 설치하므로 조치할 것은 없습니다.
  • 설치·업데이트: plem uninstall --keep-license 는 라이선스와 함께 plem code 기기 키도 보존합니다. 제거해도 기기 등록은 남아 다시 설치하려면 기존 등록 처리가 필요하니, 패키지만 갱신할 때는 plem update 를 쓰세요(자세한 절차는 PLEM Docs 「명령줄」의 plem uninstall).
  • 라이선스: 라이선스가 없거나 만료됐거나 확인할 수 없으면 펜던트·Lab 대신 원인과 조치를 담은 안내 페이지가 뜨고 서버 기능이 막힙니다. 조치한 뒤 로봇 스택을 다시 시작하세요(PLEM Docs 「문제 해결」).
  • 라이선스: plem-register·plem remote·plem update·plem code 의 토큰·등록 오류 안내가 원인별로 바뀝니다. 토큰 거부는 토큰 폐기와 라이선스 만료를 각각의 조치와 함께 알리고, 라이선스 파일만 잃었으면 재등록이 아니라 담당자에게 재발급(만료됐으면 Renew)을 요청하라고 안내합니다.
  • 라이선스: 라이선스 계약이 판 1.1 로 바뀌어 수집 항목(기기 등록 정보·버전·plem code 대화·도구 입출력·서버 접속 기록·원격지원 세션 기록·로봇 운영 기록(제6호))과 목적·보존 기간을 별표에 적습니다. plem code 대화는 모델 재학습에 쓰지 않고 보존 기간 뒤 지우니 자격증명·개인정보는 붙여넣지 마십시오. 전문은 기기의 /usr/share/doc/plem-core/ 에 있습니다.
  • 라이선스: 라이선스 계약(판 1.1) 제8조 제3항에 단서를 더해 LGPL 등 제3자 라이선스가 요구하는 범위에서 PLEM 의 수정과 그 디버깅을 위한 리버스 엔지니어링을 허용하고, WIM 이 설치해 인도한 기기의 GPL 등 구성 요소 소스코드를 요청하면 인도일부터 3년 이상 제공하며 의존 패키지 라이선스 고지 위치(THIRD-PARTY-NOTICES, 제4항)를 적었습니다(PLEM Docs 「라이선스」).
  • 문서: 공개 문서 사이트의 변경 이력이 버전별 타임라인과 목차로 바뀌고 이전 버전은 접혀 보입니다. 개요에는 호환성 주의 요약과 상황별 진입점이 생기고, 채널을 바꿔도 같은 페이지에 머물며 모바일에서 표와 제목이 읽기 쉬워집니다.
  • 설치·업데이트: plem update 가 시작할 때 최신 업데이트 절차를 받아 진행하므로, 여러 버전을 건너뛰어도 그 사이 추가된 단계를 모두 거칩니다. 업데이트로 더 이상 쓰이지 않게 된 패키지는 이름과 정리 명령을 알려 드립니다(자동으로 지우지 않습니다).
  • 설치·업데이트: 이미 설치·등록된 기기에서 설치 명령을 다시 실행하면 아무것도 바꾸지 않고 plem update 를 안내합니다. 다른 기기에서 옮겨 온 디스크처럼 남아 있는 라이선스가 이 기기 것이 아니면 설치 단계에서 멈춥니다(전에는 설치가 끝난 뒤 실행 화면이 기기 불일치로 잠겼습니다). Jetson 이 아닌 호스트는 시작 전에 거부하고, 시스템 기본 로캘을 더 이상 바꾸지 않으며, 완료 화면에 재로그인 등 남은 할 일을 보여 줍니다.
  • 캘리브레이션: 자율 측정의 「중단」(이제 아이콘 버튼)이 이동 중에도 로봇을 그 자리에 멈추고 측정을 끝냅니다. 브레이크는 걸지 않습니다.
  • 서버 API: WebSocket execute_stop 이 같은 연결의 다른 액션이 실행 중이어도 바로 처리되고, 모든 클라이언트의 궤적·그리퍼·캘리브레이션 goal 과 실행 중인 Job 의 취소를 요청한 뒤 BRAKED 를 확인될 때까지 요청하고, 실패하면 오류로 답합니다.

수정35

  • Lab: 관절 브레이크가 아직 풀리거나 잠기는 중이면 컨트롤러 튜닝 적용을 막고 그 이유를 알려 줍니다. 브레이크 동작이 끝난 뒤 다시 적용하면 됩니다.
  • 캘리브레이션: 측정 중 검출 품질이 캡처 직후 0% 로 떨어지지 않습니다. 이동·카운트다운·카메라 끊김처럼 새 관측이 없는 동안에는 마지막 값을 흐리게 「마지막 값」으로 보여 주고, 보드 인식 표시는 새 관측이 있을 때만 켜집니다.
  • 로봇: Elfin 의 전원을 켠 뒤 처음 기동하면 서보를 켜기 전 관절 각도가 실제 자세와 다르게(15°·20° 등) 보이고, 첫 브레이크 해제에서 J2 고장으로 보호 정지가 걸리던 문제를 고쳤습니다. 이제 처음부터 실제 자세가 보이고 첫 해제도 정상으로 진행됩니다.
  • 로봇: 로봇 스택을 정지할 때마다 이동 계획 노드(move_group)가 비정상 종료(exit code -11) 오류를 남기던 문제를 고쳤습니다.
  • 로봇: 같은 순간에 난 /rt_events 이벤트가 사라지거나 섞일 수 있던 문제를 고쳤습니다.
  • 로봇: 한 번 비활성화한 로봇 하드웨어를 같은 스택에서 다시 활성화하는 요청은 거부합니다. 전에는 성공한 것처럼 보였지만 이후 비활성화가 제어를 멈추지 못했습니다. 다시 쓰려면 로봇 스택을 재시작하세요.
  • 로봇: 브레이크 해제 뒤 이동 명령 없이 멈춰 있을 때 위치가 조금씩 밀리던 문제를 고쳤습니다.
  • 로봇: 트래커 조종에서 시작 위치가 맞지 않아 거부된 동작을 놓을 때 팔이 거부된 목표로 끌려가던 문제를 고쳤습니다(JP7 만 해당).
  • 로봇: 오래된 형식의 프로필에서 그리퍼를 해제해도 다음 기동에 예전 그리퍼가 다시 올라오던 문제를 고쳤습니다.
  • 그리퍼: 케이블이 빠지거나 공구 전원이 꺼진 그리퍼가 마지막 상태를 정상인 것처럼 계속 보이던 문제를 고쳤습니다. 이제 gripper_status 의 connected 가 false 가 되고 TUI 에 not answering 이 뜨며, 다시 연결하면 몇 초 안에 저절로 돌아옵니다.
  • 그리퍼: 그리퍼 명령이 드물게 빠지거나 직전 명령과 섞일 수 있던 문제를 고쳤습니다. 동작을 취소하면 정지 명령은 다음 상태 확인 때(최대 약 0.1초) 나갑니다. 업데이트한 뒤에는 로봇 스택을 완전히 내렸다가 다시 기동하세요.
  • 그리퍼: 드라이버가 첫 상태를 받기 전에는 상태를 내지 않고 그 사이의 명령은 실패로 끝납니다. 상태가 보이면 다시 보내세요. Danhae 는 첫 열기·닫기 전까지 폭이 0.0 으로 보이고 첫 닫기가 이미 닫힌 것으로 판정될 수 있습니다.
  • 센서: 카메라 데몬을 다시 시작하거나 부팅 뒤 카메라를 연결했을 때 「모션 센서를 찾을 수 없음」으로 열리지 않던 문제를 고쳤습니다(케이블 불량처럼 보이던 증상).
  • 캘리브레이션: 자동 캘리브레이션의 이동 계획이 로봇 설정의 그리퍼·카메라로 충돌을 검사합니다. 전에는 설정과 관계없이 RG6 그리퍼와 ZED X Mini 를 단 것으로 계산했습니다.
  • 캘리브레이션: 캘리브레이션 전에 쓰는 카메라 기본 위치가 F/T 센서와 그리퍼 회전을 따라갑니다(전에는 카메라를 센서 높이 약 52 mm 만큼 낮게 계산했습니다). 측정 때와 카메라 모델이나 툴 회전이 다른 캘리브레이션 값은 기동을 막지 않고 경고한 뒤 이 기본 위치를 쓰며, 다시 측정할 때까지 인식 기능은 꺼집니다. 전에는 카메라를 바꾸면 기동이 실패했습니다.
  • 캘리브레이션: 「실기 확인」에서 보드를 클릭하면 이동 계획이 관절 해를 찾지 못해 거부되던 문제를 고쳤습니다. 이제 툴의 현재 자세에서 이어 가며 관절 해를 찾아 클릭 지점 위 2 cm 까지 관절 이동으로 가고, 이어지는 카운트다운 동안 「취소」로 멈출 수 있습니다.
  • 펜던트: 정지·일시정지·재개·재실행·삭제 요청이 겹칠 때 Job 이 엉뚱한 상태로 남거나 재개 정보를 잃던 문제를 고쳤습니다. 실행 직후 누른 정지도 첫 동작 전에 적용되고, ▶ 실행은 편집 내용의 저장이 끝난 뒤 시작하며 저장에 실패하면 사유를 보여 줍니다. 저장 중에 다시 편집하고 창을 닫아도 최신 내용을 저장합니다.
  • 펜던트: 일시정지·재개 뒤에도 보호정지를 계속 감지하고, 노드 사이에서 보호정지된 뒤 이어서 실행하면 다음 노드부터 재개합니다(반복·서브워크플로 안에서는 그 노드를 처음부터).
  • 펜던트: 배포 탭의 ▶ 가 보호정지·복구 대기 Job 에 재개 대신 새 시작을 보내던 문제와, 다른 Job 을 보는 중 시작한 새 Job 이 취소되던 문제를 고쳤습니다. 재개는 Job 을 연 뒤 하단 바의 ▶ 이어서 실행으로 합니다.
  • 펜던트: 서버 재시작·네트워크 끊김 뒤 실행 상태 연결이 다시 붙지 않거나 끝난 Job 이 「실행 중」으로 남던 문제, 끝난 Job 을 열면 「연결」이 「연결 이상」으로 남던 문제, 설계 탭에서 워크플로를 열어도 Job 화면에 머물던 문제를 고쳤습니다.
  • 펜던트: 배포한 Job 의 노드 오류가 오류 목록에 뜨지 않고 이전 실행의 오류가 남던 문제를 고쳤습니다. Job 이 끝나는 순간 연 화면에도 종료 결과가 표시되고, 정지 버튼 설명은 정지하면 재개 지점을 버린다고 안내합니다.
  • 펜던트: 되돌리기(Ctrl+Z)·다시 실행한 내용이 저장되지 않아 취소한 편집이 실행되던 문제를 고쳤습니다(여러 노드를 한 번에 지운 것도 한 번에 되돌립니다). 두 손가락으로 확대·축소할 때 노드가 선택되던 문제도 고쳤습니다.
  • 펜던트: 편집기와 서버의 조건식 판정이 달라 서버가 받는 식을 편집기가 오류로 보이던 문제를 고쳤습니다. 한글 출력 이름과 특수 공백을 양쪽이 받고, 숫자는 일반 숫자(0–9)만 받습니다.
  • 펜던트: 오류 목록의 「노드로 이동」이 반복 상자 안 노드를 잘못 찾아가던 문제와 캔버스의 화면 낭독 안내가 영어로 나오던 문제를 고쳤습니다.
  • TUI: 설정 화면에서 로봇을 저장할 때 그리퍼 해제가 일부만 반영되거나 연결 방식이 EtherCAT 도구 채널로 잘못 적히던 문제를 고쳤습니다. 연결 방식을 알 수 없으면 저장을 거절하거나 비워 두어 그리퍼 드라이버를 띄우지 않습니다.
  • TUI: 설정 화면에서 로봇을 저장할 때 그 사이 펜던트가 바꾼 항목을 되돌리지 않습니다. 같은 항목을 양쪽이 바꿨으면 저장을 거절하고 다시 열어 저장하라고 안내합니다.
  • TUI: 그리퍼·카메라 목록이 비었을 때 상관없는 plem init 을 권하던 안내를 고쳐, PLEM 환경과 로봇 패키지 설치를 확인하라고 안내합니다.
  • TUI: 설정 화면에서 로봇 행의 Del 이 확인 없이 바로 로봇 프로필을 지우던 문제를 고쳤습니다. 이제 되돌릴 수 없다고 묻고 y 를 눌러야 지웁니다.
  • TUI: 보호정지 중 R 의 안내가 관절·작업영역 한계 정지에서는 풀리지 않는 순서를 알려 주던 문제를 고쳤습니다. 한계 정지는 f 로 프리드라이브에 들어가 팔을 범위 안으로 옮긴 뒤 R, 안전 상태가 NORMAL·모드가 FREE 일 때 f 로 브레이크를 거는 순서로 안내합니다.
  • 설치·업데이트: 충돌 회피 구성요소를 설치한 기기에서 카메라를 켜도 영상이 나오지 않던 문제를 고쳤습니다(launch 로그의 libgxf_serialization.so: cannot open shared object file). 업데이트하면 자동으로 적용되며, apt 로 직접 업그레이드했다면 sudo /usr/share/plem/setup-cumotion.sh 를 한 번 실행하세요.
  • 설치·업데이트: JetPack 7 기기의 온보딩이 쓰지 않는 가상 디스플레이 구성을 더 이상 하지 않습니다. 이미 온보딩된 기기의 구성은 남으며, plem uninstall 때 원래대로 되돌립니다(재부팅 후 적용).
  • 라이선스: 라이선스 파일을 손으로 복구하는 안내가 권한까지 맞추는 명령(sudo install -m 0644 …)을 제시하고, /etc/plem/depot.json 의 token·depot_url 이 문자열이 아니면 토큰 거부가 아니라 설정 오류로 알립니다. 보드나 네트워크 모듈을 교체하면 새 기기로 등록되니, 교체 뒤에도 「이미 등록됨」이 나오면 검출된 serial·MAC 을 확인하세요.
  • 로봇: 공구 질량이 음수이거나 10 kg 을 넘으면 공구 무게 없이 기동하던 문제를 고쳐, 어느 값이 틀렸는지 알리고 기동을 멈춥니다.
  • 로봇: Elfin 에 카메라를 설정하면 로봇 모델과 중력 보상에서 빠지던 문제를 고쳤습니다. ZED 카메라는 이 로봇에서 캘리브레이션한 뒤 장착됩니다.
  • 로봇: 그리퍼에 브래킷으로 붙는 카메라의 무게중심이 그리퍼 회전과 F/T 센서 높이를 따라가, 그 구성에서 중력 보상이 정확해집니다.

제거15

  • 서버 API: Job 의 /restart 와 /ws/jobs/{id} 명령 수신이 없어졌습니다. 실행 제어는 REST 의 start·pause·resume·stop 을 쓰고, 처음부터 실행하려면 stop 뒤 start 를 부르세요. Job 상세의 started_at·completed_at 도 빠집니다.
  • 서버 API: 펜던트의 3D 환경 맵 표면·「3D 확인」 탭이 없어지면서 쓰는 곳이 사라진 collision_avoidance·nvblox_enabled·perception_mode 가 /plem 접속 직후 오는 session_meta 에서 빠집니다. 이 값을 읽던 클라이언트는 그 처리를 지우세요.
  • 서버 API: 스킬 목록을 디스크에서 다시 읽던 POST /api/catalog/reload 가 없어졌습니다. 스킬 목록은 서버가 시작할 때 읽으니, 이 경로를 부르던 스크립트는 그 호출을 지우세요.
  • 서버 API: 서버가 UDP 9999 포트에서 응답하던 기기 탐색(PLEM_DISCOVER)과 이를 설정하던 환경변수 PLEM_UDP_HOST·PLEM_UDP_PORT·PLEM_DEVICE_MODEL 이 없어졌습니다. 펜던트는 이 기능을 쓰지 않아 영향이 없습니다.
  • 개발자 SDK: PLEM 코어 C++ 헤더에서 쓰이지 않던 IPC 채널·레거시 통신 모드와 모음 헤더 plem/ipc.hpp·plem/fieldbus.hpp·plem/control.hpp 가 없어졌습니다. 소스로 빌드한다면 필요한 개별 헤더를 직접 include 하세요.
  • 펜던트: 「즉석 실행」 버튼과 워크플로 모드 선택(Design·Snapshot·Live, Ctrl+1~Ctrl+3)이 없어지고 ▶ 하나가 검증·배포·시작을 한 번에 합니다. 캔버스는 워크플로나 배포된 Job 하나를 보여 주며, 실행·보호정지·복구 대기 중에는 워크플로로 돌아갈 수 없습니다. 처음부터 다시 하려면 ⏹ 뒤 ▶ 를 누르세요.
  • 펜던트: 워크플로의 작업 영역 상자(워크스페이스)와 그 검사가 제거됩니다. 남는 안전장치는 운영자 입회·속도 제한·관절 한계·자기충돌 검사·비상정지이며, 저장돼 있던 상자 값은 읽을 때 자동으로 버려집니다.
  • 펜던트: AI 워크플로 작성 기능(라이브러리의 AI 탭, 음성 입력)과 펜던트·TUI 설정의 OpenAI API Key 항목이 제거됩니다. ~/.plem/settings.yaml 에 남은 openai_api_key 는 지워도 됩니다.
  • 펜던트: 실행 기능이 없던 카메라·비전·IO 노드가 제거됩니다. 이 노드가 실행 흐름에 연결된 워크플로는 배포가 거부되니 편집기에서 지우세요.
  • 펜던트: 워크플로를 고친 뒤 뜨던 「재배포 필요」 표시와 직선 이동 노드에서 동작하지 않던 「PoseRef 연결」 선택지가 없어졌습니다.
  • 펜던트: 3D 뷰의 환경 맵 표면과 인식 상태 배지, 캘리브레이션 확인 창의 「3D 확인」 탭이 없어집니다. 카드 버튼은 「실기 확인」이 되고 잔차·현재 값 상태는 실기 확인 화면에 보이며, 카메라만 켜져 있으면 충돌 회피(cuMotion)·환경 맵(nvblox)을 끈 구성에서도 실기 확인을 쓸 수 있습니다.
  • 펜던트: 하위 워크플로(custom.* 노드) 실행 기능이 없어졌습니다. 펜던트에서 만들 수 없던 노드라 일반 워크플로는 영향이 없고, 가져온 파일의 이 노드가 실행 흐름에 연결돼 있으면 이전처럼 스킬 목록에 없는 스킬로 배포가 거부되니 편집기에서 지우세요.
  • TUI: plem ros2 <인자> 가 없어졌습니다. 새 터미널에서 ros2 를 바로 쓰세요.
  • TUI: 위쪽 상태 줄의 NITROS 칸이 없어지고, EtherCAT 칸은 연결이 끊겼을 때만 빨간 ✖ 를 붙입니다.
  • ROS 2: nvblox 환경 메시를 보내던 /<로봇 이름>/perception/environment_scene 토픽과 plem_msgs/EnvironmentScene 메시지, 이를 싣던 plem-perception-scene 패키지가 없어집니다. plem update 가 그 패키지를 저절로 지우며, 장애물 회피(nvblox)는 그대로입니다.

v0.9.0​

변경 24건 보기

호환성 주의7

  • 로봇: 관절 브레이크 조작이 전 벤더에서 전원과 함께 움직입니다 — 해제는 관절에 전원을 넣어 자세를 잡은 채 풀고(이동(TRAJECTORY)·프리드라이브 모드에서만 받아들입니다), 체결은 전원을 내려 잠급니다.
  • 로봇: 전원을 끈 채 브레이크만 풀어 팔을 손으로 밀던 조작이 없어집니다 — 충돌 뒤 재배치는 화면의 복구 조작으로 오류를 초기화한 다음 프리드라이브에서 중력보상을 받으며 손으로 옮기고, 보호정지가 살아 있으면 원인(비상정지 버튼, 팔이 밀고 있는 외력)을 먼저 없애 안전 상태가 NORMAL 로 돌아온 뒤 프리드라이브로 들어갑니다.
  • 로봇: Indy7 계열·Elfin10-L 은 기기 시리얼 없이 기동하면 즉시 오류로 멈춥니다 — 관절 보정값의 유일한 원천이 기기별 프로필(~/.plem/profiles/<시리얼>.json)이라 이전처럼 시리얼 없이 보정값 0 으로 조용히 기동해 자세가 어긋나는 일을 막는 것으로, plem TUI 로 기동하면 로봇 프로필에 등록된 시리얼이 자동으로 전달됩니다.
  • 로봇: Elfin 로봇의 모션 계획이 Pilz(PTP·LIN·CIRC) 전용으로 바뀝니다 — 계획기를 ompl 로 지정해 둔 RViz·MoveIt 구성은 Pilz 로 바꿔야 하고, Elfin 에는 장애물 회피 계획이 제공되지 않습니다.
  • 로봇: 장애물 회피가 필요한 계획 요청은 충돌 회피(cuMotion)가 켜져 있지 않으면 다른 계획기로 대체되지 않고 거부됩니다 — 회피 계획은 cuMotion 을 켠 Humble 트레인의 Neuromeka 로봇에서만 실행되고 그 밖에서는 기본(결정론적) 계획으로 바꿔 보내야 하며, 계획기를 직접 지정하던 planner_hint 도 더는 계획기를 바꾸지 못하고 다르면 거부되니 이 값은 비우고 회피 필요 여부로 요청하십시오.
  • 그리퍼: 그리퍼 하드웨어 플러그인 이름이 neuromeka_robot_driver/GripperHardwareInterface 에서 plem_robot_nodes/GripperHardwareInterface 로 바뀝니다 — 옛 이름을 손으로 적어 둔 URDF 는 기동에 실패하므로 새 이름으로 고쳐야 합니다(제공된 그리퍼 xacro 를 그대로 쓰는 구성은 조치가 필요 없습니다).
  • 튜닝: b0 자동 튜닝이 위치영역 하나로 통일되면서 같은 이름의 튜닝 액션이 다른 계약을 갖습니다 — TuneB0Position(tune_b0_position)을 쓰던 호출자는 TuneB0(tune_b0)로, 튜닝 도구는 online-position 대신 online 서브커맨드로 바꾸고 adapt_sign 은 ±1 을 반드시 명시해야 합니다(속도영역 튜너는 은퇴).

새 기능1

  • 문서: 공개 문서 사이트에 plem TUI · Teaching Pendant · Plem Lab 사용 가이드가 화면별 페이지로 들어갑니다 — 기동 구성·제어·정지와 복구·조작·튜닝·실행 절차를 실제 화면 캡처와 함께 단계별로 설명합니다.

개선·변경6

  • 문서: 카메라(ZED X Mini)와 충돌 회피(cuMotion)가 ROS 2 Humble 트레인에서만 제공되는 점을 하드웨어·기동 안내에 명시합니다.
  • 로봇: 서버가 로봇의 기준 프레임과 벤더 도구(마스터링·도달성 검사)를 설치된 로봇 카탈로그에서 해석합니다 — Neuromeka 고정값을 없애 다른 벤더 로봇(Huayan Elfin)에서도 장면·캘리브레이션 흐름이 올바른 프레임으로 동작합니다.
  • 안전: 로봇 모션 잠금(캘리브레이션·TUI·서버 사이의 동시 조작 방지)을 한 구현으로 통일합니다 — 구성 요소마다 따로 두던 사본이 서로 다른 잠금 파일을 잡아 배타가 조용히 풀릴 수 있던 경로를 없앴습니다.
  • 문서: AI 코딩 에이전트용 문서(depot.wimcorp.dev/docs/<버전>/llms.txt)가 공개 문서 사이트와 코드에서 컴파일한 위키(전수 인덱스 + 자기완결 페이지)로 바뀝니다 — 구 developer manual 챕터 재발행을 중단합니다. 이 문서는 플러그인 없이 어떤 코딩 에이전트에서도 같은 URL 로 씁니다(Claude Code 용 plem-docs 플러그인은 은퇴).
  • 로봇: plem TUI 에서 Huayan Elfin 로봇을 골라 그대로 기동할 수 있습니다 — 로봇 종류가 지정되지 않으면 엉뚱한 로봇으로 기동하지 않고 즉시 오류로 알리며, 관절 목록도 벤더와 무관하게 올바로 읽습니다.
  • 조그: Teaching Pendant 에서 조그 속도를 1 % 단위로 지정합니다 — 슬라이더가 1 % 격자로 움직이고 ±1 % 버튼과 퍼센트 표시가 함께 붙습니다.

수정8

  • 문서: 릴리스마다 공개 문서 사이트가 Humble·Jazzy 두 트레인 모두 같은 버전으로 갱신됩니다 — 이전에는 Jazzy 문서가 0.6.5 에 머물러 있었습니다.
  • 로봇: JP7 기기에서 관절 이동 명령이 모두 "IK solver" 오류로 거부되던 문제를 고쳤습니다 — Jazzy 트레인의 로봇 패키지가 IK 솔버 플러그인(TRAC-IK)을 함께 설치합니다.
  • Teaching Pendant: JP7 기기에서 3D 패널을 연 뒤 rosapi 노드가 종료돼 3D 로봇 모델·Plem Lab 로봇 검색이 되지 않던 문제를 고쳤습니다 — 설치·업데이트 시 rosapi 의 알려진 결함을 자동 보정하고, rosapi 가 apt 로 갱신돼도 다시 적용됩니다.
  • Teaching Pendant · Plem Lab: 로봇 모델을 읽을 때 존재하지 않는 노드까지 조회해 로그에 Service /robot_state_publisher/get_parameters is not available 가 남던 동작을 없앴습니다.
  • 로봇: 설정 화면에서 Elfin 로봇에 '플래닝 미지원' 표시가 잘못 붙던 것을 없앴습니다 — 이 로봇은 실제로 모션 계획이 됩니다.
  • 로봇: Elfin10-L 에서 브레이크를 푸는 중 드라이브가 고장으로 떨어져 관절이 잠긴 채 보호정지로 무너지던 문제를 고쳤습니다 — 이전 운전에서 남은 고장도 전원 재투입 없이 초기화됩니다.
  • 로봇: Elfin10-L 의 링크 질량·무게중심·관성과 토크 환산 값을 벤더 자료를 근거로 정정하고 제어 튜닝 기본값을 다시 잡았습니다 — 중력보상이 과하게 걸려 프리드라이브에서 팔이 밀리던 현상과 화면 토크 표시의 오차가 개선되며, 일부 관절 모듈과 프리드라이브 밀림은 실기 확인이 남아 있습니다.
  • 문서: 문서 사이트 주소로 들어가면 배포판 선택 화면 대신 문서 첫 화면으로 바로 연결됩니다 — 배포판(Humble/Jazzy) 전환은 상단 토글에서 합니다.

제거2

  • 문서: plem-tui 패키지가 개발자 매뉴얼 PDF(/opt/plem/share/doc/plem-developer-manual.pdf)를 더 이상 동봉하지 않습니다 — 개발자 문서는 공개 문서 사이트(https://www.wimcorp.co.kr/plem/)가 정본이며, PDF 는 릴리스 산출물로만 제공됩니다.
  • 로봇: 드라이버에 등록되지 않은 로봇 모델 12종(icon·indyrp2·nuri·opti·indy12 계열)을 선택 목록에서 제거합니다 — 목록에는 드라이버 레지스트리에 등록된 모델(Indy7 계열, Elfin10-L)만 남으며, 이전에는 제거된 항목을 고르면 'Unknown robot model' 로 실패했습니다.

v0.8.0​

변경 6건 보기

새 기능2

  • 그리퍼: JP7(Ubuntu 24.04) 기기에서도 Danhae 그리퍼 패키지가 함께 설치됩니다.
  • 튜닝: 위치영역 b0 온라인 튜닝 도구가 추가됩니다 (전문가용).

개선·변경2

  • 패키징: 모든 릴리스 패키지를 격리된 컨테이너에서 빌드하고, 설치 검증을 통과한 산출물만 발행합니다.
  • 조그: 조그 명령의 적용이 불확실하게 끝난 경우 화면이 이를 구분해 표시합니다.

수정2

  • 조그: JP7 기기에서 조그 실패 후 복구가 이어지지 않던 문제를 고쳤습니다.
  • 로봇: JP7 기기에서 프리드라이브 명령이 올바로 전달되지 않던 문제를 고쳤습니다.

v0.7.1​

이 버전에는 사용자에게 보이는 변경이 없습니다.

v0.7.0​

변경 15건 보기

새 기능1

  • 설치: 파이썬 구성 요소가 필요한 라이브러리를 패키지에 담아 배포합니다 — 설치·업데이트 중 인터넷이 끊겨도 완료됩니다.

개선·변경6

  • 설치: 통신 설정·실시간 권한·환경 변수·카메라 권한을 패키지가 직접 관리합니다. 설치하면 항상 갖춰지고, 제거하면 함께 정리됩니다.
  • 업데이트: 설치 대상 목록을 대표 패키지 하나가 관리해 plem update 가 구성 요소를 빠뜨리지 않습니다.
  • 원격 지원: 원격 지원 도구가 라이선스 도구와 함께 항상 설치됩니다.
  • 온보딩: 설치·업데이트·제거가 서로 겹쳐 실행되지 않도록 잠금을 공유합니다.
  • 패키징: 패키지 버전 표기에 배포판 이름이 붙습니다 (예: 0.7.0-1jammy).
  • 문서: 공개 문서 사이트를 개편했습니다 — 브랜드 테마, 화면 스크린샷, 변경 이력 페이지.

수정7

  • 온보딩: 설치 중 네트워크가 끊겨도 스크립트가 중간까지만 실행되지 않습니다.
  • 설치: ROS 2 저장소 키를 내려받을 때 검증하고 원자적으로 배치합니다.
  • 제거: --keep-license 가 라이선스를 실제로 보존합니다.
  • 제거: ROS 2 저장소 원복이 다른 패키지가 쓰는 키 참조를 보존합니다.
  • 업데이트: 시스템 언어 설정과 무관하게 버전이 올바로 표시됩니다.
  • 라이선스 발급: 토큰 앞뒤 공백 때문에 인증이 실패하던 문제를 고쳤습니다.
  • 라이선스 발급: 빈 토큰을 넘기면 즉시 오류로 알립니다.

제거1

  • 업데이트: plem update --rollback 을 은퇴했습니다 — 실행하면 안내와 함께 중단되며, 복구는 재설치로 합니다.