diff --git a/build/arm_application/arm_application.egg-info/SOURCES.txt b/build/arm_application/arm_application.egg-info/SOURCES.txt index cb1065d..66cac45 100644 --- a/build/arm_application/arm_application.egg-info/SOURCES.txt +++ b/build/arm_application/arm_application.egg-info/SOURCES.txt @@ -40,7 +40,19 @@ arm_application/kalman_filter.py arm_application/model_labels.py arm_application/move_to_pose_client.py arm_application/onnx_workpiece.py +arm_application/operator_app.py +arm_application/operator_arm_mesh.py +arm_application/operator_arm_state.py +arm_application/operator_camera_view.py +arm_application/operator_console.py +arm_application/operator_gripper_mesh.py +arm_application/operator_gripper_state.py +arm_application/operator_handeye_board.py +arm_application/operator_tactile_view.py +arm_application/operator_teach.py arm_application/orisys_tactile.py +arm_application/overhead_oneshot.py +arm_application/path_profile.py arm_application/perception_node.py arm_application/pid_controller.py arm_application/pipeline_node.py diff --git a/build/arm_application/build/lib/arm_application/demo_named_poses.py b/build/arm_application/build/lib/arm_application/demo_named_poses.py index c679623..40cff4f 100644 --- a/build/arm_application/build/lib/arm_application/demo_named_poses.py +++ b/build/arm_application/build/lib/arm_application/demo_named_poses.py @@ -10,8 +10,10 @@ from rclpy.node import Node from arm_msgs.srv import SetNamedPose +from arm_application.ros_node import TolerantNode -class DemoNamedPoses(Node): + +class DemoNamedPoses(TolerantNode): def __init__(self) -> None: super().__init__('demo_named_poses') self.declare_parameter( diff --git a/build/arm_application/build/lib/arm_application/dh_official.py b/build/arm_application/build/lib/arm_application/dh_official.py index 451d8b6..2467ae9 100644 --- a/build/arm_application/build/lib/arm_application/dh_official.py +++ b/build/arm_application/build/lib/arm_application/dh_official.py @@ -201,21 +201,36 @@ class DHModbusClient: def set_position_per_mille(self, position: float | int) -> int: value = _clamp_int(position, 0, 1000) + # 与 dh_pgea.latched_position_break 同一份:命令已是目标时先写当前位置, + # 读回之后再写最终值。60ms 后写回旧命令,固件采样不到,手指不动。 + from arm_application.dh_pgea import latched_position_break + try: cmd = _clamp_int(self.read_register(REG_POSITION), 0, 1000) except Exception: cmd = value - if cmd == value: - try: - cur = self.get_position_per_mille() - except Exception: - cur = value - nudge = cur + (40 if value >= cur else -40) - nudge = _clamp_int(nudge, 0, 1000) - if nudge == value: - nudge = 0 if value != 0 else 40 - self.write_register(REG_POSITION, nudge) - time.sleep(0.06) + try: + cur = self.get_position_per_mille() + except Exception: + cur = value + bridge = latched_position_break(cmd, cur, value) + if bridge is not None: + self.write_register(REG_POSITION, bridge) + deadline = time.monotonic() + 0.6 + echoed = False + while time.monotonic() < deadline: + try: + if _clamp_int(self.read_register(REG_POSITION), 0, 1000) == bridge: + echoed = True + break + except Exception: + pass + time.sleep(0.05) + if not echoed: + raise DHModbusError( + f"位置命令中间值 {bridge} 没有读回,不再写入最终目标 {value}" + ) + time.sleep(0.15) self.write_register(REG_POSITION, value) return value diff --git a/build/arm_application/build/lib/arm_application/dh_pgea.py b/build/arm_application/build/lib/arm_application/dh_pgea.py index 2653230..117d46a 100644 --- a/build/arm_application/build/lib/arm_application/dh_pgea.py +++ b/build/arm_application/build/lib/arm_application/dh_pgea.py @@ -104,6 +104,44 @@ INIT_STATE_NAME = { } +def latched_position_break(command: int, current: int, target: int) -> Optional[int]: + """命令寄存器已经等于目标、手指却不在目标上时,返回要先写入的中间位置。 + + 大寰固件:再写一遍与 0x0103 当前值相同的数,不会启动新运动。 + 开爪卡在 caught 时就是这样——命令已是 1000,手指停在夹持位。 + 先把命令改成当前位置(手指本来就在这,不会再夹紧),等读回确认 + 固件已经采样,再写最终目标。只 sleep 几十毫秒就写回旧值,控制周期 + 来不及看到中间值,最终仍是旧命令,手指不动。 + """ + cmd = int(max(0, min(1000, command))) + cur = int(max(0, min(1000, current))) + pos = int(max(0, min(1000, target))) + if cmd != pos or abs(cur - pos) <= 25: + return None + if cur != cmd: + return cur + return 0 if cmd != 0 else 40 + + +def grip_motion_settled( + grip_state: int, position: int, target: int, seen_motion: bool +) -> bool: + """这一拍能不能算「这句位置命令已经结束」。 + + 张开前本来就是 caught、位置还停在夹持位:不能当成张开完成。 + 闭合夹住物体:动过之后停在比目标更开的位置,算完成。 + """ + near = abs(int(position) - int(target)) <= 25 + if grip_state in (S_GRIP_ARRIVED, S_GRIP_DROPPED) and near: + return True + if grip_state == S_GRIP_CAUGHT and seen_motion: + if int(target) + 25 < int(position): + return True + if near: + return True + return False + + def crc16_modbus(data: bytes) -> int: """官方 DH CRC16(Modbus,线路上按小端发送)。""" crc = 0xFFFF @@ -175,6 +213,34 @@ WIRING_HINT = ( ) +def open_failure_text(port: str, exc: BaseException) -> str: + """串口打不开时把「被占用」和「没应答」分开。 + + 独占锁失败(errno 11)以前和真没上电写成同一句「需要 24 V DC」, + 界面上看起来像缺自动上电,实际是别的进程还握着这个口。 + """ + text = str(exc).lower() + errno = getattr(exc, "errno", None) + busy = errno in (11, 16) or any( + token in text + for token in ( + "temporarily unavailable", + "device or resource busy", + "could not exclusively lock", + "resource busy", + ) + ) + if busy: + return ( + f"无法独占打开 {port}:{exc}。" + "串口已被别的进程占用(夹爪驱动或状态读取)。" + ) + return ( + f"无法打开 {port}:{exc}。" + "需要 24 V DC 供电 + RS485 接线,且当前用户在 dialout 组内。" + ) + + class DhPgeaGripper: """面向 PGE / PGEA 的线程安全 Modbus RTU 客户端(官方寄存器映射)。""" @@ -219,10 +285,7 @@ class DhPgeaGripper: exclusive=True, ) except Exception as exc: - raise DhPgeaError( - f"无法打开 {self.port}:{exc}。" - "需要 24 V DC 供电 + RS485 接线,且当前用户在 dialout 组内。" - ) from exc + raise DhPgeaError(open_failure_text(self.port, exc)) from exc try: self._ser.dtr = True except Exception: @@ -319,17 +382,28 @@ class DhPgeaGripper: def initialization(self) -> bool: return self.write_register(REG_INIT, INIT_CMD) - def initialize(self, timeout_s: float = 20.0, poll_s: float = 0.2) -> bool: - """写 0xA5,然后等到初始化状态 == 完成(对应官方上电流程)。""" + def initialize( + self, timeout_s: float = 20.0, poll_s: float = 0.2, *, force: bool = False + ) -> bool: + """写 0xA5,然后等到初始化状态 == 完成(对应官方上电流程)。 + + ``force=False`` 时,已经完成就不再写(节点启动不要每次都让手指找零)。 + 命令行 ``init`` 必须 ``force=True``:状态字已经是完成时,不写 0xA5 + 手指根本不会回零,看起来像初始化失效。 + """ state = self.get_init_state() - if state == S_INIT_FINISHED: + if state == S_INIT_FINISHED and not force: return True if not self.initialization(): raise DhPgeaError("初始化写 0x0100=0xA5 失败(无 Modbus 回显)") deadline = time.monotonic() + float(timeout_s) + # force 时必须先看到状态离开「完成」,否则读到的还是写之前的旧值。 + saw_busy = not force while time.monotonic() < deadline: state = self.get_init_state() - if state == S_INIT_FINISHED: + if state != S_INIT_FINISHED: + saw_busy = True + elif saw_busy: return True time.sleep(poll_s) raise DhPgeaError( @@ -345,42 +419,58 @@ class DhPgeaGripper: speed_pct = int(max(1, min(100, speed_pct))) return self.write_register(REG_SPEED, speed_pct) + def _wait_command_echo(self, value: int, timeout_s: float = 0.6) -> bool: + """等到 0x0103 读回就是刚写进去的值。读不回就不要再写下一笔。""" + deadline = time.monotonic() + float(timeout_s) + while time.monotonic() < deadline: + try: + if self.get_target_position(retries=1) == int(value): + return True + except Exception: + pass + time.sleep(0.05) + return False + def set_target_position(self, pos: int) -> bool: pos = int(max(0, min(1000, pos))) - # 大寰固件:0x0103 写入与当前命令相同的值不会启动新运动。 - # 开/关卡在 caught 时最常见——命令已是 1000,手指却停在夹持位。 try: cmd = self.get_target_position(retries=2) except Exception: cmd = pos - if cmd == pos: - try: - cur = self.get_current_position(retries=2) - except Exception: - cur = pos - nudge = cur + (40 if pos >= cur else -40) - nudge = int(max(0, min(1000, nudge))) - if nudge == pos: - nudge = 0 if pos != 0 else 40 - self.write_register(REG_POSITION, nudge) - time.sleep(0.06) + try: + cur = self.get_current_position(retries=2) + except Exception: + cur = pos + bridge = latched_position_break(cmd, cur, pos) + if bridge is not None: + if not self.write_register(REG_POSITION, bridge): + return False + if not self._wait_command_echo(bridge): + return False + # 读回只说明寄存器改了。再留一个控制周期,避免下一笔把中间值盖掉。 + time.sleep(0.15) return self.write_register(REG_POSITION, pos) def wait_settle(self, target: int, timeout_s: float = 6.0) -> GripperState: - """等到到位/夹住/松开,或超时返回最后一帧。""" + """等到到位或夹住,或超时返回最后一帧。 + + 张开前状态字已经是 caught 时不能立刻返回:那是上一句命令的残留, + 手指还停在夹持位。 + """ t0 = time.monotonic() last = None + seen_motion = False st = self.get_run_states() while time.monotonic() - t0 < timeout_s: st = self.get_run_states() - moved = last is not None and st.position != last + if last is not None and st.position != last: + seen_motion = True last = st.position - if st.grip_state == S_GRIP_MOVING or moved: + if st.grip_state == S_GRIP_MOVING: + seen_motion = True time.sleep(0.08) continue - if st.grip_state in (S_GRIP_ARRIVED, S_GRIP_DROPPED) and abs(st.position - target) <= 25: - return st - if st.grip_state == S_GRIP_CAUGHT: + if grip_motion_settled(st.grip_state, st.position, target, seen_motion): return st time.sleep(0.08) return st @@ -497,6 +587,36 @@ def _scan_bus(port: str) -> int: return 1 +def ctrl_values( + cmd: str, + value: str = "", + force: int = 50, + speed: int = 50, +) -> Optional[tuple[float, float, float, float]]: + """节点已经占着串口时,改发 ``/gripper/ctrl`` 的四个数。 + + 顺序是初始化、位置千分比、力度、速度。``probe`` / ``status`` 只读,返回 None。 + """ + name = str(cmd or "").strip().lower() + if name in ("probe", "status"): + return None + if name == "init": + return (1.0, 0.0, float(force), float(speed)) + if name == "open": + pos = 1000 + elif name == "close": + pos = 0 + elif name in ("pos", "move"): + if str(value).strip() == "": + raise ValueError("pos 需要 0–1000") + pos = int(round(float(value))) + if pos < 0 or pos > 1000: + raise ValueError("位置只接受 0–1000") + else: + raise ValueError(f"节点在线时不支持 {name}") + return (0.0, float(pos), float(force), float(speed)) + + def _cli(argv: Optional[list[str]] = None) -> int: site = _site_defaults() ap = argparse.ArgumentParser( @@ -541,8 +661,8 @@ def _cli(argv: Optional[list[str]] = None) -> int: print(st.summary()) return 0 if args.cmd == "init": - print("正在初始化(手指回零)…") - grip.initialize() + print("正在初始化(手指回零,已初始化也会再做一次)…") + grip.initialize(force=True) print(grip.get_run_states().summary()) return 0 if args.cmd == "status": @@ -551,12 +671,25 @@ def _cli(argv: Optional[list[str]] = None) -> int: if args.cmd == "open": if not grip.open_jaw(args.force, args.speed): raise DhPgeaError("张开写入失败") - print(grip.wait_settle(1000).summary()) + st = grip.wait_settle(1000) + print(st.summary()) + if abs(st.position - 1000) > 25: + print( + "张开失败:手指没有离开夹持位。" + "若仍是 grip=caught,先取下工件再执行 init。", + file=sys.stderr, + ) + return 1 return 0 if args.cmd == "close": if not grip.close_jaw(args.force, args.speed): raise DhPgeaError("闭合写入失败") - print(grip.wait_settle(0).summary()) + st = grip.wait_settle(0) + print(st.summary()) + # 夹住物体时位置停在厚度上,grip=caught 算成功。停在张开位则失败。 + if st.grip_state != S_GRIP_CAUGHT and abs(st.position) > 25: + print("闭合失败:手指没有朝合拢方向离开原位。", file=sys.stderr) + return 1 return 0 if args.cmd == "pos": if args.value == "": @@ -565,7 +698,15 @@ def _cli(argv: Optional[list[str]] = None) -> int: pos = int(float(args.value)) if not grip.move(pos, args.force, args.speed): raise DhPgeaError("位置写入失败") - print(grip.wait_settle(pos).summary()) + st = grip.wait_settle(pos) + print(st.summary()) + grasped_short = st.grip_state == S_GRIP_CAUGHT and st.position > pos + if abs(st.position - pos) > 25 and not grasped_short: + print( + f"位置 {pos} 没有到位(仍在 {st.position})。", + file=sys.stderr, + ) + return 1 return 0 except DhPgeaError as exc: print(f"错误:{exc}", file=sys.stderr) diff --git a/build/arm_application/build/lib/arm_application/dh_pgea_node.py b/build/arm_application/build/lib/arm_application/dh_pgea_node.py index 76fc055..5c43870 100644 --- a/build/arm_application/build/lib/arm_application/dh_pgea_node.py +++ b/build/arm_application/build/lib/arm_application/dh_pgea_node.py @@ -33,15 +33,7 @@ from arm_application.dh_pgea import ( GripperState, WIRING_HINT, ) - - -def _param_as_str(node: Node, name: str, default: str = "") -> str: - """字符串参数,同时允许命令行用数字覆盖(例如 SN 26610799)。""" - node.declare_parameter(name, default, ParameterDescriptor(dynamic_typing=True)) - val = node.get_parameter(name).value - if val is None or val == "": - return "" - return str(val).strip() +from arm_application.ros_node import TolerantNode, param_as_str def _as_ctrl_array(msg: Float32MultiArray) -> tuple[float, float, float, float]: @@ -51,7 +43,7 @@ def _as_ctrl_array(msg: Float32MultiArray) -> tuple[float, float, float, float]: return float(data[0]), float(data[1]), float(data[2]), float(data[3]) -class DhPgeaNode(Node): +class DhPgeaNode(TolerantNode): def __init__(self) -> None: super().__init__("dh_pgea") self.declare_parameter("port", "/dev/ttyUSB0") @@ -64,9 +56,9 @@ class DhPgeaNode(Node): self.declare_parameter("state_hz", 20.0) self.declare_parameter("open_position", 1000) self.declare_parameter("close_position", 0) - self._model = _param_as_str(self, "model", "PGEA-100-20-W") - self._sn = _param_as_str(self, "serial_number", "") - self._rts = _param_as_str(self, "rs485_rts", "") + self._model = param_as_str(self, "model", "PGEA-100-20-W") + self._sn = param_as_str(self, "serial_number", "") + self._rts = param_as_str(self, "rs485_rts", "") self._port = str(self.get_parameter("port").value) self._baud = int(self.get_parameter("baud").value) diff --git a/build/arm_application/build/lib/arm_application/dual_gripper_node.py b/build/arm_application/build/lib/arm_application/dual_gripper_node.py index 729d34c..d877002 100644 --- a/build/arm_application/build/lib/arm_application/dual_gripper_node.py +++ b/build/arm_application/build/lib/arm_application/dual_gripper_node.py @@ -22,6 +22,8 @@ from arm_msgs.msg import GripperCommand as GripperCommandMsg from arm_msgs.msg import GripperStatus as GripperStatusMsg from arm_msgs.srv import GripperExecute +from arm_application.ros_node import TolerantNode + def _site_path() -> Path: env = os.environ.get("SITE_CONFIG", "").strip() @@ -38,7 +40,7 @@ def _as_bool(val, default: bool = True) -> bool: return bool(val) -class DualGripperNode(Node): +class DualGripperNode(TolerantNode): def __init__(self) -> None: super().__init__("dual_gripper_driver") self.declare_parameter("config_file", "") diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/feature_guard.py b/build/arm_application/build/lib/arm_application/feature_guard.py similarity index 100% rename from install/arm_application/lib/python3.11/site-packages/arm_application/feature_guard.py rename to build/arm_application/build/lib/arm_application/feature_guard.py diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/feature_jump_guard.py b/build/arm_application/build/lib/arm_application/feature_jump_guard.py similarity index 100% rename from install/arm_application/lib/python3.11/site-packages/arm_application/feature_jump_guard.py rename to build/arm_application/build/lib/arm_application/feature_jump_guard.py diff --git a/build/arm_application/build/lib/arm_application/gauge_assembly_node.py b/build/arm_application/build/lib/arm_application/gauge_assembly_node.py index d1503fc..5578c20 100644 --- a/build/arm_application/build/lib/arm_application/gauge_assembly_node.py +++ b/build/arm_application/build/lib/arm_application/gauge_assembly_node.py @@ -94,6 +94,10 @@ from arm_application.gauge_config import ( ) from arm_application.gauge_fsm import ( DESCEND_STALL_STEPS, + ENTRY_HIGH, + ROT_AXIS, + ROT_LIMIT, + ROT_SHORT, Event, FsmError, GaugeContext, @@ -104,12 +108,16 @@ from arm_application.gauge_fsm import ( descend_iter_budget, descend_needed_m, descend_progress, + hole_entry_verdict, descend_tol_m, is_joint_limit_error, pixel_stable, points_stable, ratchet_cycles, + ratchet_delta_rad, + ratchet_travel_ok, relief_tol_m, + rotation_verdict, screw_stop, tangential_jump, tool_clearance_m, @@ -135,16 +143,41 @@ from arm_application.gauge_kin import ( ) from arm_application.pipeline_node import AssemblyPipeline from arm_application.handeye_realsense import resolve_realsense_topics -from arm_application.site_io import deep_merge, load_site_dict, ros2_root +from arm_application.site_io import ( + deep_merge, + load_site_dict, + overhead_camera, + resolve_eye_to_hand_file, + ros2_root, +) # 复用同一份图像解码与轨迹点构造,别在这里再写一份(规则 M2) from arm_application.stage2_locate_node import _bgr_copy, _pt as _joint_point #: 允许的"绕轴验证"误差 [deg]。超过就说明这根关节轴不是工具 Z 轴, #: 后面所有以"转多少度"为单位的动作都不成立 —— 必须报错而不是继续。 AXIS_VERIFY_TOL_DEG = 5.0 +#: 棘轮转腕时距离关节限位保留的余量 [deg]。 +#: 3° 不够用:实测轨迹会**自己**少走 ~5°(比如命令 180° 只到位 175.1°, +#: 而关节7 的限位正好是 175.06° —— 两者叠在一起,判断"是被限位截住还是 +#: 没走完"就分不清了)。留 8° 让这两种情况都还没有贴住。 +RATCHET_LIMIT_MARGIN_DEG = 8.0 #: 限制"跟踪丢失 → 粗定位 → 跟踪"的来回次数,防死循环。 MAX_TRACK_RETRIES = 3 +#: ``stage2_locate`` 返回码 → 人话。为什么要这张表:日志里只有 ``code=6`` 时, +#: 现场只能去翻源码;而每个码对应的**下一步动作完全不同**(垂直化/粗定位/ +#: 检测/对准/工件被推走),写在这里就不用来回翻了。 +_LOCATE_CODE_HINT: Dict[int, str] = { + 2: "(垂直化或悬停失败:工具轴没竖直、或悬停高度到不了)", + 3: "(粗定位失败:视野里没框到工件 —— 看相机/光照/权重)", + 4: "(k1/k2 解不出来:孔被挡、曝光不对、或孔根本没在视野里)", + 5: "(对准迭代用满仍未收敛:检查手眼/相机安装,或放宽 align_tol_m)", + 6: "(工件被工具推走:不是手眼/检测的问题,是悬停时工具尖端已经进了工件" + " —— 查 gauge_assembly.tool_tip_below_flange_m 与 servo.hole_hover_z_m)", + 8: "(规尖偏移一直没量到:残差看着达标、但用的是**法兰轴线**不是规尖 —— " + "对的可能是法兰、不是规;摆到能看清规尖再跑。看日志『规尖视觉量取失败』)", +} + class GaugeAbort(RuntimeError): """阶段内部判定要中止。带上 exit code,方便脚本区分原因。""" @@ -194,12 +227,11 @@ class GripperClient: if math.isfinite(pos): self._last_aperture = pos self._last_gripped = bool(msg.is_gripped) - if self._last_gripped: - if not self._ever_gripped: - # 记住"夹住时的开口":之后的掉件判据是**相对它的塌陷量**, - # 换一把规、换一个夹持开口都不用改阈值。 - self._grip_aperture = self._last_aperture - self._ever_gripped = True + # ⚠️ 这里**故意不**记"夹住时的开口"。曾经记过,代价是一个假 E1: + # 本后端的 is_gripped 是**推断值**,夹爪**全开**时也会闪成 True + # (实测 99.29mm,见 dropped 的说明),于是基准被记成 99.29mm、 + # 塌陷量算成 77mm ⇒ "通止规掉了(E1)",而规好好地在爪里。 + # 基准只由 :meth:`adopt_current_grip` 在**明确知道夹住了**的时候记。 def _on_legacy(self, msg: Float32MultiArray) -> None: fields = legacy_states_to_fields(list(msg.data)) @@ -210,6 +242,8 @@ class GripperClient: if got is not None: self._last_gripped = got if got: + # 老后端只有状态字、没有开口,掉件判据本来就吃状态字(见 dropped), + # 所以这里记"曾经夹住过"是对的。 self._ever_gripped = True # -- 查询 ------------------------------------------------------------- @@ -224,6 +258,75 @@ class GripperClient: """``True``/``False``/``None``(后端给不出明确答案)。""" return self._last_gripped + def aperture(self) -> Optional[float]: + """最近一帧的**开口** [mm](只有契约后端的 ``position`` 有;没有返回 None)。""" + return self._last_aperture + + def grip_aperture(self) -> Optional[float]: + """第一次判到"夹住"时的开口 [mm](掉件判据的基准,见 :meth:`dropped`)。""" + return self._grip_aperture + + def collapse_mm(self) -> Optional[float]: + """相对夹住时的**开口塌陷量** [mm](正 = 比夹住时更小)。拿不到返回 None。 + + S08/S09 每轮都要"松爪 → 回转 → 夹紧",日志里必须看得到这个数: + 它一路变大就说明每轮夹紧都比上一轮更往里挤,或者规在往下滑。 + """ + if self._grip_aperture is None or self._last_aperture is None: + return None + return float(self._grip_aperture) - float(self._last_aperture) + + # -- 开口的"等稳定"与"记基准" ------------------------------------------ + def settle(self, *, settle_s: float = 1.0, tol_mm: float = 0.05) -> Optional[float]: + """等开口**稳定**下来,返回稳定后的开口 [mm](拿不到读数返回 None)。 + + 为什么必须有这个(2026-09-24 用日志抓到的): + ``close``/``open`` 服务**返回时动作还没做完**(JTC 轨迹是异步的)。 + 立刻读开口会读到**松手前的旧值**——实测 S08 夹紧后立刻读,读到的还是 + 全开 99.93mm,于是日志与基准全错("夹住时 99.29mm")。谁要在动作之后 + 判断开口,都必须先过这里。 + """ + spin = getattr(self._node, "_spin", None) + deadline = time.monotonic() + max(0.0, settle_s) + prev = self._last_aperture + stable = 0 + while True: + if spin is not None: + spin(0.05) + else: # pragma: no cover - 只有测试桩走这里 + time.sleep(0.05) + now = self._last_aperture + if now is not None and prev is not None and abs(float(now) - float(prev)) <= tol_mm: + stable += 1 + if stable >= 2: + return float(now) + else: + stable = 0 + prev = now + if time.monotonic() >= deadline: + return None if now is None else float(now) + + def adopt_current_grip(self, why: str, *, settle_s: float = 1.0) -> Optional[float]: + """把**当前**开口记为"夹住时的开口"(掉件判据的基准),并记"曾经夹住过"。 + + 只在**明确知道爪里夹着规**的时刻调用(S00 自检通过后、以及每一次 + 确认夹紧之后)——它是掉件判据唯一的参照,随手记会让判据失去意义 + (见 :meth:`dropped` 与 :meth:`_on_contract` 的说明)。 + """ + ap = self.settle(settle_s=settle_s) + if ap is None: + # 拿不到开口(老固件/别的夹爪)也要记"曾经夹住过":否则 dropped() + # 会永远返回 False,那比"会抖的旧判据"更糟(真掉件也看不见)。 + self._ever_gripped = True + self._node.get_logger().warn( + f"拿不到开口读数({why})—— 掉件判据退回状态字,会抖但不会漏" + ) + return None + self._grip_aperture = float(ap) + self._ever_gripped = True + self._node.get_logger().info(f"夹持基准:开口 {ap:.2f}mm({why})") + return float(ap) + def dropped(self) -> bool: """E1 掉件:**曾经夹住过**,现在报"掉落"。 @@ -238,6 +341,9 @@ class GripperClient: 的指令落到与实际开口同一档,``is_gripped`` 就翻成 False。于是 **S08 第 2/12 轮直接报 E1**(爪里其实好好的,是判据在抖), 然后整条流程去等人工"放好通止规",而仿真里根本没人能做这件事。 + 更坏的是这个推断值在**全开**时也会闪成 True(实测 99.29mm)—— + 拿它当基准就会得到"塌陷 77mm"的假 E1。所以基准只由 + :meth:`adopt_current_grip` 明确记录(见 :meth:`_on_contract`)。 真正"掉了"的物理表现是**两指合到底**:开口从"工件宽度"塌到几毫米, 是几十毫米的变化,不会被指令切换带偏。所以判据用 @@ -349,6 +455,12 @@ class GaugeAssembly(AssemblyPipeline): # `$?` 判不出成败 —— 自动化里会把"流程失败"记成"成功"。结论文件是唯一 # 能被脚本/CI 读到的东西,由 run_gauge_assembly.sh 传入并读回。 self.declare_parameter("result_file", "/tmp/gauge_assembly_result.json") + # 眼在手外标定产物的**确切路径**,由 launch 按 site.yaml 派生后传入 + # (`<臂号>_<相机>_eye_to_hand.yaml`)。为什么不让节点自己拼: + # "臂号 = SN 末两位"这条口径只有 export_site_env 一处实现,节点再写一遍 + # 必然漂移;而漂移的症状是"标定做完了、S03 却找不到文件",回退到 S04 跟踪, + # 看起来像跟踪的问题。留空则退回下面那串候选名(兼容旧命名/仿真)。 + self.declare_parameter("coarse_eye_to_hand_file", "") site = load_site_dict() # robots[].gauge_assembly 覆盖全局段 —— 与 servo / paths / perception 同一套规矩。 @@ -369,6 +481,13 @@ class GaugeAssembly(AssemblyPipeline): holes = int(self.get_parameter("holes_total").value) if holes > 0: overrides["holes_total"] = holes + # 工具长:仿真里由启动脚本传**实测值**(上料脚本刚量的),真机不传(走 site)。 + # 为什么必须能覆盖:这个值决定悬停高度与 S07 下探预算,而仿真里规会在指间 + # 下滑到落座位置、下滑量随装夹变化(实测见过 243 / 254mm,差 11mm)。 + # 差 11mm 的后果见 gauge_fsm.hover_z_guard / drag_verdict 的说明。 + tool_len = float(self.get_parameter("tool_tip_below_flange_m").value) + if tool_len > 0.0: + overrides["tool_tip_below_flange_m"] = tool_len try: self.cfg: GaugeConfig = from_site(site, overrides=overrides or None) except GaugeConfigError as exc: @@ -496,49 +615,30 @@ class GaugeAssembly(AssemblyPipeline): def _d435_ns(self, site: Dict[str, Any]) -> str: """手外相机的命名空间:``role: overhead*`` 且**属于当前这台臂**的那一个。 - 为什么必须按 ``arm`` 过滤:仿真那台也有手外相机(``sim_d435``), - 只按 role 扫会同时命中两台,而"命中哪一台"取决于字典顺序 —— - 同一份配置在仿真/真机之间**错而不报**地互串。 - - 规则(确定性的三级): - 1. ``arm`` 与当前臂相同的优先(仿真:sim_d435 / 真机若两台各有相机也适用); - 2. 都没有 ``arm``(= 双臂共用的那台老相机)时回落到它; - 3. 还是多个 → 出声告警并取第一个,让人去配置里区分。 + 规则(三级收敛)的**唯一实现**在 ``site_io.overhead_camera``——手眼标定 + 脚本也用它取相机名。这里只负责把"配置没区分开"这件事**出声**:静默取第一台 + 会让"标定用的相机"和"推理用的相机"悄悄不是同一台。 """ - cams = [ - cfg - for cfg in (site.get("cameras") or {}).values() - if isinstance(cfg, dict) - and str(cfg.get("role") or "").startswith("overhead") - ] - if not cams: - return "" - arm = str(self._robot_dict(site).get("arm") or "").strip() - mine = [c for c in cams if str(c.get("arm") or "").strip() == arm] if arm else [] - hits = mine or [c for c in cams if not str(c.get("arm") or "").strip()] or cams - if len(hits) > 1: - names = ", ".join(str(c.get("name") or "?") for c in hits) + cfg, others = overhead_camera(site, self._robot_dict(site)) + if others: + names = ", ".join([str(cfg.get("name") or "?")] + others) self.get_logger().warn( - f"有 {len(hits)} 台手外相机都符合当前臂({names})—— 取第一个," + f"有 {len(others) + 1} 台手外相机都符合当前臂({names})—— 取第一个," "但请给 site.yaml 的 cameras.* 补上 arm 字段区分,否则选哪台看运气" ) - return str(hits[0].get("name") or "").strip("/") + return str(cfg.get("name") or "").strip("/") def _eye_to_hand_file(self) -> Optional[Path]: """找手外相机的手眼文件。没有就返回 None(调用方据此给出**怎么生成**)。 - 路径按**仓库根**解析而不是当前工作目录:相对 CWD 的路径会在"换个目录 - 启动"时静默失效(文件找不到 → S03 直接降级),而人只会怀疑标定。 + 规则(候选顺序 + 按仓库根解析)只有一份,在 ``site_io.resolve_eye_to_hand_file``。 + 这里只负责把 launch 传入的确切路径和当前手外相机名交给它。 """ - root = ros2_root() - for rel in ( - f"handeye/results/{self.cfg.coarse_camera}_eye_to_hand.yaml", - "handeye/results/eye_to_hand.yaml", - ): - cand = root / rel - if cand.is_file(): - return cand - return None + return resolve_eye_to_hand_file( + ros2_root(), + explicit=str(self.get_parameter("coarse_eye_to_hand_file").value or ""), + camera_name=self.cfg.coarse_camera, + ) def _on_robot_description(self, msg: String) -> None: self._robot_description = str(msg.data) @@ -959,6 +1059,13 @@ class GaugeAssembly(AssemblyPipeline): return Event.BOOT_OK self._publish_gauge_result({"ok": False, "state": "S00", "failures": blockers}) return Event.BOOT_FAIL + # 记"夹住时的开口"(掉件判据的基准)。**放在这里而不是等到 S08**: + # · 此刻爪里确实夹着规(仿真上料脚本刚装好,真机是人工装好才开始跑); + # · 基准必须是**明确知道夹住**时记的 —— 本后端的 is_gripped 是全开时 + # 都会闪 True 的推断值(实测 99.29mm),拿它当基准会造出假 E1 + # (见 GripperClient.dropped)。 + if self.grip is not None: + self.grip.adopt_current_grip("S00 自检通过:爪里已装好通止规") return Event.BOOT_OK # ===================================================================== @@ -1140,20 +1247,25 @@ class GaugeAssembly(AssemblyPipeline): f"{tag}: 目标 {delta_deg:+.1f}°,实测绕工具 Z {got:+.1f}°" f"(转轴偏差 {mis:.1f}°,阈值 {AXIS_VERIFY_TOL_DEG:.1f}°)" ) - if abs(got) < 3.0 and abs(delta_deg) > 10.0: - # 完全没动:最可能是撞上关节极限(用户要求的"转到极限角"就是这种情形) + verdict = rotation_verdict(delta_deg, got, mis, AXIS_VERIFY_TOL_DEG) + if verdict == ROT_LIMIT: + # 完全没动、或只走了一部分:都是**关节限位**把这段截住了 + # (2026-09-24 实测:棘轮回转每轮顶到上限 ±175°,于是下一步反向 + # 只剩 ~16° 余量)。交给调用方让余量重试(见 _ratchet_step); + # 调用方不处理时 FSM 会按未定义转移报错,不会静默走下去。 self.get_logger().warn( - f"{tag}: 指令 {delta_deg:+.1f}° 但几乎没动 —— 判为已贴关节极限" + f"{tag}: 期望 {delta_deg:+.1f}°、实测 {got:+.1f}°" + f"(差 {abs(delta_deg) - abs(got):.1f}°)—— 判为**贴到关节限位**" ) return Event.JOINT_LIMIT - if mis > AXIS_VERIFY_TOL_DEG: + if verdict == ROT_AXIS: self.get_logger().error( f"{tag}: 转轴偏差 {mis:.1f}° 超过阈值 —— 关节7 轴与工具 Z 不共线," "以『度』为单位的动作(S01/S08/S09)都不可信,中止。" "先确认工具系是否垂直向下、有没有装转接件" ) return Event.ABORT - if abs(abs(got) - abs(delta_deg)) > max(AXIS_VERIFY_TOL_DEG, 0.1 * abs(delta_deg)): + if verdict == ROT_SHORT: self.get_logger().error( f"{tag}: 期望 {delta_deg:+.1f}°、实测 {got:+.1f}°,偏差过大,中止" ) @@ -1161,6 +1273,146 @@ class GaugeAssembly(AssemblyPipeline): self._axis_verified = True return fsm_event + def _ratchet_step( + self, target_rad: float, *, tag: str, fsm_event: Event, speed_deg_s: Optional[float], + direction: int = 0, + ) -> Event: + """棘轮的一步"转腕":行程不够时**张开爪让出余量**再转。 + + :param target_rad: 关节 7 的**目标角(绝对值)**,与 + :meth:`_rotate_joint_and_verify` 同一口径(那边算的就是 + ``target_rad - q_now``)。**不是增量。** + :param direction: 这一步的**工艺转向**:``+1`` 正转、``-1`` 反转、 + ``0`` 交给"最短路径"。棘轮的四步一律显式给:步长接近 180° 时 + "最短路径"会被 0.1° 的读数差翻方向(详见 + :func:`arm_application.gauge_fsm.ratchet_delta_rad`)。 + + ⚠️ 为什么要把口径写在这里(2026-09-24 栽过一次,S09 直接 ABORT): + 调用方(S08/S09)给的本来就是绝对值(``q[-1] ± screw_step_rad``), + 而本函数此前把它当**增量**用(``prewind(want_deg=abs(deg(target)))``、 + 让余量时又按 ``q - target`` 算新目标)。于是 S09 第一步被算成 + "要转 338.9°"(其实是目标 338.9°、增量只有 180°)⇒ 误判"行程不够" + ⇒ 让余量那一步算到限位**外面**(``158.9 − 338.9 = −180°``,比 + −175° 的限位还低 5°)⇒ 报"期望 −338.9°、实测 +26.0°,偏差过大" + ⇒ 整条流程在**最不该失败的一步** ABORT(规在爪里好好的、什么坏事都没发生)。 + 两个函数各用一种口径,编译器不会说话,日志还会把"目标"和"增量"都印成 + 一个数 —— 所以口径写进参数名和 docstring。 + + 为什么需要"让余量"这一步: + 棘轮要求"一正一反各 180°",而关节 7 的行程只有 ±175°(3.0543 rad)。 + 拧入(S08)的**回转**那一步每轮都正好顶到上限(实测 +175.1°), + 于是 S09 要做的**反方向**第一步只剩 ~16° 余量,被限位截住。 + 而这一轮其实什么坏事都没发生。 + + 为什么"让余量"是免费的: + 指间**张开**时规在打滑(这正是棘轮成立的原理),所以手腕空转既不会 + 把已经拧进去的螺纹转回去,也不会漏掉进度 —— 只是把行程重新分配。 + + 让多少:整步(不去算亏欠了多少)。反正张开状态下这一步不产生任何装配 + 效果,整步最省事也最不容易算错;重试时的那一步才是"用力"的那一步。 + + 两条路:**先算**(限位已知时,提前让余量,干净)+ **兜底**(真被限位 + 截住时再让,覆盖"限位没读到 / 轨迹自己没走完"这两种情况)。 + + 两条路**最后都汇到同一次让余量**:只有一次,避免"先算发现不够、 + 让完还不够、再让一次"这种把行程越绕越少的做法。 + """ + limits = self._wait_joint_limits() + q = None + if limits is not None: + q, _Tee = self._wait_state(3.0) + if q is None: + return Event.TIMEOUT + # 目标角可能落在限位**外面**(这正是棘轮要解决的问题),先折成"最近一圈" + # 的增量(gauge_fsm.ratchet_delta_rad,含完整说明与单测): + # 关节在 +158.9°、目标 +338.9° ⇒ 增量 +180°(而不是 +338.9°)。 + # **方向按工艺意图给**:步长贴着 180° 时"最短路径"会被读数差翻向(R2.10)。 + delta_rad = ratchet_delta_rad(target_rad, float(q[-1]), direction) + why = "" + if limits is not None and abs(math.degrees(delta_rad)) > 1e-6: + plan = prewind( + q_now_rad=float(q[-1]), want_deg=abs(math.degrees(delta_rad)), + direction=1 if delta_rad > 0 else -1, + limits=limits, margin_deg=RATCHET_LIMIT_MARGIN_DEG, + ) + if plan.clamped: + why = ( + f"行程不够(关节7 在 {math.degrees(float(q[-1])):+.1f}°," + f"这一步要转 {math.degrees(delta_rad):+.1f}°" + f"(目标 {math.degrees(float(target_rad)):+.1f}°),限位 " + f"{math.degrees(limits[0]):+.0f}~{math.degrees(limits[1]):+.0f}°)" + ) + if not why: + ev = self._rotate_joint_and_verify( + target_rad, tag=tag, fsm_event=fsm_event, speed_deg_s=speed_deg_s + ) + if ev is not Event.JOINT_LIMIT: + return ev + why = "轨迹被关节限位截住(算着够、实际没走完)" + return self._ratchet_rewind_then( + delta_rad, tag=tag, fsm_event=fsm_event, speed_deg_s=speed_deg_s, why=why, + ) + + def _ratchet_rewind_then( + self, delta_rad: float, *, tag: str, fsm_event: Event, + speed_deg_s: Optional[float], why: str, + ) -> Event: + """张开爪 → 反向让一步 → 夹紧 → 转原来那一步。 + + :param delta_rad: **要转的增量**(不是目标角,见 :meth:`_ratchet_step`)。 + 让余量时按它反着退一步,重试时再按它前进 —— 两次都以**当时的** + 关节角为基准重新算目标,所以让完余量后关节会回到原处、工具净转 + ``delta_rad``。把"目标"固定成一开始那个绝对值是错的:让完余量之后 + 那个目标已经在另一圈上了(差 360°)。 + """ + if self.grip is None: + self.get_logger().error(f"{tag}: {why},但没有夹爪客户端,无法让余量 → 中止") + return Event.ABORT + self.get_logger().info( + f"{tag}: {why} —— 张开爪让出一步(此刻规在打滑,不会动到螺纹)再转" + ) + if not self.grip.open(): + self.get_logger().error(f"{tag}: 需要张爪让余量,但开爪失败 → 中止") + return Event.ABORT + time.sleep(self.cfg.screw_release_wait_s) + q, _Tee = self._wait_state(3.0) + if q is None: + return Event.TIMEOUT + ev = self._rotate_joint_and_verify( + float(q[-1]) - delta_rad, tag=f"{tag}_rewind", + fsm_event=fsm_event, speed_deg_s=speed_deg_s, + ) + if ev is not fsm_event: + self.get_logger().error( + f"{tag}: 让余量那一步也没走开({ev})—— 关节7 的行程真用尽了,中止。\n" + f" 排查:site.yaml 的 gauge_assembly.screw_step_deg 太接近关节行程了" + f"(Rizon4 的关节7 是 ±175°),棘轮一步要 {math.degrees(abs(delta_rad)):.0f}°," + f"留给'回转'的余量本来就不够。\n" + f" 改法:把 screw_step_deg 调小(例如 120°),并保证 " + f"screw_max_cycles × screw_step_deg 仍是 **360° 的整数倍** —— " + f"累计必须转整数圈,否则规会停在螺纹中间(S09 拧出也就少转几分之一圈)。" + ) + return Event.ABORT + if not self.grip.close(): + self.get_logger().error(f"{tag}: 让完余量后夹紧失败 → 中止") + return Event.ABORT + # 重试目标**按让完余量后的位置重算**:让余量退了一步,原来那个绝对目标 + # 现在差了 360°(正好一整圈),照原样下发会让关节反向绕一圈回去。 + q2, _Tee2 = self._wait_state(3.0) + if q2 is None: + return Event.TIMEOUT + ev = self._rotate_joint_and_verify( + float(q2[-1]) + delta_rad, tag=f"{tag}_retry", + fsm_event=fsm_event, speed_deg_s=speed_deg_s, + ) + if ev is not fsm_event: + self.get_logger().error( + f"{tag}: 让完余量重试仍然没走到位({ev})—— 中止" + f"(不是限位问题,先查是不是有东西卡住/螺纹咬死)" + ) + return Event.ABORT + return fsm_event + # ===================================================================== # S02 夹持确认(预留) # ===================================================================== @@ -1200,11 +1452,15 @@ class GaugeAssembly(AssemblyPipeline): ns = self.cfg.coarse_camera he = self._eye_to_hand_file() if he is None: + expect = str( + self.get_parameter("coarse_eye_to_hand_file").value or "" + ).strip() or f"handeye/results/{ns}_eye_to_hand.yaml" self.get_logger().warn( "S03 需要手外相机的 eye-to-hand 标定文件,现在没有 —— " f"按兜底逻辑回 S04 跟踪。\n" - f" 相机 {ns} 的标定产物应放在 handeye/results/<名>_eye_to_hand.yaml;\n" - f" 做法:bash scripts/run_handeye.sh --mode eye_to_hand(标完再跑本流程)" + f" 应该生成:{expect}\n" + f" 做法:bash scripts/run_handeye.sh --mode eye_to_hand " + f"teach/merge/calibrate(标完再跑本流程)" ) return Event.COARSE_FAIL if not self._wait_coarse_frame(ns): @@ -1354,7 +1610,9 @@ class GaugeAssembly(AssemblyPipeline): return Event.TIMEOUT code, q, Tee, final = self._run_locate(q, Tee) if code != 0 or not final: - self.get_logger().error(f"S05 精拍定位失败 code={code}") + self.get_logger().error( + f"S05 精拍定位失败 code={code}{_LOCATE_CODE_HINT.get(code, '')}" + ) return Event.TIMEOUT self._snap_final = dict(final) self._snap_pose = Tee.copy() @@ -1535,6 +1793,9 @@ class GaugeAssembly(AssemblyPipeline): z0 = float(Tee[2, 3]) step_m = self.cfg.contact_step_mm / 1000.0 max_depth_m = self.cfg.contact_max_depth_mm / 1000.0 + # 台肩落面所需的下压量。在下面几何自检里算出来;**要留到接触判据那里用** + # (看 hole_entry_verdict:下压深度远小于它 ⇒ 规没进孔)。 + needed_m: Optional[float] = None # ---- 工具几何自检:预算必须是**由几何推出来的**,不能拍 ------------------ # 判"到底了"的那一下是**台肩落到工件上表面**(不是尖端碰面)。工件上表面 @@ -1663,6 +1924,11 @@ class GaugeAssembly(AssemblyPipeline): f"{ft_ref:+.2f}N 超过 +{self.cfg.contact_axial_delta_n:.1f}N" f"(下压 {abs(float(Tee[2, 3]) - z0) * 1000:.2f}mm)" ) + # 下压这么浅就"接触" ⇒ 尖端顶在工件上表面,没进孔。必须在这里 + # 拦下:放它进 S08 只会干转几轮、憋住,最后报一句"转轴偏差" + # 把所有人引去查工具系。见 hole_entry_verdict 的说明。 + if self._hole_lost_guard(z0, Tee, needed_m, q, "腕部 FT"): + return Event.HOLE_LOST # 必须先卸载再交给 S08 —— 判到接触的这一刻臂上顶着的是**出力上限** # 那个量级的力(实测 200N+,与阈值无关),而规的轴向传力上限 # 只有 µ·N≈73N。见 _relieve_after_contact 的完整说明。 @@ -1709,6 +1975,9 @@ class GaugeAssembly(AssemblyPipeline): f"(法向 {fn:.1f},下压 {abs(float(Tee[2, 3]) - z0) * 1000:.2f}mm)" ) # 与腕部 FT 那条同规矩:判到接触时臂上顶着的力远大于阈值,必须先卸载。 + # 同样先过"是不是根本没进孔"这道闸(见 hole_entry_verdict)。 + if self._hole_lost_guard(z0, Tee, needed_m, q, "触觉切向"): + return Event.HOLE_LOST self._relieve_after_contact(q, Tee, "触觉切向", ft_ref) return Event.CONTACT_OK if fn - self._fn_rest > self.cfg.contact_safe_delta: @@ -1745,6 +2014,47 @@ class GaugeAssembly(AssemblyPipeline): self._retract(q, Tee, dz_m=0.01) return Event.TIMEOUT + def _hole_lost_guard( + self, + z0: float, + Tee: np.ndarray, + needed_m: Optional[float], + q: np.ndarray, + why: str, + ) -> bool: + """S07 判到接触时:下压深度是不是**远小于**几何预期(= 规没进孔)。 + + 返回 True 表示"确实没进孔",调用方要抬臂并返回 ``Event.HOLE_LOST``。 + + 完整来龙去脉在 ``gauge_fsm.hole_entry_verdict`` 的 docstring 里,这里只 + 留现场要看的那几句:工件在 S08/S09/S10 会被工具推走,而 k2 的孔位是 + S05 一次性定的 ⇒ 工件一动孔位就失效 ⇒ 规落在孔旁边的平面上。 + 不拦的话会干转 5 轮,最后报一句"转轴偏差…先确认工具系有没有装转接件", + 把所有人引去查工具系(实测 2026-09-28)。 + """ + if needed_m is None: + # 没算出几何预期(工件上表面 z 没标定且 S05 也没给)—— 没有判据就别猜。 + return False + descended_m = abs(float(Tee[2, 3]) - z0) + if hole_entry_verdict(descended_m, needed_m) != ENTRY_HIGH: + return False + self.get_logger().error( + f"S07 接触({why})发生在下压 {descended_m * 1000:.2f}mm 处," + f"而按几何「台肩落面」需要 {needed_m * 1000:.1f}mm —— 只走了 " + f"{descended_m / needed_m * 100.0:.0f}%。\n" + " **规没有进孔,尖端顶在工件上表面**(正常入孔要压到台肩落面那一下)。\n" + " 最可能的原因:工件被工具推走了,而本孔的坐标是 **S05 一次性定下**的 ——\n" + " 工件一动,那个坐标就失效(S06 的「实测残差」发现不了:它比的是\n" + " 「命令位置 vs 实际位置」,不是「规尖 vs 真实孔位」)。\n" + " 所以**不要**去查工具系/转接件/力阈值(那几个都是好的)。\n" + " 正确处置:把臂退开、确认工件的实际位置;能复位就复位工件,然后\n" + " 从 S05 重新拍照定位(重跑流程即会重新定位)。\n" + " 若要治根:换孔前复核工件没动(当前只有 S05 阶段有 drag 看门狗)。\n" + " 抬起并中止,不带着失效的孔位进 S08。" + ) + self._retract(q, Tee, dz_m=0.01) + return True + def _relieve_after_contact( self, q: np.ndarray, @@ -1879,6 +2189,29 @@ class GaugeAssembly(AssemblyPipeline): # ===================================================================== # S08 旋转装配循环(棘轮) # ===================================================================== + def _log_regrip(self, tag: str) -> None: + """把"这一轮夹紧后的开口"打出来(含相对夹住时的塌陷量)。 + + 为什么每轮都要打(2026-09-24 实测): + S08/S09 每轮都是"慢转 → 松爪 → 回转 → 夹紧",而 `close` 在仿真里 + 是"位置控制走到全合 0mm" —— **真机走到力上限就停,仿真会一路挤进规里**。 + 只报一句"通止规掉了(E1)"时,人分不出"真掉了"和"被挤小了"。 + 把开口与塌陷量打出来一眼就能分辨: + · 塌陷量逐轮变大、开口还在十几毫米 → 是**被挤**(规还在指间) + · 开口塌到接近 0(两指合到底) → 是**真掉了** + """ + if self.grip is None: + return + ap = self.grip.settle(settle_s=1.0) # 服务返回时动作还没做完,等它停 + if ap is None: + return + gp = self.grip.grip_aperture() + col = self.grip.collapse_mm() + detail = "" + if gp is not None and col is not None: + detail = f"(夹住时 {gp:.2f}mm,塌陷 {col:+.2f}mm)" + self.get_logger().info(f"{tag}:开口 {ap:.2f}mm{detail}") + def _step_screw_in(self) -> Event: hole = self._hole_name() self._state(f"S08_screw_in_{hole}") @@ -1895,6 +2228,20 @@ class GaugeAssembly(AssemblyPipeline): f"停止判据「切向 >+{self.cfg.screw_shear_delta:.0f} " f"且法向 >+{self.cfg.screw_normal_delta:.0f}」" ) + # 步长 vs 关节行程:**在这里算一次**,不要等第 3 轮贴限位再炸。 + # 2026-09-24 实测:180° 的步长配 ±175° 的关节 7,第 3 轮 ABORT, + # 日志是一长串"贴限位 → 让余量 → 还是贴限位",真因(配置)藏在最后。 + travel = ratchet_travel_ok( + self.cfg.screw_step_deg, self._wait_joint_limits(), RATCHET_LIMIT_MARGIN_DEG + ) + self.get_logger().info( + f"S08 行程核算:一步棘轮要 {travel.need_deg:.0f}°," + f"关节7 行程 {travel.travel_deg:.0f}°" + f"(最大可用步长 {travel.max_step_deg:.0f}°)—— {'放得下' if travel.ok else '放不下'}" + ) + if not travel.ok: + self.get_logger().error(f"S08 配置自检不通过(先改配置,别硬跑):{travel.why}") + return Event.ABORT for cycle in range(self.cfg.screw_max_cycles): q, Tee = self._wait_state(5.0) if q is None or Tee is None: @@ -1909,9 +2256,10 @@ class GaugeAssembly(AssemblyPipeline): # --- 四步原子动作,顺序固定(慢转 → 松爪 → 快回转 → 夹紧)--- # 慢转是**顺时针**:与 S01 的逆时针预绕相反,这样预绕行程就是 # 这一整段拧入的回转空间(S01 不预绕,转两圈就贴限位)。 - ev = self._rotate_joint_and_verify( + ev = self._ratchet_step( float(q[-1]) - self.cfg.screw_step_rad, tag=f"S08_slow_{cycle}", fsm_event=Event.SCREW_DONE, speed_deg_s=self.cfg.screw_speed_deg_s, + direction=-1, # 顺时针拧入(与 S01 的预绕相反) ) if ev is not Event.SCREW_DONE: return ev @@ -1924,15 +2272,17 @@ class GaugeAssembly(AssemblyPipeline): q, Tee = self._wait_state(3.0) if q is None: return Event.TIMEOUT - ev = self._rotate_joint_and_verify( + ev = self._ratchet_step( float(q[-1]) + self.cfg.screw_step_rad, tag=f"S08_back_{cycle}", fsm_event=Event.SCREW_DONE, speed_deg_s=self.cfg.screw_back_speed_deg_s, + direction=+1, # 回转:与慢转正好相反 ) if ev is not Event.SCREW_DONE: return ev if not self.grip.close(): self.get_logger().error("S08 夹紧失败 —— 下一轮慢转会打滑磨螺纹") return Event.ABORT + self._log_regrip(f"S08 第 {cycle + 1} 轮夹紧后") else: self.get_logger().error("S08 没有夹爪客户端,无法松爪/夹紧,中止") return Event.ABORT @@ -1961,9 +2311,17 @@ class GaugeAssembly(AssemblyPipeline): self._progress(f"{hole} 拧入到位({cycle + 1} 轮)") return Event.SCREW_STOP if self.grip is not None and self.grip.dropped(): + ap = self.grip.aperture() + gp = self.grip.grip_aperture() self.get_logger().error( "S08 通止规掉了(E1)—— 回 S01 流程:张开爪、提示人工放好," - "确认后继续(按看板:该孔记为完成,换下一个孔)" + "确认后继续(按看板:该孔记为完成,换下一个孔)\n" + f" 开口:夹住时 {gp if gp is None else f'{gp:.2f}mm'}" + f" → 现在 {ap if ap is None else f'{ap:.2f}mm'}" + f"(判据:塌陷 ≥ {GripperClient.DROP_COLLAPSE_MM:.1f}mm)\n" + " 分辨真掉还是被挤:开口塌到接近 0 = 两指合到底(真掉);\n" + " 开口还有十几毫米、只是比夹住时小了几毫米 = 被**挤**" + "(仿真位置控制的「全合」不知道「挡住就停」,见 GripperClient.dropped)" ) self._e1_pending = True return Event.GAUGE_DROPPED @@ -1994,9 +2352,10 @@ class GaugeAssembly(AssemblyPipeline): if q is None: return Event.TIMEOUT # 反向:慢转是逆时针(与 S08 相反),空手回转是顺时针 - ev = self._rotate_joint_and_verify( + ev = self._ratchet_step( float(q[-1]) + self.cfg.screw_step_rad, tag=f"S09_slow_{cycle}", fsm_event=Event.UNSCREW_DONE, speed_deg_s=self.cfg.screw_speed_deg_s, + direction=+1, # 逆时针拧出 ) if ev is not Event.UNSCREW_DONE: return ev @@ -2008,17 +2367,64 @@ class GaugeAssembly(AssemblyPipeline): q, Tee = self._wait_state(3.0) if q is None: return Event.TIMEOUT - ev = self._rotate_joint_and_verify( + ev = self._ratchet_step( float(q[-1]) - self.cfg.screw_step_rad, tag=f"S09_back_{cycle}", fsm_event=Event.UNSCREW_DONE, speed_deg_s=self.cfg.screw_back_speed_deg_s, + direction=-1, # 回转:与慢转相反 ) if ev is not Event.UNSCREW_DONE: return ev if not self.grip.close(): return Event.ABORT + self._log_regrip(f"S09 第 {cycle + 1} 轮夹紧后") + self._lift_clear_of_hole(hole) self._progress(f"{hole} 已拧出") return Event.UNSCREW_DONE + def _lift_clear_of_hole(self, hole: str) -> None: + """拧出后**先竖直把规提出孔**,之后才允许任何横向动作。 + + **为什么必须有这一步**(2026-09-24 仿真实测,两次栽在同一个地方): + 1. 仿真里**没有螺纹几何**:S09 的"拧出"只是让规在孔里转,规**仍然插在 + 孔里**(真机会沿螺纹退出来几个毫米,也没退出多少)。 + 2. 于是紧跟着的横向动作(S10 换孔 / S11 回 home)会把规从孔里**拽** + 出来 —— 实测抓取锁被拽断、规掉在台面上,而下游只表现为 + "下一孔 S07 下探 35mm 判不到接触"(工具上已经没规了), + 日志完全指不到真因。 + 3. 真机也怕这个动作:螺纹刚脱开时横向别住最容易啃伤螺纹。标准做法就是 + **先竖直退出来,再走 XY**。 + + 高度提到**跟踪高**(``_track_z()`` = 孔悬停高 + 50mm)而不是写死毫米数: + 跟踪高是这条流程里"工具已离开工件"的既有定义(``_ensure_clearance`` + 也用它),拿它当判据不用再维护第二套口径。实测:不提出时规尖比工件面 + **低 30mm**,而 S10 的斜线只往上抬了 29mm —— 差 1mm 就是"拽出孔"和 + "干净退出"的分界,所以必须是**先后有序**的两个动作,不能靠斜线一起走。 + + 失败只告警(不失败):这一刻孔里已经没有规要保护了,硬失败会把一次成功 + 的装配变成失败;后面的 S10/S11 仍会走到安全位。 + """ + try: + q, Tee = self._wait_state(3.0) + if q is None or Tee is None: + return + tz = self._track_z() + z = float(Tee[2, 3]) + if z >= tz - 0.008: + return + self.get_logger().info( + f"S09 {hole} 拧出后竖直提出:Z {z:.3f} → {tz:.3f}m" + "(先离开孔口,再做横向动作)" + ) + _, q2, _Tee2 = self._goto( + q, Tee, + np.array([float(Tee[0, 3]), float(Tee[1, 3]), tz]), + verticalize=True, tol_m=0.003, tol_tilt=self.vert_tol_rad * 2.0, + tag=f"S09_exit_{hole}", v=self.move_speed, max_hops=8, + hold_xy=True, settle_s=0.25, + ) + except Exception as exc: # noqa: BLE001 + self.get_logger().warn(f"S09 {hole} 提出孔口失败(继续走 S10/S11):{exc}") + # ===================================================================== # S10 换孔 / S11 复位 # ===================================================================== diff --git a/build/arm_application/build/lib/arm_application/gauge_config.py b/build/arm_application/build/lib/arm_application/gauge_config.py index 5bab7a3..5bc0bea 100644 --- a/build/arm_application/build/lib/arm_application/gauge_config.py +++ b/build/arm_application/build/lib/arm_application/gauge_config.py @@ -254,7 +254,9 @@ DEFAULTS: Dict[str, Any] = { "contact_hold_n": 5.0, "contact_safe_delta": 2000.0, # S08 - "screw_step_deg": 180.0, + # 步长必须满足 2×step + 2×余量 ≤ 关节7 行程(Rizon4/10 ±175° ⇒ step ≤ 167°): + # 180° 会必然贴限位(棘轮一个来回要 360° > 350°),实测第 3 轮 ABORT。 + "screw_step_deg": 120.0, "screw_speed_deg_s": 30.0, "screw_back_speed_deg_s": 120.0, "screw_max_cycles": 12, diff --git a/build/arm_application/build/lib/arm_application/gauge_fsm.py b/build/arm_application/build/lib/arm_application/gauge_fsm.py index 8705bdb..55ebdca 100644 --- a/build/arm_application/build/lib/arm_application/gauge_fsm.py +++ b/build/arm_application/build/lib/arm_application/gauge_fsm.py @@ -79,6 +79,10 @@ class Event(str, Enum): CONTACT_OK = "contact_ok" FORCE_OVER_LIMIT = "force_over_limit" # 力超安全上限 → 抬起 + #: S07 判到接触、但**下压深度远小于几何预期** ⇒ 规没进孔,顶在工件上表面。 + #: 单列一个事件是为了让结论与日志都是实话:复用 FORCE_OVER_LIMIT 会把这种 + #: 情况报成"力超安全上限",而它的力根本没超限 —— 又是一句误导。 + HOLE_LOST = "hole_lost" SCREW_DONE = "screw_done" SCREW_STOP = "screw_stop" # 力判据满足:切向力>阈值 且 法向力突增 @@ -158,6 +162,7 @@ TRANSITIONS: Dict[Tuple[State, Event], State] = { # --- S07 柔顺接触 --- (State.CONTACT, Event.CONTACT_OK): State.SCREW_IN, (State.CONTACT, Event.FORCE_OVER_LIMIT): State.ABORT, + (State.CONTACT, Event.HOLE_LOST): State.ABORT, # --- S08 旋转装配循环 --- (State.SCREW_IN, Event.SCREW_DONE): State.UNSCREW, (State.SCREW_IN, Event.SCREW_STOP): State.UNSCREW, @@ -406,6 +411,40 @@ def wrench_live(age_s: Optional[float]) -> bool: return age_s is not None and float(age_s) <= WRENCH_MAX_AGE_S +#: 判定"六个分量全为 0"用的容差 [N]/[Nm]。真机 FT 的噪声量级是 1e-2~1e-1, +#: 所以 1e-6 足够区分"真的是 0(数据没出来)"与"很小但活的读数"。 +WRENCH_ZERO_EPS: float = 1.0e-6 + + +def wrench_all_zero( + fx: float, + fy: float, + fz: float, + tx: float, + ty: float, + tz: float, + eps: float = WRENCH_ZERO_EPS, +) -> bool: + """六个分量**同时**为 0(容差 ``eps``)⇒ 这是"数据没出来"的指纹,不是"安静"。 + + 与 :func:`wrench_live` 的分工(两个都要有,缺一不可): + + * ``wrench_live`` 只看"够不够新",**故意不看数值** —— 静止时轴向力本来就接近 0, + 拿数值判活会把"安静的传感器"误判成掉线(2026-09-24 触觉上踩过)。 + * 但一个**带着负载**的腕部 FT 不可能六个分量**同时**恰好为 0:重力、装配预紧、 + 传感器零漂至少让某个分量不为 0。所以"全零"是另一种失效 —— **数据源没出数** + (话题名对、但内容是空的;或 RDK 侧没启用该传感)。 + + 2026-10-08 真机实测:应用在用的 ``//ft_sensor_wrench`` 就是恒 (0,0,0), + 于是"``abs(fz−基线)>2.5N`` 判接触"的兜底**永远触发不了** —— 而日志里一切正常 + (话题收得到、回调在跑、``wrench_live`` 报"活"),属于最危险的静默失效。 + 改用 ``//external_wrench_in_tcp`` 后有数(≈负载 54N)即可恢复兜底。 + + 所以:``wrench_live`` 通过 **且** ``wrench_all_zero`` 为真 ⇒ 判为"数据源是空的"。 + """ + return all(abs(float(v)) <= eps for v in (fx, fy, fz, tx, ty, tz)) + + #: S07 单步下压给 ``_goto`` 的到位容差 = 步长的这个比例。 #: **必须 < 1,而且只能小不能大**:``_goto`` 的语义是"已经落在容差里就直接返回、 #: 一点都不动"。容差 ≥ 步长时,每一次"往下走 0.5mm"的请求都被判成"已在容差内" @@ -513,6 +552,209 @@ def tool_clearance_m( return tip_z - float(surface_z_m) +def hover_z_for_tool_clearance( + surface_z_m: float, + tool_tip_below_flange_m: float, + clearance_m: float, +) -> float: + """让工具尖端停在工件面上方 ``clearance_m`` 所需的**法兰**高度 [m]。 + + 就是 ``tool_clearance_m`` 的逆运算 —— 写成一个函数是为了让"该用多高"这个 + 结论只有一个来源(下面 ``hover_z_guard`` 与调用方都用它,不各推一遍)。 + """ + return float(surface_z_m) + float(tool_tip_below_flange_m) + float(clearance_m) + + +def hover_z_guard( + hover_z_m: float, + surface_z_m: float, + tool_tip_below_flange_m: float, + want_clearance_m: float, +) -> Tuple[float, str]: + """二阶段悬停高度的自检 → ``(该用的悬停高度, 说明; 不用改时说明是空串)``。 + + **为什么必须有这条**(2026-09-24 实测栽在这上面): + + 悬停高度是**按相机**定的(腕部相机要离工件面 ~0.17m 才看得清孔), + 而工具(夹爪 + 通止规)可能比相机长得多 —— 仿真里实测 + ``tool_tip_below_flange_m=0.245``,而悬停算的是 + ``0.412 + 0.17 + 0.05 = 0.632`` ⇒ 工具尖端在工件上表面**下面 25mm**。 + + 后果不在 S07(S07 有自己的几何自检),而在**更早的 S05**: + "悬停"这一步本身就把工具捅进工件里了,于是 S05 的横向对准等于 + 拿规尖去拨工件 —— 实测把工件从 x=0.520 拖到 0.4284(**92mm**)。 + 而真值孔位是按工件的**实测**位姿算的(``sim_live_pose``,这是对的), + 工件一走,孔位就跟着工具走 ⇒ 残差恒定在 13mm、迭代 9 次永不收敛 + (日志:``[fine 3..8] 残差=13.25/13.19/…/11.79mm``)。 + 现象看起来像"手眼标定坏了 / 检测不认孔"。 + + 真机同参数同结果:这不是仿真专有,只要"悬停按相机定、工具比相机长"就会这样。 + + 判据取"明显低于目标间隙"而不是"一毫米都不许低":配置的悬停与实测的 + 工件面 z 都有几毫米的不确定度,拿 0 当界会把正常配置判成错的。 + """ + clear_m = tool_clearance_m(hover_z_m, tool_tip_below_flange_m, surface_z_m) + if clear_m >= float(want_clearance_m) - 0.001: + return float(hover_z_m), "" + need_z = hover_z_for_tool_clearance(surface_z_m, tool_tip_below_flange_m, want_clearance_m) + why = ( + f"悬停高度会让工具尖端钻进工件:法兰 {float(hover_z_m):.4f} − 工具长 " + f"{float(tool_tip_below_flange_m) * 1000:.1f}mm = 尖端 " + f"{float(hover_z_m) - float(tool_tip_below_flange_m):.4f},工件上表面 " + f"{float(surface_z_m):.4f} → 尖端在面{'下' if clear_m < 0 else '上仅'} " + f"{abs(clear_m) * 1000:.1f}mm(要求 ≥ {float(want_clearance_m) * 1000:.1f}mm)。\n" + f" 悬停高度通常是按**相机**视距定的,而工具比相机长 —— 两者冲突时必须" + f"先保证不碰工件。\n" + f" 已按几何抬到 {need_z:.4f}(= {float(surface_z_m):.3f} 上表面 + " + f"{float(tool_tip_below_flange_m) * 1000:.0f}mm 工具 + " + f"{float(want_clearance_m) * 1000:.1f}mm 间隙)。\n" + f" 要固定这个值:改 site.yaml 的 robots[].servo.hole_hover_z_m = " + f"{need_z:.3f}(以及同组件的 ee_z_m ≥ 它 +0.05)。" + ) + return need_z, why + + +def resolve_hover_z( + hover_z_m: float, + surface_z_m: float, + tool_tip_below_flange_m: float, + want_clearance_m: float, + user_set: bool, +) -> Tuple[float, str]: + """返回 ``(要用的法兰悬停高, 拒绝原因)``。 + + 启动参数写了高度:不安全就拒绝,原因非空,高度原样返回,调用方不许改成别的数。 + 没写(用 site):沿用 :func:`hover_z_guard` 的几何抬高,拒绝原因留空。 + """ + fixed, why = hover_z_guard( + hover_z_m, surface_z_m, tool_tip_below_flange_m, want_clearance_m + ) + if not why: + return float(hover_z_m), "" + if not user_set: + return float(fixed), "" + clear_m = tool_clearance_m(hover_z_m, tool_tip_below_flange_m, surface_z_m) + return float(hover_z_m), ( + f"悬停高度会让工具尖端进入工件:法兰 {float(hover_z_m):.4f} − 工具长 " + f"{float(tool_tip_below_flange_m) * 1000:.1f}mm,工件面 {float(surface_z_m):.4f}," + f"间隙 {clear_m * 1000:.1f}mm,要求 ≥ {float(want_clearance_m) * 1000:.1f}mm。" + "这个值是启动参数指定的,不会改成别的高度。" + ) + + +#: S05 精对位时判"工件被工具推走"的两级阈值 [m]。 +# +# 为什么需要这条判据(2026-09-24 又栽了一次,见下面 drag_verdict 的说明): +# S05 的对准是"看着孔走"的闭环,而孔位是**工件上**的。工具一旦碰到工件, +# 闭环追的就不再是孔,而是"自己推着走的工件" —— 残差恒定(本轮 11mm)、 +# 迭代用满,日志报的是"检查手眼/相机安装",与真因(工具比相机长、 +# 悬停时已经插进工件)差着十万八千里。 +# 取 3mm:工件是刚体,两拍之间它整体挪动 >3mm 只可能是被推/被撞(正常加工 +# 过程里它一动不动)。同一对孔的两拍测量噪声在 0.2mm 量级,离阈值很远。 +SNAP_DRAG_TOL_M: float = 0.003 +#: 单拍就这么大 ⇒ 不必等第二拍确认(刚体不会自己"挪回去")。 +SNAP_DRAG_HARD_M: float = 0.006 + + +#: "已经到位"的容差:避免 ±1e-9 的浮点噪声变成"再转一整圈"。 +_RATCHET_FULL_TURN_EPS: float = 1e-9 + + +def ratchet_delta_rad(target_rad: float, q_now_rad: float, direction: int = 0) -> float: + """"目标角 − 当前角",折成**一次**能转到的增量 [rad]。 + + **为什么要有这个函数**(2026-09-24 实测:棘轮把整条流程 ABORT 在 S09 第一步): + + S08/S09 给棘轮的是**关节 7 的目标角(绝对值)**(``q[-1] ± step``), + 而棘轮此前把它当**增量**用。于是"关节在 +158.9°、目标 +338.9°"被算成 + "要转 338.9°"(实际增量只有 180°)⇒ 误判行程不够 ⇒ 让余量那一步算到 + 限位外面(``158.9 − 338.9 = −180°``,比 −175° 还低)⇒ 报 + "期望 −338.9°、实测 +26.0°,偏差过大" ⇒ ABORT。现场什么坏事都没发生。 + + 差值必须折一圈:目标常常**故意**超出限位(这正是要"让余量"的原因), + ``+338.9°`` 与 ``−21.1°`` 是同一个关节位置。 + + **为什么还要 direction**(2026-09-24 又一次实测:S08 第 3 轮 ABORT): + + 不给方向时这里取"最短的那条路",而名义步长**正好是 180°** 时, + 哪条路更短取决于 0.1° 级的读数差:调用方按自己读到的 ``q`` 算出目标 + ``−18.0°``,棘轮再用**稍晚一点**读到的 ``q=+162.1°`` 去算差值, + ``−180.1°`` 折一圈就成了 ``+179.9°`` —— 方向**翻了个个儿**。 + 于是棘轮朝螺纹的反方向走,接着贴限位、让余量、重试,净位移 0 ⇒ ABORT。 + + 棘轮的转向是**工艺意图**(S08 顺时针拧入、S09 逆时针拧出),不能交给 + "谁更短"这种数值巧合决定,所以由调用方明确给出 ``direction``。 + + 注:``direction=0``(默认)保留旧的"最短路径"语义,给"目标本来就明确 + 在某一侧"的调用方用;棘轮的四个原子步一律显式给方向。 + + :param target_rad: 目标角(绝对值,可以是限位外的角度)。 + :param q_now_rad: 当前关节角。 + :param direction: 想要的转向:``+1`` 正转、``-1`` 反转、``0`` 取最短路径。 + :returns: 增量 [rad]。``direction=0`` 时落在 ``(−π, π]``;给了方向时落在 + ``[0, 2π)``(正转)或 ``(−2π, 0]``(反转)——**一定**沿指定方向, + 且是能落到目标角的最小那一步。**同一个目标、同一个当前位置**只会有一个 + 增量 —— 棘轮的"让余量"与"重试"都按它算,两次不会互相矛盾。 + """ + base = float(target_rad) - float(q_now_rad) + two_pi = 2.0 * math.pi + if direction == 0: + return math.remainder(base, two_pi) + # 先折到 [0, 2π),再按想要的转向取那一侧(与目标角差正好一整圈,是同一个位置)。 + pos = math.fmod(base, two_pi) + if pos < 0.0: + pos += two_pi + if pos >= two_pi - _RATCHET_FULL_TURN_EPS: + pos = 0.0 # 已经(几乎)在目标上:不要为了凑方向白转一整圈 + if direction > 0: + return pos + return pos - two_pi if pos > 0.0 else 0.0 + + + +def drag_verdict( + mid_now: Tuple[float, float], + mid_prev: Optional[Tuple[float, float]], + mid_prev2: Optional[Tuple[float, float]] = None, + *, + tol_m: float = SNAP_DRAG_TOL_M, + hard_m: float = SNAP_DRAG_HARD_M, +) -> Tuple[bool, float]: + """两孔中点是否在两拍之间"整体挪动" → ``(是否判定为被推走, 本拍位移 m)``。 + + **为什么看"中点"而不是看目标孔**:目标孔是**追**的对象,工具一动它就该动 + (对准本意如此),看它分不出"正常对准"和"推着工件走"。而两孔**中点**在 + 对准过程中不该动 —— 它只有工件整体平移时才会动。所以中点位移干净地对应 + "工件被搬动了"。 + + **为什么看"两孔中点"而不是单孔**:单孔在相机里会因分辨率/遮挡抖动,且 + 目标孔本来就在被逼近;中点是两者的平均,噪声更小、语义更明确。 + + :param mid_now: 本拍两孔中点 (x, y)[m](基座系)。 + :param mid_prev: 上一拍中点;``None`` = 还没有上一拍(第一拍不判)。 + :param mid_prev2: 上上拍中点。用来确认"位移是持续的"(单拍可能是误检)。 + :returns: ``(判定, 本拍位移 m)``。 + """ + if mid_prev is None: + return False, 0.0 + dx = float(mid_now[0]) - float(mid_prev[0]) + dy = float(mid_now[1]) - float(mid_prev[1]) + d1 = math.hypot(dx, dy) + if d1 >= float(hard_m): + return True, d1 + if d1 < float(tol_m) or mid_prev2 is None: + return False, d1 + px = float(mid_prev[0]) - float(mid_prev2[0]) + py = float(mid_prev[1]) - float(mid_prev2[1]) + d2 = math.hypot(px, py) + # 第二拍确认:上一拍也挪了(≥ 阈值的一半),且方向一致(点积 > 0)。 + # 为什么允许方向只"大致一致":工件被推着走时前后两拍的推动量本来就不同 + # (工件一让开,工具就少推一点),拿夹角严格相等会漏判。 + if d2 >= float(tol_m) * 0.5 and (dx * px + dy * py) > 0.0: + return True, d1 + return False, d1 + + def descend_needed_m( flange_z_m: float, tool_tip_below_flange_m: float, @@ -555,6 +797,58 @@ def descend_budget_m(needed_m: float) -> float: return max(float(needed_m) * DESCEND_BUDGET_FRAC, DESCEND_BUDGET_FLOOR_M) +#: ``hole_entry_verdict`` 的结论。 +ENTRY_OK = "ok" # 接触深度与几何预期相符 ⇒ 规是从孔里下去的、台肩落面 +ENTRY_HIGH = "high" # 早早就接触 ⇒ 尖端顶在工件**上表面**上,根本没进孔 + +#: 判"没进孔"的下压深度比例阈值。 +#: 实测两个锚点(2026-09-28,仿真): +#: · 正常入孔:下压 28.6mm / 需要 31.9mm ⇒ 0.90 +#: · 顶在平面上:下压 0.90mm / 需要 31.9mm ⇒ 0.03 +#: 两者差着一个台肩高度(30mm),取 0.5 时两侧余量都很大(正常那侧要掉到 +#: 一半才会误判)。**不要**为了"更灵敏"把它往 0.9 推 —— 台肩倒角没完全落面、 +#: 板厚公差都会让正常值在 0.85~0.95 之间晃。 +HOLE_ENTRY_MIN_RATIO: float = 0.5 + + +def hole_entry_verdict( + descended_m: float, + needed_m: float, + *, + min_ratio: float = HOLE_ENTRY_MIN_RATIO, +) -> str: + """S07 判到接触的那一刻:规是**进了孔**、还是**顶在工件上表面**。 + + 为什么需要它(2026-09-28 实测,同一命令三跑里坏一跑:DONE / ABORT / DONE): + 工件在 S08/S09/S10 阶段会被工具推走(仿真里实测被推 20~52mm)。而 k2 的 + 孔位是 **S05 一次性定下**的(``_step_hover_k`` 取 ``_hole_xy``),工件一动 + 它就失效。于是规落在孔**旁边的平面**上,只下压「悬停间隙」那么点就判到接触。 + + 不拦的代价,实测完整发生过一次: + S08 干转 5 轮(切向增量 0.0、法向增量 ±0.0,**一点没进给**)→ 第 6 轮憋住 → + 报出来的是「转轴偏差 7.6° 超过阈值 —— 关节7 轴与工具 Z 不共线, + 先确认工具系是否垂直向下、有没有装转接件」。 + + **那句话会把所有人引到错误方向**:真因既不是工具系也不是转接件,是孔位失效。 + 而且为这句误导,白烧了 5 轮无效拧入(≈30 秒)和一次憋劲(有把规顶掉的风险)。 + + 为什么比 ``needed_m`` 而不是比"尖端离面高度":正常入孔时接触发生在**台肩落面** + 那一刻 ≈ ``needed_m``;顶在平面上时接触发生在**尖端刚碰到面**那一刻,而台肩还在 + 尖端上方 30mm。两者差着一个台肩高度,所以用比例判最稳(见上面两个实测锚点)。 + + 纯函数(R5.1):判错两个方向都贵 —— 把正常的判成"没进孔"会白扔一整个孔; + 把"没进孔"判成正常,就是上面那 30 秒 + 一次误导。 + + ``needed_m <= 0`` 时**不判**(几何本身已经错了,上面那条自检会报), + 返回 ``ENTRY_OK`` 不在这里抢着报第二个错。 + """ + if needed_m <= 0.0: + return ENTRY_OK + if float(descended_m) < float(needed_m) * float(min_ratio): + return ENTRY_HIGH + return ENTRY_OK + + def screw_stop(normal_delta: float, shear_max: float, normal_th: float, shear_th: float) -> bool: """S08:旋转装配的停止判据 —— **切向力>阈值 且 法向力突增**。 @@ -584,6 +878,115 @@ def ratchet_cycles(total_deg: float, step_deg: float) -> int: return int(math.ceil(total_deg / step_deg)) +@dataclass(frozen=True) +class RatchetTravel: + """棘轮步长与关节行程的**可用性核算**(S08 开头自检,别等到第 3 轮才炸)。""" + + ok: bool + step_deg: float # 配置的一步转角 + travel_deg: float # 关节行程(上限 − 下限) + need_deg: float # 一步棘轮真正需要的行程 + max_step_deg: float # 行程允许的最大步长 + why: str # 不 ok 时给人看的说明(ok 时为空串) + + +def ratchet_travel_ok( + step_deg: float, limits_rad: Optional[Tuple[float, float]], margin_deg: float +) -> RatchetTravel: + """一步棘轮 ``step_deg`` 放得进关节行程吗? + + **为什么需要**:2026-09-24 实测,``screw_step_deg=180`` 配 Rizon4 的 + 关节 7(±175°,行程 350°)在第 3 轮 ABORT —— 慢转那一步要转 180°、 + 回转那一步还要 180°,两次加起来 360° > 350°,关节**必然**有一头贴限位; + 更糟的是"让余量"也腾不出地方(要腾就得往反向再让一整步,还是 360°)。 + 日志里那一长串"贴限位 → 让余量 → 还是贴限位"就是这么来的。 + + 判据取 ``2×step + 2×margin ≤ 行程``: + - 2×step:棘轮一个来回(慢转 + 回转)要的行程; + - 2×margin:两头都要留余量 —— 贴死限位再让余量时**一点空间都没有**, + 而实测每轮回转还会比指令少走 4~5°(速度/加减速限制), + 这点亏欠要靠余量吃,否则 7~8 轮后累计偏出限位、再也转不回来。 + + :param limits_rad: ``(lower, upper)`` [rad];``None`` = 拿不到限位,放行 + (返回 ``ok=True``,理由写清楚:真机靠驱动器报 JOINT_LIMIT 兜底)。 + """ + need = 2.0 * float(step_deg) + 2.0 * float(margin_deg) + if limits_rad is None: + return RatchetTravel( + ok=True, step_deg=float(step_deg), travel_deg=float("inf"), + need_deg=need, max_step_deg=float("inf"), + why="", + ) + travel = math.degrees(float(limits_rad[1]) - float(limits_rad[0])) + max_step = 0.5 * (travel - 2.0 * float(margin_deg)) + if need <= travel: + return RatchetTravel( + ok=True, step_deg=float(step_deg), travel_deg=travel, + need_deg=need, max_step_deg=max_step, why="", + ) + # 给个能直接照着改的步长:往整十度取整(现场习惯填 120/150/180), + # 但不许把步长压到 30° 以下 —— 那样拧进/拧出的轮数会多到失控。 + suggest = max(30.0, math.floor(max_step / 10.0) * 10.0) + why = ( + f"棘轮一步 {step_deg:.0f}° 放不进关节 7 的行程:一步棘轮要 " + f"2×{step_deg:.0f}° + 2×{margin_deg:.0f}°(余量) = {need:.0f}°," + f"而行程只有 {travel:.0f}°(上限 {math.degrees(limits_rad[1]):.0f}° − " + f"下限 {math.degrees(limits_rad[0]):.0f}°)。\n" + f" 改法:site.yaml 的 gauge_assembly.screw_step_deg 改到 " + f"{max_step:.0f}° 以内(例如 {suggest:.0f}°),并保证 " + f"screw_max_cycles × screw_step_deg 仍是 **360° 的整数倍**(" + f"累计必须转整数圈,否则规停在螺纹中间、S09 也就少拧出几分之一圈)。" + ) + return RatchetTravel( + ok=False, step_deg=float(step_deg), travel_deg=travel, + need_deg=need, max_step_deg=max_step, why=why, + ) + + +#: ``rotation_verdict`` 的结论。 +ROT_OK = "ok" +ROT_LIMIT = "limit" # 转了一部分、方向对、但没走完 ⇒ 最可能是贴到关节限位 +ROT_AXIS = "axis" # 转轴与工具 Z 不共线 ⇒ 以「度」为单位的一切动作都不成立 +ROT_SHORT = "short" # 其它偏差(方向不对/过冲)⇒ 真有问题,该停 + + +def rotation_verdict( + delta_deg: float, + got_deg: float, + mis_deg: float, + tol_deg: float, +) -> str: + """绕工具 Z 转 ``delta_deg``、实测转 ``got_deg`` 的验收判据。 + + **纯函数**:这条判据 2026-09-24 把整条 S09 判死过一次 + ("期望 +180.0°、实测 +16.4°,偏差过大" → ABORT),而真因只是 + **关节7 的行程被前面的棘轮回转顶到了上限**(±175°,而棘轮一步就要 180°)。 + 判错两个方向都贵: + * 把"贴限位"判成"short" ⇒ 白扔一整轮(还可能把规撞歪); + * 把"真有问题"判成"limit" ⇒ 该停的没停,继续拧。 + + 还有一条**曾经漏判**的:只比绝对值时,"让它 +180、它 -170"会算成 + 10° 误差、落在 10% 容差里 ⇒ 判成功,而实际上一个孔都没拧。所以方向必须比。 + 所以它必须能脱离节点被钉住。 + """ + if abs(got_deg) < 3.0 and abs(delta_deg) > 10.0: + return ROT_LIMIT # 几乎没动:与下面的"只走了一部分"同因不同余量 + if mis_deg > tol_deg: + return ROT_AXIS + if abs(got_deg) >= 3.0 and abs(delta_deg) >= 3.0 and got_deg * delta_deg < 0: + # 方向反了。这条以前**漏判**:老判据只比绝对值 + # (``abs(abs(got) - abs(delta))``),所以"让它 +180、它 -170"会算 10° 误差 + # 落在 10% 容差里 → 判成功,而实际上一个孔都没拧。 + return ROT_SHORT + slack = max(tol_deg, 0.1 * abs(delta_deg)) + short = abs(delta_deg) - abs(got_deg) + if short > slack: + return ROT_LIMIT # 方向对、只是没走完 ⇒ 被硬止点截住 + if short < -slack: + return ROT_SHORT # 过冲:转多了,同样不该当成到位 + return ROT_OK + + def is_joint_limit_error(text: str) -> bool: """S01:把驱动/规划报的字符串认成"撞到关节极限"。 @@ -646,6 +1049,7 @@ EVENT_DOC: Dict[Event, str] = { Event.ALIGN_OUT: "对位超差", Event.CONTACT_OK: "已接触工件面", Event.FORCE_OVER_LIMIT: "力超安全上限", + Event.HOLE_LOST: "孔位失效(规没进孔)", Event.SCREW_DONE: "达到目标圈数", Event.SCREW_STOP: "力判据满足(咬住螺纹)", Event.GAUGE_DROPPED: "通止规掉了", diff --git a/build/arm_application/build/lib/arm_application/gauge_kin.py b/build/arm_application/build/lib/arm_application/gauge_kin.py index d7b7855..b004510 100644 --- a/build/arm_application/build/lib/arm_application/gauge_kin.py +++ b/build/arm_application/build/lib/arm_application/gauge_kin.py @@ -26,6 +26,9 @@ import numpy as np #: 直接拒绝整条轨迹 —— 那不是我们要的"极限角",是报错。 DEFAULT_LIMIT_MARGIN_DEG = 3.0 +#: 厂家 A7。``Robot::SendJointPosition`` 的关节向量按 A1..A7 排列,A7 是最后一轴。 +A7_INDEX = 6 + _JOINT_RE = re.compile(r" Optional[np.ndarray]: + """只把 A7 收到软件限位内侧。前六轴原样拷回,不许在这里改。 + + 厂家接口是 ``Robot::SendJointPosition``(模式 ``NRT_JOINT_POSITION``)。 + 向量按 A1..A7 排,A7 是下标 ``A7_INDEX``。限位是 ``RobotInfo::q_min/q_max`` + 的那一对,真机上与 URDF ``joint7`` 的 lower/upper 是同一组数。 + + ``direction`` 与 ``prewind`` 相同:``+1`` 关节角增大 = 逆时针,目标取上限; + ``-1`` 关节角减小 = 顺时针,目标取下限。现场若发现正负反了,改 + ``site.yaml`` 的 ``extreme_direction``,不要改这里的符号。 + + 没有限位、方向不是 ±1、或者余量把上下限挤没了,返回 None。 + 调用方必须停,不许猜一个角度发出去。 + """ + if direction not in (-1, 1): + raise ValueError(f"方向只能是 +1 / -1,收到 {direction}") + arr = np.asarray(q, dtype=float).reshape(-1) + if arr.size != 7: + raise ValueError(f"A7 目标要 7 个关节角,收到 {arr.size}") + if limits is None: + return None + lo = float(limits[0]) + up = float(limits[1]) + margin = math.radians(float(margin_deg)) + if not math.isfinite(lo) or not math.isfinite(up) or up - lo <= 2.0 * margin: + return None + target = (up - margin) if direction > 0 else (lo + margin) + out = arr.copy() + out[A7_INDEX] = target + return out + + def rotation_about_axis_deg(R_before: np.ndarray, R_after: np.ndarray, axis: np.ndarray) -> float: """从两个旋转矩阵算出"绕 ``axis`` 转了多少度"(带符号)。 diff --git a/build/arm_application/build/lib/arm_application/goto_ee_plane.py b/build/arm_application/build/lib/arm_application/goto_ee_plane.py index 8dd0e3d..c2e1b8c 100644 --- a/build/arm_application/build/lib/arm_application/goto_ee_plane.py +++ b/build/arm_application/build/lib/arm_application/goto_ee_plane.py @@ -39,6 +39,8 @@ from arm_application.site_io import ( joint_prefix_default, ) +from arm_application.ros_node import TolerantNode + def _load_ee_cfg() -> dict: @@ -78,7 +80,7 @@ def _pt(q: np.ndarray, qdot: np.ndarray, t_sec: float) -> JointTrajectoryPoint: return pt -class GotoEePlane(Node): +class GotoEePlane(TolerantNode): def __init__(self, cfg: dict) -> None: super().__init__("goto_ee_plane") self.cfg = cfg diff --git a/build/arm_application/build/lib/arm_application/handeye_calibrate.py b/build/arm_application/build/lib/arm_application/handeye_calibrate.py index 356dcea..e7e827d 100644 --- a/build/arm_application/build/lib/arm_application/handeye_calibrate.py +++ b/build/arm_application/build/lib/arm_application/handeye_calibrate.py @@ -33,8 +33,11 @@ from arm_application.handeye_lib import ( BoardConfig, CameraIntrinsics, ChessboardStabilizer, + T_from_flexiv_tcp, calibrate_hand_eye, + cam_to_flange_via_tool, detect_chessboard, + format_matrix_yaml, format_transform_yaml, is_pose_filled, pose_to_Rt, @@ -50,6 +53,8 @@ from arm_application.site_io import joint_prefix_default from arm_msgs.action import FollowJointTrajectory from arm_msgs.srv import GetArmState +from arm_application.ros_node import TolerantNode + DEFAULT_JOINTS = [ 'joint1', 'joint2', 'joint3', 'joint4', 'joint5', 'joint6', 'joint7', ] @@ -79,7 +84,7 @@ def _camera_info_to_intrinsics(msg: CameraInfo) -> CameraIntrinsics: return CameraIntrinsics(K=K, dist=dist) -class HandeyeCalibrate(Node): +class HandeyeCalibrate(TolerantNode): def __init__(self) -> None: super().__init__('handeye_calibrate') @@ -111,11 +116,10 @@ class HandeyeCalibrate(Node): # 棋盘(可自定义) # 默认值必须与 site.yaml 的 handeye.board_* 及结果文件头里的实际板子一致。 - # 真实使用的板:内角点 8x11,方格 15mm(见 handeye/results/*.yaml 的头部注释)。 - # 这里原先写的是 9x6 / 0.025(另一张早期的板),一旦 site.yaml 漏配就会被 - # 静默启用 —— 症状是"标定能顺利跑完,但结果明显不对",极难排查。 - self.declare_parameter('board_cols', 8) # 内角点 - self.declare_parameter('board_rows', 11) + # 真实使用的板:A5 内角点 11x8,方格 15mm(site.yaml handeye.boards.eye_in_hand)。 + # 这里原先写的是 9x6 / 0.025,后来是 8x11;漏配就会静默用错尺寸。 + self.declare_parameter('board_cols', 11) # 内角点 + self.declare_parameter('board_rows', 8) self.declare_parameter('square_size_m', 0.015) self.declare_parameter('stable_window', 8) @@ -136,6 +140,11 @@ class HandeyeCalibrate(Node): self.declare_parameter('output_dir', '/home/cc/ros2/handeye/tmp') self.declare_parameter('result_file', '') self.declare_parameter('cleanup_images', True) + # 眼在手上:AX=XB 的 gripper 用 Studio 工具 TCP,再折成 cam→法兰写 T_4x4。 + # 空 = 旧口径(ee_pose 当 gripper,T_4x4 原样写出)。配了就必须带 TCP。 + self.declare_parameter('gripper_tool', '') + self.declare_parameter('gripper_tcp_xyz', [0.0, 0.0, 0.0]) + self.declare_parameter('gripper_tcp_qwxyz', [1.0, 0.0, 0.0, 0.0]) prefix = str(self.get_parameter('joint_prefix').value or '') base = list( @@ -150,6 +159,21 @@ class HandeyeCalibrate(Node): self.start_index = max(0, int(self.get_parameter('start_index').value)) self.min_poses = int(self.get_parameter('min_poses').value) self.cleanup_images = bool(self.get_parameter('cleanup_images').value) + self.gripper_tool = str(self.get_parameter('gripper_tool').value or '').strip() + tcp_xyz = list( + self.get_parameter('gripper_tcp_xyz').get_parameter_value().double_array_value + or [0.0, 0.0, 0.0] + ) + tcp_q = list( + self.get_parameter('gripper_tcp_qwxyz').get_parameter_value().double_array_value + or [1.0, 0.0, 0.0, 0.0] + ) + self.T_flange_to_tool = T_from_flexiv_tcp(tcp_xyz[:3], tcp_q[:4]) + if self.gripper_tool and float(np.linalg.norm(self.T_flange_to_tool[:3, 3])) < 1e-4: + raise RuntimeError( + f'gripper_tool={self.gripper_tool!r} 但 gripper_tcp_xyz 几乎是零:' + '等于没把 Studio TCP 传进来。不许按法兰口径假装在用工具系。' + ) self.camera_source = str(self.get_parameter('camera_source').value).strip().lower() self.camera_serial = str(self.get_parameter('camera_serial').value or '').strip() @@ -263,10 +287,12 @@ class HandeyeCalibrate(Node): self.images_dir.mkdir(parents=True, exist_ok=True) eye_to_hand = self.mode == 'eye_to_hand' + grip = self.gripper_tool or '(ee_pose 原样,无工具折算)' self.get_logger().info( f'手眼标定 [{self.mode}] camera_source={self.camera_source}:' f'{len(poses)} 个位姿,棋盘={self.board.cols}x{self.board.rows} ' - f'方格={self.board.square_size}m,v={self.velocity_scale}' + f'方格={self.board.square_size}m,v={self.velocity_scale} ' + f'gripper_tool={grip}' ) self.get_logger().warn('清理工作空间;确认急停就绪。Ctrl+C 可中止。') @@ -366,12 +392,58 @@ class HandeyeCalibrate(Node): self.get_logger().info(f'用 {len(Rg)} 个视角求解手眼标定...') R, t = calibrate_hand_eye(Rg, tg, Rc, tc, eye_to_hand=eye_to_hand) - name = ( - 'T_cam_to_base (eye_to_hand)' - if eye_to_hand - else 'T_cam_to_gripper (eye_in_hand)' - ) - yaml_txt = format_transform_yaml(R, t, name) + extra = '' + if eye_to_hand: + name = 'T_cam_to_base (eye_to_hand)' + yaml_txt = format_transform_yaml(R, t, name) + if self.gripper_tool: + extra = ( + f'gripper_tool: {self.gripper_tool}\n' + + format_matrix_yaml(self.T_flange_to_tool, 'T_flange_to_tool') + ) + self.get_logger().info( + f'gripper={self.gripper_tool}:AX=XB 的手是 TCP;' + f'T_4x4 是 cam→基座,不折 t={t.reshape(3)*1000} mm' + ) + elif self.gripper_tool: + T_cam_tool = np.eye(4) + T_cam_tool[:3, :3] = R + T_cam_tool[:3, 3] = t.reshape(3) + T_cam_flange = cam_to_flange_via_tool(T_cam_tool, self.T_flange_to_tool) + delta = float(np.linalg.norm(T_cam_flange[:3, 3] - T_cam_tool[:3, 3])) + tool_len = float(np.linalg.norm(self.T_flange_to_tool[:3, 3])) + if tool_len > 0.05 and delta < 1e-4: + self.get_logger().error( + 'T_cam_to_flange 与 T_cam_to_tool 平移几乎相同,' + '折算没生效。结果作废。' + ) + return 11 + # 腕部相机在法兰前方(法兰 +Z)。乘反了 Z 会落到 −200 mm 一带。 + if ( + self.T_flange_to_tool[2, 3] > 0.05 + and float(T_cam_flange[2, 3]) < 0.0 + ): + self.get_logger().error( + f'T_cam_to_flange tz={float(T_cam_flange[2, 3])*1000:.1f} mm ' + '在法兰后方,乘序反了。结果作废。' + ) + return 12 + R, t = T_cam_flange[:3, :3], T_cam_flange[:3, 3].reshape(3, 1) + name = 'T_cam_to_flange (eye_in_hand,由工具 TCP 折算)' + yaml_txt = format_transform_yaml(R, t, name) + extra = ( + f'gripper_tool: {self.gripper_tool}\n' + + format_matrix_yaml(self.T_flange_to_tool, 'T_flange_to_tool') + + format_matrix_yaml(T_cam_tool, 'T_cam_to_tool') + ) + self.get_logger().info( + f'gripper={self.gripper_tool}:' + f'T_cam_to_tool t={T_cam_tool[:3, 3]*1000} mm → ' + f'T_cam_to_flange t={T_cam_flange[:3, 3]*1000} mm' + ) + else: + name = 'T_cam_to_gripper (eye_in_hand)' + yaml_txt = format_transform_yaml(R, t, name) header = ( f'# 手眼标定结果\n' f'# mode: {self.mode}\n' @@ -381,8 +453,20 @@ class HandeyeCalibrate(Node): f'# board: {self.board.cols}x{self.board.rows} ' f'square_m={self.board.square_size}\n' ) + if self.gripper_tool and eye_to_hand: + header += ( + f'# gripper_tool: {self.gripper_tool}\n' + f'# T_4x4 = cam→基座(AX=XB 的手是 TCP,不折到法兰)\n' + f'# 旧结果备份在 results/backup/\n' + ) + elif self.gripper_tool: + header += ( + f'# gripper_tool: {self.gripper_tool}\n' + f'# T_4x4 = cam→法兰(AX=XB 在 TCP 上解,再左乘 T_flange_to_tool)\n' + f'# T_cam_to_tool 是原始求解;旧的法兰/tool1 备份在 results/backup/\n' + ) self.result_file.parent.mkdir(parents=True, exist_ok=True) - self.result_file.write_text(header + yaml_txt, encoding='utf-8') + self.result_file.write_text(header + extra + yaml_txt, encoding='utf-8') (self.output_dir / 'captures.json').write_text( json.dumps(meta, indent=2), encoding='utf-8' ) diff --git a/build/arm_application/build/lib/arm_application/handeye_lib.py b/build/arm_application/build/lib/arm_application/handeye_lib.py index 5ce396c..048b358 100644 --- a/build/arm_application/build/lib/arm_application/handeye_lib.py +++ b/build/arm_application/build/lib/arm_application/handeye_lib.py @@ -126,6 +126,39 @@ def Rt_to_T(R: np.ndarray, t: np.ndarray) -> np.ndarray: return T +def cam_to_base_T( + T_handeye: np.ndarray, T_ee: np.ndarray, mode: str +) -> np.ndarray: + """相机系 → 基座系的 4×4。 + + * ``eye_in_hand``:``T_handeye`` 是 cam→法兰,再左乘 ``T_ee``(base→法兰)。 + * ``eye_to_hand``:``T_handeye`` **已经是** cam→基座。再乘 ``T_ee`` 会把 + 固定相机错挂到法兰上 —— 定位总能到附近、永远差一截,看起来像标定不准。 + """ + T_he = np.asarray(T_handeye, dtype=float).reshape(4, 4) + tag = str(mode or "").strip().lower() + if tag == "eye_to_hand": + return T_he + if tag != "eye_in_hand": + raise ValueError( + f"手眼模式只能是 eye_in_hand 或 eye_to_hand,收到 {mode!r}" + ) + return np.asarray(T_ee, dtype=float).reshape(4, 4) @ T_he + + +def cam_point_to_base( + p_cam: np.ndarray, + T_handeye: np.ndarray, + T_ee: np.ndarray, + mode: str, +) -> np.ndarray: + """工件三维点(相机系)→ 基座系 XYZ。""" + T_bc = cam_to_base_T(T_handeye, T_ee, mode) + xyz = np.asarray(p_cam, dtype=float).reshape(3) + ph = np.array([float(xyz[0]), float(xyz[1]), float(xyz[2]), 1.0], dtype=float) + return (T_bc @ ph)[:3] + + def invert_Rt(R: np.ndarray, t: np.ndarray) -> Tuple[np.ndarray, np.ndarray]: Ri = R.T ti = -Ri @ t.reshape(3, 1) @@ -309,6 +342,38 @@ def calibrate_hand_eye( return calibrate_hand_eye_tsai(Rg, tg, R_target2cam, t_target2cam) +def T_from_flexiv_tcp(xyz_m, qwxyz) -> np.ndarray: + """Studio ``tcp_location`` → 法兰→工具 4×4。 + + Flexiv 顺序是 ``[x, y, z, q_w, q_x, q_y, q_z]``,四元数是 wxyz, + 和本仓库其余地方的 xyzw 不一样。只在这里换一次。 + """ + xyz = np.asarray(xyz_m, dtype=float).reshape(3) + q = np.asarray(qwxyz, dtype=float).reshape(7) if np.asarray(qwxyz).size == 7 else np.asarray(qwxyz, dtype=float).reshape(4) + if q.size == 7: + qw, qx, qy, qz = (float(q[3]), float(q[4]), float(q[5]), float(q[6])) + else: + qw, qx, qy, qz = (float(q[0]), float(q[1]), float(q[2]), float(q[3])) + R = quat_xyzw_to_R((qx, qy, qz, qw)) + return Rt_to_T(R, xyz.reshape(3, 1)) + + +def cam_to_flange_via_tool(T_cam_to_tool: np.ndarray, T_flange_to_tool: np.ndarray) -> np.ndarray: + """AX=XB 在工具 TCP 上解出 cam→工具后,再折成 cam→法兰。 + + ``T_flange_to_tool`` 是 Studio TCP:``p_法兰 = T_flange_to_tool · p_工具``。 + OpenCV 的 ``T_cam_to_tool`` 是 ``p_工具 = T_cam_to_tool · p_相机``。 + 所以 ``T_cam_to_flange = T_flange_to_tool · T_cam_to_tool``。 + + 乘反了(``T_cam_to_tool · inv(T_ft)``)旋转看着还像,平移会把相机 + 扔到法兰后方约 30 cm。忘了乘则 ``T_4x4`` 停在 TCP 上,沿工具偏 ~225 mm。 + 两种都不报错。 + """ + T_ct = np.asarray(T_cam_to_tool, dtype=float).reshape(4, 4) + T_ft = np.asarray(T_flange_to_tool, dtype=float).reshape(4, 4) + return T_ft @ T_ct + + def format_transform_yaml(R: np.ndarray, t: np.ndarray, name: str) -> str: T = Rt_to_T(R, t) lines = [ @@ -321,6 +386,14 @@ def format_transform_yaml(R: np.ndarray, t: np.ndarray, name: str) -> str: return '\n'.join(lines) + '\n' +def format_matrix_yaml(T: np.ndarray, key: str) -> str: + arr = np.asarray(T, dtype=float).reshape(4, 4) + lines = [f'{key}:'] + for row in arr: + lines.append(' - [' + ', '.join(f'{v:.8f}' for v in row) + ']') + return '\n'.join(lines) + '\n' + + def is_pose_filled(joints: Sequence[float]) -> bool: """若全为零 / NaN 占位则返回 False。""" arr = np.asarray(joints, dtype=float) diff --git a/build/arm_application/build/lib/arm_application/handeye_teach.py b/build/arm_application/build/lib/arm_application/handeye_teach.py index a2ee476..a78b0fc 100644 --- a/build/arm_application/build/lib/arm_application/handeye_teach.py +++ b/build/arm_application/build/lib/arm_application/handeye_teach.py @@ -37,6 +37,8 @@ import rclpy from rcl_interfaces.msg import ParameterDescriptor from rclpy.node import Node +from arm_application.ros_node import TolerantNode, param_as_str + HELP = """ ================================================ 手眼示教 TEACH:预览 -> 拖拽 -> 拍照+位姿 @@ -94,14 +96,6 @@ def _setup_matplotlib_font(): return chosen -def _param_as_str(node: Node, name: str, default: str = '') -> str: - node.declare_parameter(name, default, ParameterDescriptor(dynamic_typing=True)) - val = node.get_parameter(name).value - if val is None or val == '': - return '' - return str(val).strip() - - class RdkBridge: """通过 rdk_py310 子进程(Python 3.10 ABI)与 Flexiv RDK 通信。""" @@ -128,6 +122,8 @@ class RdkBridge: 'PATH': f'{Path(py).parent}:/usr/bin:/bin', 'LD_LIBRARY_PATH': flexiv_lib, 'LANG': 'C.UTF-8', + 'SITE_PC_IP': os.environ.get('SITE_PC_IP', ''), + 'SITE_NET_IFACE': os.environ.get('SITE_NET_IFACE', ''), } # 不要继承 conda 的 PYTHONPATH。 # 重要:stderr 不能用 PIPE —— RDK 日志会填满管道并让桥接进程死锁 @@ -240,7 +236,7 @@ class RdkBridge: pass -class HandeyeTeach(Node): +class HandeyeTeach(TolerantNode): def __init__(self) -> None: super().__init__('handeye_teach') self.declare_parameter('output_dir', '/home/cc/ros2/handeye/tmp') @@ -250,7 +246,7 @@ class HandeyeTeach(Node): self.declare_parameter('backend', 'ros') # ros | rdk self.declare_parameter('robot_sn', os.environ.get('SITE_ROBOT_SN', '').strip()) self.declare_parameter('drag_primitive', 'FloatingJoint') # or FloatingCartesian - self._serial = _param_as_str(self, 'camera_serial', '') + self._serial = param_as_str(self, 'camera_serial', '') self.declare_parameter('auto_exposure', True) self.declare_parameter('ae_limit_us', 1800.0) self.declare_parameter('emitter_enabled', False) @@ -260,6 +256,9 @@ class HandeyeTeach(Node): # 设了就只是个"提醒":采够时提示可以收工,不强制关窗 —— # 常常采到一半发现某个角度还没覆盖,强制退出反而要重开。 self.declare_parameter('target_points', 0) + # 必须和 run_handeye.sh 的 TAUGHT 是同一个文件。只写 taught_poses.txt、 + # 脚本去读 taught_poses_<模式>.txt,merge 就会「文件在、内容空」。 + self.declare_parameter('poses_file', '') self.backend = str(self.get_parameter('backend').value).strip().lower() self.robot_sn = str(self.get_parameter('robot_sn').value) @@ -267,8 +266,12 @@ class HandeyeTeach(Node): self.output_dir = Path(str(self.get_parameter('output_dir').value)).expanduser() self.images_dir = self.output_dir / 'images' - self.poses_file = self.output_dir / 'taught_poses.txt' + _pf = str(self.get_parameter('poses_file').value).strip() + self.poses_file = ( + Path(_pf).expanduser() if _pf else self.output_dir / 'taught_poses.txt' + ) self.yaml_file = self.output_dir / 'taught_waypoint_positions.yaml' + self._last_capture_t = 0.0 self.images_dir.mkdir(parents=True, exist_ok=True) self._captures: List[dict] = [] @@ -537,6 +540,20 @@ class HandeyeTeach(Node): if q is None: self.get_logger().error('读取关节失败') return + now = time.monotonic() + if now - self._last_capture_t < 0.8: + self.get_logger().warn('按太快,忽略(防 Enter 连发)') + return + if self._captures: + last = self._captures[-1]['joints'] + delta = max(abs(a - b) for a, b in zip(q, last)) + if delta < 0.015: + self.get_logger().warn( + f'关节几乎没动(Δ={delta:.4f} rad),忽略这次拍照。' + '先拖到另一个姿态再按 Enter。' + ) + return + self._last_capture_t = now idx = len(self._captures) stamp = datetime.now(timezone.utc).strftime('%Y%m%d_%H%M%S') diff --git a/build/arm_application/build/lib/arm_application/handeye_waypoints.py b/build/arm_application/build/lib/arm_application/handeye_waypoints.py index a0cbaf4..e03d069 100644 --- a/build/arm_application/build/lib/arm_application/handeye_waypoints.py +++ b/build/arm_application/build/lib/arm_application/handeye_waypoints.py @@ -41,6 +41,8 @@ from arm_application.site_io import joint_prefix_default from arm_msgs.action import FollowJointTrajectory from arm_msgs.srv import GetArmState +from arm_application.ros_node import TolerantNode + try: import cv2 except Exception: # noqa: BLE001 @@ -110,7 +112,7 @@ def _image_to_bgr(msg: Image) -> np.ndarray: raise RuntimeError(f'不支持的图像编码:{msg.encoding!r}') -class HandeyeWaypoints(Node): +class HandeyeWaypoints(TolerantNode): def __init__(self) -> None: super().__init__('handeye_waypoints') self.declare_parameter('joint_prefix', joint_prefix_default()) diff --git a/build/arm_application/build/lib/arm_application/hole_detect_hough.py b/build/arm_application/build/lib/arm_application/hole_detect_hough.py index 3bc34e4..e99a025 100644 --- a/build/arm_application/build/lib/arm_application/hole_detect_hough.py +++ b/build/arm_application/build/lib/arm_application/hole_detect_hough.py @@ -134,6 +134,67 @@ def _parse_best_bbox(dets, conf_thr: float) -> tuple[int, int, int, int] | None: return None +def _keypoint_holes( + dets, + *, + conf_thr: float, + min_kconf: float, + radius_px: float, + min_dist_px: float, +): + """pose 模型直接给出的 k1/k2 关键点当孔位。 + + 现场约定(见 ``pose_detector``):k0 跟踪、k1/k2 对孔。 + 返回 ``((k1x,k1y),(k2x,k2y),r,r)``,拿不到可信关键点时返回 None + (不是 pose 模型 / 关键点置信度不够 / 两点几乎重合),调用方回落到找圆。 + + 为什么值得优先用关键点:Hough / 亮环那套是在**孔本身的图像特征**上找圆, + 光照、反光、通止规尖伸进视野都会把圆心拉偏;而关键点是模型在训练分布里 + 直接回归出来的,对这几类干扰天然更稳。 + """ + if not dets: + return None + for det in sorted(dets, key=lambda d: d.conf, reverse=True): + if float(det.conf) < conf_thr: + continue + kpts = getattr(det, "kpts", None) + if kpts is None: + continue + kpts = np.asarray(kpts, dtype=float) + if kpts.ndim != 2 or kpts.shape[0] < 3 or kpts.shape[1] < 3: + continue + k1, k2 = kpts[1].copy(), kpts[2].copy() + if not (np.isfinite(k1[:2]).all() and np.isfinite(k2[:2]).all()): + continue + if float(k1[2]) < min_kconf or float(k2[2]) < min_kconf: + logger.info( + "k1/k2 关键点置信度不足(%.2f / %.2f < %.2f)—— 回落到找圆", + float(k1[2]), + float(k2[2]), + min_kconf, + ) + continue + dist = float(np.hypot(k1[0] - k2[0], k1[1] - k2[1])) + if dist < float(min_dist_px): + logger.info( + "k1/k2 两关键点只差 %.1fpx(< %.1fpx)—— 视为不可信,回落到找圆", + dist, + min_dist_px, + ) + continue + r = float(radius_px) + # **刻意不按图像 x 交换左右**。 + # Hough 路径的 k1/k2 是"画面左孔 / 右孔"(位置定义),但 pose 模型学出来的 + # k1/k2 是**固定语义**(训练时标注的那个物理孔)。工件只要转个角度, + # 位置就会翻面;按 x 强制交换会让 `target_hole=k1` 时左时右地指向两个不同 + # 的物理孔 —— 那是最难查的一类现场问题。 + # 下游怎么认这两个点由 `stage2.k1_label` 决定: + # hole_points[0] = 模型的 k1,hole_points[1] = 模型的 k2, + # 所以 k1_label="left" ↔ k1 就是模型的 k1(见 stage2_locate_node._snap)。 + return (float(k1[0]), float(k1[1])), (float(k2[0]), float(k2[1])), r, r + return None + + def _refine_circle_center( gray: np.ndarray, cx: float, @@ -466,6 +527,35 @@ def detect_holes( gate_block=True, ) + # ---- 首选:pose 模型直接给出 k1/k2 关键点(不必再找圆) ---- + if bool(cfg.get("keypoint_enable", True)): + kp = _keypoint_holes( + dets, + conf_thr=conf, + min_kconf=float(cfg.get("keypoint_min_conf", 0.30)), + radius_px=float(cfg.get("keypoint_hole_radius_px", 12.0)), + min_dist_px=float(cfg.get("keypoint_min_dist_px", 15.0)), + ) + if kp is not None: + (k1, k2, r1, r2) = kp + hole_points = [[float(k1[0]), float(k1[1])], [float(k2[0]), float(k2[1])]] + hole_radii = [float(r1), float(r2)] + dist = float(np.hypot(k1[0] - k2[0], k1[1] - k2[1])) + gate = (max_dx, max_dy) if bool(cfg.get("center_gate_draw", True)) else None + draw_img = _render_success( + image, bbox, hole_points, hole_radii, dist, gate=gate, label=label + ) + return { + "status": True, + "msg": f"pose 关键点 k1/k2,两孔距离 {dist:.1f}px", + "hole_points": hole_points, + "hole_radii": hole_radii, + "bbox": list(bbox), + "label": label, + "source": "keypoint", + "draw_img": draw_img, + } + # ---- 主路径:螺纹嵌件对(亮环签名 + 关于中心孔对称),抗多孔干扰、抗跳变 ---- if bool(cfg.get("insert_pair_enable", True)): gray_full = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) if image.ndim == 3 else image diff --git a/build/arm_application/build/lib/arm_application/hole_detect_node.py b/build/arm_application/build/lib/arm_application/hole_detect_node.py index c34f14c..e8d7f8b 100644 --- a/build/arm_application/build/lib/arm_application/hole_detect_node.py +++ b/build/arm_application/build/lib/arm_application/hole_detect_node.py @@ -25,6 +25,8 @@ from arm_application.site_io import load_site_dict from arm_msgs.msg import HoleDetection as HoleDetectionMsg from arm_msgs.msg import HoleDetections +from arm_application.ros_node import TolerantNode + def _as_bool(val, default: bool = False) -> bool: if val is None: @@ -57,7 +59,7 @@ def _bgr_to_msg(image: np.ndarray, stamp, frame_id: str) -> Image: return msg -class HoleDetectNode(Node): +class HoleDetectNode(TolerantNode): def __init__(self) -> None: super().__init__("hole_detect") self.declare_parameter("camera_source", os.environ.get("SITE_CAM_NAME") or "d405") diff --git a/build/arm_application/build/lib/arm_application/hole_detector.py b/build/arm_application/build/lib/arm_application/hole_detector.py index 148b0e4..8f31781 100644 --- a/build/arm_application/build/lib/arm_application/hole_detector.py +++ b/build/arm_application/build/lib/arm_application/hole_detector.py @@ -21,7 +21,7 @@ DEFAULT_CONFIG = _PKG_SHARE_FALLBACK / "hole_insert.yaml" # 配置齐全时永远走不到这条分支,一旦 site.yaml 缺键就报"模型文件不存在", # 而打印出来的路径看着特别合理,很容易被误判成"文件被人误删了"。 # 改动这个常量时,顺手跑 ``bash scripts/weights.sh doctor`` 确认没有悬空引用。 -_CANONICAL_HOLE_MODEL = "models/hole_insert/detect_best_1.onnx" +_CANONICAL_HOLE_MODEL = "models/yolo/gongjian0929.onnx" @dataclass @@ -143,17 +143,18 @@ class HoleDetector: def _load_yolo(self): if self._detector is not None: return self._detector - from arm_application.yolo_detector import YoloDetector, resolve_weights + from arm_application.yolo_detector import build_detector, resolve_weights weights = resolve_weights( self.model_path, backend=str(self.cfg.get("yolo_backend") or "auto"), ) - self._detector = YoloDetector( + # build_detector 会自己识别 pose 模型(k0/k1/k2),不必在这里分支。 + self._detector = build_detector( weights, - device=str(self.device), conf=float(self.cfg.get("conf", 0.25)), iou=float(self.cfg.get("iou", 0.7)), + device=str(self.device), imgsz=int(self.cfg.get("imgsz", 640)), ) return self._detector diff --git a/build/arm_application/build/lib/arm_application/kalman_filter.py b/build/arm_application/build/lib/arm_application/kalman_filter.py index 2de4e58..eafcbbd 100644 --- a/build/arm_application/build/lib/arm_application/kalman_filter.py +++ b/build/arm_application/build/lib/arm_application/kalman_filter.py @@ -62,6 +62,15 @@ class KalmanFilter3D: self._predict(dt) self._t = t + def zero_velocity(self) -> None: + """把速度状态清零、位置保持不动。 + + 用途:观测疑似假跳变(见 ``feature_jump_guard.FeatureJumpGate``)时本次不 + 采信观测,但**不能**让上一次的速度继续把位置外推出去 —— 否则"不动"会变成 + "按旧速度匀速跑掉",刚好是我们要避免的那件事。 + """ + self.x[3:] = 0.0 + def update(self, z: np.ndarray) -> None: """用一次三维位置观测做量测更新。""" z = np.asarray(z, dtype=float).reshape(3) diff --git a/build/arm_application/build/lib/arm_application/move_to_pose_client.py b/build/arm_application/build/lib/arm_application/move_to_pose_client.py index bd53285..2a55ac5 100644 --- a/build/arm_application/build/lib/arm_application/move_to_pose_client.py +++ b/build/arm_application/build/lib/arm_application/move_to_pose_client.py @@ -15,8 +15,10 @@ from geometry_msgs.msg import PoseStamped from arm_msgs.action import MoveToPose +from arm_application.ros_node import TolerantNode -class MoveToPoseClient(Node): + +class MoveToPoseClient(TolerantNode): def __init__(self) -> None: super().__init__('move_to_pose_client') self._client = ActionClient(self, MoveToPose, 'move_to_pose') diff --git a/build/arm_application/build/lib/arm_application/onnx_workpiece.py b/build/arm_application/build/lib/arm_application/onnx_workpiece.py index 0404d89..f3ae202 100644 --- a/build/arm_application/build/lib/arm_application/onnx_workpiece.py +++ b/build/arm_application/build/lib/arm_application/onnx_workpiece.py @@ -54,6 +54,21 @@ class OnnxWorkpieceDetector: self._iname = inp.name shape = [d if isinstance(d, int) and d > 0 else imgsz for d in inp.shape] self._in_h, self._in_w = int(shape[-2]), int(shape[-1]) + # 只认 ultralytics end2end 检测输出 ``[1, N, 6]``,否则**当场报错**。 + # 为什么必须在这里硬失败:2026-10-08 真机,把一个 ``task=pose`` 的模型 + # (输出 ``[1, 4+nc+3K, 8400]``)从这条分支解出来,得到的是 12 个垃圾框 + # ——conf 直接是坐标值(最高 70.87)、类名 ``class_73``、退化框 ``y1=y2=0``。 + # 而流水线照跑不误,只在二阶段"看不出工件"上体现出来,排查代价极大。 + # 宁可启动就失败(元规则:静默失效是头号敌人)。 + outs = self._sess.get_outputs() + tail = outs[0].shape[-1] if (outs and outs[0].shape) else None + if isinstance(tail, int) and tail != 6: + raise RuntimeError( + f"{path.name} 的检测输出最后一维是 {tail},不是 6 —— 它不是" + " ultralytics end2end 检测模型([1,N,6])。带 k0/k1/k2 关键点的" + " pose 模型必须交给 pose_detector / build_detector,否则坐标会被" + "当成置信度解出垃圾框,而且不会报错。" + ) self.conf = float(conf) self.imgsz = int(imgsz) # 类别名:显式传入 > 旁挂标签文件 > ONNX 内嵌 metadata > 占位符。 diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/operator_app.py b/build/arm_application/build/lib/arm_application/operator_app.py similarity index 100% rename from install/arm_application/lib/python3.11/site-packages/arm_application/operator_app.py rename to build/arm_application/build/lib/arm_application/operator_app.py diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/operator_arm_mesh.py b/build/arm_application/build/lib/arm_application/operator_arm_mesh.py similarity index 100% rename from install/arm_application/lib/python3.11/site-packages/arm_application/operator_arm_mesh.py rename to build/arm_application/build/lib/arm_application/operator_arm_mesh.py diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/operator_arm_state.py b/build/arm_application/build/lib/arm_application/operator_arm_state.py similarity index 100% rename from install/arm_application/lib/python3.11/site-packages/arm_application/operator_arm_state.py rename to build/arm_application/build/lib/arm_application/operator_arm_state.py diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/operator_camera_view.py b/build/arm_application/build/lib/arm_application/operator_camera_view.py similarity index 100% rename from install/arm_application/lib/python3.11/site-packages/arm_application/operator_camera_view.py rename to build/arm_application/build/lib/arm_application/operator_camera_view.py diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/operator_console.py b/build/arm_application/build/lib/arm_application/operator_console.py similarity index 100% rename from install/arm_application/lib/python3.11/site-packages/arm_application/operator_console.py rename to build/arm_application/build/lib/arm_application/operator_console.py diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/operator_gripper_mesh.py b/build/arm_application/build/lib/arm_application/operator_gripper_mesh.py similarity index 100% rename from install/arm_application/lib/python3.11/site-packages/arm_application/operator_gripper_mesh.py rename to build/arm_application/build/lib/arm_application/operator_gripper_mesh.py diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/operator_gripper_state.py b/build/arm_application/build/lib/arm_application/operator_gripper_state.py similarity index 100% rename from install/arm_application/lib/python3.11/site-packages/arm_application/operator_gripper_state.py rename to build/arm_application/build/lib/arm_application/operator_gripper_state.py diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/operator_handeye_board.py b/build/arm_application/build/lib/arm_application/operator_handeye_board.py similarity index 100% rename from install/arm_application/lib/python3.11/site-packages/arm_application/operator_handeye_board.py rename to build/arm_application/build/lib/arm_application/operator_handeye_board.py diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/operator_tactile_view.py b/build/arm_application/build/lib/arm_application/operator_tactile_view.py similarity index 100% rename from install/arm_application/lib/python3.11/site-packages/arm_application/operator_tactile_view.py rename to build/arm_application/build/lib/arm_application/operator_tactile_view.py diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/operator_teach.py b/build/arm_application/build/lib/arm_application/operator_teach.py similarity index 100% rename from install/arm_application/lib/python3.11/site-packages/arm_application/operator_teach.py rename to build/arm_application/build/lib/arm_application/operator_teach.py diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/overhead_oneshot.py b/build/arm_application/build/lib/arm_application/overhead_oneshot.py similarity index 100% rename from install/arm_application/lib/python3.11/site-packages/arm_application/overhead_oneshot.py rename to build/arm_application/build/lib/arm_application/overhead_oneshot.py diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/path_profile.py b/build/arm_application/build/lib/arm_application/path_profile.py similarity index 100% rename from install/arm_application/lib/python3.11/site-packages/arm_application/path_profile.py rename to build/arm_application/build/lib/arm_application/path_profile.py diff --git a/build/arm_application/build/lib/arm_application/perception_node.py b/build/arm_application/build/lib/arm_application/perception_node.py index 01772f6..21510b1 100644 --- a/build/arm_application/build/lib/arm_application/perception_node.py +++ b/build/arm_application/build/lib/arm_application/perception_node.py @@ -15,6 +15,7 @@ from __future__ import annotations import os import threading import time +from pathlib import Path from typing import Optional import numpy as np @@ -30,24 +31,54 @@ from rclpy.qos import ( qos_profile_sensor_data, ) from sensor_msgs.msg import CameraInfo, Image -from std_msgs.msg import Float32MultiArray +from std_msgs.msg import Bool, Float32, Float32MultiArray from tf2_ros import TransformBroadcaster from arm_application.box_tracker import BoxTracker +from arm_application.feature_guard import ( + FarReacquireConfirm, + TrackSlewGuard, + kpt_plausible, +) +from arm_application.geom_ik import load_handeye_T from arm_application.handeye_realsense import ( is_realsense_source, resolve_realsense_topics, ) +from arm_application.overhead_oneshot import ( + D405_MISS_BEFORE_D435_S, + ONESHOT_ACCEPT_TIMEOUT_S, + best_det_conf, + depth_raw_to_m, + oneshot_k0_base, + oneshot_shot_timed_out, + oneshot_should_submit, + select_oneshot_det, + wrist_needs_handoff, + z_locked_qos, +) from arm_application.kalman_filter import KalmanFilter3D -from arm_application.plane_feature import geometric_center_on_plane, workpiece_xyz_in_box +from arm_application.plane_feature import ( + PlaneFeature, + geometric_center_on_plane, + workpiece_xyz_in_box, +) +from arm_application.pose_detector import TRACK_KPT_INDEX from arm_application.yolo_detector import ( INFER_BUSY, YoloDetector, YoloInferProcess, + build_detector, pick_best, resolve_weights, ) +from arm_application.ros_node import TolerantNode + +# D435 一次性推理用的 seq。必须远离腕部帧序号,结果绝不能当 D405 检测去立体匹配。 +_ONESHOT_SEQ = 2_000_000_000 +_ONESHOT_VIZ_SEQ = 2_000_000_001 + def _bgr_copy(msg: Image) -> np.ndarray: """返回调用方持有的 BGR uint8 数组(对异步 YOLO 安全;ROS 可能把原消息丢掉)。""" @@ -61,7 +92,7 @@ def _bgr_copy(msg: Image) -> np.ndarray: raise RuntimeError(f"不支持的编码 {msg.encoding!r}") -class PerceptionNode(Node): +class PerceptionNode(TolerantNode): def __init__(self) -> None: super().__init__("perception_node") tid = threading.get_ident() @@ -74,17 +105,33 @@ class PerceptionNode(Node): self.declare_parameter("image_topic", "") self.declare_parameter("camera_info_topic", "") self.declare_parameter("depth_topic", "/d405/aligned_depth_to_color/image_raw") - self.declare_parameter("weights", "/home/cc/ros2/models/yolo/detect_best_0.onnx") + self.declare_parameter("weights", "/home/cc/ros2/models/yolo/gongjian0929.onnx") self.declare_parameter("conf", 0.10) self.declare_parameter("iou", 0.45) self.declare_parameter("imgsz", 640) self.declare_parameter("device", "0") self.declare_parameter("min_conf", 0.12) + # 重新捕获门槛(跳到新位置必须达到的置信度)。为什么必须比 min_conf 高得多: + # 真机实测假框 conf 0.13~0.47,而真 k0 是 0.87(推导见 site.yaml 同名字段)。 + # 旧写法把它接成 min_conf ⇒ 0.15 的远框被原样采信、kf.reset() 直接跳过去。 + self.declare_parameter("reacquire_conf", 0.55) + # ---- 跟踪点可信性的三道守卫(实现与推导见 feature_guard.py)---- + # 2026-10-08 真机:真 k0(conf 0.87)被一串**高置信度假 k0**(conf 0.53~0.73) + # 顶掉,1s 内把臂从 home 带到工作盒角落,之后 148s 全是"检测漏检"。 + # 假 k0 挡不住的地方:置信度没有可分区间;它们**贴在画面边上**、**借深度**。 + self.declare_parameter("keypoint_border_px", 6.0) + self.declare_parameter("track_max_step_m", 0.04) + self.declare_parameter("reacquire_far_px", 120.0) + self.declare_parameter("reacquire_confirm_frames", 3) self.declare_parameter("vision_hz", 30.0) self.declare_parameter("z_ref_m", 0.40) self.declare_parameter("jump_px", 280.0) self.declare_parameter("jump_z_m", 0.20) self.declare_parameter("min_depth_m", 0.04) + # 特征点的**相机量程下限**:比这更近的深度读数一定来自机械臂自身(爪上夹的 + # 通止规 / 相机座),不是工件。判据是实测两条带(见 site.yaml 同名字段的推导): + # 随臂一起动的近带 0.078~0.087m,工件面 0.19~0.29m ⇒ 取 0.14。 + self.declare_parameter("feature_min_range_m", 0.14) self.declare_parameter("max_depth_m", 0.55) self.declare_parameter("work_z_max_m", 0.50) # 高于此值 = 孔 / 背景 self.declare_parameter("object_frame", "tracked_object") @@ -110,16 +157,42 @@ class PerceptionNode(Node): self.declare_parameter("hold_point_on_miss", True) self.declare_parameter("miss_hold_point_frames", 2) # plane = 立体表面质心(推荐);box = YOLO 检测框中心 + # keypoint = pose 模型的 k0 关键点(跟踪孔);见 pose_detector self.declare_parameter("feature_mode", "plane") + self.declare_parameter("keypoint_index", TRACK_KPT_INDEX) + self.declare_parameter("keypoint_min_conf", 0.30) + self.declare_parameter("keypoint_win_px", 6) self.declare_parameter("plane_inlier_m", 0.008) self.declare_parameter("plane_band_m", 0.06) + # ---- D405 主跟踪 + D435 一次性(键必须从 site 接入,缺了启动即红)---- + self.declare_parameter("wrist_handoff_conf", -1.0) + self.declare_parameter("overhead_oneshot_enable", False) + self.declare_parameter("d435_move_only", False) + self.declare_parameter("overhead_min_depth_m", -1.0) + self.declare_parameter("overhead_max_depth_m", -1.0) + self.declare_parameter("overhead_oneshot_conf", -1.0) + self.declare_parameter("overhead_cooldown_s", -1.0) + self.declare_parameter("overhead_frame_max_age_s", -1.0) + self.declare_parameter("overhead_handeye_file", "") + self.declare_parameter("overhead_camera_source", "") + self.declare_parameter("overhead_camera_frame", "") + self.declare_parameter("overhead_image_topic", "") + self.declare_parameter("overhead_info_topic", "") + self.declare_parameter("overhead_depth_topic", "") + self.declare_parameter("base_frame", "") self.z_ref = float(self.get_parameter("z_ref_m").value) self.min_conf = float(self.get_parameter("min_conf").value) + self.reacquire_conf = float(self.get_parameter("reacquire_conf").value) self.jump_px = float(self.get_parameter("jump_px").value) self.jump_z_m = float(self.get_parameter("jump_z_m").value) self.min_depth = float(self.get_parameter("min_depth_m").value) self.max_depth = float(self.get_parameter("max_depth_m").value) + # 特征点量程下限 = max(解码量程下限, 工具几何下限):两者取严,不许被调松到 + # 比 min_depth 还小(那会让"工具自己"重新变成合法目标)。 + self.feature_min_range = max( + self.min_depth, float(self.get_parameter("feature_min_range_m").value) + ) self.work_z_max = float(self.get_parameter("work_z_max_m").value) self.hold_point_on_miss = bool(self.get_parameter("hold_point_on_miss").value) self.object_frame = str(self.get_parameter("object_frame").value) @@ -138,13 +211,96 @@ class PerceptionNode(Node): 1, int(self.get_parameter("miss_hold_point_frames").value) ) self.feature_mode = str(self.get_parameter("feature_mode").value or "plane").strip().lower() + self.keypoint_index = max(0, int(self.get_parameter("keypoint_index").value)) + self.keypoint_min_conf = float(self.get_parameter("keypoint_min_conf").value) + self.keypoint_win_px = max(1, int(self.get_parameter("keypoint_win_px").value)) + # 跟踪点三道守卫(单一实现见 feature_guard.py) + self.keypoint_border_px = float(self.get_parameter("keypoint_border_px").value) + self.track_max_step_m = float(self.get_parameter("track_max_step_m").value) + self.reacquire_far_px = float(self.get_parameter("reacquire_far_px").value) + self._slew = TrackSlewGuard(self.track_max_step_m) + self._far = FarReacquireConfirm( + self.reacquire_far_px, + int(self.get_parameter("reacquire_confirm_frames").value), + ) self.plane_inlier_m = float(self.get_parameter("plane_inlier_m").value) self.plane_band_m = float(self.get_parameter("plane_band_m").value) + self.overhead_oneshot_enable = bool( + self.get_parameter("overhead_oneshot_enable").value + ) + self.d435_move_only = bool(self.get_parameter("d435_move_only").value) + self._T_oh: Optional[np.ndarray] = None + self._oh_image: Optional[Image] = None + self._oh_depth: Optional[Image] = None + self._oh_image_mono = -1.0 + self._oh_depth_mono = -1.0 + self._oh_fx = self._oh_fy = self._oh_cx = self._oh_cy = 0.0 + self._oh_frame = "" + self._oneshot_t = -1.0e9 + self._need_oneshot = False + self._oneshot_inflight = False + self._oneshot_shot = False + self._oneshot_shot_t = -1.0e9 + self._low_since: Optional[float] = None + self._d435_commanding = False + self._z_locked = False + self._oneshot_img: Optional[Image] = None + self._oneshot_depth: Optional[Image] = None + self._oneshot_viz_only = False + self._oh_viz_t = -1.0e9 + if self.overhead_oneshot_enable: + self.wrist_handoff_conf = float( + self.get_parameter("wrist_handoff_conf").value + ) + if self.wrist_handoff_conf < 0.0: + raise RuntimeError( + "overhead_oneshot_enable 时 wrist_handoff_conf 必须由 site.yaml 接入," + "收到哨兵 -1 —— 配置没接线。" + ) + self.overhead_min_depth = float( + self.get_parameter("overhead_min_depth_m").value + ) + self.overhead_max_depth = float( + self.get_parameter("overhead_max_depth_m").value + ) + self.overhead_oneshot_conf = float( + self.get_parameter("overhead_oneshot_conf").value + ) + self.overhead_cooldown_s = float( + self.get_parameter("overhead_cooldown_s").value + ) + self.overhead_frame_max_age_s = float( + self.get_parameter("overhead_frame_max_age_s").value + ) + if min( + self.overhead_min_depth, + self.overhead_max_depth, + self.overhead_oneshot_conf, + self.overhead_cooldown_s, + self.overhead_frame_max_age_s, + ) < 0.0: + raise RuntimeError( + "D435 一次性参数仍是哨兵 -1 —— site.yaml 的 perception.overhead 没接到节点。" + ) + oh_file = str(self.get_parameter("overhead_handeye_file").value or "") + if not Path(oh_file).is_file(): + raise RuntimeError( + f"D435 一次性定位缺眼在手外结果:{oh_file}。" + "先跑 bash ~/ros2/scripts/run_handeye.sh --arm 89 --mode eye_to_hand calibrate" + ) + self._T_oh = load_handeye_T(oh_file) + self._oh_frame = str( + self.get_parameter("overhead_camera_frame").value or "" + ) self._fx = self._fy = self._cx = self._cy = 0.0 self._latest_image: Optional[Image] = None self._latest_depth: Optional[Image] = None self._last_uv: Optional[np.ndarray] = None + # k0 相对工件检测框的**归一化偏移**(相对框中心、除以框宽高)。k0 掉信时 + # 用它在框上重建 k0 —— 只借"偏移"不借"绝对位置",跟踪点就不会横移一大截 + #(见 `_keypoint_feature` 的真机反例)。 + self._kpt_box_frac: Optional[np.ndarray] = None self._last_good_z: Optional[float] = None self._last_plane_xyz: Optional[np.ndarray] = None self._last_filt: Optional[np.ndarray] = None @@ -201,14 +357,16 @@ class PerceptionNode(Node): f"YOLO worker pid={self._yolo_proc._p.pid} weights={self._yolo_proc.weights_path}" ) else: - self.detector = YoloDetector( + self.detector = build_detector( weights, + backend=self.backend_name, conf=float(yolo_cfg["conf"]), iou=float(yolo_cfg["iou"]), device=str(yolo_cfg["device"]), imgsz=int(yolo_cfg["imgsz"]), ) - if self._yolo_half: + # PoseDetector 自己管 GPU 张量,没有 ultralytics 的 _model 可挪。 + if self._yolo_half and hasattr(self.detector, "_model"): try: import torch @@ -218,6 +376,8 @@ class PerceptionNode(Node): self._yolo_half = False except Exception: # noqa: BLE001 self._yolo_half = False + elif self._yolo_half: + self._yolo_half = False try: self.detector.warmup(half=self._yolo_half) except Exception as exc: # noqa: BLE001 @@ -274,6 +434,52 @@ class PerceptionNode(Node): self.create_subscription( Image, depth_topic, self._on_depth, image_qos, callback_group=self._io_cbg ) + self.base_frame = str(self.get_parameter("base_frame").value or "").strip() + if self.overhead_oneshot_enable: + oh_img = str(self.get_parameter("overhead_image_topic").value or "").strip() + oh_info = str(self.get_parameter("overhead_info_topic").value or "").strip() + oh_dep = str(self.get_parameter("overhead_depth_topic").value or "").strip() + if not oh_img or not oh_dep: + raise RuntimeError( + "overhead_oneshot_enable 但 overhead_image_topic / " + "overhead_depth_topic 为空 —— 配置没接线。" + ) + self.create_subscription( + Image, oh_img, self._on_oh_image, image_qos, + callback_group=self._io_cbg, + ) + self.create_subscription( + Image, oh_dep, self._on_oh_depth, image_qos, + callback_group=self._io_cbg, + ) + if oh_info: + self.create_subscription( + CameraInfo, oh_info, self._on_oh_info, image_qos, + callback_group=self._io_cbg, + ) + self.create_subscription( + Bool, "visual_servo/z_locked", self._on_z_locked, z_locked_qos(), + callback_group=self._io_cbg, + ) + self.create_subscription( + Bool, + "visual_servo/d435_commanding", + self._on_d435_commanding, + z_locked_qos(), + callback_group=self._io_cbg, + ) + extra = ( + ";d435_move_only:不等 D405 丢目标,0.5s 后必拍一张" + if self.d435_move_only + else "" + ) + self.get_logger().info( + f"D435 待命 image={oh_img} depth={oh_dep} " + f"handoff_conf={self.wrist_handoff_conf:.2f} " + f"看不到满 {D405_MISS_BEFORE_D435_S:.1f}s 才拍一张 " + f"T={self.get_parameter('overhead_handeye_file').value}" + f"{extra}" + ) point_qos = QoSProfile( history=HistoryPolicy.KEEP_LAST, @@ -283,6 +489,12 @@ class PerceptionNode(Node): self._point_pub = self.create_publisher( PointStamped, "visual_servo/filtered_point", point_qos ) + self._wrist_conf_pub = self.create_publisher( + Float32, "visual_servo/wrist_conf", 5 + ) + self._overhead_k0_pub = self.create_publisher( + PointStamped, "visual_servo/overhead_k0", point_qos + ) # RELIABLE + keep_last(5):相机预览能容忍短暂的 DDS 丢包间隙 det_qos = QoSProfile( history=HistoryPolicy.KEEP_LAST, @@ -290,6 +502,10 @@ class PerceptionNode(Node): reliability=ReliabilityPolicy.RELIABLE, ) self._det_pub = self.create_publisher(Float32MultiArray, "workpiece/detection", det_qos) + # 顶视框单独话题:像素是 D435 的,不能叠到 D405 窗上。 + self._oh_det_pub = self.create_publisher( + Float32MultiArray, "workpiece/detection_overhead", det_qos + ) self._tf_br = TransformBroadcaster(self) vision_hz = max(5.0, min(40.0, float(self.get_parameter("vision_hz").value))) @@ -343,6 +559,22 @@ class PerceptionNode(Node): def _on_depth(self, msg: Image) -> None: self._latest_depth = msg + def _on_oh_image(self, msg: Image) -> None: + self._oh_image = msg + self._oh_image_mono = time.monotonic() + + def _on_oh_depth(self, msg: Image) -> None: + self._oh_depth = msg + self._oh_depth_mono = time.monotonic() + + def _on_oh_info(self, msg: CameraInfo) -> None: + self._oh_fx = float(msg.k[0]) + self._oh_fy = float(msg.k[4]) + self._oh_cx = float(msg.k[2]) + self._oh_cy = float(msg.k[5]) + if msg.header.frame_id: + self._oh_frame = str(msg.header.frame_id) + def _wake_infer(self) -> None: if self._latest_image is None: return @@ -375,6 +607,8 @@ class PerceptionNode(Node): try: self.detector.restart() self._submitted_seq = -1 + self._oneshot_inflight = False + self._oneshot_viz_only = False self._last_gpu_t = time.monotonic() self.get_logger().info("YOLO 工作进程已重启") except Exception as exc: # noqa: BLE001 @@ -387,7 +621,9 @@ class PerceptionNode(Node): 我们还会**先**提交再去等,这样下一次推理已经排进队列了。 """ while not self._stop.is_set(): - self._submit_latest() + # 一次性占用 GPU 时不要再塞 D405,否则两帧挤一条队列,结果会对错图。 + if not self._oneshot_inflight: + self._submit_latest() try: got = self.detector.wait_result(timeout=0.030) except Exception as exc: # noqa: BLE001 @@ -405,8 +641,9 @@ class PerceptionNode(Node): f"(worker={'存活' if getattr(self.detector, 'alive', True) else '已死'})", throttle_duration_sec=1.0, ) - outstanding = self._submitted_seq > self._done_seq + outstanding = self._submitted_seq > self._done_seq or self._oneshot_inflight if outstanding and self._last_gpu_t is not None and silent > 2.0: + self._oneshot_inflight = False self._restart_yolo(f"卡死 {silent:.1f}s") continue if ( @@ -422,6 +659,21 @@ class PerceptionNode(Node): seq, dets, gpu_ms = got if dets is INFER_BUSY: continue + if int(seq) >= _ONESHOT_SEQ: + try: + self._finish_overhead_oneshot( + dets, + float(self._infer_meta.get(int(seq), 1.0)), + viz_only=bool(int(seq) == _ONESHOT_VIZ_SEQ), + ) + except Exception as exc: # noqa: BLE001 + self.get_logger().error( + f"D435 一次性结果处理失败:{exc}", throttle_duration_sec=2.0 + ) + self._oneshot_inflight = False + self._oneshot_viz_only = False + self._oneshot_t = time.monotonic() + continue scale = float(self._infer_meta.get(int(seq), 1.0)) t_img = float(self._frame_t.get(int(seq), time.monotonic())) t0 = time.monotonic() @@ -430,7 +682,12 @@ class PerceptionNode(Node): except Exception as exc: # noqa: BLE001 self.get_logger().error(f"应用检测结果出错:{exc}", throttle_duration_sec=2.0) self._done_seq = int(seq) - self._submit_latest() + if self._need_oneshot and not self._oneshot_inflight: + self._submit_overhead_oneshot(viz_only=False) + elif self._should_submit_overhead_viz() and not self._oneshot_inflight: + self._submit_overhead_oneshot(viz_only=True) + else: + self._submit_latest() dt_ms = (time.monotonic() - t0) * 1000.0 lag_ms = (time.monotonic() - t_img) * 1000.0 self.get_logger().info( @@ -488,7 +745,7 @@ class PerceptionNode(Node): else: meters = roi scale = 1.0 - vals = meters[np.isfinite(meters) & (meters > self.min_depth) & (meters < self.max_depth)] + vals = meters[np.isfinite(meters) & (meters > self.feature_min_range) & (meters < self.max_depth)] if vals.size < 8: # 内部 ROI 经常落在孔上;改用整个检测框重试。 y0 = int(np.clip(y1, 0, h - 1)) @@ -504,7 +761,7 @@ class PerceptionNode(Node): meters2 = pos2 * scale else: meters2 = roi2 - vals = meters2[np.isfinite(meters2) & (meters2 > self.min_depth) & (meters2 < self.max_depth)] + vals = meters2[np.isfinite(meters2) & (meters2 > self.feature_min_range) & (meters2 < self.max_depth)] if vals.size < 8: med_m = float(np.median(meters)) if meters.size else 0.0 return None, f"ok={vals.size} scale={scale} med={med_m:.3f}" @@ -632,9 +889,16 @@ class PerceptionNode(Node): self._box_ema = None self._last_raw_xyxy = None self._last_uv = None + self._kpt_box_frac = None self._last_filt = None self._last_plane_xyz = None self._box_trk.reset() + # 两道有状态守卫跟着"真正丢目标"一起冷启动。**只在长丢时清**,不在单帧 + # 漏检时清:单帧漏检极常见(真机日志里几乎每隔一两帧就一次),每漏一帧 + # 就把锚点清空,会让下一帧的任何观测都变成"首次观测"而被 TrackSlewGuard + # 无条件放行 —— 借深度的假点于是每次都能重新锚定,守卫形同虚设。 + self._slew.reset() + self._far.reset() self._last_yolo_t = None self._publish_detection_clear() @@ -643,6 +907,56 @@ class PerceptionNode(Node): if scale != 1.0: for d in dets: d.xyxy = d.xyxy * scale + best_conf = best_det_conf(dets) + self._publish_wrist_conf(best_conf) + handoff = bool( + self.overhead_oneshot_enable + and ( + self.d435_move_only + or wrist_needs_handoff(best_conf, self.wrist_handoff_conf) + ) + ) + now_m = time.monotonic() + if self._d435_commanding: + # 臂还在赶 D435 那个点。漏检计时清掉,走到并停稳之后再重新计。 + self._low_since = None + self._need_oneshot = False + elif not handoff: + self._low_since = None + self._oneshot_shot = False + self._need_oneshot = False + else: + if oneshot_shot_timed_out( + shot=self._oneshot_shot, + commanding=self._d435_commanding, + age_s=now_m - float(self._oneshot_shot_t), + timeout_s=ONESHOT_ACCEPT_TIMEOUT_S, + ): + self.get_logger().warn( + "D435 拍了但伺服没接住(工作盒拒收等),允许再拍" + ) + self._oneshot_shot = False + self._low_since = None + if self._low_since is None: + self._low_since = now_m + low_for = now_m - self._low_since + self._need_oneshot = oneshot_should_submit( + handoff=True, + low_for_s=low_for, + already_shot=self._oneshot_shot, + wait_s=D405_MISS_BEFORE_D435_S, + ) + if self._oneshot_shot: + self.get_logger().info( + "D435 这一轮已经拍过一张,等这一段走完,不再连拍", + throttle_duration_sec=2.0, + ) + elif not self._need_oneshot: + self.get_logger().info( + f"D405 已连续 {low_for:.2f}s 没有高置信度目标," + f"未满 {D405_MISS_BEFORE_D435_S:.1f}s,D435 继续待命", + throttle_duration_sec=0.5, + ) now = time.monotonic() pred_at_img = self._box_trk.predict(t_img, self._img_wh()) with self._lock: @@ -654,12 +968,16 @@ class PerceptionNode(Node): prev_uv=prev_uv, prev_xyxy=prev_xyxy, max_track_px=max(400.0, self.jump_px), - reacquire_conf=self.min_conf, + reacquire_conf=self.reacquire_conf, min_conf=self.min_conf, lock_iou=0.05, ) if best is None: self._miss_count += 1 + # 单帧漏检**不清**守卫锚点(见 _clear_track 的注释):真机 2026-10-08 + # 漏检几乎每帧都有,一漏就 reset ⇒ 每帧都当"首次观测" ⇒ 借深度的假 k0 + # 次次都能重新锚定。真正丢目标由下面的 miss_clear_frames 长丢分支 + # 走 _clear_track(连丢 miss_clear_frames 帧才冷启动)。 if self._miss_count >= self.miss_clear_frames: self._clear_track() self._last_yolo_t = None @@ -674,6 +992,7 @@ class PerceptionNode(Node): if ( self.hold_point_on_miss and self._miss_count <= self.miss_hold_point_frames + and not handoff ): self._republish_held_point() return @@ -706,12 +1025,26 @@ class PerceptionNode(Node): # 悬停目标 = 检测框内工件表面的立体三维点(不是穿过孔 / 桌面的射线, # 也不是 z_ref)。红点 = 该三维点。 + # 混合流程交回 D405 之后追工件框的矩形中心,不追 k0。 + # YOLO-pose 照常跑(框和关键点都在),只是跟踪点取框心。 + # 对小孔关键点在二阶段,那里不用深度图。 + track_box = self.overhead_oneshot_enable and not self.d435_move_only feat = None p_cam: Optional[np.ndarray] = None - note = "box" + note = "框心" if track_box else "box" z_meas = None uv = box_uv - if self.feature_mode != "box": + # 本帧的深度是不是**借**来的(见 PlaneFeature.borrowed)—— 给"每帧位移上限" + # 守卫用:借来的深度意味着该像素读不到自己的深度,绝对位置不足以重定位。 + borrowed = False + if track_box: + feat = None + elif self.feature_mode == "keypoint": + feat = self._keypoint_feature(best) + # k0 掉信时 `_keypoint_feature` 会**按 k0 相对框的偏移**在框上重建跟踪点 + # (位置连续、不横移)。只有冷启动、连一次可信 k0 都没见过时才返回 None, + # 此时才退到"框内深度 + 框中心"。 + elif self.feature_mode != "box": feat = self._workpiece_xyz(xyxy) if feat is None: feat = self._plane_center(xyxy) @@ -720,9 +1053,10 @@ class PerceptionNode(Node): uv = np.asarray(feat.uv, dtype=float).reshape(2) z_meas = float(p_cam[2]) note = feat.note + borrowed = bool(getattr(feat, "borrowed", False)) else: z_meas, note = self._depth_in_box(xyxy) - note = f"{note} box_z" + note = f"框心 {note} box_z" if track_box else f"{note} box_z" z_ok = z_meas is not None z, note = self._metric_z(z_meas, note) if z is None: @@ -744,6 +1078,24 @@ class PerceptionNode(Node): self._publish_detection_box(xyxy, float(best.conf), float(best.cls_id), uv, float(z)) + # ---- 守卫二:跟踪点的**每帧位移上限** ---- + # 工件不动、相机 30Hz,真实观测一帧走不了 4cm(实测真实运动 ≤15mm/帧)。 + # 观测可信 ⇒ 夹到上限限速跟随(不丢目标);观测是**借深度**的 ⇒ 超上限整帧 + # 不采信(2026-10-08 真机,假 k0 带着借来的深度、z 看着很合理,1s 把臂带走 + # 400mm)。判不采信时**不发跟踪点**,让伺服按"目标丢失"处理(原地不动)。 + step, why_step = self._slew.update( + np.asarray(p_cam, dtype=float).reshape(3)[:2], borrowed=borrowed + ) + if step is None: + self.get_logger().warn( + f"跟踪点判误检,本帧不发点({why_step})" + f" uv=({uv[0]:.0f},{uv[1]:.0f}) conf={best.conf:.2f}", + throttle_duration_sec=0.5, + ) + return + p_cam = np.asarray(p_cam, dtype=float).reshape(3).copy() + p_cam[0], p_cam[1] = float(step[0]), float(step[1]) + with self._lock: self.kf.advance(now) if self.kf.initialized: @@ -751,6 +1103,21 @@ class PerceptionNode(Node): dpx = float(np.linalg.norm(box_uv - self._cam_to_pixel(pred))) dz = abs(float(p_cam[2] - pred[2])) if z_ok else 0.0 if dpx > self.jump_px or (z_ok and dz > self.jump_z_m): + # ---- 守卫三:远框"重新捕获"要多帧确认 ---- + # 一帧的远框更可能是模型在别的东西上误报,而不是工件真被挪走了 + #(真机那串假框的 dpx 是 480/418/207,而且每帧换个地方)。 + ok_far, why_far = self._far.allow( + None if self.feature_mode != "keypoint" else tuple(uv), + dpx, + near_px=self.reacquire_far_px, + ) + if not ok_far: + self.get_logger().warn( + f"重新捕获未确认({why_far})conf={best.conf:.2f} —— " + "本帧不发点,不追这一帧的新位置", + throttle_duration_sec=0.5, + ) + return self.kf.reset(p_cam, now) self.get_logger().info( f"重新捕获 conf={best.conf:.2f} dpx={dpx:.0f}", @@ -772,9 +1139,12 @@ class PerceptionNode(Node): filt[2] = z_use self._last_filt = filt.copy() + if handoff or self._d435_commanding: + # 没有高置信度,或 D435 厂家移动还没交接:推理留着,控制点不许发。 + return self._publish_point(filt, stamp) self.get_logger().info( - f"跟踪 {self.feature_mode} conf={best.conf:.2f} uv=({uv[0]:.0f},{uv[1]:.0f}) " + f"跟踪 {'框心' if track_box else self.feature_mode} conf={best.conf:.2f} uv=({uv[0]:.0f},{uv[1]:.0f}) " f"z={filt[2]:.3f} z_ok={int(z_ok)} {note}", throttle_duration_sec=0.4, ) @@ -789,6 +1159,191 @@ class PerceptionNode(Node): return True return age < 0.25 + def _keypoint_feature(self, det): + """用 pose 模型的 ``keypoint_index``(默认 k0)当跟踪点。 + + 约定:k0 是跟踪孔,k1/k2 是对孔(见 ``pose_detector``)。 + 返回 ``PlaneFeature``,坐标系 / 语义和 plane 模式完全一致 —— 下游 + (卡尔曼、visual_servo)不需要知道这是关键点。 + + k0 掉信(置信度低 / 该处没深度)时**不许把跟踪点横移到框中心** —— + 那是另一个点,会瞬间平移一大截。正确做法是用 k0 相对工件框的**归一化偏移** + 在框上重建 k0:位置连续,工件动时还能跟着动。 + + 真机反例(2026-10-08,一阶段跑 150s 没锁上,arm 89): + + 0659.551 死区保持 |e_xy|=3.0mm ← 其实已经锁定(误差 3mm) + 0659.598 k0 置信度 0.01 < 0.30,本帧不用它 + 0659.604 feat_base=(0.675,-0.099) ← 兜底切到框中心,跟踪点横移 89mm + 0660.121 v=(-0.206,+0.400) ← 伺服以 0.45m/s 去追这个假点 + 0660.561 过期保持 —— 不跟踪冻结的检测框 ← 画面糊掉,彻底丢失 + + 只有在"连一次可信的 k0 都没见过"(``_kpt_box_frac`` 为空)时才返回 None, + 交给调用方回落到框中心 —— 那是冷启动,没有更好的信息可用。 + """ + kpts = getattr(det, "kpts", None) + if kpts is None: + return None + kpts = np.asarray(kpts, dtype=float) + if kpts.ndim != 2 or kpts.shape[0] <= self.keypoint_index or kpts.shape[1] < 3: + return None + u, v, kc = (float(x) for x in kpts[self.keypoint_index][:3]) + + # 工件框(用来把 k0 的偏移归一化,以及掉信时重建) + box = getattr(det, "xyxy", None) + box = None if box is None else np.asarray(box, dtype=float).reshape(4) + cx = cy = bw = bh = None + if box is not None: + cx = 0.5 * (box[0] + box[2]) + cy = 0.5 * (box[1] + box[3]) + bw = abs(box[2] - box[0]) + bh = abs(box[3] - box[1]) + + finite = bool(np.isfinite(u) and np.isfinite(v) and np.isfinite(kc)) + # k0 的**像素位置**是否可信:置信度够 ≠ 位置对。2026-10-08 真机,模型在 + # uv=(12,30)/(76,75)/(143,92) 这些**贴画面边**的地方以 conf 0.53~0.73 报 k0 + #(真 k0 是 0.87,没有可分区间)—— 孔心长在工件上,不可能在画面边上。 + # 位置不可信不是"没有目标",而是"本帧 k0 位置不能用",交回下面的连续性路径。 + why_pos = ( + kpt_plausible( + u, v, box, *self._img_wh_or_zero(), border_px=self.keypoint_border_px + ) + if finite + else None + ) + borrowed = False + if finite and kc >= self.keypoint_min_conf and why_pos is None: + # k0 可信:位置就用 k0 自己 + uv = np.array([u, v], dtype=float) + z, znote = self._depth_at_uv(u, v) + if z is None: + # 位置可信、只是深度读不到:XY 仍然用 k0(不许横移),只借深度 + if box is None: + return None + z, note2 = self._depth_in_box(box) + if z is None: + return None + znote = f"{note2} 借深度" + borrowed = True + if box is not None and bw is not None and bw > 1e-6 and bh > 1e-6: + self._kpt_box_frac = np.array( + [(u - cx) / bw, (v - cy) / bh], dtype=float + ) + reason = "" + else: + # k0 不可信:按"相对框的偏移"重建,位置连续、且跟着框走。 + if not finite: + reason = "非有限值" + elif why_pos is not None: + # 置信度够但**位置**不合理(贴画面边 / 不在自己的框里) + reason = why_pos + else: + reason = f"置信度 {kc:.2f} < {self.keypoint_min_conf:.2f}" + if ( + self._kpt_box_frac is None + or box is None + or bw is None + or bw <= 1e-6 + or bh is None + or bh <= 1e-6 + ): + self.get_logger().warn( + f"k{self.keypoint_index} {reason},且还没有可信历史 —— 本帧不用它", + throttle_duration_sec=1.0, + ) + return None + uv = np.array( + [cx + float(self._kpt_box_frac[0]) * bw, + cy + float(self._kpt_box_frac[1]) * bh], + dtype=float, + ) + z, znote = self._depth_at_uv(float(uv[0]), float(uv[1])) + if z is None: + z, note2 = self._depth_in_box(box) + if z is None: + return None + znote = f"{note2} 借深度" + borrowed = True + self.get_logger().warn( + f"k{self.keypoint_index} {reason} —— 按框上相对偏移重建跟踪点" + f"(uv=({uv[0]:.0f},{uv[1]:.0f}),框心=({cx:.0f},{cy:.0f})),不横移", + throttle_duration_sec=1.0, + ) + z = float(z) + return PlaneFeature( + uv=uv, + z=z, + xyz=self._pixel_to_cam(float(uv[0]), float(uv[1]), z), + n_inliers=1, + note=f"k{self.keypoint_index}保持({reason}) {znote} z={z:.3f}", + borrowed=borrowed, + ) + + z = float(z) + return PlaneFeature( + uv=uv, + z=z, + xyz=self._pixel_to_cam(float(uv[0]), float(uv[1]), z), + # 关键点特征没有"平面内点"的概念——支撑样本就它自己一个。 + # 这个字段目前没有下游消费者,给 1 是为了让日志里 n=1 说得通。 + n_inliers=1, + note=f"k{self.keypoint_index}({znote}) z={z:.3f}", + borrowed=borrowed, + ) + + def _img_wh_or_zero(self) -> tuple: + """当前彩色图 ``(w,h)``;还没收到图时给 ``(0,0)``(守卫会跳过边缘判据)。""" + wh = self._img_wh() + return (0, 0) if wh is None else (int(wh[0]), int(wh[1])) + + def _depth_at_uv(self, u: float, v: float) -> tuple: + """取 (u,v) 附近小窗口的中位深度(米)。``u,v`` 是**彩色图**像素。 + + 深度是 aligned-to-color,但分辨率不一定等于彩色图(D405 的 aligned + 深度会和彩色图不同尺寸),所以先按比例映射到深度图坐标 —— 这点和 + ``_depth_in_box`` 里的缩放保持一致,否则关键点深度会整体偏。 + """ + msg = self._latest_depth + if msg is None: + return None, "无深度" + if not self._depth_fresh(msg): + return None, "深度过期" + buf = self._decode_depth_m(msg) + if buf is None: + return None, "深度无效" + h, w = buf.shape + img = self._latest_image + if img is not None and (int(img.width) != w or int(img.height) != h): + u = u * (w / float(img.width)) + v = v * (h / float(img.height)) + win = self.keypoint_win_px + x0 = int(np.clip(round(u) - win, 0, w - 1)) + x1 = int(np.clip(round(u) + win, x0 + 1, w)) + y0 = int(np.clip(round(v) - win, 0, h - 1)) + y1 = int(np.clip(round(v) + win, y0 + 1, h)) + roi = buf[y0:y1, x0:x1].reshape(-1).astype(np.float32) + if roi.size == 0: + return None, "窗口越界" + enc = (msg.encoding or "").lower() + if enc in ("16uc1", "mono16"): + pos = roi[roi > 0] + if pos.size < 4: + return None, "该处无有效深度" + med = float(np.median(pos)) + # 和 _depth_in_box 同一套量纲判断(有的相机给 mm,有的给 m) + scale = 0.001 if 20.0 <= med <= 8000.0 else (1.0 if med < 20 else 0.0001) + z = med * scale + else: + vals = roi[np.isfinite(roi) & (roi > 0)] + if vals.size < 4: + return None, "该处无有效深度" + z = float(np.median(vals)) + if not (self.feature_min_range < z < self.max_depth): + # 太近 ⇒ 十有八九是爪上夹的通止规(规尖在相机前 ~0.10m,工件面 0.17~0.22m)。 + # 当"这里没有目标"处理,绝不把它当工件去伺服 —— 否则臂会去追自己的工具。 + return None, f"深度 {z:.3f}m 命中工具量程(<{self.feature_min_range:.2f}m)" + return z, f"({u:.0f},{v:.0f})" + def _workpiece_xyz(self, xyxy): msg = self._latest_depth img = self._latest_image @@ -809,7 +1364,7 @@ class PerceptionNode(Node): self._cx, self._cy, (int(img.width), int(img.height)), - min_depth=self.min_depth, + min_depth=self.feature_min_range, # 太近=爪上工具,见 feature_min_range_m max_depth=self.max_depth, work_z_max=self.work_z_max, band_m=self.plane_band_m, @@ -838,7 +1393,7 @@ class PerceptionNode(Node): self._cx, self._cy, (int(img.width), int(img.height)), - min_depth=self.min_depth, + min_depth=self.feature_min_range, # 太近=爪上工具,见 feature_min_range_m max_depth=self.max_depth, work_z_max=self.work_z_max, inlier_m=self.plane_inlier_m, @@ -860,6 +1415,204 @@ class PerceptionNode(Node): return float(self._last_good_z), f"{note} hold_near" return None, f"{note} no_depth" + def _publish_wrist_conf(self, best_conf: Optional[float]) -> None: + msg = Float32() + msg.data = float("nan") if best_conf is None else float(best_conf) + self._wrist_conf_pub.publish(msg) + + def _on_z_locked(self, msg: Bool) -> None: + """锁高状态只记着。拍不拍 D435 不看它,看 D405 连续漏检。""" + self._z_locked = bool(msg.data) + + def _on_d435_commanding(self, msg: Bool) -> None: + """伺服还在执行 D435 那一个点时,不再提交下一张,D405 控制点也不发。 + + 这一轮已经拍过并走完。停稳后打开 D405 框心,不因交接瞬间漏检再 MoveL。 + """ + self._d435_commanding = bool(msg.data) + + def _publish_overhead_k0(self, p_base: np.ndarray, is_k0: bool) -> None: + pt = PointStamped() + pt.header.stamp = self.get_clock().now().to_msg() + pt.header.frame_id = self.base_frame or "base" + pt.point.x = float(p_base[0]) + pt.point.y = float(p_base[1]) + pt.point.z = float(p_base[2]) + self._overhead_k0_pub.publish(pt) + del is_k0 # 语义写在日志里;话题保持 PointStamped,避免再抄一份类型 + + def _should_submit_overhead_viz(self) -> bool: + """低频率给 D435 窗刷绿框;不发控制点。赶路时不抢 GPU。""" + if not self.overhead_oneshot_enable or self.d435_move_only: + return False + if self._d435_commanding or self._need_oneshot: + return False + return (time.monotonic() - self._oh_viz_t) >= 0.5 + + def _publish_overhead_det( + self, xyxy: np.ndarray, conf: float, cls_id: float, uv: np.ndarray, z: float + ) -> None: + det = Float32MultiArray() + det.data = [ + float(xyxy[0]), float(xyxy[1]), float(xyxy[2]), float(xyxy[3]), + float(conf), float(cls_id), + float(uv[0]), float(uv[1]), float(z), + ] + self._oh_det_pub.publish(det) + + def _publish_overhead_det_clear(self) -> None: + msg = Float32MultiArray() + msg.data = [] + self._oh_det_pub.publish(msg) + + def _submit_overhead_oneshot(self, *, viz_only: bool = False) -> None: + """把最新 D435 帧排进同一条 YOLO 队列。不在这里等结果 —— 等会把 D405 卡死。""" + if self._oneshot_inflight or not self.overhead_oneshot_enable: + return + now = time.monotonic() + if (not viz_only) and now - self._oneshot_t < self.overhead_cooldown_s: + return + img = self._oh_image + depth = self._oh_depth + if img is None or depth is None: + if not viz_only: + self.get_logger().warn( + "D405 无合格目标,但 D435 还没出图 —— 不编造点", + throttle_duration_sec=1.0, + ) + return + if (now - self._oh_image_mono) > self.overhead_frame_max_age_s: + if not viz_only: + self.get_logger().warn( + f"D435 彩图过期 {(now - self._oh_image_mono)*1000:.0f}ms —— 不反投影", + throttle_duration_sec=1.0, + ) + return + if (not viz_only) and (now - self._oh_depth_mono) > self.overhead_frame_max_age_s: + self.get_logger().warn( + f"D435 深度过期 {(now - self._oh_depth_mono)*1000:.0f}ms —— 不反投影", + throttle_duration_sec=1.0, + ) + return + if (not viz_only) and self._oh_fx <= 1.0: + self.get_logger().warn( + "D435 内参还没到(camera_info)—— 不反投影", + throttle_duration_sec=1.0, + ) + return + if (not viz_only) and self._T_oh is None: + self.get_logger().error("眼在手外 T 没加载 —— 一次性定位拒绝") + return + seq = _ONESHOT_VIZ_SEQ if viz_only else _ONESHOT_SEQ + try: + bgr = _bgr_copy(img) + small, scale = self._prepare_infer(bgr) + self._infer_meta[seq] = scale + if not self.detector.submit(small, seq): + return + except Exception as exc: # noqa: BLE001 + self.get_logger().warn( + f"D435 {'预览' if viz_only else '一次性'}提交失败:{exc}", + throttle_duration_sec=2.0, + ) + return + self._oneshot_inflight = True + self._oneshot_viz_only = bool(viz_only) + self._oneshot_img = img + self._oneshot_depth = depth + if viz_only: + self._oh_viz_t = now + else: + self.get_logger().info("D435 一次性已提交(不打断 D405 队列)") + + def _finish_overhead_oneshot( + self, dets, scale: float, *, viz_only: bool = False + ) -> None: + """YOLO 返回的顶视结果。viz_only 只刷绿框;控制路径才发基座点。""" + self._oneshot_inflight = False + viz_only = bool(viz_only or self._oneshot_viz_only) + self._oneshot_viz_only = False + now = time.monotonic() + if not viz_only: + self._oneshot_t = now + img = self._oneshot_img + depth = self._oneshot_depth + self._oneshot_img = None + self._oneshot_depth = None + if dets is INFER_BUSY or dets is None or img is None: + return + if scale != 1.0: + for d in dets: + d.xyxy = d.xyxy * scale + if getattr(d, "kpts", None) is not None: + d.kpts = np.asarray(d.kpts, dtype=float).copy() + d.kpts[:, :2] *= scale + det = select_oneshot_det(dets, self.overhead_oneshot_conf if not viz_only else 0.25) + if det is None: + self._publish_overhead_det_clear() + if not viz_only: + self._oneshot_t = now + self.get_logger().warn( + f"D435 一次性:画面里没有 conf≥{self.overhead_oneshot_conf:.2f} 的工件", + throttle_duration_sec=1.0, + ) + return + xyxy = np.asarray(det.xyxy, dtype=float).reshape(4) + uv = np.array( + [0.5 * (xyxy[0] + xyxy[2]), 0.5 * (xyxy[1] + xyxy[3])], dtype=float + ) + self._publish_overhead_det( + xyxy, float(det.conf), float(det.cls_id), uv, 0.0 + ) + if viz_only: + return + if depth is None: + self._oneshot_t = now + return + raw = self._decode_depth_m(depth) + depth_m = depth_raw_to_m(raw, depth.encoding or "") + if depth_m is None: + self._oneshot_t = now + self.get_logger().warn( + "D435 深度无法转成米 —— 不发点", throttle_duration_sec=1.0 + ) + return + color_wh = (int(img.width), int(img.height)) + depth_wh = (int(depth_m.shape[1]), int(depth_m.shape[0])) + got = oneshot_k0_base( + det, + depth_m, + fx=self._oh_fx, + fy=self._oh_fy, + cx=self._oh_cx, + cy=self._oh_cy, + T_cam_to_base=self._T_oh, + min_z_m=self.overhead_min_depth, + max_z_m=self.overhead_max_depth, + kpt_index=self.keypoint_index, + kpt_min_conf=self.keypoint_min_conf, + min_det_conf=self.overhead_oneshot_conf, + color_wh=color_wh, + depth_wh=depth_wh, + ) + self._oneshot_t = now + if got is None: + self.get_logger().warn( + "D435 一次性:深度或 k0 不可用,不发点", + throttle_duration_sec=1.0, + ) + return + p_base, is_k0 = got + self._oneshot_shot = True + self._oneshot_shot_t = now + self._need_oneshot = False + self._publish_overhead_k0(p_base, is_k0) + self.get_logger().info( + f"D435 一次性定位 {'k0' if is_k0 else '框心(顶视看不见 k0)'} " + f"base=({p_base[0]:.3f},{p_base[1]:.3f},{p_base[2]:.3f}) " + f"conf={float(det.conf):.2f}" + ) + def _publish_point(self, filt: np.ndarray, stamp) -> None: pt = PointStamped() pt.header.stamp = stamp diff --git a/build/arm_application/build/lib/arm_application/pipeline_node.py b/build/arm_application/build/lib/arm_application/pipeline_node.py index d4eab0a..4e99f2e 100644 --- a/build/arm_application/build/lib/arm_application/pipeline_node.py +++ b/build/arm_application/build/lib/arm_application/pipeline_node.py @@ -11,31 +11,116 @@ from __future__ import annotations import json +import math import os import signal import subprocess import time -from typing import Optional +from pathlib import Path +from typing import Optional, Tuple import numpy as np import rclpy from geometry_msgs.msg import PointStamped -from rclpy.qos import HistoryPolicy, QoSProfile, ReliabilityPolicy +from rclpy.qos import DurabilityPolicy, HistoryPolicy, QoSProfile, ReliabilityPolicy from std_msgs.msg import Bool, String +from trajectory_msgs.msg import JointTrajectory +from arm_application.gauge_kin import ( + a7_limit_target, + match_limits, + parse_joint_limits, +) +from arm_application.overhead_oneshot import D435_MOVEL_GAVE_UP +from arm_application.site_io import load_site_dict +from arm_application.stage2_locate_node import _pt from arm_application.stage3_search_node import Stage3Search -#: 一阶段跟踪高相对二阶段悬停高的**抬升量** [m]。 +#: 悬停时规尖离面不够,跟踪高再抬的量 [m]。 #: -#: 为什么要抬:跟踪时通止规已经夹在爪上,规尖比相机更靠下;悬停高是"相机拍清 -#: 孔"的高度,直接在那儿跟踪会让规尖刮到工件。抬 5cm 让它离开工件,二阶段再 -#: 小幅下降(只需 5cm 以内的行程)。 +#: 只在「悬停高上规尖离工件面 < :data:`TRACK_LOCK_GAP_M`」时加上。仿真悬停按 +#: 工具几何只留约 2mm,不抬就会在跟踪时刮到工件。真机 89 悬停 0.320 时规尖 +#: 已经在面上方约 75mm,再抬 50mm 会让对孔前先改一次高度(0.37→0.32)。 #: #: ⚠️ 抽成常量是因为它不只被流程用:``scripts/check_sim_scene.py`` 要用它核对 #: "跟踪高有没有超出工作盒上界"(仿真里悬停 0.632 + 0.05 = 0.682 > 真机那套 #: 0.65 上界,就是被这条查出来的)。两处各写一个字面量迟早漂移。 TRACK_CLEARANCE_M = 0.05 +#: 悬停时规尖离面已经不少于这个值 [m],一阶段就锁在悬停高,对孔完成后再下降。 +TRACK_LOCK_GAP_M = 0.040 + + +def init_z_refusal( + z_m: float, + tool_len_m: float, + surface_z_m: float, + gap_m: float, + z_min: float, + z_max: float, +) -> str: + """初始法兰高度能不能用。空串表示可以;非空就是拒绝原因,不许悄悄抬高。""" + z = float(z_m) + if z < float(z_min) - 1e-6 or z > float(z_max) + 1e-6: + return ( + f"初始法兰 Z {z:.3f}m 超出工作盒 [{float(z_min):.3f}, {float(z_max):.3f}]," + "拒绝开跑" + ) + tool = float(tool_len_m) + surf = float(surface_z_m) + if tool <= 0.0 or surf <= 0.0: + return "写了初始高度,但工具长度或工件面未知,无法确认尖端在面之上,拒绝开跑" + clear = z - tool - surf + if clear < float(gap_m) - 0.001: + return ( + f"初始法兰 Z {z:.3f}m 会让工具尖进入工件:" + f"尖端 {z - tool:.3f},工件面 {surf:.3f}," + f"间隙 {clear * 1000:.1f}mm,要求 ≥ {float(gap_m) * 1000:.1f}mm。" + "拒绝开跑,不会悄悄抬高。" + ) + return "" + + +def hold_at_insert_z(final, *, skip3: bool) -> bool: + """贴面已经按 ``final_gap_mm`` 停下时,不再进三阶段。 + + 三阶段开局会抬到悬高上方测触觉,再落回 ``hole_hover_z_m``。 + 没有接触传感器。到位高度就是这次的贴面间隙,不另设一个 Z。 + """ + if skip3: + return True + if not isinstance(final, dict): + return False + return bool(final.get("insert_held")) + + +def track_lock_z(hover_z: float, tool_len_m: float, surface_z_m: float) -> float: + """一阶段锁高。 + + 悬停时规尖离面已经 ≥ ``TRACK_LOCK_GAP_M``:锁在悬停高,跟踪和对孔都不改 Z, + 对孔完成后再下降。离面不够(仿真悬停只留 2mm):再抬 ``TRACK_CLEARANCE_M``, + 否则跟踪会刮到工件。工具长或工件面缺失时抬升 —— 缺数时锁在悬停高等于没检查。 + """ + tool = float(tool_len_m) + surf = float(surface_z_m) + hover = float(hover_z) + if tool > 0.0 and surf > 0.0 and (hover - tool - surf) >= TRACK_LOCK_GAP_M: + return hover + return hover + TRACK_CLEARANCE_M + + +def stage1_log_fatal(log_path: str) -> str: + """一阶段日志里已经写明失败时,不许再空等锁定。空串 = 还没到这一步。""" + try: + text = Path(log_path).read_text(encoding="utf-8", errors="replace") + except OSError: + return "" + if D435_MOVEL_GAVE_UP in text: + return ( + f"D435 {D435_MOVEL_GAVE_UP}(RDK 控制模式没切到 primitive)," + f"一阶段中止。不是视野/标定。看 {log_path}" + ) + return "" def stage1_timeout_reason(points_seen: int, timeout_s: float, log_path: str) -> str: @@ -52,6 +137,9 @@ def stage1_timeout_reason(points_seen: int, timeout_s: float, log_path: str) -> 以前两种情况共用一句"没锁定(视野里没工件?)",于是"perception_node 因为缺依赖早退了"被读成"算法不收敛",白查半天。 """ + fatal = stage1_log_fatal(log_path) + if fatal: + return fatal if points_seen <= 0: return ( f"一阶段 {timeout_s:.0f}s 没锁定:**一个视觉目标点都没收到**" @@ -79,11 +167,26 @@ class AssemblyPipeline(Stage3Search): self.declare_parameter("skip_stage1", False) self.declare_parameter("skip_stage2", False) self.declare_parameter("skip_stage3", False) # 默认搜孔+轻压;拧入靠 --depth + self.declare_parameter("d435_move_only", False) + self.declare_parameter("init_z_m", -1.0) # >0:启动后先到这个法兰高度 self.declare_parameter("stage1_timeout_sec", 150.0) self.linger3 = 1.2 # 串联结束短保持;单独跑 stage3 仍用 site linger_sec self._s1: Optional[subprocess.Popen] = None self._locked = False + self._robot_description: Optional[str] = None + # robot_state_publisher 用 TRANSIENT_LOCAL 只发一次。默认 VOLATILE + # 订阅在它之后才起来,3s 内一条都收不到,A7 会因“没有限位”拒绝旋转。 + self.create_subscription( + String, + "/robot_description", + self._on_robot_description, + QoSProfile( + depth=1, + durability=DurabilityPolicy.TRANSIENT_LOCAL, + reliability=ReliabilityPolicy.RELIABLE, + ), + ) self.create_subscription(Bool, "/visual_servo/locked", self._on_lock, 10) # 诊断用:一阶段超时时靠它区分"感知没给点"和"给了点没收敛"。 # 只计数,不参与控制 —— 它绝不能影响流程本身的判断。 @@ -113,9 +216,11 @@ class AssemblyPipeline(Stage3Search): skip1 = bool(self.get_parameter("skip_stage1").value) skip2 = bool(self.get_parameter("skip_stage2").value) skip3 = bool(self.get_parameter("skip_stage3").value) + self.d435_move_only = bool(self.get_parameter("d435_move_only").value) self.get_logger().info( f"pipeline arm_ee={self.ee_frame} hole={self.target_hole} " - f"skip1={skip1} skip2={skip2} skip3={skip3} insert={self.insert_depth_mm:.1f}mm" + f"skip1={skip1} skip2={skip2} skip3={skip3} " + f"d435_only={self.d435_move_only} insert={self.insert_depth_mm:.1f}mm" ) def _state(self, s: str) -> None: @@ -125,6 +230,113 @@ class AssemblyPipeline(Stage3Search): self._state_pub.publish(msg) self._pipe_pub.publish(msg) + def _on_robot_description(self, msg: String) -> None: + self._robot_description = str(msg.data) + + def _a7_limits(self, timeout_s: float = 3.0) -> Optional[Tuple[float, float]]: + """A7 软件限位。来自 ``/robot_description`` 的 joint7,与厂家 ``q_min/q_max`` 同一对。""" + t0 = time.monotonic() + while self._robot_description is None and time.monotonic() - t0 < timeout_s: + self._spin(0.05) + if not self._robot_description: + self.get_logger().error("拿不到 /robot_description,A7 没有限位,拒绝旋转") + return None + got = match_limits( + parse_joint_limits(self._robot_description), [self.joint_names[-1]] + ) + if got is None: + self.get_logger().error( + f"/robot_description 里没有 {self.joint_names[-1]} 的限位,拒绝旋转" + ) + return got + + def _send_a7_only(self, a7_rad: float, speed_deg_s: float, tag: str) -> bool: + """只下发 A7。前六轴用这一拍的当前角,厂家 ``SendJointPosition`` 收到的也是这一组。""" + q, Tee = self._wait_state(5.0) + if q is None or Tee is None or int(q.size) != 7: + self.get_logger().error(f"{tag}: 拿不到 7 轴关节,不下发") + return False + z0 = float(Tee[2, 3]) + q_hold = q.copy() + q_hold[6] = float(a7_rad) + delta_deg = abs(math.degrees(float(q_hold[6] - q[6]))) + dur = max(0.8, delta_deg / max(float(speed_deg_s), 1.0)) + zeros = np.zeros(q.size) + traj = JointTrajectory() + traj.header.stamp.sec = 0 + traj.header.stamp.nanosec = 0 + traj.joint_names = list(self.joint_names) + traj.points = [_pt(q, zeros, 0.2), _pt(q_hold, zeros, 0.2 + dur)] + self.get_logger().info( + f"{tag}: A7 {math.degrees(float(q[6])):+.1f}° → " + f"{math.degrees(float(q_hold[6])):+.1f}°," + f"{speed_deg_s:.0f}°/s,前六轴不动,法兰 Z={z0:.4f}m" + ) + self._send_action(traj, wait_s=dur + 8.0) + q2, Tee2 = self._wait_state(5.0) + if q2 is None or Tee2 is None: + self.get_logger().error(f"{tag}: 走完读不到关节") + return False + others = float(np.max(np.abs(q2[:6] - q[:6]))) + dz = abs(float(Tee2[2, 3]) - z0) + a7_err = abs(float(q2[6] - q_hold[6])) + self.get_logger().info( + f"{tag}: 前六轴最大偏差 {others:.4f} rad," + f"法兰 ΔZ={dz * 1000:.1f}mm,A7 残差 {math.degrees(a7_err):.1f}°" + ) + if others > 0.02: + self.get_logger().error(f"{tag}: 前六轴动了 {others:.3f} rad,中止") + return False + if dz > 0.003: + self.get_logger().error(f"{tag}: 法兰 Z 变了 {dz * 1000:.1f}mm,中止") + return False + if a7_err > 0.05: + self.get_logger().error( + f"{tag}: A7 还差 {math.degrees(a7_err):.1f}°,没到限位内侧" + ) + return False + self._pin(q2) + return True + + def _run_a7_seat(self) -> bool: + """贴面后咬螺纹:A7 先逆时针到限位,再顺时针到限位。不改 Z。""" + limits = self._a7_limits() + if limits is None: + return False + ga = load_site_dict().get("gauge_assembly") or {} + try: + margin = float(ga["extreme_margin_deg"]) + speed = float(ga["extreme_speed_deg_s"]) + ccw = int(ga["extreme_direction"]) + except (KeyError, TypeError, ValueError) as exc: + self.get_logger().error( + f"site.yaml gauge_assembly 缺 A7 旋转参数({exc}),拒绝旋转" + ) + return False + if ccw not in (-1, 1): + self.get_logger().error( + f"extreme_direction 只能是 +1/-1,收到 {ccw},拒绝旋转" + ) + return False + # +1 = 关节角增大 = 逆时针。第一步逆时针出孔让出牙,第二步顺时针进孔咬合。 + steps = ( + (ccw, "A7 逆时针至极限(出孔)"), + (-ccw, "A7 顺时针至极限(进孔)"), + ) + for direction, tag in steps: + q, _Tee = self._wait_state(5.0) + if q is None: + self.get_logger().error(f"{tag}: 没有当前关节") + return False + target = a7_limit_target(q, limits, direction, margin) + if target is None: + self.get_logger().error(f"{tag}: 算不出 A7 限位目标") + return False + if not self._send_a7_only(float(target[6]), speed, tag): + return False + self.get_logger().info("A7 两步完成:逆时针到限位,再顺时针到限位。法兰高度未改。") + return True + def _on_lock(self, msg: Bool) -> None: if bool(msg.data): self._locked = True @@ -163,33 +375,64 @@ class AssemblyPipeline(Stage3Search): self._kill_old_stage1() def _track_z(self) -> float: - """跟踪高度 = 孔悬停高 + :data:`TRACK_CLEARANCE_M`,通止规离开工件。""" - return float(self.hover_z) + TRACK_CLEARANCE_M + """一阶段锁高。写了 ``init_z_m`` 就用它,否则见 :func:`track_lock_z`。""" + z = float(self.get_parameter("init_z_m").value) + if z > 0.0: + return z + return track_lock_z( + float(self.hover_z), + float(getattr(self, "tool_tip_below_flange_m", 0.0) or 0.0), + float(getattr(self, "surface_z_m", 0.0) or 0.0), + ) - def _ensure_clearance(self) -> None: - """上一轮轻压可能还在孔里:先纯 Z 抬到跟踪高,禁止 0.23↔0.35 来回。""" + def _ensure_clearance(self) -> bool: + """没写初始高度:只在低于锁高时抬上去。写了:升或降到那个法兰 Z,不安全就拒绝。""" + user = float(self.get_parameter("init_z_m").value) > 0.0 q, Tee = self._wait_state(4.0) if q is None or Tee is None: - return + if user: + self.get_logger().error("设了 --init-z,但拿不到当前位姿,拒绝开跑") + return False + return True tz = self._track_z() + if user: + why = init_z_refusal( + tz, + float(getattr(self, "tool_tip_below_flange_m", 0.0) or 0.0), + float(getattr(self, "surface_z_m", 0.0) or 0.0), + float(self.final_gap_m), + float(self.ws_min[2]), + float(self.ws_max[2]), + ) + if why: + self.get_logger().error(why) + return False z = float(Tee[2, 3]) - if z >= tz - 0.008: - return + if user: + if abs(z - tz) <= 0.008: + self.get_logger().info(f"已在初始高度 Z={z:.3f}m(目标 {tz:.3f})") + return True + elif z >= tz - 0.008: + return True self._state("pre_lift") - self.get_logger().info( - f"先离开工件/孔口:Z {z:.3f} → {tz:.3f}m(跟踪高=hover+50mm)" - ) - _, q, Tee = self._goto( + self.get_logger().info(f"先到初始高度:Z {z:.3f} → {tz:.3f}m") + ok, q, Tee = self._goto( q, Tee, np.array([float(Tee[0, 3]), float(Tee[1, 3]), tz]), verticalize=True, tol_m=0.003, tol_tilt=self.vert_tol_rad * 2.0, tag="pre_lift", v=self.move_speed, max_hops=8, hold_xy=True, settle_s=0.25, ) q2 = self._q() self._pin(q2 if q2 is not None else q) + z2 = float(Tee[2, 3]) + if user and (not ok or abs(z2 - tz) > 0.008): + self.get_logger().error(f"初始高度没到位:Z={z2:.3f},目标 {tz:.3f}") + return False + return True def _run_stage1(self) -> int: """拉起 perception+servo,等到 /visual_servo/locked 后冻结并拆跟踪。""" - self._ensure_clearance() + if not self._ensure_clearance(): + return 2 self._state("stage1_track") self._kill_old_stage1() self._locked = False @@ -205,12 +448,17 @@ class AssemblyPipeline(Stage3Search): "enable_control:=true", "publish_handeye_tf:=false", f"ee_z_m:={lock_z:.3f}", - "lock_hold_sec:=0.6", f"use_sim_time:={str(use_sim).lower()}", + f"d435_move_only:={str(self.d435_move_only).lower()}", ] - self.get_logger().info( - f"启动一阶段跟踪(锁高 {lock_z:.3f}m,锁定后自动交二阶段)" - ) + if self.d435_move_only: + self.get_logger().info( + f"启动 D435 位移测试(锁高 {lock_z:.3f}m,到位后不交 D405、不进二阶段)" + ) + else: + self.get_logger().info( + f"启动一阶段跟踪(锁高 {lock_z:.3f}m,锁定后自动交二阶段)" + ) self._s1 = subprocess.Popen( cmd, stdout=logf, stderr=subprocess.STDOUT, start_new_session=True, ) @@ -221,6 +469,11 @@ class AssemblyPipeline(Stage3Search): self._spin(0.1) if self._locked: break + fatal = stage1_log_fatal(log_path) + if fatal: + self._stop_stage1() + self.get_logger().error(fatal) + return 1 if self._s1.poll() is not None: self.get_logger().error(f"一阶段进程提前退出,看 {log_path}") return 1 @@ -230,7 +483,12 @@ class AssemblyPipeline(Stage3Search): stage1_timeout_reason(self._point_msgs, timeout, log_path) ) return 1 - self.get_logger().info("一阶段已锁定 — 停跟踪、钉住当前关节,直接进二阶段") + if self.d435_move_only: + self.get_logger().info( + "D435 位移测试结束 — 停跟踪、钉住当前关节,跳过二阶段" + ) + else: + self.get_logger().info("一阶段已锁定 — 停跟踪、钉住当前关节,直接进二阶段") self._stop_stage1() time.sleep(0.35) q = self._q() @@ -242,6 +500,9 @@ class AssemblyPipeline(Stage3Search): skip1 = bool(self.get_parameter("skip_stage1").value) skip2 = bool(self.get_parameter("skip_stage2").value) skip3 = bool(self.get_parameter("skip_stage3").value) + if self.d435_move_only: + skip2 = True + skip3 = True if not self._cli.wait_for_server(timeout_sec=5.0): self.get_logger().error("JTC action 不在 —— 先开 T1: run_real.sh --arm 89") return 2 @@ -252,7 +513,8 @@ class AssemblyPipeline(Stage3Search): if code != 0: return code else: - self._ensure_clearance() + if not self._ensure_clearance(): + return 2 self._state("skip_stage1") q, Tee = self._wait_state(10.0) @@ -267,19 +529,54 @@ class AssemblyPipeline(Stage3Search): if code != 0: self.get_logger().error(f"二阶段失败 exit={code},停在当前位姿") return code - self.get_logger().info( - f"二阶段 OK 残差 {final.get('residual_mm', -1)}mm" - + (" — 跳过搜孔,保持悬停" if skip3 else " — 立刻下压搜孔并轻压(不拧入)") - ) + stay = hold_at_insert_z(final, skip3=skip3) + if stay and final.get("insert_held"): + self.get_logger().info( + f"二阶段 OK 残差 {final.get('residual_mm', -1)}mm — " + f"插孔停在法兰 Z={final.get('flange_z_m')}m," + f"规尖离面 {final.get('tip_gap_mm')}mm" + f"(目标 {final.get('commanded_gap_mm')}mm,来自 final_gap_mm)。" + "没有接触传感器,不另设 Z,不抬回悬高。" + ) + else: + self.get_logger().info( + f"二阶段 OK 残差 {final.get('residual_mm', -1)}mm" + + ( + " — 跳过搜孔,停在观测高度(看规尖是否对中;进程退出后臂保持)" + if skip3 + else " — 立刻下压搜孔并轻压(不拧入)" + ) + ) else: self._state("skip_stage2") + stay = hold_at_insert_z(final, skip3=skip3) - if skip3: + if stay: self._state("skip_stage3") - self.get_logger().info("跳过搜孔 —— 臂保持在孔上方") + if self.d435_move_only: + self.get_logger().info( + "D435 位移测试结束 —— 臂停在当前高度,不交 D405、不对孔;" + "15s 后本进程退出,臂保持不动" + ) + elif isinstance(final, dict) and final.get("insert_held"): + if q is not None: + self._pin(q) + self.get_logger().info( + "插孔已停在贴面高度,不进搜孔、不抬回悬高。" + "接着只转 A7:先逆时针到限位,再顺时针到限位。" + ) + if not self._run_a7_seat(): + self.get_logger().error( + "A7 旋转没走完,臂停在当前关节。不抬 Z。" + ) + else: + self.get_logger().info( + "跳过搜孔 —— 臂停在当前高度。请看规尖与孔是否对中;" + "15s 后本进程退出,臂保持不动" + ) if final: self._publish_result(final) - self._linger_hold(final if final else {"ok": True}, seconds=0.8) + self._linger_hold(final if final else {"ok": True}, seconds=15.0) payload = {"ok": True, "stage": "pipeline", "exit": 0, "skipped": "stage3"} try: payload["stage2"] = json.loads( diff --git a/build/arm_application/build/lib/arm_application/plane_feature.py b/build/arm_application/build/lib/arm_application/plane_feature.py index 84c43ad..1cc1eae 100644 --- a/build/arm_application/build/lib/arm_application/plane_feature.py +++ b/build/arm_application/build/lib/arm_application/plane_feature.py @@ -21,6 +21,11 @@ class PlaneFeature: xyz: np.ndarray # (3,) 相机坐标系下的立体点云质心 n_inliers: int note: str + # 这个点的 Z 是不是**借**来的(该像素处读不到自己的深度,从检测框里借了一个)。 + # 为什么要显式带出来、而不是让下游去认 ``note`` 里的字:借深度意味着该像素的 + # 深度不可读 ⇒ 绝对位置不足以用来**重定位**(2026-10-08 真机,假 k0 带着借来的 + # 深度、z 看着很合理 0.27~0.39m,于是"物理量程"守卫也失效)。 + borrowed: bool = False def _depth_meters(buf: np.ndarray, encoding: str) -> Tuple[np.ndarray, float]: diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/pose_detector.py b/build/arm_application/build/lib/arm_application/pose_detector.py similarity index 100% rename from install/arm_application/lib/python3.11/site-packages/arm_application/pose_detector.py rename to build/arm_application/build/lib/arm_application/pose_detector.py diff --git a/build/arm_application/build/lib/arm_application/realsense_color_pub.py b/build/arm_application/build/lib/arm_application/realsense_color_pub.py index f6b5e4a..c95b46a 100644 --- a/build/arm_application/build/lib/arm_application/realsense_color_pub.py +++ b/build/arm_application/build/lib/arm_application/realsense_color_pub.py @@ -32,16 +32,21 @@ from rclpy.qos import qos_profile_sensor_data from sensor_msgs.msg import CameraInfo, Image from std_msgs.msg import Float32MultiArray +from arm_application.ros_node import TolerantNode, param_as_str -def _param_as_str(node: Node, name: str, default: str = '') -> str: - """字符串参数,同时兼容命令行传数字的情况(例如序列号)。""" - node.declare_parameter( - name, default, ParameterDescriptor(dynamic_typing=True) - ) - val = node.get_parameter(name).value - if val is None or val == '': - return '' - return str(val).strip() +# RealSense 掉到 480Mbps(或整台消失)时的排查口径。写在这里是为了"只有一处": +# 相机节点的报错、preflight 脚本、文档都引用同一套说法,不会各说各的。 +# 为什么 480Mbps 值得专门解释一次(2026-09-28 现场): +# D435 原本协商到 USB 3.2、1280x720@30 跑得好好的,中途 +# `xioctl(UVCIOC_CTRL_QUERY) ... No such file or directory`(= 设备从总线上消失) +# 之后重新枚举成了 **USB 2.1**。USB3 线缆/座子里 SuperSpeed 那一对针脚一旦 +# 接触不良,USB2 的针脚还能用 —— 于是设备不会"掉线",只是**悄悄掉速**, +# 表现成"相机在,但帧率/分辨率不对"。这时查软件是查不出来的。 +USB_RESEAT_HINT = ( + '拔插一次、换一根 USB3 线,或换到机箱后面板直连的蓝色口 —— ' + '只协商到 480Mbps 通常是 SuperSpeed 针脚没接上,不是相机坏了。' + '看当前协商速率:lsusb -t(设备后面写 480M 还是 5000M)。' +) def _fill_camera_info( @@ -68,23 +73,17 @@ def _fill_camera_info( def _site_yaml_path() -> Path: - env = str(os.environ.get("SITE_CONFIG") or "").strip() - if env: - p = Path(env).expanduser() - if p.is_file(): - return p - home = Path.home() / "ros2" / "config" / "site.yaml" - if home.is_file(): - return home - return Path("/home/cc/ros2/config/site.yaml") + from arm_application.site_io import site_path + + return site_path() -class RealsenseColorPub(Node): +class RealsenseColorPub(TolerantNode): def __init__(self) -> None: super().__init__('realsense_color_pub') self.declare_parameter('camera_name', 'd405') # 话题命名空间 self._name = str(self.get_parameter('camera_name').value).strip().strip('/') - self._serial = _param_as_str(self, 'camera_serial', '') + self._serial = param_as_str(self, 'camera_serial', '') self.declare_parameter('width', 1280) self.declare_parameter('height', 720) self.declare_parameter('fps', 15) @@ -177,6 +176,10 @@ class RealsenseColorPub(Node): self._overlay: Optional[list] = None self._overlay_stamp = 0.0 self._capture_started = False + self._cap_lock = threading.Lock() + self._cap_event = threading.Event() + self._pending = None + self._last_frame_mono = 0.0 self._usb_desc = '' self._last_ok = None self._site_yaml = _site_yaml_path() @@ -310,23 +313,26 @@ class RealsenseColorPub(Node): self._info_pub.publish(info) if depth_u16 is not None: - dh, dw = int(depth_u16.shape[0]), int(depth_u16.shape[1]) - dmsg = Image() - dmsg.header.stamp = stamp - dmsg.header.frame_id = self._frame_id - dmsg.height = dh - dmsg.width = dw - dmsg.encoding = '16UC1' - dmsg.is_bigendian = 0 - dmsg.step = dw * 2 - dmsg.data = array.array('B', np.ascontiguousarray(depth_u16).tobytes()) - self._depth_pub.publish(dmsg) - if not self._logged_depth: - self._logged_depth = True - self.get_logger().info( - f'首个对齐深度 {dw}x{dh} → ' - f'/{self._name}/aligned_depth_to_color/image_raw' - ) + self._publish_depth(depth_u16, stamp) + + def _publish_depth(self, depth_u16: np.ndarray, stamp=None) -> None: + dh, dw = int(depth_u16.shape[0]), int(depth_u16.shape[1]) + dmsg = Image() + dmsg.header.stamp = stamp or self.get_clock().now().to_msg() + dmsg.header.frame_id = self._frame_id + dmsg.height = dh + dmsg.width = dw + dmsg.encoding = '16UC1' + dmsg.is_bigendian = 0 + dmsg.step = dw * 2 + dmsg.data = array.array('B', np.ascontiguousarray(depth_u16).tobytes()) + self._depth_pub.publish(dmsg) + if not self._logged_depth: + self._logged_depth = True + self.get_logger().info( + f'首个对齐深度 {dw}x{dh} → ' + f'/{self._name}/aligned_depth_to_color/image_raw' + ) def _start_pipeline(self, reconnect: bool = False) -> None: try: @@ -348,8 +354,8 @@ class RealsenseColorPub(Node): if not devices: raise RuntimeError( '没有连接 RealSense(多次重试后 USB 仍为空)。' - '请把 D405 插到**本机**的 USB3(蓝色)口,拔插一次,' - '并关闭 realsense-viewer / 192.168.0.108 上占用该相机的采集端。' + '拔插一次;确认没有 realsense-viewer / 其它进程占着这台相机;' + + USB_RESEAT_HINT ) found = self._pick_device(devices, rs) @@ -374,9 +380,12 @@ class RealsenseColorPub(Node): f'requested {self._width}x{self._height}@{self._fps}Hz' ) if usb2: + # 只在 480Mbps 口上才降。实测(2026-09-28)640x480@15 彩色+深度 + # 可以稳定跑满 15fps;但 1280x720@30 在 USB2 上物理不可能 + # (SuperSpeed 没协商上)。 self.get_logger().warn( - f'{cam_name} 接在 USB {usb_desc} 上 —— 深度/IR 将保持 ' - '640x480@15。把 D405 插到 USB3(蓝色)口可获得 848@30。' + f'{cam_name} 只协商到 USB {usb_desc}(480Mbps)—— 降到 ' + f'640x480@15Hz。' + USB_RESEAT_HINT ) self._width, self._height, self._fps = 640, 480, 15 @@ -455,7 +464,9 @@ class RealsenseColorPub(Node): trial.enable_stream( rs.stream.infrared, 2, w, h, rs.format.y8, fps ) - profile = pipe.start(trial) + # 回调里只留最新一帧。wait_for_frames 会等彩色、深度、红外齐套, + # 场景一动红外对不齐,彩色帧就在这里被丢掉。 + profile = pipe.start(trial, self._on_sdk_frame) have_depth = with_depth have_infra = infra_mode != 'none' self._infra_mode = infra_mode @@ -501,11 +512,18 @@ class RealsenseColorPub(Node): break if profile is None: raise RuntimeError( - f'D405 没有可用的彩色配置。最后的错误:{last_err}' + f'{self._name} 没有可用的彩色配置。最后的错误:{last_err}' ) self._pipe = pipe self._profile = profile + try: + sensor = profile.get_device().first_color_sensor() + if sensor.supports(rs.option.frames_queue_size): + # 队列只留最新一张,避免越积越慢,动起来画面还停在旧帧。 + sensor.set_option(rs.option.frames_queue_size, 1) + except Exception: # noqa: BLE001 + pass self._have_depth = have_depth self._have_infra = have_infra self._logged_depth = False @@ -607,7 +625,7 @@ class RealsenseColorPub(Node): if not getattr(self, '_capture_started', False): self._capture_started = True - self._thread = threading.Thread(target=self._capture_loop, daemon=True) + self._thread = threading.Thread(target=self._publish_loop, daemon=True, name="rs-publish") self._thread.start() def _enable_color_ae_fast(self, profile, rs) -> None: @@ -700,18 +718,60 @@ class RealsenseColorPub(Node): ) return False - def _capture_loop(self) -> None: + def _on_sdk_frame(self, frame) -> None: + """SDK 回调。只拷走彩色并握住这一组帧,立刻返回。 + + 对齐、深度换算和 ROS 发布若做在这个回调里,下一帧来不及取, + 动起来时彩色帧号会跳。那些工作放到 ``_publish_loop``。 + """ + try: + frames = frame.as_frameset() + color = frames.get_color_frame() + if not color: + return + bgr = np.array(np.asanyarray(color.get_data()), copy=True) + frames.keep() + with self._cap_lock: + self._pending = (bgr, frames) + self._last_frame_mono = time.monotonic() + self._cap_event.set() + except Exception as exc: # noqa: BLE001 + try: + self.get_logger().warn(f'收帧:{exc}', throttle_duration_sec=2.0) + except Exception: # noqa: BLE001 + pass + + def _publish_loop(self) -> None: got = False - misses = 0 while self._running and rclpy.ok(): if self._pipe is None: if not self._reconnect(): time.sleep(2.0) continue + if not self._cap_event.wait(0.2): + silent = self._last_frame_mono and time.monotonic() - self._last_frame_mono > 2.0 + if silent: + usb = getattr(self, '_usb_desc', '?') + self.get_logger().error( + f'相机超过 2 秒没有新帧(USB={usb})。正在重连 —— ' + '请给 USB 线缆留点余量,别让机械臂把它拽掉。' + ) + self._last_frame_mono = 0.0 + got = False + self._reconnect() + continue + self._cap_event.clear() + with self._cap_lock: + item = self._pending + self._pending = None + if item is None: + continue + bgr, frames = item try: - t_wait0 = time.monotonic() - frames = self._pipe.wait_for_frames(timeout_ms=2000) - self._t_wait = time.monotonic() - t_wait0 + t_pub = time.monotonic() + # 彩色先发出去。深度对齐再慢,也不能把这一帧彩色拖掉。 + self._publish_frame(bgr, None) + self._t_pub = time.monotonic() - t_pub ir_l = ( frames.get_infrared_frame(1) if self._have_infra and self._infra_mode in ('both', 'left') @@ -722,44 +782,45 @@ class RealsenseColorPub(Node): if self._have_infra and self._infra_mode in ('both', 'right') else None ) + aligned = frames if self._align is not None: t_al = time.monotonic() - frames = self._align.process(frames) + aligned = self._align.process(frames) self._t_align = time.monotonic() - t_al + depth = aligned.get_depth_frame() color = frames.get_color_frame() except Exception as exc: # noqa: BLE001 - misses += 1 text = str(exc) dropped = ( 'disconnect' in text.lower() or 'ioctl' in text.lower() or 'errno=5' in text.lower() ) - if dropped or misses >= 4: + if dropped: usb = getattr(self, '_usb_desc', '?') self.get_logger().error( f'相机数据流中断(USB={usb}):{text[:120]}。' '正在重连 —— 请给 USB 线缆留点余量,别让机械臂把它拽掉。' ) got = False - misses = 0 + self._last_frame_mono = 0.0 self._reconnect() - continue - if misses == 1: - self.get_logger().warn(f'wait_for_frames:{exc}') + else: + self.get_logger().warn(f'整理帧:{exc}', throttle_duration_sec=2.0) continue - if not color: - misses += 1 - continue - misses = 0 - bgr = np.asanyarray(color.get_data()) - depth = frames.get_depth_frame() depth_u16 = np.asanyarray(depth.get_data()) if depth else None if depth_u16 is not None and self._depth_to_mm != 1.0: # 原始设备单位 → 真实 mm(D405 原始为 0.1 mm/单位) depth_u16 = np.clip( depth_u16.astype(np.float32) * self._depth_to_mm, 0, 65535 ).astype(np.uint16) + if depth_u16 is not None: + try: + self._publish_depth(depth_u16) + except Exception as exc: # noqa: BLE001 + if not self._running: + break + self.get_logger().warn(f'发布深度失败:{exc}', throttle_duration_sec=2.0) self._frame_i += 1 self._fps_meter(color, depth, depth_u16) # 预览相关的工作(CPU 上色、IR 拷贝、四窗格绘制)每 N 帧才做一次 @@ -792,7 +853,6 @@ class RealsenseColorPub(Node): ) try: t_pub = time.monotonic() - self._publish_frame(bgr, depth_u16) if self._ir1_pub is not None and ir_l is not None: self._publish_ir(ir_l, self._ir1_pub) if self._ir2_pub is not None and ir_r is not None: diff --git a/build/arm_application/build/lib/arm_application/realsense_view.py b/build/arm_application/build/lib/arm_application/realsense_view.py index 3c1d866..e1a6c87 100644 --- a/build/arm_application/build/lib/arm_application/realsense_view.py +++ b/build/arm_application/build/lib/arm_application/realsense_view.py @@ -27,6 +27,7 @@ from sensor_msgs.msg import Image from std_msgs.msg import Float32MultiArray from arm_application.realsense_color_pub import _site_yaml_path +from arm_application.ros_node import TolerantNode def _colorize_depth_u16(d: np.ndarray) -> np.ndarray: @@ -56,15 +57,22 @@ def _mono_to_bgr(mono: np.ndarray) -> np.ndarray: return np.ascontiguousarray(np.stack([mono, mono, mono], axis=-1)) -class RealsenseView(Node): +class RealsenseView(TolerantNode): def __init__(self) -> None: super().__init__('realsense_view') self.declare_parameter('camera_name', 'd405') self.declare_parameter('overlay_hold_sec', 0.10) + self.declare_parameter('overlay_detection', True) + # D405 用 workpiece/detection;D435 用 workpiece/detection_overhead(像素坐标系不同)。 + self.declare_parameter('detection_topic', 'workpiece/detection') self.declare_parameter('view_hz', 20.0) self.declare_parameter('hud_label', '') self._name = str(self.get_parameter('camera_name').value).strip().strip('/') self._hold = max(0.0, float(self.get_parameter('overlay_hold_sec').value)) + self._overlay_detection = bool(self.get_parameter('overlay_detection').value) + self._det_topic = str(self.get_parameter('detection_topic').value or '').strip() or ( + 'workpiece/detection' + ) self._hud = str(self.get_parameter('hud_label').value or '').strip() self._color: Optional[Image] = None @@ -101,9 +109,10 @@ class RealsenseView(Node): depth=5, reliability=ReliabilityPolicy.RELIABLE, ) - self.create_subscription( - Float32MultiArray, 'workpiece/detection', self._on_det, det_qos - ) + if self._overlay_detection: + self.create_subscription( + Float32MultiArray, self._det_topic, self._on_det, det_qos + ) # stage2 孔对准叠图(k1/k2 标注 + 残差 HUD),有它时优先显示 self.create_subscription( Image, '/stage2/overlay', self._on_stage2_overlay, qos_profile_sensor_data @@ -124,6 +133,7 @@ class RealsenseView(Node): self.create_timer(1.0 / hz, self._push) self.get_logger().info( f'查看器已启动 —— 订阅 /{self._name}/color|depth|infra1|infra2 ' + f'检测={self._det_topic if self._overlay_detection else "关"} ' f'(保留 {self._hold:.2f}s)。关闭窗口 = 仅隐藏。' ) @@ -186,6 +196,9 @@ class RealsenseView(Node): self.get_logger().warn(f"site.yaml 重新加载失败:{exc}") return if "overlay_hold_sec" in cam: + # 顶视检测频率低,保留 launch 里设的较长 hold,别被 site 的 0.1s 冲掉。 + if "overhead" in self._det_topic: + return hold = max(0.0, float(cam.get("overlay_hold_sec") or 0.0)) if abs(hold - self._hold) > 1e-6: self.get_logger().info( diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/ros_node.py b/build/arm_application/build/lib/arm_application/ros_node.py similarity index 100% rename from install/arm_application/lib/python3.11/site-packages/arm_application/ros_node.py rename to build/arm_application/build/lib/arm_application/ros_node.py diff --git a/build/arm_application/build/lib/arm_application/run_joint_trajectory.py b/build/arm_application/build/lib/arm_application/run_joint_trajectory.py index 6ccad6d..771b9ac 100644 --- a/build/arm_application/build/lib/arm_application/run_joint_trajectory.py +++ b/build/arm_application/build/lib/arm_application/run_joint_trajectory.py @@ -12,6 +12,8 @@ from rclpy.node import Node from arm_application.site_io import joint_prefix_default from arm_msgs.action import FollowJointTrajectory +from arm_application.ros_node import TolerantNode + DEFAULT_JOINTS = [ 'joint1', 'joint2', 'joint3', 'joint4', 'joint5', 'joint6', 'joint7', ] @@ -25,7 +27,7 @@ DEFAULT_POSITIONS = [ ] -class RunJointTrajectory(Node): +class RunJointTrajectory(TolerantNode): def __init__(self) -> None: super().__init__('run_joint_trajectory') self.declare_parameter('joint_prefix', joint_prefix_default()) diff --git a/build/arm_application/build/lib/arm_application/servo_node.py b/build/arm_application/build/lib/arm_application/servo_node.py index ebf57bd..10eb349 100644 --- a/build/arm_application/build/lib/arm_application/servo_node.py +++ b/build/arm_application/build/lib/arm_application/servo_node.py @@ -14,19 +14,29 @@ from __future__ import annotations import os import math +import sys import threading import time from collections import deque -from typing import Deque, List, Optional +from typing import Deque, List, Optional, Tuple import numpy as np import rclpy from geometry_msgs.msg import PointStamped, Twist -from std_msgs.msg import Bool +from std_msgs.msg import Bool, Float32 from rclpy.callback_groups import MutuallyExclusiveCallbackGroup, ReentrantCallbackGroup +from rclpy.action import ActionClient from rclpy.executors import MultiThreadedExecutor from rclpy.node import Node -from rclpy.qos import HistoryPolicy, QoSProfile, ReliabilityPolicy, qos_profile_system_default +from control_msgs.action import FollowJointTrajectory +from rclpy.qos import ( + DurabilityPolicy, + HistoryPolicy, + QoSProfile, + ReliabilityPolicy, + qos_profile_sensor_data, + qos_profile_system_default, +) from sensor_msgs.msg import JointState from tf2_ros import Buffer, TransformListener from trajectory_msgs.msg import JointTrajectory, JointTrajectoryPoint @@ -38,14 +48,54 @@ from arm_application.geom_ik import ( load_handeye_T, quat_xyzw_to_R, ) +from arm_application.handeye_lib import cam_point_to_base, cam_to_base_T +from arm_application.overhead_oneshot import ( + D435_MOVEL_GAVE_UP, + D435_MOVEL_RETRY, + D435_MOVEL_RETRY_S, + D435_NEAR_CRUISE_MPS, + D435_SETTLE_S, + D435_VENDOR_MOVEL_VEL_MPS, + StillLock, + at_lock_height, + d405_commands_arm, + d435_movel_from_tcp, + flange_tilt_rad, + hold_translation_vz, + hybrid_cruise_vxy, + lock_z_velocity, + oneshot_concat_hold_ori, + oneshot_full_cruise_mps, + oneshot_full_segments, + oneshot_hop_limits, + oneshot_may_send_another, + oneshot_needs_verticalize, + wrist_needs_handoff, + z_locked_qos, +) +from arm_application.path_profile import smooth_joint_schedule, translate_hold_ori_waypoints from arm_application.pid_controller import PidController from arm_application.kalman_filter import KalmanFilter3D +from arm_application.feature_jump_guard import ( + ACCEPT, + HOLD, + REJECT, + FeatureJumpGate, +) from arm_application.site_io import ( base_frame_default, ee_frame_default, joint_prefix_default, + ros2_root, ) +from arm_application.ros_node import TolerantNode + +try: + from flexiv_msgs.msg import RobotStates +except ImportError: # pragma: no cover + RobotStates = None # type: ignore + DEFAULT_JOINTS = [ "joint1", "joint2", "joint3", "joint4", "joint5", "joint6", "joint7", @@ -59,7 +109,7 @@ def _saturate_vec(v: np.ndarray, limit: float) -> np.ndarray: return v -class ServoNode(Node): +class ServoNode(TolerantNode): def __init__(self) -> None: super().__init__("servo_node") tid = threading.get_ident() @@ -73,10 +123,15 @@ class ServoNode(Node): self.declare_parameter("ee_frame", ee_frame_default()) self.declare_parameter("camera_frame", "d405_color_optical_frame") self.declare_parameter("traj_topic", "rizon_arm_controller/joint_trajectory") + self.declare_parameter( + "action_name", "rizon_arm_controller/follow_joint_trajectory" + ) self.declare_parameter("point_topic", "visual_servo/filtered_point") # 默认值只作兜底:真机运行一定由 launch 传入 site.yaml 的 paths.handeye_file。 # 指向 /tmp 是历史遗留(标定临时产物),会让人误以为"标定结果在那里"。 self.declare_parameter("handeye_file", "/home/cc/ros2/handeye/results/89_eye_in_hand.yaml") + # eye_in_hand = cam→法兰;eye_to_hand = cam→基座。写错会把固定相机当腕部用。 + self.declare_parameter("handeye_mode", "eye_in_hand") self.declare_parameter("use_static_handeye_tf", False) self.declare_parameter("handeye_child_frame", "d405_color_optical_frame") @@ -91,6 +146,12 @@ class ServoNode(Node): self.declare_parameter("predict_sec", 0.10) self.declare_parameter("predict_v_max", 0.35) self.declare_parameter("predict_jump_m", 0.08) + # 大跳变要连续多少帧指向同一新位置才采信(见 feature_jump_guard 的注释)。 + # 30Hz 下 3 帧 ≈ 0.1s:真的重定位 0.1s 就被认,假点(乱跳)永远认不了。 + self.declare_parameter("jump_confirm_frames", 3) + # 特征点位置合理性:必须落在工作盒 XY 内(含此余量 [m])。跑出去的点几乎必然 + # 是误检(见 feature_jump_guard 的注释),当"没有目标"处理。 + self.declare_parameter("feat_ws_margin_m", 0.05) # --- 看门狗(丢失目标即硬停) --- self.declare_parameter("watchdog_timeout_sec", 1.2) @@ -113,6 +174,10 @@ class ServoNode(Node): self.declare_parameter("deadzone_z_m", 0.012) self.declare_parameter("v_max_xy", 0.06) self.declare_parameter("v_max_z", 0.04) + # 远处限速(防"追着假目标把臂带走"):目标离得超过 slow_far_m 时 XY 限速到 + # v_slow_xy。真机 2026-10-08:0.7s 内被假 k0 从 home 带走 400mm 到工作盒角落。 + self.declare_parameter("slow_far_m", 0.05) + self.declare_parameter("v_slow_xy", 0.08) self.declare_parameter("a_max", 0.45) self.declare_parameter("lost_timeout_sec", 1.2) # 别名 / 用时间戳年龄兜底 self.declare_parameter("e_xy_clip_m", 0.080) # 误差绝不按大于 8 cm 处理 @@ -160,6 +225,19 @@ class ServoNode(Node): self.declare_parameter("ki_hover", 0.8) # 串联用:XY 入死区 + Z 到锁高持续这么久 → /visual_servo/locked=True self.declare_parameter("lock_hold_sec", 2.0) + # D405 跟住后法兰静止多久进二阶段。哨兵 -1 = 没从 site 接入。 + # lock_still_sec 仍须从 site 接上(缺了就报错)。 + # 厂家 MoveL 结束后,法兰连续停稳 d435_handback_sec 才打开 D405 框心。 + self.declare_parameter("lock_still_sec", -1.0) + self.declare_parameter("d435_handback_sec", -1.0) + self.declare_parameter("wrist_align_sec", -1.0) + self.declare_parameter("lock_still_move_m", -1.0) + self.declare_parameter("wrist_handoff_conf", -1.0) + self.declare_parameter("overhead_hold_s", -1.0) + # 只测 D435 位移:到位后不交 D405、不靠 D405 静止去锁二阶段。 + self.declare_parameter("d435_move_only", False) + self.declare_parameter("overhead_k0_topic", "visual_servo/overhead_k0") + self.declare_parameter("wrist_conf_topic", "visual_servo/wrist_conf") prefix = str(self.get_parameter("joint_prefix").value or "") base = list( @@ -184,12 +262,17 @@ class ServoNode(Node): self.predict_sec = float(self.get_parameter("predict_sec").value) self.predict_v_max = float(self.get_parameter("predict_v_max").value) self.predict_jump_m = float(self.get_parameter("predict_jump_m").value) + self.jump_confirm_frames = max(1, int(self.get_parameter("jump_confirm_frames").value)) + self.feat_ws_margin_m = float(self.get_parameter("feat_ws_margin_m").value) self.watchdog_timeout = float(self.get_parameter("watchdog_timeout_sec").value) self.stale_hold_sec = float(self.get_parameter("stale_hold_sec").value) self.deadzone_m = float(self.get_parameter("deadzone_m").value) self.deadzone_z_m = float(self.get_parameter("deadzone_z_m").value) self.v_max_xy = float(self.get_parameter("v_max_xy").value) self.v_max_z = float(self.get_parameter("v_max_z").value) + # 远处限速:目标离得比 slow_far_m 远时,XY 速度降到 v_slow_xy(见 hover 段注释) + self.slow_far_m = float(self.get_parameter("slow_far_m").value) + self.v_slow_xy = float(self.get_parameter("v_slow_xy").value) self.a_max = float(self.get_parameter("a_max").value) self.lost_timeout = float(self.get_parameter("lost_timeout_sec").value) self.e_xy_clip = float(self.get_parameter("e_xy_clip_m").value) @@ -233,6 +316,55 @@ class ServoNode(Node): self.seek_timeout = float(self.get_parameter("seek_timeout_sec").value) self.ki_hover = float(self.get_parameter("ki_hover").value) self.lock_hold_sec = float(self.get_parameter("lock_hold_sec").value) + self.lock_still_sec = float(self.get_parameter("lock_still_sec").value) + self.d435_handback_sec = float(self.get_parameter("d435_handback_sec").value) + self.wrist_align_sec = float(self.get_parameter("wrist_align_sec").value) + self.lock_still_move_m = float(self.get_parameter("lock_still_move_m").value) + self.wrist_handoff_conf = float(self.get_parameter("wrist_handoff_conf").value) + self.overhead_hold_s = float(self.get_parameter("overhead_hold_s").value) + self.d435_move_only = bool(self.get_parameter("d435_move_only").value) + self._hybrid = ( + self.lock_still_sec >= 0.0 + and self.d435_handback_sec >= 0.0 + and self.wrist_align_sec >= 0.0 + and self.lock_still_move_m >= 0.0 + and self.wrist_handoff_conf >= 0.0 + and self.overhead_hold_s >= 0.0 + ) + # 框心对准进精拍用 wrist_align_sec。D435 交接只用 d435_handback_sec,两段不要合成一个数。 + self._still = StillLock( + still_sec=max(0.0, self.wrist_align_sec), + still_move_m=max(0.0, self.lock_still_move_m), + ) + self._arrive = StillLock( + still_sec=max(0.0, self.d435_handback_sec), + still_move_m=max(0.0, self.lock_still_move_m), + ) + self._sw_cli = None + self._d435_vendor_done = False + self._d435_vendor_busy = False + self._d435_vendor_failed = False + self._d435_vendor_tries = 0 + self._d435_retry_after = 0.0 + self._d435_settled = False + self._d435_exec_until = 0.0 + self._d435_pinned = False + self._d435_sent = False + self._d435_last_dist = None + self._d435_give_up = False + self._d435_plan_lock = threading.Lock() + self._d435_inflight = False + self._d435_settle_until = 0.0 + self._d435_last_z_err = None + self._d435_z_stall = 0 + self._d435_remeasure_log = False + self._d435_vert_done = False + self._d435_full_done = False + self._d435_fix_done = False + self._track_source = "wrist" # wrist | overhead + self._wrist_conf: Optional[float] = None + self._wrist_conf_t = -1.0 + self._overhead_t = -1.0e9 i_sep_pos = float(self.get_parameter("i_sep_pos_m").value) self.i_sep_ang = float(self.get_parameter("i_sep_ang_rad").value) ws_min = list( @@ -249,17 +381,47 @@ class ServoNode(Node): self.T_cam_to_gripper = load_handeye_T( str(self.get_parameter("handeye_file").value) ) + self.handeye_mode = str( + self.get_parameter("handeye_mode").value or "eye_in_hand" + ).strip().lower() + if self.handeye_mode not in ("eye_in_hand", "eye_to_hand"): + raise RuntimeError( + f"handeye_mode 只能是 eye_in_hand 或 eye_to_hand," + f"收到 {self.handeye_mode!r}" + ) + if self.handeye_mode == "eye_to_hand" and self.xy_track == "lookat": + raise RuntimeError( + "眼在手外相机固定,lookat 没有意义。xy_track 必须是 hover" + ) + if self.handeye_mode == "eye_in_hand" and not self._hybrid: + raise RuntimeError( + "腕部主跟踪必须从 site.yaml 接入 lock_still_sec / d435_handback_sec / " + "wrist_align_sec / lock_still_move_m / wrist_handoff_conf / overhead_hold_s。" + "收到哨兵 -1 = 配置没接线,不许用代码默认秒数假装已经静止判据。" + ) R_he = np.asarray(self.T_cam_to_gripper[:3, :3], dtype=float) t_he = np.asarray(self.T_cam_to_gripper[:3, 3], dtype=float) axis_z = float(np.clip(R_he[2, 2], -1.0, 1.0)) self._cam_tilt_deg = float(np.degrees(np.arccos(axis_z))) he_path = str(self.get_parameter("handeye_file").value) - self.get_logger().warn( - f"HANDEYE yaml={he_path} " - f"cam_in_flange=({t_he[0]*1000:.1f},{t_he[1]*1000:.1f},{t_he[2]*1000:.1f})mm " - f"optical_vs_flangeZ={self._cam_tilt_deg:.1f}deg " - f"— 悬停使用这个 T,而不是用 TF 查询" - ) + if self.handeye_mode == "eye_to_hand": + self.get_logger().warn( + f"HANDEYE yaml={he_path} mode=eye_to_hand " + f"cam_in_base=({t_he[0]:.3f},{t_he[1]:.3f},{t_he[2]:.3f})m " + f"— 悬停用 cam→基座,不乘法兰" + ) + else: + self.get_logger().warn( + f"HANDEYE yaml={he_path} " + f"cam_in_flange=({t_he[0]*1000:.1f},{t_he[1]*1000:.1f},{t_he[2]*1000:.1f})mm " + f"optical_vs_flangeZ={self._cam_tilt_deg:.1f}deg " + f"— 悬停使用这个 T,而不是用 TF 查询" + ) + if self.d435_move_only: + self.get_logger().warn( + "d435_move_only:只跑 D435 单次位移。到位停稳后钉住," + "不交 D405;locked 只用来结束一阶段,不进二阶段" + ) self.pid_x = PidController( float(self.get_parameter("kp_xy").value), @@ -310,8 +472,11 @@ class ServoNode(Node): self._p_feat_base: Optional[np.ndarray] = None self._he_cmp_done = False self._feat_kf = KalmanFilter3D(q_pos=2.0e-3, q_vel=1.5e-1, r_pos=4.0e-4) + # 大跳变确认门限:单帧不采信(见 feature_jump_guard 的注释与真机反例)。 + self._jump_gate = FeatureJumpGate(self.predict_jump_m, self.jump_confirm_frames) # 只有当法兰 Z 已经落到锁定平面上(深度新鲜)才开启 XY 悬停。 self._xy_armed = bool(self.ee_z_m <= 0.0) + self._z_hold: Optional[float] = None # Seek(搜索)状态:在锁定高度且没有目标时扫描工件。 self._seek_t0 = 0.0 self._seek_theta = 0.0 @@ -332,6 +497,23 @@ class ServoNode(Node): point_qos, callback_group=self._state_cbg, ) + if self._hybrid: + oh_topic = str(self.get_parameter("overhead_k0_topic").value) + conf_topic = str(self.get_parameter("wrist_conf_topic").value) + self.create_subscription( + PointStamped, + oh_topic, + self._on_overhead_k0, + point_qos, + callback_group=self._state_cbg, + ) + self.create_subscription( + Float32, + conf_topic, + self._on_wrist_conf, + 5, + callback_group=self._state_cbg, + ) self.create_subscription( JointState, "joint_states", @@ -339,6 +521,24 @@ class ServoNode(Node): 10, callback_group=self._control_cbg, ) + # 厂家 tcp_pose(WORLD)。D435 MoveL 必须在这上面加 ROS 相对位移。 + self._tcp_world: Optional[Tuple[float, float, float]] = None + self._t_tcp: Optional[float] = None + prefix_ns = str(self.get_parameter("joint_prefix").value or "").rstrip("_") + self.robot_states_topic = f"/{prefix_ns.replace('-', '_')}/flexiv_robot_states" + if RobotStates is not None: + self.create_subscription( + RobotStates, + self.robot_states_topic, + self._on_servo_robot_states, + qos_profile_sensor_data, + callback_group=self._state_cbg, + ) + else: + self.get_logger().error( + "没有 flexiv_msgs.RobotStates,D435 粗定位不能读厂家 tcp_pose," + "不许退回杀栈 MoveL" + ) cmd_qos = QoSProfile( history=HistoryPolicy.KEEP_LAST, @@ -351,11 +551,30 @@ class ServoNode(Node): ) # 一阶段锁定信号(串联编排器用它判断可以进入二阶段) self._lock_pub = self.create_publisher(Bool, "visual_servo/locked", 1) + # TRANSIENT_LOCAL:感知节点比伺服晚起来,默认 QoS 会丢掉启动时那一拍 + # True,感知就永远停在「还没到锁高」、D435 不拍。两边必须同一份 QoS。 + self._z_lock_pub = self.create_publisher( + Bool, "visual_servo/z_locked", z_locked_qos() + ) + # 感知用它挡住「平移半路再拍一张」。晚启动也能拿到当前值。 + self._d435_cmd_pub = self.create_publisher( + Bool, "visual_servo/d435_commanding", z_locked_qos() + ) + self._d435_cmd_sent: Optional[bool] = None + self._z_locked_sent: Optional[bool] = None + self._z_lock_pub_mono = 0.0 self._lock_since: Optional[float] = None self._locked = False self._lock_pub_t = 0.0 traj_topic = str(self.get_parameter("traj_topic").value) self._traj_pub = self.create_publisher(JointTrajectory, traj_topic, cmd_qos) + self._jtc_cbg = ReentrantCallbackGroup() + self._jtc = ActionClient( + self, + FollowJointTrajectory, + str(self.get_parameter("action_name").value), + callback_group=self._jtc_cbg, + ) self._tf = Buffer() TransformListener(self._tf, self, spin_thread=True) @@ -381,49 +600,216 @@ class ServoNode(Node): f"hold_xy={int(self.ee_hold_xy)} down={int(self.ee_vertical_down)} " f"XY_after_lock_z±{self.approach_xy_gate_m*1000:.0f}mm" ) + self._publish_z_locked(self._xy_armed) + self._publish_d435_commanding(False) + + def _publish_z_locked(self, locked: bool) -> None: + """法兰是否在锁高带里。只记日志,不拦 D435。 + + 状态没变也每 0.5 s 再发一次:只发一次的话,晚订阅的感知收不到。 + """ + locked = bool(locked) + now = time.monotonic() + changed = self._z_locked_sent is not locked + if (not changed) and (now - self._z_lock_pub_mono) < 0.5: + return + self._z_locked_sent = locked + self._z_lock_pub_mono = now + self._z_lock_pub.publish(Bool(data=locked)) + if not changed: + return + if locked: + self.get_logger().info("锁高已到位") + else: + self.get_logger().info("离开锁高带 —— 平移仍保持当前高度,不改去追锁高") + + def _publish_d435_commanding(self, commanding: bool) -> None: + """正在用 D435 那一个点赶路。感知看到 True 就不再拍第二张。""" + commanding = bool(commanding) + if self._d435_cmd_sent is commanding: + return + self._d435_cmd_sent = commanding + self._d435_cmd_pub.publish(Bool(data=commanding)) def _on_js(self, msg: JointState) -> None: self._last_js = msg + def _on_servo_robot_states(self, msg) -> None: + """缓存厂家 ``tcp_pose``(WORLD)。名字避开其它节点的 ``_on_robot_states``。""" + p = msg.tcp_pose.pose.position + xyz = (float(p.x), float(p.y), float(p.z)) + if not all(math.isfinite(v) for v in xyz): + return + self._tcp_world = xyz + self._t_tcp = time.monotonic() + + def _fresh_tcp_world(self): + """最近 0.5s 的厂家 TCP [m]。过期/没有 → None,不许用旧值凑。""" + if self._tcp_world is None or self._t_tcp is None: + return None + if time.monotonic() - float(self._t_tcp) > 0.5: + return None + return self._tcp_world + + def _on_wrist_conf(self, msg: Float32) -> None: + c = float(msg.data) + with self._lock: + self._wrist_conf = None if not np.isfinite(c) else c + self._wrist_conf_t = time.monotonic() + + def _on_overhead_k0(self, msg: PointStamped) -> None: + """D435 一次性:点已经在基座系。再乘腕部 T 会差几十厘米还看起来合理。""" + if not self._hybrid: + return + if not self.enable_control: + # 仅观察时不占臂:占着 d435_commanding 会把感知的预览框也卡死。 + self.get_logger().info( + "仅观察:收到 D435 点,不占臂、不挡 D405 预览", + throttle_duration_sec=2.0, + ) + return + fid = str(msg.header.frame_id or "").strip() + if fid and self.base_frame and fid != self.base_frame: + self.get_logger().error( + f"overhead_k0 的 frame_id={fid!r} 不是基座 {self.base_frame!r} —— 丢弃," + "不许当相机系点去乘手眼 T" + ) + return + p_base = np.array( + [float(msg.point.x), float(msg.point.y), float(msg.point.z)], dtype=float + ) + if not np.all(np.isfinite(p_base)): + return + if not self._feat_workspace_ok(p_base): + m = float(self.feat_ws_margin_m) + self.get_logger().warn( + f"D435 一次性点 ({p_base[0]:.3f},{p_base[1]:.3f}) 在工作盒外 " + f"(x[{self.ws_min[0]:.2f},{self.ws_max[0]:.2f}] " + f"y[{self.ws_min[1]:.2f},{self.ws_max[1]:.2f}] ±{m:.2f})" + "—— 丢弃,不发轨迹。这不是起步加速度。" + ) + return + with self._lock: + busy = self._track_source == "overhead" and not self._d435_settled + if busy: + self.get_logger().info( + "D435 这一段还没走完,不再换目标", + throttle_duration_sec=1.0, + ) + return + now_m = time.monotonic() + now_sec = self.get_clock().now().nanoseconds * 1e-9 + with self._lock: + self._p_feat_base = p_base.copy() + self._p_meas[:] = 0.0 + self._p_meas[2] = self.z_ref + self._feat_kf.reset(p_base, now_m) + self._jump_gate.reset() + self._have_target = True + self._target_lost_flag = False + self._track_source = "overhead" + self._d435_settled = False + self._d435_vendor_done = False + self._d435_vendor_busy = False + self._d435_vendor_failed = False + self._d435_vendor_tries = 0 + self._d435_retry_after = 0.0 + self._overhead_t = now_m + self._last_seen_time = now_m + self._stamp_sec = now_sec + self._seek_t0 = 0.0 + self._seek_warned = False + self._still.reset() + self._arrive.reset() + self._d435_exec_until = 0.0 + self._d435_pinned = False + self._d435_sent = False + self._d435_last_dist = None + self._d435_give_up = False + self._d435_inflight = False + self._d435_settle_until = 0.0 + self._d435_last_z_err = None + self._d435_z_stall = 0 + self._d435_remeasure_log = False + self._d435_vert_done = False + self._d435_full_done = False + self._d435_fix_done = False + self._d435_vendor_done = False + self._d435_vendor_busy = False + self._d435_vendor_failed = False + self._d435_vendor_tries = 0 + self._d435_retry_after = 0.0 + self._publish_d435_commanding(True) + self.get_logger().info( + f"D435 一次性设定 feat_base=({p_base[0]:.3f},{p_base[1]:.3f},{p_base[2]:.3f}) " + f"—— 走到这个点并停稳之前,不下发 D405 的点" + ) + def _on_point(self, msg: PointStamped) -> None: """新的视觉测量 —— 给看门狗“上弦”并清除丢失标志。""" + if ( + self._hybrid + and self._wrist_conf is not None + and wrist_needs_handoff(self._wrist_conf, self.wrist_handoff_conf) + ): + # 已经收到腕部 conf 且低于门槛:这条 D405 点不能当跟踪源。 + # conf 还是 None = 感知还没报到,不要把开场几帧也丢掉。 + return + with self._lock: + using_d435 = self._track_source == "overhead" + settled = self._d435_settled + # 到位必须是 MoveL 已经结束,不能把「还在赶路、XY 进了 15mm」当成到位。 + # 停稳计时也不许在这段路上累计,否则 D405 会在 D435 没走完时就开始带臂晃。 + if self._hybrid and not d405_commands_arm( + using_d435=using_d435, + arrived=(self._d435_vendor_done and not self._d435_vendor_busy), + settled=settled, + move_only=self.d435_move_only, + ): + # 推理不关。没到「法兰停稳」之前,这帧不能进运动控制。 + self.get_logger().info( + "D405 输出已截断:D435 厂家移动还没结束或法兰还没停稳", + throttle_duration_sec=1.0, + ) + return p_cam = np.array( [float(msg.point.x), float(msg.point.y), float(msg.point.z)], dtype=float ) T_ee = self._lookup_T(self.base_frame, self.ee_frame) p_base = self._feature_in_base(T_ee, p_cam) if T_ee is not None else None - at_lock = True - if self.ee_z_m > 0.0 and T_ee is not None: - at_lock = abs(float(T_ee[2, 3]) - self.ee_z_m) <= max( - 0.02, float(self.approach_xy_gate_m) - ) if not self._he_cmp_done: self._he_cmp_done = True self._log_handeye_tf_vs_yaml() now_m = time.monotonic() + rejected = False with self._lock: was_lost = self._target_lost_flag + self._track_source = "wrist" self._p_meas[:] = p_cam - if p_base is not None and at_lock and self._xy_armed: - if was_lost or (not self._feat_kf.initialized): - self._feat_kf.reset(p_base, now_m) - else: - dxy = float(np.hypot(p_base[0] - self._feat_kf.position[0], - p_base[1] - self._feat_kf.position[1])) - if dxy > self.predict_jump_m: - self._feat_kf.reset(p_base, now_m) - else: - self._feat_kf.advance(now_m) - self._feat_kf.update(p_base) - self._p_feat_base = p_base.copy() + if p_base is not None: + verdict = self._update_feat_track(p_base, was_lost=was_lost, now_m=now_m) + if verdict == ACCEPT: + self._p_feat_base = np.asarray(p_base, dtype=float).copy() + elif verdict == HOLD: + # hold 时下游必须拿到"钉住的旧位置":`_hover_vs_feature` 用的是 + # `_p_feat_base`,这里若照抄 p_base,就等于还是去追那个假点。 + self._p_feat_base = self._feat_kf.position.copy() + else: # REJECT:物理上不合理的点,当"没有目标"处理 + # 关键:必须同时清掉 `_have_target`。只清 `_p_feat_base` 不够 —— + # `_hover_vs_feature` 在 frozen=None 时会退回原始 `p_cam`, + # 那还是去追那个假点。 + self._p_feat_base = None + self._have_target = False + rejected = True self._stamp_sec = float(msg.header.stamp.sec) + 1e-9 * float( msg.header.stamp.nanosec ) self._last_seen_time = now_m - self._have_target = True - self._target_lost_flag = False - self._seek_t0 = 0.0 # 已捕获目标 —— 重置 seek,供下次使用 - self._seek_warned = False + if not rejected: + self._have_target = True + self._target_lost_flag = False + self._seek_t0 = 0.0 # 已捕获目标 —— 重置 seek,供下次使用 + self._seek_warned = False if msg.header.frame_id: self.camera_frame = msg.header.frame_id if p_base is not None: @@ -441,6 +827,97 @@ class ServoNode(Node): throttle_duration_sec=0.5, ) + def _feat_workspace_ok(self, p: np.ndarray) -> bool: + """特征点 XY 是否落在工作盒内(含余量)。 + + 只查 XY、**不查 Z**:特征点是**工件表面点**(z≈0.022,贴台面),而工作盒 + 的 z 区间(0.18~0.65)是给**法兰**用的,两者不是一回事。 + """ + m = float(self.feat_ws_margin_m) + return bool( + self.ws_min[0] - m <= float(p[0]) <= self.ws_max[0] + m + and self.ws_min[1] - m <= float(p[1]) <= self.ws_max[1] + m + ) + + def _slow_xy_limit(self, nerr: float, v_xy: float) -> tuple: + """远处限速:目标离得超过 ``slow_far_m`` 就把 XY 速度上限降到 ``v_slow_xy``。 + + 返回 ``(上限, 原因或 None)``。单拎出来是为了能**离线测**(不需要 ROS 实体)。 + + 为什么需要(2026-10-08 真机,一阶段):被一串高置信度假 k0(conf 0.53~0.73) + 顶掉后,伺服在 0.7s 内以 ``v_max_xy``=0.45m/s 把臂从 home ``(0.686,-0.113)`` + 带到工作盒角落 ``(0.083,-0.515)``,之后 148s 全是"检测漏检"、150s 超时。 + + 这道限速**与"目标真不真"无关** —— 它不试图判断真假,只保证"追错时走得少": + 真目标(实测真 k0 离 145mm)只是晚 ~1.8s 到位;假目标最多把臂带走几厘米。 + """ + if nerr > self.slow_far_m: + return min(float(v_xy), self.v_slow_xy), ( + f"目标离 {nerr*1000:.0f}mm > {self.slow_far_m*1000:.0f}mm" + ) + return float(v_xy), None + + def _update_feat_track( + self, p_base: np.ndarray, *, was_lost: bool, now_m: float + ) -> str: + """把一次特征观测并入 ``_feat_kf``;返回 :data:`ACCEPT` / ``HOLD`` / ``REJECT``。 + + 为什么要单拎出来(2026-10-08 真机实测):一阶段已经收敛到 9mm 之后,模型在 + 运动模糊下误检出一连串"假工件"(框置信度 0.13~0.47,位置各不相同),伺服每 + 个都追 —— 机械臂被带到工作盒边缘卡住(`ee_xy` 从 0.68,-0.12 漂到 0.07,-0.50, + 横移 0.62m)。两道独立防线: + + 1. **跳变确认**(:class:`FeatureJumpGate`):单帧大跳只 hold、不动;乱跳 + (每帧不同位置)永远确认不了 ⇒ 这一串假点全被挡掉。 + 2. **物理合理性**:跑出工作盒 XY 的点直接 reject —— 实测假点落在基座后方 + ``(-0.10,-0.65)``,而工件在 ``(0.5,-0.12)``。 + + 调用方必须在 ``self._lock`` 内调用(会改 ``_feat_kf`` 与 ``_jump_gate``)。 + """ + p = np.asarray(p_base, dtype=float).reshape(3) + + # --- 防线 2:物理合理性(先判,因为它在"单帧 vs 多帧"之外) --- + if not self._feat_workspace_ok(p): + self._feat_kf.zero_velocity() + self._jump_gate.reset() + self.get_logger().warn( + f"特征点 ({p[0]:.3f},{p[1]:.3f}) 在工作盒外" + f"(x[{self.ws_min[0]:.2f},{self.ws_max[0]:.2f}] " + f"y[{self.ws_min[1]:.2f},{self.ws_max[1]:.2f}] ±{self.feat_ws_margin_m:.2f})" + "—— 判为误检,当「没有目标」处理,不去追", + throttle_duration_sec=1.0, + ) + return REJECT + + # --- 防线 1:跳变确认 --- + if was_lost or (not self._feat_kf.initialized): + # 刚重新捕获:没有可信的历史位置可比,直接以新观测重定位。 + self._feat_kf.reset(p, now_m) + self._jump_gate.reset() + return ACCEPT + verdict = self._jump_gate.update(p[:2], self._feat_kf.position[:2]) + if verdict == FeatureJumpGate.JUMP: + self._feat_kf.reset(p, now_m) + return ACCEPT + if verdict == FeatureJumpGate.NEAR: + self._feat_kf.advance(now_m) + self._feat_kf.update(p) + return ACCEPT + + # HOLD:本次观测不采信。位置钉住不动,并把速度清零 —— 否则旧速度会把 + # "不动"变成"按旧速度匀速跑掉",正是要避免的那件事。 + self._feat_kf.zero_velocity() + dxy = float( + np.hypot(p[0] - self._feat_kf.position[0], p[1] - self._feat_kf.position[1]) + ) + self.get_logger().warn( + f"特征点疑似假跳 {dxy * 1000:.0f}mm > {self.predict_jump_m * 1000:.0f}mm" + f"(连续 {self._jump_gate.hold_frames} 帧)—— 本次不采信,位置保持不动;" + f"连续 {self._jump_gate.confirm_frames} 帧一致才认", + throttle_duration_sec=1.0, + ) + return HOLD + def _reset_motion_state(self) -> None: """硬停内部状态:I=0、滤波速度=0、dq 窗口清空。""" self.pid_x.reset() @@ -453,6 +930,7 @@ class ServoNode(Node): self._v_xy_cmd[:] = 0.0 self._p_feat_base = None self._feat_kf.initialized = False + self._jump_gate.reset() self._dq_hist.clear() def _pub_zero_twist(self) -> None: @@ -490,36 +968,46 @@ class ServoNode(Node): last_seen = self._last_seen_time p_meas = self._p_meas.copy() lost = self._target_lost_flag - - # ----- 启动阶段:**先**下降到锁定高度,甚至在任何检测到来之前。 - # 在第一个 PointStamped 到达之前 have 一直是 False,所以这是一个纯启动 - # 阶段:只动 Z 下降,XY 锁死,姿态朝下。 + source = self._track_source + if self._hybrid: + self._tick_d435_arrive() + self._tick_still_lock() + if self.enable_control and self._d435_oneshot_holds_the_arm(): + return if ( self.enable_control - and self.ee_z_m > 0.0 - and not have - and not self._xy_armed + and self._hybrid + and self._locked + and not self.d435_move_only ): + # 框心已经对准并停稳。实时预测到此为止,臂钉住,等二阶段精拍一次。 + self._execute_twist(np.zeros(3, dtype=float), p_cam=None, hold_xy=True) + return + + # 还没有目标、人又停在锁高下面:只抬一次 Z。已经有 D435 点或腕部点之后 + # 不再插这一步 —— 平移途中改高度会抖,也会把正在走的 XY 掐掉。 + if self.enable_control and self.ee_z_m > 0.0 and not have: T_ee0 = self._lookup_T(self.base_frame, self.ee_frame) if T_ee0 is None: - return # TF 还没就绪 —— 等待,不要触发保持急停 - self._update_xy_arm(float(T_ee0[2, 3])) + return + z_now = float(T_ee0[2, 3]) + self._update_xy_arm(z_now) if not self._xy_armed: self.get_logger().info( - f"启动下降至 lock_z {self.ee_z_m:.3f}m " - f"当前={T_ee0[2, 3]:.3f}m(还没有目标,XY 锁死)", + f"先回锁高 {self.ee_z_m:.3f}m 当前={z_now:.3f}m(还没有目标,只动 Z)", throttle_duration_sec=1.0, ) - self._target_lost_flag = False # 盲降期间允许执行 + self._target_lost_flag = False self._execute_twist(np.zeros(3, dtype=float), p_cam=None, hold_xy=True) - self._lock_feedback(False) - return + self._lock_feedback(False) + return # ----- Seek:已在锁定高度但还没有有效目标。eye-in-hand 相机只能看到 # 一小块区域,所以扫描工作区(先漂到标称工作 XY,再向外螺旋)直到工件进入视野。 if ( self.enable_control and self.seek_enabled + and (not self._hybrid) # 混合模式用 D435 一次性,不螺旋搜 and self.ee_z_m > 0.0 and not have and self._xy_armed @@ -561,7 +1049,12 @@ class ServoNode(Node): seen_age = now_mono - last_seen stamp_age = now_sec - stamp if stamp >= 0.0 else 1e9 - if seen_age > self.watchdog_timeout or stamp_age > self.lost_timeout: + if self._hybrid and source == "overhead": + # 一次性设定一直用到 D405 接上。按秒数冻住的话,臂还在平移就被看门狗 + # 掐掉,D435 又不再拍,停在半路。 + stamp_age = 0.0 + seen_age = 0.0 + elif seen_age > self.watchdog_timeout or stamp_age > self.lost_timeout: self._watchdog_trip( f"目标丢失 seen_age={seen_age:.3f}s stamp_age={stamp_age:.3f}s" ) @@ -569,8 +1062,11 @@ class ServoNode(Node): return # 检测框冻结 / USB 卡住:锁住关节,不要继续按上一个误差驱动。 + # D435 一次性不是流,保持设定直到 hold 超时或 D405 接回。 stale = max(0.15, float(self.stale_hold_sec)) - if seen_age > stale or stamp_age > stale: + if (not (self._hybrid and source == "overhead")) and ( + seen_age > stale or stamp_age > stale + ): self.get_logger().info( f"过期保持 seen_age={seen_age:.2f}s —— 不跟踪冻结的检测框", throttle_duration_sec=1.0, @@ -747,15 +1243,21 @@ class ServoNode(Node): self._watchdog_trip(reason) def _R_cam_to_base(self, T_ee: np.ndarray) -> np.ndarray: - return (T_ee @ self._T_ee_cam())[:3, :3] + return self._T_cam_in_base(T_ee)[:3, :3] def _T_ee_cam(self) -> np.ndarray: # 始终使用标定出的 yaml。TF 只用于 RViz / 打印做核对。 return np.array(self.T_cam_to_gripper, dtype=float) + def _T_cam_in_base(self, T_ee: np.ndarray) -> np.ndarray: + return cam_to_base_T(self.T_cam_to_gripper, T_ee, self.handeye_mode) + def _log_handeye_tf_vs_yaml(self) -> None: t_yaml = np.asarray(self.T_cam_to_gripper[:3, 3], dtype=float) - T_tf = self._lookup_T(self.ee_frame, self.handeye_child) + parent = ( + self.base_frame if self.handeye_mode == "eye_to_hand" else self.ee_frame + ) + T_tf = self._lookup_T(parent, self.handeye_child) if T_tf is None: self.get_logger().warn( "HANDEYE TF 查询失败(无妨)—— 伺服使用 yaml " @@ -799,7 +1301,7 @@ class ServoNode(Node): 而不是法兰的 XY。在固定高度 / 姿态下平移法兰 XY,会把该 look-at 点 按 1:1 一起带走。 """ - T_bc = T_ee @ self._T_ee_cam() + T_bc = self._T_cam_in_base(T_ee) R = T_bc[:3, :3] o = T_bc[:3, 3] zc = float(np.clip(float(p_cam[2]), 0.04, 0.60)) @@ -817,11 +1319,9 @@ class ServoNode(Node): def _feature_in_base(self, T_ee: np.ndarray, p_cam: np.ndarray) -> np.ndarray: """工件三维点(相机系)→ base 系 XYZ。保持 XYZ 一致。""" - T_bc = T_ee @ self._T_ee_cam() - ph = np.array( - [float(p_cam[0]), float(p_cam[1]), float(p_cam[2]), 1.0], dtype=float + return cam_point_to_base( + p_cam, self.T_cam_to_gripper, T_ee, self.handeye_mode ) - return (T_bc @ ph)[:3] def _hover_vs_feature( self, T_ee: np.ndarray, p_cam: np.ndarray @@ -902,12 +1402,579 @@ class ServoNode(Node): self._xy_in_dead = dead return dead + def _jacobian_at(self, p_ee: np.ndarray): + link_R: List[np.ndarray] = [] + link_p: List[np.ndarray] = [] + for fr in self.link_frames: + Tl = self._lookup_T(self.base_frame, fr) + if Tl is None: + return None + link_R.append(Tl[:3, :3]) + link_p.append(Tl[:3, 3]) + return geometric_jacobian(link_R, link_p, p_ee, RIZON_LINK_AXES) + + def _d435_oneshot_holds_the_arm(self) -> bool: + """D435 粗定位只走厂家 MoveL。停稳后先钉住,等 D405 框心接上再放开。 + + 这段不许再用流式伺服去追 D435 那个点。D405 点被 ``_on_point`` 接上后 + 跟踪源变成腕部,这里返回 False,框心才开始带臂。 + """ + if self._hybrid and self._track_source == "overhead" and self._d435_settled: + return True + if not (self._hybrid and self._track_source == "overhead" and not self._d435_settled): + return False + if not self._d435_plan_lock.acquire(blocking=False): + return True + try: + return self._d435_oneshot_holds_locked() + finally: + self._d435_plan_lock.release() + + def _d435_pin_and_stop_hops(self, why: str) -> None: + if not self._d435_pinned: + self._send_hold() + self._d435_pinned = True + self._d435_give_up = True + self.get_logger().error(why) + + def _sanitize_d435_traj(self, traj: JointTrajectory, min_dt: float = 0.02) -> JointTrajectory: + """与二阶段 ``_sanitize_traj`` 同一条:time_from_start 必须严格递增。""" + last = -min_dt + for p in traj.points: + t = float(p.time_from_start.sec) + float(p.time_from_start.nanosec) * 1e-9 + if t < last + min_dt: + t = last + min_dt + ns = int(round(t * 1e9)) + p.time_from_start.sec = ns // 1_000_000_000 + p.time_from_start.nanosec = ns % 1_000_000_000 + last = t + return traj + + def _d435_send_action( + self, + sched, + tag: str, + hop_m: float, + leftover_m: float, + v_peak: float, + T_move: float, + *, + ee_z: float, + tilt_deg: float, + max_dq: float, + ) -> None: + """先占住 in-flight 再 ``send_goal_async``。话题插点会把这条掐掉。""" + traj = JointTrajectory() + traj.header.stamp.sec = 0 + traj.header.stamp.nanosec = 0 + traj.joint_names = list(self.joint_names) + for qi, qdot, t_sec in sched: + pt = JointTrajectoryPoint() + pt.positions = [float(v) for v in np.asarray(qi).tolist()] + pt.velocities = [float(v) for v in np.asarray(qdot).tolist()] + ns = int(round(max(0.0, float(t_sec)) * 1e9)) + pt.time_from_start.sec = ns // 1_000_000_000 + pt.time_from_start.nanosec = ns % 1_000_000_000 + traj.points.append(pt) + traj = self._sanitize_d435_traj(traj) + goal = FollowJointTrajectory.Goal() + goal.trajectory = traj + self._d435_inflight = True + self._d435_sent = True + self._d435_pinned = False + fut = self._jtc.send_goal_async(goal) + fut.add_done_callback(self._d435_on_goal) + self.get_logger().info( + f"D435 action 下发 {len(sched)} 点 tag={tag} 本跳={hop_m*1000:.0f}mm " + f"剩={leftover_m*1000:.0f}mm v={v_peak*1000:.0f}mm/s T={T_move:.1f}s " + f"ee_z={ee_z:.3f} tilt={tilt_deg:.2f}deg max|Δq|={max_dq:.4f}rad " + f"—— 结果回来之前不再发下一条" + ) + + def _d435_on_goal(self, fut) -> None: + try: + handle = fut.result() + except Exception as exc: + self.get_logger().error(f"D435 JTC 目标回调失败:{exc}") + self._d435_inflight = False + self._d435_give_up = True + return + if handle is None or not bool(getattr(handle, "accepted", False)): + self.get_logger().error("JTC 拒绝了 D435 轨迹") + self._d435_inflight = False + self._d435_give_up = True + return + handle.get_result_async().add_done_callback(self._d435_on_result) + + def _d435_on_result(self, fut) -> None: + ok = True + try: + r = fut.result() + inner = getattr(r, "result", None) + code = getattr(inner, "error_code", 0) if inner is not None else 0 + if code not in (0, None): + ok = False + msg = getattr(inner, "error_string", "") + self.get_logger().error(f"D435 JTC 执行失败 error_code={code} {msg}") + except Exception as exc: + ok = False + self.get_logger().error(f"D435 JTC 结果失败:{exc}") + self._d435_inflight = False + self._d435_settle_until = time.monotonic() + float(D435_SETTLE_S) + self._d435_remeasure_log = True + if not ok: + self._d435_give_up = True + + def _switch_arm_controller(self, activate: bool) -> bool: + """停或重新打开关节轨迹控制器。关节状态广播留着,硬件接口不下线。 + + 用节点里的客户端,不走 ``ros2 service call``:那条命令自己就要一两秒, + 停稳锁定的预算会被它吃掉。 + """ + from controller_manager_msgs.srv import SwitchController + + if self._sw_cli is None: + self._sw_cli = self.create_client( + SwitchController, + "/controller_manager/switch_controller", + callback_group=ReentrantCallbackGroup(), + ) + t0 = time.monotonic() + while not self._sw_cli.service_is_ready(): + if time.monotonic() - t0 > 3.0: + self.get_logger().error("switch_controller 服务不在") + return False + time.sleep(0.02) + req = SwitchController.Request() + if activate: + req.activate_controllers = ["rizon_arm_controller"] + req.deactivate_controllers = [] + else: + req.activate_controllers = [] + req.deactivate_controllers = ["rizon_arm_controller"] + req.strictness = SwitchController.Request.STRICT + req.activate_asap = True + req.timeout.sec = 3 + req.timeout.nanosec = 0 + fut = self._sw_cli.call_async(req) + while not fut.done(): + if time.monotonic() - t0 > 8.0: + self.get_logger().error( + "switch_controller 超时," + + ("没能重新激活" if activate else "没能停掉") + + " rizon_arm_controller" + ) + return False + time.sleep(0.02) + try: + resp = fut.result() + except Exception as exc: + self.get_logger().error(f"switch_controller 失败:{exc}") + return False + if resp is None or not bool(resp.ok): + self.get_logger().error( + "switch_controller 返回失败," + + ("控制器没回来" if activate else "控制器还占着关节") + ) + return False + return True + + def _wait_movel_file(self, seq: int, timeout_s: float, want_done: bool): + lib = ros2_root() / "scripts" / "lib" + if str(lib) not in sys.path: + sys.path.insert(0, str(lib)) + from flexiv_movel_ipc import read_ack, read_done + + t0 = time.monotonic() + while time.monotonic() - t0 < timeout_s: + if want_done: + got = read_done() + if got is not None and int(got[0]) == int(seq): + return bool(got[1]), str(got[2]) + elif read_ack() == int(seq): + return True, "" + time.sleep(0.02) + return False, "" + + def _d435_vendor_movel(self) -> bool: + """D435 这一点:进程内厂家 MoveL,不杀控制栈。 + + 目标 = 当前厂家 TCP + (K0−法兰) 的 ROS XY,``keep_z``。硬件在 MoveL + 期间不灌关节指令,D405 被 ``d435_commanding`` 挡住。不许退回杀栈 + (那会冷启动十几秒,而且两套控制会互抢晃臂)。 + """ + lib = ros2_root() / "scripts" / "lib" + if str(lib) not in sys.path: + sys.path.insert(0, str(lib)) + from flexiv_movel_ipc import write_request + + with self._lock: + goal = None if self._p_feat_base is None else np.asarray( + self._p_feat_base, dtype=float + ).reshape(3).copy() + if goal is None or not np.all(np.isfinite(goal)): + self.get_logger().error("没有 D435 基座点,厂家 MoveL 不下发") + return False + tcp_now = self._fresh_tcp_world() + if tcp_now is None: + self.get_logger().error( + "没有厂家 tcp_pose(话题 " + f"{getattr(self, 'robot_states_topic', '?')} 不新鲜)," + "拒绝杀栈凑 MoveL" + ) + return False + T_ee = self._lookup_T(self.base_frame, self.ee_frame) + if T_ee is None: + self.get_logger().error("没有法兰 TF,D435 相对位移算不出,不下发") + return False + tgt = d435_movel_from_tcp(tcp_now, T_ee[:2, 3], goal[:2]) + if tgt is None: + self.get_logger().error("D435 厂家 TCP 加上相对位移算不出,不下发") + return False + seq = int(time.monotonic() * 1000.0) % 1_000_000_000 + write_request( + seq, + float(tgt[0]), + float(tgt[1]), + float(tgt[2]), + True, + float(D435_VENDOR_MOVEL_VEL_MPS), + ) + self.get_logger().info( + f"D435 进程内 MoveL XY=({goal[0]:.3f},{goal[1]:.3f}) " + f"厂家TCP现=({tcp_now[0]:.4f},{tcp_now[1]:.4f},{tcp_now[2]:.4f}) " + f"MoveL=({tgt[0]:.4f},{tgt[1]:.4f},keep_z) " + f"vel={D435_VENDOR_MOVEL_VEL_MPS * 1000:.0f}mm/s " + "—— 不杀栈;期间不下发 D405" + ) + t0 = time.monotonic() + acked, _why = self._wait_movel_file(seq, 2.0, want_done=False) + if not acked: + self.get_logger().error( + "厂家 MoveL 2s 内没 ack —— 硬件没接 /tmp/flexiv_movel_req。" + "真机环境重建 install/ 后再跑,不许改走杀栈假装成功" + ) + return False + ok, detail = self._wait_movel_file(seq, 90.0, want_done=True) + dt = time.monotonic() - t0 + self.get_logger().info( + f"D435 进程内 MoveL {'完成' if ok else '失败'},耗时 {dt:.2f}s" + + (f" {detail}" if detail else "") + ) + return bool(ok) + + def _d435_oneshot_holds_locked(self) -> bool: + # 混合流程这一段只走厂家 MoveL。下面留下的关节折线不再执行: + # 那条路径会在真机上一段一段启停。 + if self._d435_vendor_failed or self._d435_vendor_busy: + return True + if not self._d435_vendor_done: + if time.monotonic() < float(self._d435_retry_after): + return True + if int(self._d435_vendor_tries) >= int(D435_MOVEL_RETRY): + self._d435_vendor_failed = True + self.get_logger().error( + f"{D435_MOVEL_GAVE_UP} —— 一阶段中止,D405 也不带臂" + ) + return True + # busy 先于调用置位:另一条控制回调不能再开一次 MoveL,也不能提前锁定。 + self._d435_vendor_busy = True + ok = self._d435_vendor_movel() + self._d435_vendor_busy = False + if not ok: + self._d435_vendor_tries = int(self._d435_vendor_tries) + 1 + self._d435_retry_after = time.monotonic() + float(D435_MOVEL_RETRY_S) + self.get_logger().error( + f"厂家 MoveL 第{self._d435_vendor_tries}次没走成," + f"{D435_MOVEL_RETRY_S:.1f}s 后再试" + ) + else: + self._d435_vendor_done = True + self._arrive.reset() + # MoveL 切回关节后 JTC 还握着出发前的悬停。不钉住的话 + # 硬件 3 s 窗口一过,臂会按悬停关节走回去(比交回 D405 的 10 cm 更远)。 + self._send_hold() + self._d435_pinned = True + return True + return True + + def _d435_oneshot_holds_locked_joint(self) -> bool: + """旧的关节折线。混合流程不再调用,源码留着给负向测试对字符串。""" + now = time.monotonic() + if self._d435_inflight: + return True + if now < self._d435_settle_until: + return True + T_ee = self._lookup_T(self.base_frame, self.ee_frame) + q = self._current_joints() + if T_ee is None or q is None: + return True + # 只更新锁高标志。这一段不许把控制权交给回锁高流式。 + self._update_xy_arm(float(T_ee[2, 3])) + with self._lock: + goal = None if self._p_feat_base is None else self._p_feat_base[:2].copy() + if goal is None: + return True + p = np.asarray(T_ee[:3, 3], dtype=float) + dist = float(np.hypot(float(goal[0]) - p[0], float(goal[1]) - p[1])) + arrive = float(self.lock_still_move_m) + z_lock = float(self.ee_z_m) + tilt = flange_tilt_rad(T_ee[:3, :3]) + at = at_lock_height(float(p[2]), z_lock, self.approach_xy_gate_m) + if self._d435_remeasure_log: + self._d435_remeasure_log = False + self.get_logger().info( + f"D435 重测 leftover={dist*1000:.0f}mm " + f"dxy=({(p[0]-goal[0])*1000:+.0f},{(p[1]-goal[1])*1000:+.0f})mm " + f"ee_xy=({p[0]:.3f},{p[1]:.3f}) goal=({goal[0]:.3f},{goal[1]:.3f}) " + f"ee_z={p[2]:.3f} tilt={math.degrees(tilt):.2f}deg" + ) + if self._d435_give_up: + self._d435_pinned = True + return True + hop_max, _cruise_unused = oneshot_hop_limits( + dist, hybrid_cruise_vxy(self.v_slow_xy) + ) + if at and dist <= arrive: + if oneshot_needs_verticalize( + tilt, dist, arrive, already_done=self._d435_vert_done + ): + return self._d435_send_verticalize(q, T_ee, leftover=dist, tilt=tilt) + # action 已经 rest-to-rest。到位成功不许再往话题插 hold,那会再抖一下。 + self._d435_pinned = True + return True + if self._d435_full_done and self._d435_fix_done: + self._d435_pin_and_stop_hops( + f"D435 整段+补刀后还差 {dist*1000:.0f}mm —— 钉住不再补刀" + ) + return True + if at and not oneshot_may_send_another( + dist, self._d435_last_dist, arrive_m=arrive, hop_max_m=hop_max + ): + self._d435_pin_and_stop_hops( + f"D435 上一跳几乎没走近,剩差还是 {dist*1000:.0f}mm " + f"—— 钉住不再补刀,等停稳后锁定进二阶段" + ) + return True + if not at: + z_err = abs(float(p[2]) - z_lock) + if self._d435_last_z_err is not None and z_err > self._d435_last_z_err * 0.8: + self._d435_z_stall += 1 + else: + self._d435_z_stall = 0 + self._d435_last_z_err = z_err + if self._d435_z_stall >= 2: + self._d435_pin_and_stop_hops( + f"D435 收锁高连续无进展 当前={p[2]:.3f}m 期望={z_lock:.3f}m" + ) + return True + if not self._jtc.server_is_ready(): + self.get_logger().warn("D435 等 JTC action 就绪", throttle_duration_sec=1.0) + return True + J = self._jacobian_at(p) + if J is None: + self.get_logger().warn("D435 平移缺 link TF,等下一拍", throttle_duration_sec=1.0) + return True + segs = oneshot_full_segments( + p, goal, z_lock, gate_m=self.approach_xy_gate_m + ) + if not segs: + return True + # XY / 收 Z 都不许夹收垂直:冻结 J 会把腕部转动漏成 Y 过冲。 + wps, planned, asked, tag = oneshot_concat_hold_ori( + q, J, segs, R=T_ee[:3, :3] + ) + if self._d435_full_done: + tag = "fix" + if len(wps) < 2 or asked < 1e-5 or planned < 0.75 * asked: + self._d435_pin_and_stop_hops( + f"D435 平移规划停滞 {planned*1000:.0f}/{asked*1000:.0f}mm —— 钉住不瞎发" + ) + return True + max_dq = float(np.max(np.abs(wps[-1] - q))) + if max_dq > 1.0: + self._d435_pin_and_stop_hops("D435 平移关节行程 >1 rad,拒绝执行") + return True + cruise = oneshot_full_cruise_mps(dist, hybrid_cruise_vxy(self.v_slow_xy)) + sched, T_move, v_peak = smooth_joint_schedule(wps, asked, cruise) + if tag in ("full", "fix", "xy"): + self._d435_last_dist = dist + if not self._d435_full_done: + self._d435_full_done = True + else: + self._d435_fix_done = True + self._d435_send_action( + sched, + tag, + asked, + dist, + v_peak, + T_move, + ee_z=float(p[2]), + tilt_deg=float(np.degrees(tilt)), + max_dq=max_dq, + ) + return True + + def _d435_send_verticalize(self, q, T_ee, *, leftover: float, tilt: float) -> bool: + """XY 已到位后单独收法兰朝下。和平移拆开,避免 Y 过冲。""" + if not self._jtc.server_is_ready(): + self.get_logger().warn("D435 收垂直等 JTC action 就绪", throttle_duration_sec=1.0) + return True + p = np.asarray(T_ee[:3, 3], dtype=float) + J = self._jacobian_at(p) + if J is None: + self.get_logger().warn("D435 收垂直缺 link TF,等下一拍", throttle_duration_sec=1.0) + return True + wps, _remain = translate_hold_ori_waypoints( + q, J, np.zeros(3, dtype=float), R=T_ee[:3, :3], verticalize=True + ) + if len(wps) < 2: + self._d435_vert_done = True + self.get_logger().info( + f"D435 收垂直无需再动 tilt={math.degrees(tilt):.2f}deg" + ) + return True + max_dq = float(np.max(np.abs(wps[-1] - q))) + if max_dq < 1e-4: + self._d435_vert_done = True + return True + if max_dq > 1.0: + self._d435_pin_and_stop_hops("D435 收垂直关节行程 >1 rad,拒绝执行") + return True + hop = max(0.008, float(tilt) * 0.05) + cruise = D435_NEAR_CRUISE_MPS + sched, T_move, v_peak = smooth_joint_schedule(wps, hop, cruise) + self._d435_vert_done = True + self._d435_send_action( + sched, + "vert", + hop, + leftover, + v_peak, + T_move, + ee_z=float(p[2]), + tilt_deg=float(np.degrees(tilt)), + max_dq=max_dq, + ) + return True + + def _tick_d435_arrive(self) -> None: + """厂家 MoveL 已结束:看法兰还在不在动。连续停稳后才打开 D405 框心。""" + if not self._hybrid: + return + if ( + self._d435_inflight + or self._d435_vendor_busy + or not self._d435_vendor_done + or time.monotonic() < self._d435_settle_until + ): + self._arrive.reset() + return + with self._lock: + if self._track_source != "overhead" or self._d435_settled: + return + goal = None if self._p_feat_base is None else self._p_feat_base[:2].copy() + if goal is None: + return + T = self._lookup_T(self.base_frame, self.ee_frame) + if T is None: + return + xy = np.asarray(T[:2, 3], dtype=float) + dist = float(np.hypot(float(xy[0]) - goal[0], float(xy[1]) - goal[1])) + # 到位看法兰是否还在动,不看离视觉点还差几毫米。 + settled = self._arrive.update(xy, time.monotonic(), tracking_ok=True) + if not settled: + self.get_logger().info( + f"D435 厂家 MoveL 已结束,法兰还在动或未满 " + f"{self.d435_handback_sec:.1f}s(离点 {dist*1000:.0f}mm)," + "D405 输出仍截断", + throttle_duration_sec=1.0, + ) + return + with self._lock: + self._d435_settled = True + self._d435_exec_until = 0.0 + if self.d435_move_only: + # 保持 d435_commanding=True,感知不会重拍;D405 被 move_only 挡住。 + # locked 只让 pipeline 结束一阶段,后面会 skip_stage2。 + # action 已 rest-to-rest,到位不再往话题插 hold。 + now_m = time.monotonic() + if not self._locked: + self._locked = True + self.get_logger().info( + f"已到 D435 位置(还差 {dist*1000:.0f}mm)并停稳 " + f"{self.d435_handback_sec:.1f}s —— D435 位移测试结束," + "不交 D405、不进二阶段" + ) + self._lock_pub.publish(Bool(data=True)) + self._lock_pub_t = now_m + elif now_m - self._lock_pub_t > 1.0: + self._lock_pub_t = now_m + self._lock_pub.publish(Bool(data=True)) + return + # 法兰已停稳:打开 D405。不在这里锁定;框心对准停稳后才精拍下臂。 + self._publish_d435_commanding(False) + self.get_logger().info( + f"法兰已连续停稳 {self.d435_handback_sec:.1f}s" + f"(离 D435 点 {dist*1000:.0f}mm)" + " —— 打开 D405 输出,追工件框矩形中心;对准后才精拍下臂" + ) + + def _tick_still_lock(self) -> None: + """D405 跟住且法兰 XY 连续 still_sec 秒没大幅动 → 锁定进二阶段。 + + 顶视一次性迁臂不算。门槛与位移上限只从 site 来,这里不再写死 3 / 15mm。 + """ + if not self._hybrid or self.d435_move_only: + return + if self._locked: + # 框心对准并且停稳这一拍已经抓住。后面的实时点不再解开,也不再带臂。 + return + T = self._lookup_T(self.base_frame, self.ee_frame) + xy = None if T is None else np.asarray(T[:2, 3], dtype=float) + with self._lock: + have = self._have_target + lost = self._target_lost_flag + source = self._track_source + conf = self._wrist_conf + tracking_ok = ( + source == "wrist" + and have + and not lost + and (not wrist_needs_handoff(conf, self.wrist_handoff_conf)) + and self._xy_armed + ) + locked_now = self._still.update( + xy, time.monotonic(), tracking_ok=tracking_ok + ) + now_m = time.monotonic() + if locked_now and self.enable_control: + if not self._locked: + self._locked = True + self.get_logger().info( + f"=== 一阶段已锁定(D405 框心对准且臂静止 {self.wrist_align_sec:.1f}s," + f"位移≤{self.lock_still_move_m*1000:.0f}mm)" + " → /visual_servo/locked ===" + ) + self._lock_pub.publish(Bool(data=True)) + self._lock_pub_t = now_m + elif now_m - self._lock_pub_t > 1.0: + self._lock_pub_t = now_m + self._lock_pub.publish(Bool(data=True)) + else: + if self._locked: + self._lock_pub.publish(Bool(data=False)) + self._locked = False + self._lock_since = None + def _lock_feedback(self, converged: bool) -> None: """串联锁定信号:持续收敛 lock_hold_sec → /visual_servo/locked=True。 - 只有「有活目标 + XY 入死区 + Z 死区」的驻留分支算收敛;跟踪中、 - 启动下高、寻孔、看门狗冻结等路径都要显式喂 False 打断持续计时。 + 混合模式由 ``_tick_still_lock`` 独占,这里直接返回,避免死区 0.6s 抢先锁定。 """ + if self._hybrid: + return now_m = time.monotonic() if converged and self.enable_control: if self._lock_since is None: @@ -965,48 +2032,31 @@ class ServoNode(Node): return out def _update_xy_arm(self, ee_z: float) -> bool: - """只有当法兰到达 lock_z(真实深度、自适应悬停)后才做 XY 悬停。""" + """只有法兰落在锁高带内才做 XY。低于锁高要先抬回去,不算到位。""" if self.ee_z_m <= 0.0: self._xy_armed = True + self._publish_z_locked(True) return True - gate = max(0.02, float(self.approach_xy_gate_m)) z = float(ee_z) - # 已经在锁高或更低:立刻开 XY,禁止再抬回 0.35(否则二阶段又要降下来)。 - if z <= float(self.ee_z_m) + gate: - if not self._xy_armed: - self._xy_armed = True - self._feat_kf.initialized = False - self._p_feat_base = None - self._v_xy_cmd[:] = 0.0 - self.pid_x.reset() - self.pid_y.reset() - self.get_logger().warn( - f"lock-z 就绪 ee_z={z:.3f}m(期望 {self.ee_z_m:.3f},不再回抬) " - "—— 在实时 handeye 上开始 XY 悬停" - ) - return True - err = abs(z - float(self.ee_z_m)) - if not self._xy_armed: - if err <= gate: - self._xy_armed = True - self._feat_kf.initialized = False - self._p_feat_base = None - self._v_xy_cmd[:] = 0.0 - self.pid_x.reset() - self.pid_y.reset() - self.get_logger().warn( - f"已到达 lock-z ee_z={z:.3f}m(期望 {self.ee_z_m:.3f})" - " —— 在实时 handeye 上开始 XY 悬停" - ) - elif err > gate + 0.05: + at = at_lock_height(z, self.ee_z_m, self.approach_xy_gate_m) + if at and not self._xy_armed: + self._xy_armed = True + self._v_xy_cmd[:] = 0.0 + self.pid_x.reset() + self.pid_y.reset() + self.get_logger().info( + f"锁高到位 ee_z={z:.3f}m(期望 {self.ee_z_m:.3f})" + " —— 开始 XY;腕部无目标时 D435 可以拍一张" + ) + elif (not at) and self._xy_armed: self._xy_armed = False - self._p_feat_base = None - self._feat_kf.initialized = False self._v_xy_cmd[:] = 0.0 self.get_logger().info( - f"已离开 lock-z 区间 ee_z={z:.3f}m —— XY 保持,重新下降", + f"离开锁高 ee_z={z:.3f}m(期望 {self.ee_z_m:.3f})" + " —— 先回高度,XY 暂停", throttle_duration_sec=1.0, ) + self._publish_z_locked(at) return self._xy_armed def _seek_velocity(self, p_ee: np.ndarray) -> Optional[np.ndarray]: @@ -1073,7 +2123,8 @@ class ServoNode(Node): now_m = time.monotonic() dt_cmd = now_m - self._last_traj_mono - if self._last_traj_mono > 0.0 and dt_cmd < (1.0 / self.traj_stream_hz): + min_dt = 1.0 / self.traj_stream_hz + if self._last_traj_mono > 0.0 and dt_cmd < min_dt: return dt_use = float(np.clip(dt_cmd if self._last_traj_mono > 0.0 else 0.04, 0.015, 0.08)) @@ -1103,6 +2154,7 @@ class ServoNode(Node): # hover:在任意锁定高度上把法兰 XY 停在三维特征点上。 # lookat:把光轴命中点(图像中心)驱到特征点上。 xy_ok = self._update_xy_arm(float(p_ee[2])) + cruise = hybrid_cruise_vxy(self.v_slow_xy) if ( xy_ok and (not hold_xy) @@ -1118,6 +2170,10 @@ class ServoNode(Node): if nerr > clip_xy: err = err * (clip_xy / nerr) nerr = clip_xy + # 锁定前整段同一巡航速度。不再用 50mm 远近两档: + # 远处本来就慢,近处一放开就按 kp×误差冲,越近越抖。 + if self._hybrid and not self._locked: + v_xy = min(float(v_xy), cruise) if self._xy_deadzone(nerr, update=False): v_base[0] = 0.0 v_base[1] = 0.0 @@ -1148,9 +2204,10 @@ class ServoNode(Node): ) nxy = float(np.hypot(v_base[0], v_base[1])) - if nxy > v_xy > 0.0: - v_base[0] *= v_xy / nxy - v_base[1] *= v_xy / nxy + cap_xy = cruise if (self._hybrid and not self._locked) else v_xy + if nxy > cap_xy > 0.0: + v_base[0] *= cap_xy / nxy + v_base[1] *= cap_xy / nxy # 在 base 系里保持法兰 XYZ(可配置,默认约 250 mm)。当 ee_hold_xy # 为真时,视觉算出的 XY 会被覆盖。 @@ -1161,28 +2218,33 @@ class ServoNode(Node): v_base[0] = 0.0 if abs(self.ee_y_m - p_ee[1]) < 0.004: v_base[1] = 0.0 - if (not xy_ok) or hold_xy: + # 有目标:XY 平移,Z 钉在这一段开始的高度。没目标才回锁高。 + translating = (not hold_xy) and self._have_target + if (not translating) and ((not xy_ok) or hold_xy): v_base[0] = 0.0 v_base[1] = 0.0 self._v_xy_cmd[:] = 0.0 if self.ee_z_m > 0.0: self.get_logger().info( - f"下降至 lock_z {self.ee_z_m:.3f}m 当前={p_ee[2]:.3f}m XY 保持", + f"回锁高 {self.ee_z_m:.3f}m 当前={p_ee[2]:.3f}m XY 保持", throttle_duration_sec=1.0, ) shaped = self._shape_xy_vel(v_base[:2], dt_use) v_base[0] = float(shaped[0]) v_base[1] = float(shaped[1]) - if self.ee_z_m > 0.0: - ez_b = float(self.ee_z_m - p_ee[2]) - # 已在锁高以下:不再抬臂。二阶段会降到 hole_hover_z。 - if ez_b > 0.0: - v_base[2] = 0.0 - else: - vz_lim = float(self.v_max_z) if xy_ok else max(float(self.v_max_z), 0.08) - v_base[2] = float(np.clip(kp * ez_b, -vz_lim, vz_lim)) - if abs(ez_b) < 0.004: - v_base[2] = 0.0 + if translating: + if self._z_hold is None: + self._z_hold = float(p_ee[2]) + v_base[2] = hold_translation_vz( + float(p_ee[2]), self._z_hold, kp=kp, v_lim=float(self.v_max_z) + ) + else: + self._z_hold = None + if self.ee_z_m > 0.0: + vz_lim = max(float(self.v_max_z), 0.08) + v_base[2] = lock_z_velocity( + float(p_ee[2]), self.ee_z_m, kp=kp, v_lim=vz_lim + ) w_base = ( self._w_align_flange_down(R_ee) @@ -1191,9 +2253,9 @@ class ServoNode(Node): ) p_next = p_ee + v_base * T - if self.ee_z_m > 0.0: - # 绝不指令到配置平面以下 - floor = max(self.min_ee_z, self.ee_z_m - 0.02) + if self.ee_z_m > 0.0 and not translating: + # 向下只许到锁高死区内。已经低于锁高时 v_z>0,这条不挡上抬。 + floor = float(self.ee_z_m) - 0.004 if p_next[2] < floor and v_base[2] < 0.0: v_base[2] = 0.0 p_next = p_ee + v_base * T diff --git a/build/arm_application/build/lib/arm_application/site_io.py b/build/arm_application/build/lib/arm_application/site_io.py index 0e7f016..9243123 100644 --- a/build/arm_application/build/lib/arm_application/site_io.py +++ b/build/arm_application/build/lib/arm_application/site_io.py @@ -80,3 +80,137 @@ def ee_frame_default() -> str: sn = os.environ.get("SITE_ROBOT_SN", "").strip() return f"{sn}_flange" if sn else "" + +def overhead_camera( + site: dict[str, Any], robot: dict[str, Any] | None = None +) -> tuple[dict[str, Any], list[str]]: + """手外(固定)相机 → ``(相机配置字典, 同样合格但未被选中的相机名)``。 + + 手外相机 = ``cameras.*`` 里 ``role`` 以 ``overhead`` 开头的那台(眼在手外时 + 相机固定在工位外,不随臂动)。 + + **为什么必须有唯一实现**:这份"按 role 找,再按 arm 收敛"的规则有两个调用方—— + S03 粗定位取命名空间(本模块给节点用)、手眼标定脚本取相机名。两边各写一份的 + 后果不是报错,而是"标定用的相机"和"推理用的相机"悄悄不是同一台,且没人发现。 + 所以规则只写在这里,两边都调它(`export_site_env.overhead_camera` 也走这里)。 + + 收敛规则(确定性的三级): + 1. ``arm`` 与当前臂相同的优先(仿真 ``sim_d435`` 靠这级选中); + 2. 都没有 ``arm``(= 双臂共用的那台)时回落到它; + 3. 还是多个 → 取第一个,并把其余名字放进第二个返回值,让调用方**出声告警**。 + """ + cams = [ + cfg + for cfg in (site.get("cameras") or {}).values() + if isinstance(cfg, dict) + and str(cfg.get("role") or "").strip().lower().startswith("overhead") + ] + if not cams: + return {}, [] + arm = str((robot or {}).get("arm") or "").strip() + mine = [c for c in cams if str(c.get("arm") or "").strip() == arm] if arm else [] + hits = mine or [c for c in cams if not str(c.get("arm") or "").strip()] or cams + chosen = dict(hits[0]) + others = [str(c.get("name") or "?") for c in hits[1:]] + return chosen, others + + +def eye_to_hand_result_name(short: str, camera_name: str) -> str: + """眼在手外结果文件的**文件名**(不含目录)。 + + 外参绑定「这条臂的基座 + 这台相机」:换条臂或换台相机都不通用, + 所以名字必须同时带上臂号与相机。调用方只许调这里,不许自己拼 + (launch / export_site_env / S03 找文件都走这一处)。 + """ + short = str(short or "").strip() + cam = str(camera_name or "").strip().strip("/") + if short and cam: + return f"{short}_{cam}_eye_to_hand.yaml" + if cam: + return f"{cam}_eye_to_hand.yaml" + if short: + return f"{short}_eye_to_hand.yaml" + return "eye_to_hand.yaml" + + +def resolve_eye_to_hand_file( + root: Path, + *, + explicit: str = "", + camera_name: str = "", +) -> Path | None: + """找手外相机的手眼文件。没有就返回 None。 + + 路径一律按 ``root`` 解析,不跟当前工作目录走——相对 CWD 的路径会在 + "换个目录启动"时静默失效(文件找不到 → S03 直接降级),而人只会怀疑标定。 + + 候选顺序: + 1. ``explicit`` —— launch 按 site.yaml 派生的确切路径 + (``<臂号>_<相机>_eye_to_hand.yaml``); + 2. ``<相机名>_eye_to_hand.yaml`` —— 旧命名 / 仿真(``sim_d435_...``); + 3. ``eye_to_hand.yaml`` —— 再兜底。 + """ + candidates: list[Path] = [] + if explicit: + p = Path(explicit).expanduser() + candidates.append(p if p.is_absolute() else root / p) + cam = str(camera_name or "").strip().strip("/") + if cam: + candidates.append(root / "handeye" / "results" / f"{cam}_eye_to_hand.yaml") + candidates.append(root / "handeye" / "results" / "eye_to_hand.yaml") + for cand in candidates: + if cand.is_file(): + return cand + return None + + +TRACK_CAMERA_ROLES = ("wrist", "overhead") + + +def track_camera_role(site: dict[str, Any] | None) -> str: + """一阶段跟踪用哪台相机:``wrist``(腕部 D405)或 ``overhead``(顶置 D435)。 + + 写错**当场报错**,不会退回腕部 —— 退回会让人以为在验 D435,其实还在用 D405。 + 缺省 ``wrist``:没写这个键时行为与改之前一致(腕部追踪)。 + """ + perc = (site or {}).get("perception") + perc = perc if isinstance(perc, dict) else {} + raw = perc.get("track_camera") + if raw is None or str(raw).strip() == "": + return "wrist" + role = str(raw).strip().lower() + if role not in TRACK_CAMERA_ROLES: + raise ValueError( + f"perception.track_camera 只能是 wrist 或 overhead,收到 {raw!r}。" + "写错不会退回腕部 —— 退回会让人以为在用 D435 其实还在用 D405。" + ) + return role + + +def track_handeye_mode(role: str) -> str: + """跟踪相机角色 → 手眼装法。overhead 必须用 cam→基座,不能用 cam→法兰。""" + if str(role or "").strip().lower() == "overhead": + return "eye_to_hand" + return "eye_in_hand" + + +def handeye_static_tf_frames( + *, + mode: str, + ee_frame: str, + base_frame: str, + cam_frame: str, +) -> tuple[str, str]: + """手眼静态 TF 的 ``(父系, 子系)``。 + + 两种装法的父子关系**不同**,不能混: + * ``eye_in_hand``:法兰 ← 相机(相机跟着臂动) + * ``eye_to_hand``:基座 ← 相机(相机固定,不随臂动) + + 把眼在手外的文件按"法兰 ← 相机"发出去,会得到一条**看着合理**的错 TF —— + 定位总能到附近、永远差一截,而人只会去怀疑标定精度。 + """ + if str(mode or "").strip().lower() == "eye_to_hand": + return str(base_frame), str(cam_frame) + return str(ee_frame), str(cam_frame) + diff --git a/build/arm_application/build/lib/arm_application/stage2_locate_node.py b/build/arm_application/build/lib/arm_application/stage2_locate_node.py index ab37423..a3575d2 100644 --- a/build/arm_application/build/lib/arm_application/stage2_locate_node.py +++ b/build/arm_application/build/lib/arm_application/stage2_locate_node.py @@ -6,12 +6,13 @@ 1. verticalize — 法兰 +Z 严格朝世界 -Z(垂直朝下),XY/Z 不动 2. hover — 闭环升到/降到 robots[].servo.hole_hover_z_m(悬停锁高) - 3. coarse — 拍照,detect_best_1 YOLO 框出工件,粗移到 bbox 中心上方 + 3. coarse — 拍照,工件(pose 模型给框;k1/k2 用关键点)粗移到 bbox 中心上方 4. fine — 拍照,two_stage(YOLO+HoughCircles)解 k1/k2 孔心像素 - 5. align — 深度(孔外工作面中值,防孔底拉偏)+ 内参 + 手眼 + TF - 算出孔在基座系 XY,把夹爪/通止规轴线移到目标孔正上方, - 复拍验证,迭代到 align_tol_m - 6. hold — 锁定关节,发布 /stage2/result(JSON) + /stage2/overlay + 5. align — 像素射线交工件面 + 内参 + 手眼,把规尖移到目标孔正上方。 + ``hole_keypoint_once`` 时只走一次,核验拍只记账; + ``hole_once_lock_xy_descend`` 时按视线前馈一条 MoveL 贴面; + 否则复拍迭代到 align_tol_m + 6. hold — 锁定关节,发布 /stage2/result(JSON) + /tmp/stage2_result.json 高度调试(不动 XY、不拍照定位): bash ~/ros2/scripts/run_stage2_locate.sh --arm 89 --hover-only @@ -22,6 +23,7 @@ from __future__ import annotations import json import math import os +import sys import time from pathlib import Path from typing import Any, Dict, List, Optional, Tuple @@ -45,11 +47,71 @@ from arm_application.geom_ik import ( geometric_jacobian, quat_xyzw_to_R, ) +from arm_application.path_profile import ( + FROZEN_J_HOP_MAX_M, + path_interp as _path_interp, + trap_params as _trap_params, + trap_sv as _trap_sv, +) +from arm_application.overhead_oneshot import ( + ONCE_APPROACH_STEP_M, + ONCE_FF_LOOK_PER_M, + ONCE_FF_MOVEL_VEL_MPS, + ONCE_TRIM_MAX_STEP_M, + ONCE_TRIM_REFUSE_M, + cam_xy_bias_axes, + decompose_base_xy, + flange_z_for_gap_m, + final_gap_refusal, + hole_pair_span_m, + hole_pair_span_ok, + once_ff_movel_from_tcp, + once_ff_tcp_xyz, + oneshot_align_step_m, + pixel_on_base_plane, + retract_goal_z, +) from arm_application.handeye_realsense import resolve_realsense_topics from arm_application.gauge_boot import perception_source_of +from arm_application.gauge_fsm import drag_verdict, resolve_hover_z, wrench_all_zero from arm_application.hole_detect_hough import detect_holes from arm_application.hole_detector import config_from_site, weights_from_site -from arm_application.site_io import deep_merge, load_site_dict +from arm_application.site_io import deep_merge, load_site_dict, ros2_root +from arm_application.ros_node import TolerantNode + +try: + from flexiv_msgs.msg import RobotStates +except ImportError: # pragma: no cover + RobotStates = None # type: ignore + +def contact_armed_gap_m(observe_gap_m: float, final_gap_m: float = 0.002) -> float: + """轻降力接触门槛对应的几何间隙。离面更远时腕部力会漂几牛,不能当碰到。 + + 2026-10-13 远场:法兰 0.384、间隙 138mm、ΔFz=+2.87N。 + 2026-10-13 近场仍假:间隙 9.5mm、ΔFz=+2.77N,尖几何上还在面上约 1cm, + 碰不到板。观察间隙 15mm 会把这一档武装起来,所以门控只收到 + ``final_gap_m + 4mm``(贴面 2mm 时 = 6mm)。``observe_gap_m`` 仍从调用方 + 传入,避免两处签名分叉,但不放宽门控。 + """ + _ = observe_gap_m + return float(final_gap_m) + 0.004 + + +def contact_armed_by_gap( + gap_m: float, observe_gap_m: float, final_gap_m: float = 0.002 +) -> bool: + """当前几何间隙够近,才许把腕部力突变当成碰到工件。""" + return float(gap_m) <= contact_armed_gap_m(observe_gap_m, final_gap_m) + + +# 一次 hop 之后实测关节变化小于这个值,就认为「臂根本没跟随指令」。 +# +# 真机踩到过(2026-09-28):一次 hover hop 计划要动 `max|Δq|=0.17378rad`,实测 +# `0.00000rad`,而控制器照样打印 "Goal reached, success!"。原因不在几何/对位, +# 而是 RDK 断连后 `operational()` 仍为 true、`read()` 一直返回最后一帧缓存, +# 关节状态永久冻结(`robot_timestamp` 推进量为 0),而控制器是本地插值、不校验反馈。 +# 真机上报成"垂直化或悬停失败"会把人往"倾角/悬停高度"上带,故单独拎出来报。 +_NO_FOLLOW_EPS_RAD = 1e-4 def _as_bool(val: Any, default: bool = False) -> bool: @@ -71,54 +133,6 @@ def _pt(q: np.ndarray, qdot: np.ndarray, t_sec: float) -> JointTrajectoryPoint: return pt -def _trap_params(dist: float, v: float, a: float) -> Tuple[float, float, float, float, float]: - """Rest-to-rest 梯形:返回 (T, v_peak, t_acc, t_cruise, a)。巡航速度保持 v。""" - dist = max(float(dist), 1e-6) - v = max(float(v), 1e-4) - a = max(float(a), 1e-3) - d_acc = v * v / (2.0 * a) - if 2.0 * d_acc >= dist: - v_peak = math.sqrt(max(a * dist, 1e-12)) - t_acc = v_peak / a - return 2.0 * t_acc, v_peak, t_acc, 0.0, a - t_acc = v / a - t_cruise = (dist - 2.0 * d_acc) / v - return 2.0 * t_acc + t_cruise, v, t_acc, t_cruise, a - - -def _trap_sv( - t: float, dist: float, v_peak: float, t_acc: float, t_cruise: float, a: float, -) -> Tuple[float, float]: - """时刻 t 的路径弧长 s 与切向速度。""" - t = max(0.0, float(t)) - t_dec0 = t_acc + t_cruise - t_end = t_dec0 + t_acc - if t >= t_end: - return dist, 0.0 - if t < t_acc: - return 0.5 * a * t * t, a * t - if t < t_dec0: - return 0.5 * a * t_acc * t_acc + v_peak * (t - t_acc), v_peak - td = t - t_dec0 - s0 = 0.5 * a * t_acc * t_acc + v_peak * t_cruise - return s0 + v_peak * td - 0.5 * a * td * td, max(0.0, v_peak - a * td) - - -def _path_interp(waypoints: List[np.ndarray], u: float) -> Tuple[np.ndarray, np.ndarray]: - """沿关节路点折线插值。u∈[0,1] → (q, dq/du)。""" - nseg = len(waypoints) - 1 - if nseg <= 0: - z = np.zeros_like(waypoints[0]) - return waypoints[0].copy(), z - u = float(min(1.0, max(0.0, u))) - x = u * nseg - i = min(nseg - 1, int(math.floor(x))) - a = x - i - q = (1.0 - a) * waypoints[i] + a * waypoints[i + 1] - dq_du = (waypoints[i + 1] - waypoints[i]) * nseg - return q, dq_du - - def _sanitize_traj(traj: JointTrajectory, min_dt: float = 0.02) -> JointTrajectory: """JTC 要求 time_from_start 严格递增;短 hop 保持点曾经倒退导致拒轨。""" last = -min_dt @@ -144,7 +158,7 @@ def _bgr_copy(msg: Image) -> np.ndarray: raise RuntimeError(f"Unsupported color encoding {msg.encoding!r}") -class Stage2Locate(Node): +class Stage2Locate(TolerantNode): def __init__(self, node_name: str = "stage2_locate") -> None: super().__init__(node_name) @@ -152,6 +166,17 @@ class Stage2Locate(Node): self.declare_parameter("hover_only", False) self.declare_parameter("target_hole", "") # 空字符串 → 用 site 的 stage2.target_hole self.declare_parameter("hover_z_m", -1.0) # 大于 0 → 覆盖 site 里的值 + # 贴面规尖离面 [mm]。≥0 → 覆盖 site ``final_gap_mm``。-1=用 site。 + # 笛卡尔锁 XY 时法兰 Z = 工具长 + 工件面 + 间隙,XY 不动。 + self.declare_parameter("final_gap_mm", -1.0) + # 工具尖端在法兰下方多少 [m];大于 0 → 覆盖 site。 + # 仿真里由 run_gauge_assembly.sh --sim 传**实测值**(每次上料都可能不同), + # 真机不传(走 site.yaml)。悬停高度与 S07 下探预算都按它算。 + self.declare_parameter("tool_tip_below_flange_m", -1.0) + # 调试开关:只验证**精对准**、不轻降(避免"对准还没confirmed就把规往孔里带")。 + # 用 int 不用 bool —— `ros2 launch` 传 bool 参数容易踩到 CLI 解析的坑。 + # -1=按 site 的 stage2.final_descent_enable;0=强制不降;1=强制降。 + self.declare_parameter("final_descent_enable", -1) self.declare_parameter("preview", True) self.declare_parameter("action_name", "rizon_arm_controller/follow_joint_trajectory") # 真值孔位(perception.source=truth)要把 scene.yaml 的物体位姿投影成像, @@ -186,8 +211,10 @@ class Stage2Locate(Node): # 悬停锁高:launch 覆盖 > robots[].servo.hole_hover_z_m > stage2.hover_z_m hover_override = float(self.get_parameter("hover_z_m").value) + self.hover_z_user_set = hover_override > 0.0 + self._hover_refused = "" self.hover_z = ( - hover_override if hover_override > 0.0 + hover_override if self.hover_z_user_set else float(servo.get("hole_hover_z_m") or stage2.get("hover_z_m") or 0.30) ) self.min_ee_z = float(servo.get("min_ee_z_m") or 0.20) @@ -205,6 +232,9 @@ class Stage2Locate(Node): self.perception_source = perception_source_of(perception) self._truth_object = str((perception.get("truth") or {}).get("object") or "") self._truth_warn_t = 0.0 + # 真值路径的"实测位姿"订阅与场景缓存(懒建,见 _truth_scene/_truth_live_pose) + self._truth_live = None + self._truth_spec = None self.target_hole = ( str(self.get_parameter("target_hole").value or "").strip().lower() @@ -216,10 +246,129 @@ class Stage2Locate(Node): self.coarse_max_moves = int(stage2.get("coarse_max_moves") or 2) self.align_speed = float(stage2.get("align_speed") or 0.03) self.move_speed = float(stage2.get("move_speed") or 0.05) - # 最后轻降到孔面上方 final_gap_mm(不接触) - self.final_gap_m = float(stage2.get("final_gap_mm") or 1.5) / 1000.0 + # 粗居中的两条**误检守卫**(2026-10-08 真机 arm 89 的 exit=4,见 + # _coarse_target_reject / _bbox_on_border 的注释):粗居中的目的是把臂 + # 挪到工件正上方,**挪错比不挪危险得多** —— 一挪错精定位就再也看不到 + # k1/k2,而流程会把它当"孔检测失败",现场根本想不到是粗居中把臂带走的。 + self.coarse_max_offset_m = float(stage2.get("coarse_max_offset_m") or 0.08) + self.coarse_border_px = int(stage2.get("coarse_border_px") or 2) + # 最后轻降到孔面上方 final_gap_mm(不接触)。启动参数 ≥0 覆盖 site。 + self._final_gap_refused = "" + _gap_override_mm = float(self.get_parameter("final_gap_mm").value) + self.final_gap_user_set = _gap_override_mm >= 0.0 + if self.final_gap_user_set: + self.final_gap_m = _gap_override_mm / 1000.0 + else: + self.final_gap_m = float(stage2.get("final_gap_mm") or 1.5) / 1000.0 + # 观测下降:对准后降到这个间隙就停,方便看规尖是不是对着孔。 + # 比 final_gap(贴面 2mm)高一截,对偏了也不会把规压上孔沿。 + self.observe_gap_m = float(stage2.get("observe_gap_mm") or 15.0) / 1000.0 + if self.observe_gap_m < self.final_gap_m: + self.get_logger().warn( + f"observe_gap_mm={self.observe_gap_m*1000:.1f} 比贴面目标 " + f"{self.final_gap_m*1000:.1f}mm 还近 —— 收到贴面高度,避免观测下降钻进孔" + ) + self.observe_gap_m = self.final_gap_m + # 悬停高度**必须**让工具尖端留在工件面上方(2026-09-24 的教训,完整说明见 + # gauge_fsm.hover_z_guard):悬停高是按相机视距定的,而工具(夹爪+通止规) + # 比相机长 —— 实测悬停时尖端已经钻进工件 25mm,于是 S05 的横向对准把工件 + # 拖走 92mm,而真值孔位按工件的**实测**位姿算 ⇒ 孔位跟着工具走、残差恒定 + # 13mm 永不收敛(现场看着像手眼标定坏了)。这里按几何兜住并喊出原因。 + _ga = deep_merge(site.get("gauge_assembly") or {}, robot.get("gauge_assembly") or {}) + # 工具长优先取**启动参数**(launch 覆盖 > site):仿真里上料脚本会实测它 + # 并落盘(sim_load_gauge → sim_tool_geometry.yaml → run_gauge_assembly.sh), + # 因为仿真里规会在指间下滑、下滑量随装夹变化(实测见过 243 / 254mm)。 + # 真机不给这个参数,走 site.yaml 的实测值 —— 与 hover_z_m 同一套优先级。 + _tool_len = float(self.get_parameter("tool_tip_below_flange_m").value) + if _tool_len <= 0.0: + _tool_len = float(_ga.get("tool_tip_below_flange_m") or 0.0) + _surface_z = float(_ga.get("workpiece_surface_z_m") or 0.0) + # 记成成员:轻降的几何夹逼(_descend_above_hole)要用同一套数字, + # 不能各推一遍 —— 否则改了一处另一处就悄悄失配。 + self.tool_tip_below_flange_m = _tool_len + self.surface_z_m = _surface_z + # 对小孔只用关键点像素和已知工件面,不读深度图。缺了就按旧的深度路径。 + self.hole_visual_only = _as_bool(stage2.get("hole_visual_only"), False) + # 本分支实验:悬停拍一次 k1/k2,走一次,复拍只记账不改 XY。 + # 键必须接线——写了 true 却仍多走多拍,等于没做实验。 + self.hole_keypoint_once = _as_bool(stage2.get("hole_keypoint_once"), False) + # 悬停走完后一条厂家 MoveL 收到贴面。k=0:笛卡尔锁 XY 只降 Z。 + # 缺键 = 仍走观察高补交(37b85aa)。 + self.hole_once_lock_xy_descend = _as_bool( + stage2.get("hole_once_lock_xy_descend"), False + ) + _ff = stage2.get("once_ff_look_per_m") + if _ff is None: + self.once_ff_look_per_m = float(ONCE_FF_LOOK_PER_M) + else: + self.once_ff_look_per_m = float(_ff) + self._ws_clipped = False + self._hole_snaps: List[Dict[str, Any]] = [] + if self.hover_z_user_set and (_tool_len <= 0.0 or _surface_z <= 0.0): + self._hover_refused = ( + "写了 --hover-z,但工具长度或工件面未知,无法确认尖端在面之上,拒绝执行" + ) + self.get_logger().error(self._hover_refused) + elif _tool_len > 0.0: + _used, _refused = resolve_hover_z( + self.hover_z, _surface_z, _tool_len, self.final_gap_m, self.hover_z_user_set + ) + if _refused: + self._hover_refused = _refused + self.get_logger().error( + "启动参数指定的悬停高度不安全,拒绝执行,不会改成别的高度:\n " + + _refused + ) + elif abs(_used - self.hover_z) > 1e-9: + self.get_logger().warn( + f"二阶段悬停高度自检不通过 —— 用几何修正值 {_used:.4f}m" + "(这次没写 --hover-z,沿用 site 的几何抬高)" + ) + self.hover_z = _used + # 轻降**最多能降多少**:从悬停高度降到"规尖停在工件面上方 final_gap"为止。 + # 这是纯几何量,与深度测量无关 —— 测量的唯一职责是让下降**提前**收工, + # 绝不允许它把下降量**放大**(2026-09-29 实测就是这么撞的:测量出的 + # gap0=141mm 比几何真值大 ~86mm,于是多降 86mm 把规撞进孔)。 + # 工具长/工件面未知(<=0)时给 None = 不启用夹逼,行为与改动前一致。 + self.descent_budget_m: Optional[float] = None + if _tool_len > 0.0 and _surface_z > 0.0: + self.descent_budget_m = max( + 0.0, self.hover_z - _tool_len - _surface_z - self.final_gap_m + ) + # 轻降结束后**按几何**算出的真实间隙 [m],供收尾日志如实汇报(不是把目标值 + # 当结果念一遍 —— 那会让"停在离面 50mm"也显示成"~2.0mm",R1.1 的静默失效)。 + self.descent_final_gap_m: Optional[float] = None self.final_descent_speed = float(stage2.get("final_descent_speed") or 0.006) self.final_descent_enable = _as_bool(stage2.get("final_descent_enable"), True) + _fd = int(self.get_parameter("final_descent_enable").value) + if _fd in (0, 1): # -1 = 按 site;0/1 = 启动参数强制(调试用) + self.final_descent_enable = bool(_fd) + self.get_logger().warn( + f"final_descent_enable 被启动参数覆盖为 {self.final_descent_enable} " + f"(site 里是 {stage2.get('final_descent_enable')})—— 只在调试时这么用" + ) + if self.final_gap_user_set and not self.final_descent_enable: + self._final_gap_refused = ( + "同时写了 --final-gap 和 --no-descent,不知道听谁的,拒绝开跑" + ) + self.get_logger().error(self._final_gap_refused) + elif self.final_gap_user_set and (_tool_len <= 0.0 or _surface_z <= 0.0): + self._final_gap_refused = ( + "写了 --final-gap,但工具长度或工件面未知,无法确认尖端在面之上,拒绝执行" + ) + self.get_logger().error(self._final_gap_refused) + elif _tool_len > 0.0 and _surface_z > 0.0: + _why_gap = final_gap_refusal( + self.final_gap_m, + _tool_len, + _surface_z, + self.hover_z, + float(self.ws_min[2]), + float(self.ws_max[2]), + ) + if _why_gap: + self._final_gap_refused = _why_gap + self.get_logger().error(_why_gap) self.vert_tol_rad = math.radians(float(stage2.get("verticalize_tol_deg") or 0.8)) self.settle_sec = float(stage2.get("settle_sec") or 0.45) self.snap_frames = int(stage2.get("snap_frames") or 5) @@ -227,6 +376,37 @@ class Stage2Locate(Node): self.max_depth = float(stage2.get("max_depth_m") or 0.60) self.linger_sec = float(stage2.get("linger_sec") or 8.0) + # ---- 精对准的「工具位置」:视觉量规尖(默认)还是法兰+固定偏置 ---- + # 为什么必须能视觉量(2026-10-08 真机 arm 89): + # 规是**夹在爪里**的零件,它相对法兰轴线可以整体偏出约 10mm(实测规杆 + # 轴线相对法兰 = (+10.7, −0.1)mm)。二阶段原来把**法兰轴线**对到孔上 + # (hover_offset_ee_xy_m 写死 [0,0]),于是规尖实际离孔心 ~10mm, + # 轻降一压,φ6 规尖就骑在 φ7 孔的**孔沿**上、力从 −1N 蹦到 63N 卡死。 + # 现场看到的是"轻降在离面 4mm 停住",离真正原因(规偏了)很远。 + # 改成在同一帧里同时解「规尖基座 XY」和「孔基座 XY」,两者走同一条手眼链, + # 链路误差/装夹变动一起抵消 —— 这才是"用视觉把孔对正"。 + # 规尖偏移**逐帧实测+一致性校验**(见 _tip_offset_from_depth):偏移是刚体量, + # 竖直朝下姿态下在基座 XY 里恒定,所以可以用"上一拍的偏移"剔掉偶发误检。 + # 规尖偏移**逐帧实测 + 一致性校验后冻结**(见 _refresh_tip_offset):偏移是刚体量, + # 竖直朝下姿态下在基座 XY 里恒定。为什么要冻结而不是逐拍重算: + # 2026-10-08 真机实测,逐拍重算时残差在 0.44~0.85mm 之间来回荡、收不进 0.25mm —— + # 元凶是**规杆略微倾斜**(<1°):每拍取到的"最深像素"高度不同(工具长在 + # 192~223mm 之间跳),同一根杆在不同高度上的基座 XY 差 ~0.4mm。 + # 偏移既然是刚体量,量准一份冻结住,那 0.4mm 的抖动就没了。 + self.tip_vision = _as_bool(stage2.get("align_tip_vision"), True) + self.tip_near_m = float(stage2.get("tip_near_m") or 0.15) + self.tip_min_m = float(stage2.get("tip_min_m") or 0.04) + self.tip_max_m = float(stage2.get("tip_max_m") or 0.60) + self.tip_band_frac = float(stage2.get("tip_search_band_frac") or 0.25) + self.tip_min_px = int(stage2.get("tip_min_px") or 150) + self.tip_off_tol = float(stage2.get("tip_offset_tol_m") or 0.003) + self.tip_len_min = float(stage2.get("tip_len_min_m") or 0.15) + self.tip_len_max = float(stage2.get("tip_len_max_m") or 0.32) + self.tip_calib_n = int(stage2.get("tip_calib_n") or 4) + self._tip_off: Optional[np.ndarray] = None # 规尖相对法兰的基座 XY 偏移(冻结后不变) + self._tip_samp: list = [] # 校准期攒下的 (偏移, 工具长) 样本 + self._tip_len_m: Optional[float] = None # 定偏移时并记下的工具长(用于交叉核对配置) + self.hover_only = _as_bool(self.get_parameter("hover_only").value, False) self.preview = _as_bool(self.get_parameter("preview").value, True) @@ -261,6 +441,9 @@ class Stage2Locate(Node): #: 最近一帧的收到时刻(单调钟)。判"有没有活的数据"用它,**不用数值大小** —— #: 静止时轴向力本来就接近 0,拿数值判活会把"安静的传感器"误判成掉线。 self._t_ft: Optional[float] = None + #: "FT 全零"守卫的状态(见 _on_wrench):零值起始时刻 + 是否已喊过一次。 + self._ft_zero_since: Optional[float] = None + self._ft_zero_warned: bool = False robot_ns = str(self.get_parameter("robot_sn").value).replace("-", "_") # 话题可配:默认按 sn 推导,与真机 flexiv_robot_states_broadcaster 一致。 # 换 FT 来源(换个厂家、或走 external_wrench_in_tcp)时不用改代码。 @@ -270,6 +453,23 @@ class Stage2Locate(Node): self.create_subscription( WrenchStamped, self.ft_wrench_topic, self._on_wrench, qos_profile_sensor_data ) + # 厂家 tcp_pose(WORLD)。视线前馈 MoveL 必须在这上面加相对位移, + # 不许拿 ROS 法兰+规尖当绝对目标。回调名避开 stage3 的 `_on_robot_states`。 + self._tcp_world: Optional[Tuple[float, float, float]] = None + self._t_tcp: Optional[float] = None + self.robot_states_topic = f"/{robot_ns}/flexiv_robot_states" + if RobotStates is not None: + self.create_subscription( + RobotStates, + self.robot_states_topic, + self._on_stage2_robot_states, + qos_profile_sensor_data, + ) + elif self.hole_once_lock_xy_descend: + self.get_logger().error( + "没有 flexiv_msgs.RobotStates,视线前馈不能读厂家 tcp_pose," + "不许退回 ROS 绝对坐标" + ) self._state_pub = self.create_publisher(String, "/stage2/state", 10) self._result_pub = self.create_publisher(String, "/stage2/result", 10) @@ -286,8 +486,38 @@ class Stage2Locate(Node): f" weights={self._weights}\n" f" image={self.image_topic} depth={self.depth_topic}\n" f" target={self.target_hole} (k1={self.k1_label}) tol={self.align_tol*1000:.1f}mm " - f"hover_only={self.hover_only}" + f"hover_only={self.hover_only} hole_visual_only={self.hole_visual_only} " + f"hole_keypoint_once={self.hole_keypoint_once} " + f"lock_xy_descend={self.hole_once_lock_xy_descend} " + f"ff_look={self.once_ff_look_per_m:.3f} " + f"final_gap={self.final_gap_m * 1000:.1f}mm" + + ( + f"→法兰Z={flange_z_for_gap_m(self.tool_tip_below_flange_m, self.surface_z_m, self.final_gap_m):.4f}m" + if self.tool_tip_below_flange_m > 0.0 and self.surface_z_m > 0.0 + else "" + ) + + "\n" + f" 工具长={self.tool_tip_below_flange_m:.4f}m(法兰到尖,下臂不得低于面+间隙)" ) + if self.hole_keypoint_once and self.hole_once_lock_xy_descend: + k = float(self.once_ff_look_per_m) + if k <= 1e-9: + self.get_logger().warn( + "对孔方案=单次精拍·笛卡尔锁 XY(实验)。悬停走完后不补拍," + "厂家 MoveL 只降 Z、ΔXY=0。k>0 会沿 -look 再加前馈。" + "对照 37b85aa 把 hole_once_lock_xy_descend 改回 false。" + ) + else: + self.get_logger().warn( + "对孔方案=单次精拍·视线前馈斜线(实验)。悬停走完后不补拍," + f"ΔXY=-look×{k:.3f}×剩余下降,一条 MoveL 到贴面。" + "对照 37b85aa 把 hole_once_lock_xy_descend 改回 false。" + ) + elif self.hole_keypoint_once: + self.get_logger().warn( + "对孔方案=单次精拍(实验分支)。拍一次→走一次,复拍和下降后只记账不改 XY。" + "残差以核验拍为准,不许用 hop 到位冒充。看 /tmp/stage2_result.json 的 snaps。" + ) # ==================== 状态/运动原语(闭环 hop,同 goto_ee_plane) ==================== @@ -303,6 +533,23 @@ class Stage2Locate(Node): def _on_info(self, msg: CameraInfo) -> None: self._info = msg + def _on_stage2_robot_states(self, msg) -> None: + """缓存厂家 ``tcp_pose``(WORLD)。名字必须与 stage3 ``_on_robot_states`` 分开。""" + p = msg.tcp_pose.pose.position + xyz = (float(p.x), float(p.y), float(p.z)) + if not all(math.isfinite(v) for v in xyz): + return + self._tcp_world = xyz + self._t_tcp = time.monotonic() + + def _fresh_tcp_world(self): + """最近 0.5s 的厂家 TCP [m]。过期/没有 → None,不许用旧值凑。""" + if self._tcp_world is None or self._t_tcp is None: + return None + if time.monotonic() - float(self._t_tcp) > 0.5: + return None + return self._tcp_world + def _on_wrench(self, msg: WrenchStamped) -> None: """缓存腕部 FT 的**轴向力**(`geometry_msgs/WrenchStamped`,法兰系)。 @@ -315,6 +562,28 @@ class Stage2Locate(Node): # 记收到时刻:下游(尤其 S07)要区分"收到过但读数为 0"(活)与 # "一帧都没收到"(话题名/网络/传感器的问题)。 self._t_ft = time.monotonic() + # —— "全零"守卫(2026-10-08 加):上面那个"收到过就算活"的口径有个盲区 —— + # 数据源没出数时,话题照样在发、回调照样在跑、读数恒为 (0,0,0),于是 + # `wrench_live` 报"活",而"abs(fz−基线)>2.5N 判接触"的兜底**永远不触发**。 + # 真机就踩到了(ft_sensor_wrench 恒零,external_wrench_in_tcp 才有数)。 + # 判据见 wrench_all_zero:带负载的 FT 不可能六个分量同时恰好为 0。 + w = msg.wrench + if wrench_all_zero( + w.force.x, w.force.y, w.force.z, w.torque.x, w.torque.y, w.torque.z + ): + if self._ft_zero_since is None: + self._ft_zero_since = self._t_ft + elif not self._ft_zero_warned and self._t_ft - self._ft_zero_since > 5.0: + self._ft_zero_warned = True + self.get_logger().error( + f"腕部 FT 话题 {self.ft_wrench_topic} 连续 >5s 六个分量**全为 0** —— " + "这不是'安静'(带负载的 FT 不可能全零),是**数据源没有出数**。" + "后果:轻降/下压的接触兜底 abs(fz−基线)>2.5N **永远判不到接触**" + "(静默失效)。真机请指向有数的话题,例如 " + "//external_wrench_in_tcp(site.yaml 的 servo.ft_wrench_topic)。" + ) + else: + self._ft_zero_since = None def _contact_detected(self, baseline_fz: float, thresh_n: float = 2.5) -> bool: """腕部力 Z 偏离基线 thresh_n 牛以上 → 判为规尖碰工件(接触)。""" @@ -382,18 +651,10 @@ class Stage2Locate(Node): return geometric_jacobian(link_R, link_p, p_ee, RIZON_LINK_AXES) def _w_down(self, R: np.ndarray) -> Tuple[np.ndarray, float]: - """让法兰 +Z 指向世界 -Z(垂直朝下)的角速度向量 + 当前倾角。""" - z_now = R[:, 2] - z_des = np.array([0.0, 0.0, -1.0]) - c = float(np.clip(np.dot(z_now, z_des), -1.0, 1.0)) - ang = float(np.arccos(c)) - if ang < 0.006: # 0.34° 以下不再修,避免原地抖动 - return np.zeros(3), ang - axis = np.cross(z_now, z_des) - n = float(np.linalg.norm(axis)) - axis = axis / n if n > 1e-9 else np.array([1.0, 0.0, 0.0]) - mag = float(np.clip(2.0 * ang, -0.5, 0.5)) - return axis * mag, ang + """让法兰 +Z 指向世界 -Z。公式只在 ``path_profile.flange_down_w``。""" + from arm_application.path_profile import flange_down_w + + return flange_down_w(R) def _wait_state(self, timeout_s: float) -> Tuple[Optional[np.ndarray], Optional[np.ndarray]]: t0 = time.monotonic() @@ -452,7 +713,8 @@ class Stage2Locate(Node): lo = self.ws_min + 0.005 hi = self.ws_max - 0.005 clamped = np.clip(np.asarray(target, dtype=float).reshape(3), lo, hi) - if not np.allclose(clamped, target, atol=1e-6): + self._ws_clipped = bool(not np.allclose(clamped, target, atol=1e-6)) + if self._ws_clipped: self.get_logger().warn( f"目标超出工作盒,已截断: ({target[0]:.3f},{target[1]:.3f},{target[2]:.3f}) → " f"({clamped[0]:.3f},{clamped[1]:.3f},{clamped[2]:.3f})" @@ -466,7 +728,7 @@ class Stage2Locate(Node): target: np.ndarray, verticalize: bool, tag: str, - max_seg: float = 0.08, + max_seg: float = FROZEN_J_HOP_MAX_M, v: float = 0.05, min_dur: float = 1.6, ) -> bool: @@ -640,10 +902,13 @@ class Stage2Locate(Node): min_dur: float = 1.6, hold_xy: bool = False, strict_xy: bool = False, + z_up_only: bool = False, ) -> Tuple[bool, np.ndarray, np.ndarray]: """闭环点到点:规划短 hop → 执行 → 重新看 TF → 重复,直到容差内。 hold_xy=True:只收 Z/姿态(悬停降锁高),不把下降中漂出的 XY 再拽回去。 + z_up_only=True:当前已经高于目标 Z 就停,不许为了追 5 mm 往下补 + (贴面 MoveL 后收臂 hop1 抬过头、hop2 回压进孔,2026-10-16)。 """ target = self._clamp_ws(target) last_dist: Optional[float] = None @@ -651,7 +916,14 @@ class Stage2Locate(Node): stall = 0 for hop in range(max_hops): p = Tee[:3, 3] - goal = np.array([p[0], p[1], target[2]]) if hold_xy else target + z_tgt = float(target[2]) + if z_up_only: + if float(p[2]) >= z_tgt - float(tol_m): + return True, q, Tee + z_tgt = retract_goal_z(float(p[2]), z_tgt) + goal = np.array([p[0], p[1], z_tgt]) if hold_xy else np.array( + [target[0], target[1], z_tgt], dtype=float + ) if hold_xy: goal = self._clamp_ws(goal) dp = goal - p @@ -688,12 +960,22 @@ class Stage2Locate(Node): if q2 is None or Tee2 is None: self.get_logger().error("运动途中丢了 joint_states/TF") return False, q, Tee + d_moved = float(np.max(np.abs(q2 - q))) self.get_logger().info( - f" {tag} hop{hop + 1} 实际 max|Δq|={float(np.max(np.abs(q2 - q))):.5f}rad " + f" {tag} hop{hop + 1} 实际 max|Δq|={d_moved:.5f}rad " f"Δxy=({(Tee2[0, 3] - Tee[0, 3]) * 1000:+.2f}," f"{(Tee2[1, 3] - Tee[1, 3]) * 1000:+.2f})mm " f"Δz={float((Tee2[2, 3] - Tee[2, 3]) * 1000):+.2f}mm" ) + if d_moved < _NO_FOLLOW_EPS_RAD: + # 轨迹发出去了、控制器也报成功,臂却一步没动 —— 别往几何/对位上找。 + self.get_logger().error( + f" {tag} hop{hop + 1}:关节状态**毫无变化**(实测 max|Δq|={d_moved:.5f}rad," + f"指令计划见上一条 send 日志)—— 臂没有跟随指令。这**不是**倾角/悬停高度的问题," + "而是关节状态没在更新:RDK 断连后 operational() 仍为 true,read() 只会一直" + "返回最后一帧缓存,而控制器是本地插值、不校验反馈,所以照样报 success。" + "先查网络:ping 机器人 IP 是否丢包、两台臂是否同 MAC 抢 L2 转发。" + ) q, Tee = q2, Tee2 p = Tee[:3, 3] goal = np.array([p[0], p[1], target[2]]) if hold_xy else target @@ -831,7 +1113,13 @@ class Stage2Locate(Node): bbox: Any, intr: Dict[str, float], ) -> Optional[Dict[str, Any]]: - """单帧:孔心像素 + 环形深度 → 基座系 XYZ。左右孔深度差过大则改用工作面中值。""" + """单帧:孔心像素 → 基座系 XYZ。 + + ``hole_visual_only`` 时射线交到已知工件面,不读深度图。 + 否则仍用环形深度(旧路径)。 + """ + if self.hole_visual_only: + return self._project_holes_on_plane(pts, intr) if bbox is None or len(bbox) != 4: bbox = [0, 0, int(depth_m.shape[1]), int(depth_m.shape[0])] holes_px = [ @@ -843,9 +1131,12 @@ class Stage2Locate(Node): except Exception: return None # 两孔统一用工件表面深度 z_wp(中值,稳健)。 - # 孔是垂直孔,XY 位置与深度无关;而 _ring_depth 在通止规逼近目标孔时会采到 - # 更近的通止规(~88mm vs 面 ~115mm),把孔深拉偏 → 孔基座坐标随手臂移动漂移、 - # 精对准追不动目标而振荡。倾斜仅 ~0.4°,左右孔 camera-Z 差 <0.5mm,对 XY 影响 <0.2mm。 + # 不用每孔的环形深度:通止规逼近时环上会采到更近的规(~88mm vs 面 ~115mm), + # 孔的基座坐标就跟着臂飘、精对准追不动。 + # 法兰相对竖直大约 0.4°,但相机光轴相对法兰大约 30°。深度误差会进 XY: + # 2026-10-09 观测高度实测 dXY/dz ≈ 0.46 mm/mm。z_wp 必须是工件面, + # 不能是规。同一孔在悬停和观测高度上反投影,基座 XY 可以差约 2mm, + # 所以下降之后还要在当前高度再对一次(见 _trim_xy_after_descent)。 z_left = z_right = z_wp try: left_b = self._cam_to_base(self._px_to_cam(pts[0][0], pts[0][1], z_left, intr)) @@ -860,27 +1151,74 @@ class Stage2Locate(Node): "z_wp": float(z_wp), } + def _project_holes_on_plane(self, pts, intr: Dict[str, float]) -> Optional[Dict[str, Any]]: + """小孔关键点像素交到工件面上。深度图不参与。""" + if float(self.surface_z_m) <= 0.0: + self.get_logger().error( + "对孔不用深度图,但 workpiece_surface_z_m 没有配 —— 拒绝反投影" + ) + return None + T = self._lookup(self.base_frame, self.cam_frame) + if T is None: + self.get_logger().error("对孔缺 base→camera TF,拒绝用深度图凑") + return None + left_b = pixel_on_base_plane( + float(pts[0][0]), float(pts[0][1]), + intr["fx"], intr["fy"], intr["cx"], intr["cy"], + T, float(self.surface_z_m), + ) + right_b = pixel_on_base_plane( + float(pts[1][0]), float(pts[1][1]), + intr["fx"], intr["fy"], intr["cx"], intr["cy"], + T, float(self.surface_z_m), + ) + if left_b is None or right_b is None: + self.get_logger().error("孔心射线没交到工件面(相机朝向或工件面高度不对)") + return None + z = float(self.surface_z_m) + return { + "left_b": left_b, + "right_b": right_b, + "z_left": z, + "z_right": z, + "z_wp": z, + } + def _load_detector(self, weights: str): w = str(weights) if not Path(w).is_file(): raise RuntimeError(f"工件权重不存在: {w}") - if w.lower().endswith(".onnx"): + from arm_application.pose_detector import is_pose_model + from arm_application.yolo_detector import YoloDetector, build_detector, resolve_weights + + conf = float(self._hole_cfg.get("conf", 0.25)) + iou = float(self._hole_cfg.get("iou", 0.7)) + imgsz = int(self._hole_cfg.get("imgsz", 640)) + if is_pose_model(w): + # pose 模型同时给工件框 + k1/k2 关键点。走自解码实现 —— + # ultralytics 解不了 pose 的 TensorRT engine(见 pose_detector 模块头), + # OnnxWorkpieceDetector 同样只认检测输出。 + det = build_detector( + resolve_weights(w, "auto"), + conf=conf, + iou=iou, + imgsz=imgsz, + ) + elif w.lower().endswith(".onnx"): from arm_application.onnx_workpiece import OnnxWorkpieceDetector det = OnnxWorkpieceDetector( w, - conf=float(self._hole_cfg.get("conf", 0.25)), - imgsz=int(self._hole_cfg.get("imgsz", 640)), + conf=conf, + imgsz=imgsz, ) else: - from arm_application.yolo_detector import YoloDetector, resolve_weights - det = YoloDetector( resolve_weights(w, "auto"), device="cpu", - conf=float(self._hole_cfg.get("conf", 0.25)), - iou=float(self._hole_cfg.get("iou", 0.7)), - imgsz=int(self._hole_cfg.get("imgsz", 640)), + conf=conf, + iou=iou, + imgsz=imgsz, ) self.get_logger().info(f"工件检测器已加载: {w}") return det @@ -921,9 +1259,14 @@ class Stage2Locate(Node): 退回检测器的后果是**用整幅画面当 ROI**,于是 HoughCircles 在夹爪/通规/ 台面上找出一对"假孔"(实测间距 108mm,真值 58mm),再被门槛丢掉 —— 现象是"每拍都丢、最后超时",比直接说"TF 没到"难查得多。 + + ⚠️ 几何用**实测**位姿(``sim_live_pose``)而不是 scene.yaml 的名义位姿: + 工件落地/蠕动后就偏 2~3mm,而规尖(φ6)进 φ7 的孔只有 0.5mm 余量 —— + 按名义位姿算的孔位会把这一整条链指偏两毫米(现象是"S07 压到工件面、 + 孔却没进去",看起来像柔顺参数不对)。真机上的视觉量的也是"实际在哪"。 """ try: - from arm_sim_gazebo import truth_holes + from arm_sim_gazebo import sim_live_pose, sim_scene, truth_holes except ImportError: # 真机上没有仿真包,perception.source 也不会是 truth —— 到这里只可能是 # 有人把 source 配成 truth 却没装仿真包,直接报清楚。 @@ -935,9 +1278,13 @@ class Stage2Locate(Node): i3 = None if intr is not None: i3 = (intr.get("fx"), intr.get("fy"), intr.get("cx"), intr.get("cy")) + spec = self._truth_scene(sim_scene) + live = self._truth_live_pose(spec, sim_live_pose) + if live is not None: + spec = live.apply(spec, [str(self._truth_object or spec.operating.part_object)]) res = truth_holes.locate_holes( T, i3, (int(bgr.shape[0]), int(bgr.shape[1])), - object_name=self._truth_object, root=None, + spec=spec, object_name=self._truth_object, root=None, ) if not res.ok: now = time.monotonic() @@ -976,6 +1323,34 @@ class Stage2Locate(Node): "draw_img": truth_holes.draw(bgr, res), } + def _truth_scene(self, sim_scene): + """真值路径的场景配置(读一次,缓存)。 + + 为什么缓存:S05 会连着算很多拍,而 scene.yaml 是**静态配置** + (物体位姿那种会变的东西走 ``sim_live_pose``,不从这里读)。 + """ + if self._truth_spec is None: + self._truth_spec = sim_scene.load_scene(None, None) + return self._truth_spec + + def _truth_live_pose(self, spec, sim_live_pose): + """真值路径的"实测位姿"订阅(懒建一次)。没配 pose_info 就返回 None。 + + 为什么这里也要(不只是真值感知节点):二阶段的**孔位**是这条链上 + 精度要求最高的一处(规尖 φ6 进 φ7 的孔),而它和真值感知共用同一份 + "物体现在在哪"的实现(``sim_live_pose``,R5.8)。 + """ + if self._truth_live is None: + pi = getattr(spec, "pose_info", None) + topic = str(getattr(pi, "ros_topic", "") or "") + self._truth_live = sim_live_pose.LiveScenePose(self, topic) if topic else False + if self._truth_live: + self.get_logger().info( + f"真值孔位按**实测**位姿算(订阅 {topic})—— " + f"按名义位姿算会偏 2~3mm,而规尖进孔只有 0.5mm 余量。" + ) + return self._truth_live or None + def _truth_to_base(self, pts_world: Any) -> list: """世界系点列 → 基座系点列(TF 查不到时返回空列表,调用方会退回深度反投影)。 @@ -1067,15 +1442,258 @@ class Stage2Locate(Node): best, best_area = d, area if best is None: return None - return tuple(int(v) for v in best.xyxy) # type: ignore[return-value] + bbox = tuple(int(v) for v in best.xyxy) # type: ignore[assignment] + h, w = bgr.shape[:2] + if self._bbox_on_border(bbox, w, h): + return None + return bbox # type: ignore[return-value] + + def _bbox_on_border( + self, bbox: Any, w: int, h: int, margin_px: Optional[int] = None + ) -> bool: + """框是否被画面边缘切到(= 只看到工件的一部分,不是整个工件)。 + + 为什么这种框一个都不能用(2026-10-08 真机 arm 89 实测) + -------------------------------------------------------- + 粗居中要的是**框中心落在工件的哪个位置**,再对那个点做深度反投影。 + 框被边缘切掉时,框中心根本不在工件上 —— 真机那一帧:: + + snap_coarse_0: 工件 bbox=(0, 142, 97, 222) 中心=(48,182) + base=(0.280,-0.747)[深度] 偏差=211.5mm + + ``x0=0`` 就是左边缘切的。反投影出来的 (0.280,-0.747) 落在工作盒外 + 197mm,而下一步**没有判误检,而是"截断到盒边"照样横移** 56mm, + 把臂带离工件 ⇒ 精定位再也看不到 k1/k2 ⇒ ``exit=4``。 + + 同一个判据顺手挡掉另一种退化输入:YOLO 空框时兜底用的"孔检测器 bbox" + 在真机那帧是 ``[0, 0, 847, 479]``(整幅画面,四边全贴边)。 + """ + if margin_px is None: + margin_px = int(getattr(self, "coarse_border_px", 2)) + if bbox is None or len(bbox) < 4 or w <= 0 or h <= 0: + return True + x0, y0, x1, y1 = (float(v) for v in bbox[:4]) + m = float(margin_px) + return x0 <= m or y0 <= m or x1 >= (w - 1) - m or y1 >= (h - 1) - m + + def _coarse_target_reject( + self, + p_base: np.ndarray, + gxy: np.ndarray, + max_offset_m: Optional[float] = None, + ) -> Optional[str]: + """粗居中的目标点是不是**误检**。返回 None = 可信;否则返回拒绝原因。 + + 为什么必须能在**移动前**否掉(2026-10-08 真机 arm 89,exit=4) + -------------------------------------------------------------- + 真机那一帧:: + + snap_coarse_0: base=(0.280,-0.747)[深度] 偏差=211.5mm + 目标超出工作盒,已截断: (0.280,-0.747,0.320) → (0.280,-0.545,0.320) + coarse Δ=(-56,-2,-0)mm ← 臂被带离工件 56mm + snap_fine_*: 两孔基座间距 210.0/213.2/212.2mm 不像 k1/k2,丢弃本拍 + 二阶段失败 exit=4 + + 工件其实在 (0.5,-0.12) 一带 —— 也就是说这个"截断"不是安全兜底, + 而是**把一次误检变成了对机械臂的一条真实横移指令**:越界只是被夹到盒边, + 臂照样走出去。这就是规矩里禁的"宽容降级":把"没检查"伪装成"检查通过"。 + + 两条判据(都是"盒外/离谱 ⇒ 判误检",不是"夹到盒边继续"): + + 1. 目标点落在 ``workspace_xyz_*`` 的 XY 之外(含 5mm 余量)—— 一阶段刚锁 + 定时臂就在工件上方,工件**不该**在盒外; + 2. 目标点离当前夹爪轴线超过 ``coarse_max_offset_m``(缺省 0.08m)—— 粗居中 + 是"把臂挪到工件正上方",合理位移是厘米级;十几厘米只可能是坏读数 + (2026-10-16 三次 110mm 回撤,0.12 放行了)。 + + 注意:判误检后**原地不动**,由精定位(直接量 k1/k2)继续。不动的代价只是 + "少挪一次",而挪错的代价是精定位彻底看不到孔 —— 所以这里必须选不动。 + """ + if max_offset_m is None: + max_offset_m = float(getattr(self, "coarse_max_offset_m", 0.08)) + p = np.asarray(p_base, dtype=float).reshape(3) + if not np.all(np.isfinite(p[:2])): + return "目标点非有限值(深度/三角化失败)" + lo = np.asarray(getattr(self, "ws_min", None), dtype=float).reshape(-1) + hi = np.asarray(getattr(self, "ws_max", None), dtype=float).reshape(-1) + if lo.size >= 2 and hi.size >= 2: + margin = 0.005 + for i, name in ((0, "x"), (1, "y")): + if p[i] < lo[i] - margin or p[i] > hi[i] + margin: + return ( + f"目标 {name}={p[i]:.3f} 在工作盒 [{lo[i]:.3f},{hi[i]:.3f}] 外 " + f"⇒ 反投影/检测坏了" + ) + g = np.asarray(gxy, dtype=float).reshape(-1) + if g.size >= 2: + d = float(np.hypot(p[0] - g[0], p[1] - g[1])) + if d > max_offset_m: + return ( + f"目标离夹爪轴线 {d*1000:.1f}mm > 上限 {max_offset_m*1000:.0f}mm " + f"⇒ 不像'臂已在工件上方'的粗居中量" + ) + return None def _gauge_xy(self, Tee: np.ndarray) -> np.ndarray: - """夹爪/通止规轴线(法兰原点 + hover_offset)在基座系 XY。""" + """夹爪/通止规轴线(法兰原点 + hover_offset)在基座系 XY。 + + 退路用(视觉规尖不可用时)。注意它假设"规和法兰同轴"——2026-10-08 真机实测 + 该假设不成立(规偏出 ~10mm),所以**不是**首选,见 _tip_offset_from_depth。 + """ p = Tee[:3, 3] R = Tee[:3, :3] off = R @ np.array([self.hover_offset[0], self.hover_offset[1], 0.0]) return np.array([p[0] + off[0], p[1] + off[1]]) + def _tip_offset_from_depth( + self, + depth_m: np.ndarray, + intr: Dict[str, float], + Tee: np.ndarray, + z_wp_cam: Optional[float] = None, + ) -> Tuple[Optional[np.ndarray], Optional[float], str]: + """从一帧深度里找**规尖**,返回 (规尖相对法兰的基座 XY 偏移, 工具长, 说明)。 + + 找不到/不可信时返回 (None, None, 原因)。判据(每条都能真的失败): + 1. 只看法兰轴线附近的**中央竖带**——规就夹在爪里,不会跑到画面边上; + 2. 多个连通域里取画面**更靠下**(v 更大)的那一个,不按面积、也不按 + 「最接近配置工具长」——按面积会选爪子;贴配置长会选法兰轴上的假深点 + (2026-10-09 真机工具长 225mm、偏移约 0,残差 0.14mm 但孔偏了); + 3. 有同一帧工件面深度时,只留**比工件面至少近 8mm** 的像素。相机前倾 + ~30°,规尖沿光轴只比面近十来毫米(2026-10-09 观测高度:面 127mm、 + 尖 115mm)。再往前砍 15mm 会把尖切掉,只剩更近的夹爪/杆身(~80mm), + 反投影偏移 ~2mm,残差 0.2mm 看着达标,针却偏在孔沿上。 + 没给工件面深度时,退回固定近端(默认 150mm); + 4. 反投出的"法兰 z − 规尖 z"必须落在 [tip_len_min, tip_len_max], + 并且基座 z 要比工件面高出一截 —— 挡住"深度读到台面/工件"。 + + ⚠️ 工具长这一项**只在单帧内**可信;实测它会跳(192~223mm)——规尖细、反光, + 掠射角下深度容易丢,丢了以后"最深有效像素"就往上跑、工具长只会**变短**。 + XY 偏移对这件事不敏感(杆细且接近竖直),见 _refresh_tip_offset。 + """ + import cv2 + + h, w = depth_m.shape + # 8mm:3mm 挡不住深度噪声(工件漏进来,工具长测成 296–315mm); + # 15mm 又把真规尖切掉(面 127mm、尖 115mm,只剩夹爪)。两条都在真机上红过。 + wp_gap = 0.008 + # z_wp 只在像相机深度时才当上限(真机孔 ~0.13–0.18m)。基座 z~0.03 会把近端切空。 + _z_wp = float(z_wp_cam) if z_wp_cam is not None else 0.0 + if 0.08 <= _z_wp <= 0.45: + ceiling = min(_z_wp - wp_gap, self.tip_max_m) + ceil_s = f"比工件面{_z_wp*1000:.0f}近{wp_gap*1000:.0f}" + else: + ceiling = self.tip_near_m + ceil_s = f"固定近端{self.tip_near_m*1000:.0f}" + valid = (depth_m > self.tip_min_m) & (depth_m < self.tip_max_m) + near = (valid & (depth_m < ceiling)).astype(np.uint8) + band = np.zeros_like(near) + half = max(1, int(self.tip_band_frac * w)) + c0, c1 = int(intr["cx"]) - half, int(intr["cx"]) + half + band[:, max(0, c0):min(w, c1)] = 1 + near = near & band + if int(near.sum()) < self.tip_min_px: + return None, None, ( + f"近端(<{ceiling*1000:.0f}mm,{ceil_s})中央竖带内像素 " + f"{int(near.sum())} < {self.tip_min_px}" + ) + n, lab, stats, _ = cv2.connectedComponentsWithStats(near, 8) + if n <= 1: + return None, None, "近端无连通域(规不见了吗)" + + # 掩膜已经丢掉贴着工件面的像素。基座 z 再挡一层:反投影落在面上的 + # 仍不是规尖。裕量 8mm 而不是 20mm——观测高度规尖离面只有约 15mm, + # 20mm 会把真尖一起丢掉(2026-10-09)。悬停时尖离面约 75mm,8mm 仍够。 + surf = float(getattr(self, "surface_z_m", 0.0) or 0.0) + above_surface_m = 0.008 + cands = [] + stuck = 0 + for i in range(1, n): + if int(stats[i, 4]) < self.tip_min_px: + continue + ys, xs = np.where(lab == i) + dv = depth_m[ys, xs] + k = float(np.percentile(dv, 97)) + sel = dv >= k - 1e-6 + u = float(np.median(xs[sel])) + v = float(np.median(ys[sel])) + # 用连通域自己的近端深度,不用周围 5×5:规尖只有几像素宽, + # 邻域中值会落到工件面上,尖又被当成面丢掉。 + z_tip = float(np.median(dv[sel])) + try: + p_tip = self._cam_to_base(self._px_to_cam(u, v, z_tip, intr)) + except Exception as exc: # noqa: BLE001 + return None, None, f"规尖反投影失败(手眼 TF 缺?): {exc}" + tool_len = float(Tee[2, 3]) - float(p_tip[2]) + if not (self.tip_len_min <= tool_len <= self.tip_len_max): + continue + if surf > 0.0 and float(p_tip[2]) < surf + above_surface_m: + stuck += 1 + continue + off = np.array( + [float(p_tip[0]) - float(Tee[0, 3]), float(p_tip[1]) - float(Tee[1, 3])] + ) + cands.append((off, tool_len, u, v)) + if not cands: + if stuck: + return None, None, ( + f"近端点贴着工件面(高出不足 {above_surface_m*1000:.0f}mm),不是规尖" + ) + return None, None, ( + f"反投影出的工具长不在 " + f"[{self.tip_len_min*1000:.0f},{self.tip_len_max*1000:.0f}]mm —— " + f"近端那个物体不是规" + ) + # v 优先:画面更靠下的才是伸向工件的那一端。工具长只作同分时的次序, + # 不拿去贴近 site.yaml —— 贴配置长会把法兰轴上的点当成规尖。 + off, tool_len, u, v = max(cands, key=lambda c: (c[3], c[1])) + return off, tool_len, f"px=({u:.0f},{v:.0f}) 工具长 {tool_len*1000:.0f}mm {ceil_s}" + + def _refresh_tip_offset(self) -> None: + """攒够**一致**样本后,定下并**冻结**「规尖相对法兰」的偏移。 + + 判据只有一条:取中位数剔掉外点后,还要剩 ``tip_calib_n`` 个样本落在 + ``tip_offset_tol_m`` 内。**不再要求"工具长分簇"** —— 实测那样太严: + 规尖像素时有时无,工具长在 203/222mm 之间跳,"工具长最长那一簇"往往只有 + 1~2 拍,永远凑不满 4 拍 ⇒ 永远冻不住 ⇒ 退回"法兰+偏置"(那就白改了)。 + 而"规杆细且接近竖直"⇒ 杆上任一像素反投回基座 XY 都在杆轴 ~3mm 内, + 所以**工具长差不影响偏移**,一致性校验就够。 + 工具长只用来跟 site.yaml 交叉核对(见下面的告警),不参与对准。 + + 为什么必须冻结:偏移是刚体量;逐拍重算会把"规杆略有倾斜"引入的 ±0.2~0.4mm + 抖动带进残差(2026-10-08 真机残差 0.44~0.85mm 来回荡、收不进 0.25mm)。 + """ + if self._tip_off is not None or len(self._tip_samp) < self.tip_calib_n: + return + arr = np.stack([o for o, _t in self._tip_samp]) + med = np.median(arr, axis=0) + inl = np.linalg.norm(arr - med, axis=1) <= self.tip_off_tol + if int(inl.sum()) < self.tip_calib_n: + self.get_logger().warn( + f" 规尖样本 {len(self._tip_samp)} 拍、一致的只有 {int(inl.sum())}/" + f"{self.tip_calib_n}(tol={self.tip_off_tol*1000:.0f}mm)—— 还冻不住,继续采" + ) + return + idx = np.where(inl)[0] + self._tip_off = arr[idx].mean(0) + tl = np.array([self._tip_samp[i][1] for i in idx], dtype=float) + self._tip_len_m = float(np.median(tl)) + cfg = float(self.tool_tip_below_flange_m or 0.0) + agree = "" if cfg <= 0 else ( + ",与 site.yaml 的工具长一致" + if abs(self._tip_len_m - cfg) <= 0.003 + else f" ⚠️ 与 site.yaml 的工具长 {cfg*1000:.0f}mm 差 " + f"{(self._tip_len_m-cfg)*1000:+.0f}mm —— 夹持变动?" + "下降量按 site 的几何走,这时要人工核对(别让规撞进孔)" + ) + self.get_logger().info( + f" 规尖偏移已冻结 = ({self._tip_off[0]*1000:+.1f},{self._tip_off[1]*1000:+.1f})mm" + f"({int(inl.sum())} 拍一致,最大散布 " + f"{float(np.max(np.linalg.norm(arr[idx]-self._tip_off, axis=1)))*1000:.2f}mm," + f"工具长 {self._tip_len_m*1000:.0f}mm{agree})" + " —— 刚体量,对准期间只量这一份" + ) + def _grab_median_depth(self, n: int) -> Optional[np.ndarray]: """拍 n 帧深度取时间中值(稳)。""" deps = [] @@ -1128,48 +1746,151 @@ class Stage2Locate(Node): return None return float(np.median(depth[ring])) - def _measure_z_wp(self, rod_mask: Optional[np.ndarray]) -> Optional[float]: - """下降后重测局部工件面深度(与悬停时 _local_wp_depth 同一方法,规杆掩码恒定直接复用)。""" - if rod_mask is None: - return None - depth = self._grab_median_depth(6) - if depth is None: - return None - return self._local_wp_depth(depth, rod_mask) - - def _descend_above_hole(self, q, Tee): + def _descend_above_hole(self, q, Tee, *, target_gap_m=None, step_m=None): """对准后柔顺轻降,把规尖悬在孔面上方 final_gap_m(不接触)。 - 原理:相机和规都固定在臂上 → 相机到规尖的距离 tip_d 恒定;纯 Z 下降使 - 「相机到工件面深度 z_wp」1:1 减小。下降到 z_wp = tip_d + final_gap 即规尖 - 悬在孔面上方 final_gap。按悬停时测得的间隙一次算下降量,分小步很慢下降, - 最后重测 z_wp 核验。不依赖规长/基座绝对 z,稳健;深度反馈保证不接触。 + **下降量只由几何决定**(这条是 2026-10-08 真机修出来的):: + + 规尖到工件面的间隙 = 法兰 Z(正运动学) − 工具长 − 工件面 Z + 需下降 = 该间隙 − final_gap + + 三个量都是确定的:法兰 Z 来自 FK(0.1mm 量级),工具长是标定值,工件面 Z + 是现场实测值(``gauge_assembly.workpiece_surface_z_m``)。 + + ⚠️ 为什么**不再**让深度测量决定下降量(或叫停)—— + 2026-09-29:``z_wp``("规杆外环形"深度中值)报 141mm,几何真值 53mm, + 于是多降 86mm 把规撞进工件(工件被推走 5mm)。 + 2026-10-08:同一个读数又反着错 —— 悬停时报 144mm(几何真值 75mm), + 只降 24mm 后又翻成 **−7mm**,触发 ``SAFE_FLOOR`` 把轻降停在离面 ~50mm 处, + 永远到不了 2mm。同一套读数在两个方向上各错一次、幅度 150mm 量级、还随位姿 + 乱跳 —— 它对"能降多少"和"该不该停"都没有发言权。 + + 所以现在深度读数**只做交叉核对**:与几何对不上就喊出来(把"测距方法待修" + 摆在日志里),但不再参与任何决策。真正的安全由三条**物理/几何**机制保证: + + 1. 几何预算上限 ``descent_budget_m``(与 ``gauge_fsm.hover_z_guard`` 同源)—— + FK/配置异常时也压不下去; + 2. 腕部 FT 接触检测:``force.z`` 相对悬空基线突变 ⇒ 立即停 + 回退 1mm; + 3. 任一步 ``_goto`` 没走到位(多半是碰到东西/被挡)⇒ 停止,保持当前高度。 """ - if not self.final_descent_enable: - return True, q, Tee + # final_descent_enable:多走多拍降到贴面 final_gap(约 2mm)。 + # 关掉时(--no-descent)仍做**观测下降**,停在 observe_gap(约 15mm)。 + # 单次精拍补交路径传入观察高;锁 XY 实验传入贴面 final_gap。 + if target_gap_m is None: + target_gap = ( + self.final_gap_m if self.final_descent_enable else self.observe_gap_m + ) + else: + target_gap = float(target_gap_m) + step_cap = 0.004 if step_m is None else float(step_m) + kind = ( + "贴面轻降" + if target_gap <= float(self.final_gap_m) + 1e-6 + else "观测下降" + ) self._state("descend_above_hole") - tip_d, rod_mask, z_wp = self._measure_gauge_state() - if tip_d is None or z_wp is None: - self.get_logger().warn("未测到通止规/工件间隙(规可能不在视野),跳过轻降,停在悬停高") - return True, q, Tee - gap0 = z_wp - tip_d - descent = gap0 - self.final_gap_m + tip_len = float(self.tool_tip_below_flange_m) + surf = float(self.surface_z_m) + if tip_len <= 0.0 or surf <= 0.0 or self.descent_budget_m is None: + # 缺几何就没法算安全下降量 —— 停在悬停高,**绝不**拿测距去赌 + # (2026-09-29 撞工件就是"没有几何、只有测距"时发生的)。配置缺键 + # 必须当失败处理(R1.1),不能静默降级成"按测量降"。 + self.get_logger().error( + "轻降缺少几何:tool_tip_below_flange_m / workpiece_surface_z_m / " + "descent_budget 至少一个没配 —— 停在悬停高,不下降。" + "请补 site.yaml 的 robots[].gauge_assembly 两把尺子。" + ) + return False, q, Tee + + gap0 = float(Tee[2, 3]) - tip_len - surf # 几何间隙(唯一决定下降量的量) + descent = gap0 - target_gap + if descent > self.descent_budget_m + 5e-4: + self.get_logger().warn( + f"轻降超过配置几何预算:按 FK 算需降 {descent * 1000:.1f}mm > " + f"预算 {self.descent_budget_m * 1000:.1f}mm" + f"(当前法兰 {Tee[2, 3]:.4f} 与配置悬停 {self.hover_z:.4f} 不符)" + "—— 收到预算(宁高勿撞)" + ) + descent = self.descent_budget_m + + # ---- 深度读数只做交叉核对(无权叫停、无权加码)---- + tip_d, _rod_mask, z_wp = self._measure_gauge_state() + if tip_d is not None and z_wp is not None: + gap_meas = float(z_wp) - float(tip_d) + if abs(gap_meas - gap0) > 0.010: + self.get_logger().warn( + f"深度测距与几何不符:测量间隙 {gap_meas * 1000:.1f}mm vs " + f"几何 {gap0 * 1000:.1f}mm(差 {(gap_meas - gap0) * 1000:+.1f}mm)" + "—— 本次**按几何下降**,深度读数不参与决策" + "(测距方法待修,见 site.yaml 的 final_descent_enable 注释)" + ) + else: + self.get_logger().warn( + "未测到通止规/工件(规可能不在视野)—— 深度核对跳过,仍按几何下降" + "(下降量不依赖规是否可见)" + ) + self.get_logger().info( - f"轻降准备: 规尖-工件间隙 {gap0 * 1000:.1f}mm → 目标 {self.final_gap_m * 1000:.1f}mm," - f"需下降 {descent * 1000:.1f}mm(规尖深 {tip_d * 1000:.0f}mm 恒定,很慢很柔)" + f"{kind}准备: 几何间隙 {gap0 * 1000:.1f}mm → 目标 {target_gap * 1000:.1f}mm," + f"需下降 {descent * 1000:.1f}mm(法兰 {Tee[2, 3]:.4f} − 工具长 {tip_len * 1000:.0f}mm" + f" − 工件面 {surf:.4f};很慢,XY 保持)" ) if descent <= 0.001: self.get_logger().info("规尖已在目标间隙附近,无需下降") + self.descent_final_gap_m = gap0 return True, q, Tee # 腕部力基线(规尖悬空时的 force.z),用于接触检测兜底 base_fz = self._ft_fz - # 闭环轻降:每降一小步就重测局部工件面深度,间隙到 final_gap 就停——绝不一次冲到位,防过冲接触。 - SAFE_FLOOR = 0.0012 # 安全下限 1.2mm:实测间隙≤它立即停(防深度噪声/过冲导致接触) - for _ in range(12): + if base_fz is None: + self.get_logger().warn( + "轻降开始前还没收到腕部 FT —— 接触兜底不生效(只剩几何预算与 _goto 两道)" + ) + # 步数上限:预算 ≤~80mm、单步 ≤4mm ⇒ 20 步足够;给 60 步余量,真正收工靠 + # 几何预算(下面的 remaining),不靠步数。 + for step_i in range(60): if not rclpy.ok(): return False, q, Tee - # 力觉兜底:规尖一碰工件 force.z 突变,立即停并回退 1mm - if base_fz is not None and self._contact_detected(base_fz): + # 每步把 FT 轴向力打进日志:这是"停住到底是碰到了还是没跟上"的**唯一** + # 直接证据(2026-10-08 排查轻降在离面 ~4mm 处停住时,就靠这一行区分 + # "接触"与"驱动没跟上"——没有它只能靠猜)。 + if self._ft_fz is None: + ft_txt = "FT_fz=None" + elif base_fz is None: + ft_txt = f"FT_fz={self._ft_fz:+.2f}N(无基线)" + else: + ft_txt = ( + f"FT_fz={self._ft_fz:+.2f}N(基线 {base_fz:+.2f}," + f"Δ{self._ft_fz - base_fz:+.2f})" + ) + self.get_logger().info( + f" 轻降第 {step_i + 1} 步: 法兰 Z={Tee[2, 3]:.4f} {ft_txt}" + ) + # 力觉兜底:规尖一碰工件 force.z 突变,立即停并回退 1mm。 + # 离面还远时力会漂几牛,不能当碰到。 + gap_now = float(Tee[2, 3]) - tip_len - surf + if ( + base_fz is not None + and self._contact_detected(base_fz) + and not contact_armed_by_gap( + gap_now, self.observe_gap_m, self.final_gap_m + ) + ): + if not getattr(self, "_ft_gap_disarmed_logged", False): + self._ft_gap_disarmed_logged = True + armed_m = contact_armed_gap_m( + self.observe_gap_m, self.final_gap_m + ) + self.get_logger().info( + f" ΔFz 超门槛但间隙 {gap_now * 1000:.1f}mm > 接触门控 " + f"{armed_m * 1000:.1f}mm,不当作碰到" + ) + if ( + base_fz is not None + and contact_armed_by_gap( + gap_now, self.observe_gap_m, self.final_gap_m + ) + and self._contact_detected(base_fz) + ): self.get_logger().warn("腕部力突变(规尖触到工件),立即停止并回退 1mm(安全优先)") p = Tee[:3, 3].copy() ok, q, Tee = self._goto( @@ -1178,20 +1899,13 @@ class Stage2Locate(Node): v=self.final_descent_speed, max_hops=3, hold_xy=True, settle_s=0.25, ) self._pin(q) + self.descent_final_gap_m = float(Tee[2, 3]) - tip_len - surf return True, q, Tee - z_now = self._measure_z_wp(rod_mask) - if z_now is not None: - gap_now = z_now - tip_d - excess = gap_now - self.final_gap_m - # 安全下限优先:宁可停在孔上方多一点,也绝不压到工件 - if gap_now <= SAFE_FLOOR: - self.get_logger().info(f"已达安全下限间隙 {gap_now * 1000:.1f}mm,停止下降(不接触)") - break - else: - excess = descent # 测不到就按预算量保守走 - if excess <= 0.0004: # 已到 final_gap+0.4mm 容差内 + # 用 FK 现算剩余下降量(不是累加指令)—— 单步没走到也不会积累误差。 + remaining = (float(Tee[2, 3]) - tip_len - surf) - target_gap + if remaining <= 1e-4: break - step = min(excess, 0.004) # 每步 ≤4mm,很慢很柔 + step = min(remaining, step_cap) # 贴面默认 ≤4mm;观察高 20mm,见 step_m p = Tee[:3, 3].copy() target = np.array([p[0], p[1], p[2] - step]) ok, q, Tee = self._goto( @@ -1202,18 +1916,704 @@ class Stage2Locate(Node): self._pin(q) if not ok: self.get_logger().warn("轻降中途未到位,停止(保持当前高度,安全优先)") + self.descent_final_gap_m = float(Tee[2, 3]) - tip_len - surf return False, q, Tee - # 核验:重测工件面深度,算最终间隙(深度反馈,确保不接触) - z2 = self._measure_z_wp(rod_mask) - if z2 is not None: - gap_f = z2 - tip_d - lvl = self.get_logger().info if 0.0003 < gap_f else self.get_logger().warn - lvl( - f"=== 轻降完成: 规尖悬在孔面上方 ≈{gap_f * 1000:.1f}mm " - f"(目标 {self.final_gap_m * 1000:.1f}mm,不接触)===" - ) + # 收尾:按几何如实汇报最终间隙(不再用那个错 150mm 的深度读数当结论) + gap_f = float(Tee[2, 3]) - tip_len - surf + self.descent_final_gap_m = gap_f + lvl = self.get_logger().info if gap_f >= 0.0 else self.get_logger().warn + lvl( + f"=== {kind}完成: 规尖悬在孔面上方 ≈{gap_f * 1000:.1f}mm(几何:法兰 " + f"{Tee[2, 3]:.4f} − 工具长 {tip_len * 1000:.0f}mm − 工件面 {surf:.4f};" + f"目标 {target_gap * 1000:.1f}mm,不接触)===" + ) return True, q, Tee + def _stamp_bias( + self, + rec: Dict[str, Any], + *, + tgt_b: np.ndarray, + gxy: np.ndarray, + tag: str, + ) -> Dict[str, Any]: + """把基座残差拆成视线 / 画面右,写入记录。投影退化时键仍在、值为 None。""" + rec = dict(rec) + rec["tag"] = tag + if self.hole_keypoint_once and getattr(self, "hole_once_lock_xy_descend", False): + rec["scheme"] = "keypoint_once_look_ff" + elif self.hole_keypoint_once: + rec["scheme"] = "keypoint_once" + else: + rec["scheme"] = "multi_snap" + rec["cam_frame"] = self.cam_frame + rec["image_topic"] = self.image_topic + err_vec = np.array( + [float(tgt_b[0]) - float(gxy[0]), float(tgt_b[1]) - float(gxy[1])], + dtype=float, + ) + rec["err_xy_m"] = [round(float(err_vec[0]), 5), round(float(err_vec[1]), 5)] + rec["workspace_clipped"] = bool(self._ws_clipped) + T_cam = self._lookup(self.base_frame, self.cam_frame) + rec["along_look_mm"] = None + rec["along_right_mm"] = None + rec["look_xy"] = None + rec["right_xy"] = None + rec["cam_origin_base_m"] = None + if T_cam is None: + self.get_logger().warn(f"{tag}:没有 cam TF,残差分解缺轴") + return rec + rec["cam_origin_base_m"] = [ + round(float(T_cam[0, 3]), 5), + round(float(T_cam[1, 3]), 5), + round(float(T_cam[2, 3]), 5), + ] + decomp = decompose_base_xy(err_vec, T_cam) + if decomp is None: + self.get_logger().warn(f"{tag}:光轴水平投影退化,残差分解缺轴") + return rec + rec["along_look_mm"] = round(float(decomp["along_look_m"]) * 1000.0, 2) + rec["along_right_mm"] = round(float(decomp["along_right_m"]) * 1000.0, 2) + rec["look_xy"] = [round(float(v), 5) for v in decomp["look_xy"]] + rec["right_xy"] = [round(float(v), 5) for v in decomp["right_xy"]] + self.get_logger().info( + f"[{tag}] 残差分解 视线={rec['along_look_mm']:+.2f}mm " + f"画面右={rec['along_right_mm']:+.2f}mm " + f"ΔXY=({err_vec[0]*1000:+.2f},{err_vec[1]*1000:+.2f})mm\n" + f" 画面右为正:孔在规的画面右侧(目视就是规偏左)。" + f"视线为正:孔在光轴水平投影前方(工件面写低 / 交深了会往这偏)。" + ) + return rec + + def _observe_holes(self, q, Tee, final: Dict[str, Any], *, tag: str): + """核验拍:只记账,不改 XY。拍不到就保持原 final,并标明没复测。""" + try: + _bgr, _depth_m, _intr, res = self._snap_holes(skip_center_gate=True) + except Exception as exc: # noqa: BLE001 + self.get_logger().error(f"{tag}失败,残差仍是开环指令值:{exc}") + final = dict(final) + final["residual_remeasured"] = False + return q, Tee, final + if not res.get("status"): + self.get_logger().error( + f"{tag}丢孔({res.get('msg')}),残差仍是开环指令值,不是 hop 到位" + ) + final = dict(final) + final["residual_remeasured"] = False + return q, Tee, final + hb = res.get("hole_base") + z_wp = float(res.get("z_wp") or 0.0) + if hb is None or len(hb) != 2 or z_wp <= 0.0: + self.get_logger().error(f"{tag}没有孔的基座坐标,残差未复测") + final = dict(final) + final["residual_remeasured"] = False + return q, Tee, final + left_b = np.asarray(hb[0], dtype=float) + right_b = np.asarray(hb[1], dtype=float) + k1_b, k2_b = (left_b, right_b) if self.k1_label == "left" else (right_b, left_b) + tgt_b = k1_b if self.target_hole == "k1" else k2_b + Tee_now = self._lookup(self.base_frame, self.ee_frame) + if Tee_now is not None: + Tee = Tee_now + pts = res.get("hole_points") or [] + if self._tip_off is not None: + gxy = np.array( + [float(Tee[0, 3]) + float(self._tip_off[0]), + float(Tee[1, 3]) + float(self._tip_off[1])] + ) + tip_src = "视觉规尖(开环本步)" + else: + gxy = self._gauge_xy(Tee) + tip_src = "法兰+偏置" + err = float(np.hypot(float(tgt_b[0]) - gxy[0], float(tgt_b[1]) - gxy[1])) + rec = { + "ok": err <= self.align_tol, + "arm": self.prefix.rstrip("_"), + "target_hole": self.target_hole, + "k1_base_m": [round(float(v), 5) for v in k1_b], + "k2_base_m": [round(float(v), 5) for v in k2_b], + "k1_px": ( + [round(float(pts[0][0]), 1), round(float(pts[0][1]), 1)] + if len(pts) >= 2 else None + ), + "k2_px": ( + [round(float(pts[1][0]), 1), round(float(pts[1][1]), 1)] + if len(pts) >= 2 else None + ), + "workpiece_surface_z_m": round(z_wp, 4), + "gauge_xy_m": [round(float(gxy[0]), 5), round(float(gxy[1]), 5)], + "gauge_source": tip_src, + "tip_offset_m": ( + [round(float(self._tip_off[0]), 5), round(float(self._tip_off[1]), 5)] + if self._tip_off is not None else None + ), + "residual_mm": round(err * 1000.0, 2), + "hover_z_m": round(float(Tee[2, 3]), 4), + "residual_remeasured": True, + "align_trusted": self._tip_off is not None, + } + rec = self._stamp_bias(rec, tgt_b=tgt_b, gxy=gxy, tag=tag) + snaps = list(final.get("snaps") or []) + snaps.append({k: rec[k] for k in ( + "tag", "residual_mm", "err_xy_m", "along_look_mm", "along_right_mm", + "k1_base_m", "k2_base_m", "k1_px", "k2_px", "gauge_xy_m", + "gauge_source", "tip_offset_m", "hover_z_m", "workspace_clipped", + ) if k in rec}) + merged = dict(final) + merged.update(rec) + merged["snaps"] = snaps + merged["ok"] = bool(rec["ok"] and rec["align_trusted"]) + draw = res.get("draw_img") + if draw is None: + draw = _bgr + if draw is not None: + self._publish_overlay(draw) + self._publish_result(merged) + self.get_logger().info( + f"[{tag}] k1=({k1_b[0]:.4f},{k1_b[1]:.4f}) " + f"工具=({gxy[0]:.4f},{gxy[1]:.4f})[{tip_src}] " + f"复测残差={err*1000:.2f}mm(此拍不改 XY)" + ) + return q, Tee, merged + + def _oneshot_align_move(self, q, Tee, tgt_b, gxy, err): + """单次精拍只走这一步。返回 (q, Tee, 是否走了)。""" + if err <= self.align_tol: + self.get_logger().info( + f"单次精拍开环残差 {err*1000:.2f}mm 已在容差内,这一步不横移" + ) + return q, Tee, False + raw = np.array([float(tgt_b[0]) - float(gxy[0]), float(tgt_b[1]) - float(gxy[1])]) + n_raw = float(np.linalg.norm(raw)) + max_step = oneshot_align_step_m(n_raw) + step = raw + if n_raw > max_step + 1e-9: + step = raw * (max_step / n_raw) + self.get_logger().warn( + f" 单次精拍步长 {n_raw*1000:.1f}mm 超过 " + f"{max_step*1000:.0f}mm(不像框心到 k1 的半孔距),截断。" + "截断后下降补 XY 也补不完,会留下厘米级残差" + ) + else: + self.get_logger().info( + f" 单次精拍这一步走完 {n_raw*1000:.1f}mm(框心到目标孔,不再用 12mm 封顶)" + ) + move = np.array([ + float(Tee[0, 3]) + float(step[0]), + float(Tee[1, 3]) + float(step[1]), + self.hover_z, + ]) + hop_tol = 0.00022 if err < 0.003 else max(0.0003, min(0.0005, 0.25 * err)) + hop_v = self.align_speed if err > 0.005 else min(self.align_speed, 0.016) + self._state("align_move_once") + ok, q, Tee = self._goto( + q, Tee, move, verticalize=True, + tol_m=hop_tol, tol_tilt=self.vert_tol_rad * 2.0, + tag="align_once", v=hop_v, + max_hops=8, settle_s=max(0.35, self.settle_sec), + min_dur=0.35, strict_xy=True, + ) + self._pin(q) + if not ok: + self.get_logger().warn( + "单次精拍这一步没走到位;残差以随后核验拍为准,不把 hop 容差当对上" + ) + return q, Tee, True + + def _vendor_movel_tcp(self, xyz, vel: float) -> bool: + """进程内厂家 MoveL:TCP 目标,不杀控制栈。""" + lib = ros2_root() / "scripts" / "lib" + if str(lib) not in sys.path: + sys.path.insert(0, str(lib)) + from flexiv_movel_ipc import read_ack, read_done, write_request + + seq = int(time.monotonic() * 1000.0) % 1_000_000_000 + write_request( + seq, float(xyz[0]), float(xyz[1]), float(xyz[2]), False, float(vel) + ) + t0 = time.monotonic() + acked = False + while time.monotonic() - t0 < 90.0: + if not rclpy.ok(): + return False + self._spin(0.02) + if not acked: + if read_ack() == seq: + acked = True + elif time.monotonic() - t0 > 2.0: + self.get_logger().error( + "厂家 MoveL 2s 内没 ack —— 硬件没接 /tmp/flexiv_movel_req。" + "真机环境重建 install/ 后再跑,不许改走关节折线假装成功" + ) + return False + continue + got = read_done() + if got is not None and int(got[0]) == seq: + if not got[1]: + self.get_logger().error(f"厂家 MoveL 失败:{got[2]}") + return bool(got[1]) + self.get_logger().error("厂家 MoveL 90s 内没有 done") + return False + + def _once_ff_diagonal_to_gap(self, q, Tee, *, target_gap_m): + """悬停点一条 MoveL 收到 ``target_gap_m``。k=0 只降 Z;k>0 再沿 -look 收 XY。""" + self._state("ff_diagonal_movel") + tip_len = float(self.tool_tip_below_flange_m) + surf = float(self.surface_z_m) + if tip_len <= 0.0 or surf <= 0.0: + self.get_logger().error("贴面下降缺工具长/工件面,停在悬停高") + return False, q, Tee + if self._tip_off is None: + self.get_logger().error("贴面下降需要悬停规尖偏移,没有就不许用法兰凑") + return False, q, Tee + k = float(self.once_ff_look_per_m) + look_xy = np.array([0.0, 0.0], dtype=float) + T_cam = self._lookup(self.base_frame, self.cam_frame) + if k > 1e-9: + if T_cam is None: + self.get_logger().error("没有 cam TF,视线轴算不出,不下发") + return False, q, Tee + axes = cam_xy_bias_axes(T_cam) + if axes is None: + self.get_logger().error("光轴水平投影退化,不下发") + return False, q, Tee + look_xy, _right = axes + elif T_cam is not None: + axes = cam_xy_bias_axes(T_cam) + if axes is not None: + look_xy, _right = axes + gap0 = float(Tee[2, 3]) - tip_len - surf + descent = gap0 - float(target_gap_m) + packed = once_ff_tcp_xyz( + [Tee[0, 3], Tee[1, 3]], + self._tip_off, + look_xy, + descent, + k, + surf, + target_gap_m, + ) + if packed is None: + if descent <= 0.001: + self.get_logger().info("规尖已在目标间隙附近,无需斜线") + self.descent_final_gap_m = gap0 + return True, q, Tee + self.get_logger().error("视线前馈算不出 ΔXY,停在悬停高") + return False, q, Tee + tcp, dxy = packed + n_xy = float(np.hypot(float(dxy[0]), float(dxy[1]))) + if n_xy > ONCE_TRIM_REFUSE_M + 1e-9: + self.get_logger().error( + f"视线前馈 {n_xy * 1000:.1f}mm 超过 {ONCE_TRIM_REFUSE_M * 1000:.0f}mm," + "不像交平面那几毫米,停在悬停高" + ) + return False, q, Tee + z_flange = flange_z_for_gap_m(tip_len, surf, target_gap_m) + flange_tgt = np.array( + [ + float(Tee[0, 3]) + float(dxy[0]), + float(Tee[1, 3]) + float(dxy[1]), + z_flange, + ] + ) + self._ws_clipped = False + self._clamp_ws(flange_tgt) + if self._ws_clipped: + self.get_logger().error( + "视线前馈目标被工作盒截断,不下发(不许把孔位改到盒沿)" + ) + return False, q, Tee + self._spin(0.05) + tcp_now = self._fresh_tcp_world() + if tcp_now is None: + self.get_logger().error( + "没有厂家 tcp_pose(话题 " + f"{getattr(self, 'robot_states_topic', '?')} 不新鲜)," + "拒绝用 ROS 规尖绝对坐标发 MoveL" + ) + return False, q, Tee + movel_xyz = once_ff_movel_from_tcp(tcp_now, dxy, descent) + if movel_xyz is None: + self.get_logger().error("厂家 TCP 加上相对位移算不出,停在悬停高") + return False, q, Tee + off_xy = ( + (float(tcp_now[0]) - float(tcp[0]) + float(dxy[0])) * 1000.0, + (float(tcp_now[1]) - float(tcp[1]) + float(dxy[1])) * 1000.0, + ) + scheme = "笛卡尔锁XY只降Z" if n_xy < 1e-6 else "视线前馈斜线" + self.get_logger().info( + f"{scheme}:look=({look_xy[0]:+.3f},{look_xy[1]:+.3f}) " + f"k={k:.3f} 降 {descent * 1000:.1f}mm → " + f"ΔXY=({dxy[0] * 1000:+.2f},{dxy[1] * 1000:+.2f})mm " + f"厂家TCP现=({tcp_now[0]:.4f},{tcp_now[1]:.4f},{tcp_now[2]:.4f}) " + f"MoveL=({movel_xyz[0]:.4f},{movel_xyz[1]:.4f},{movel_xyz[2]:.4f}) " + f"ROS尖目标=({tcp[0]:.4f},{tcp[1]:.4f},{tcp[2]:.4f}) " + f"WORLD相对ROS XY差≈({off_xy[0]:+.1f},{off_xy[1]:+.1f})mm " + f"vel={ONCE_FF_MOVEL_VEL_MPS * 1000:.0f}mm/s" + ) + fl0 = (float(Tee[0, 3]), float(Tee[1, 3]), float(Tee[2, 3])) + ok = self._vendor_movel_tcp(movel_xyz, ONCE_FF_MOVEL_VEL_MPS) + # MoveL 刚切回关节模式:JTC 还握着贴面前的悬停关节。等 2 s 再钉 + # 等于让 vmax=0.05 往悬停留 0.1 rad(2026-10-16 收臂实测多抬 13–20 mm)。 + q2, Tee2 = self._wait_state(0.3) + if q2 is not None and Tee2 is not None: + q, Tee = q2, Tee2 + self._pin(q) + self.descent_final_gap_m = float(Tee[2, 3]) - tip_len - surf + dax = (float(Tee[0, 3]) - fl0[0]) * 1000.0 + day = (float(Tee[1, 3]) - fl0[1]) * 1000.0 + daz = (float(Tee[2, 3]) - fl0[2]) * 1000.0 + self.get_logger().info( + f"贴面走后:法兰 ΔXYZ=({dax:+.2f},{day:+.2f},{daz:+.2f})mm " + f"指令 ΔXY=({dxy[0] * 1000:+.2f},{dxy[1] * 1000:+.2f})mm " + f"间隙 {self.descent_final_gap_m * 1000:.1f}mm " + f"{'到位' if ok else 'MoveL未完成'}" + ) + return bool(ok), q, Tee + + def _trim_xy_keep_hover_tip(self, q, Tee, final: Dict[str, Any], z_target_m=None): + """观察高重交孔,规尖沿用悬停冻住的偏移。只许一跳、XY ≤3mm。 + + 2026-10-13 真机两遍:走后核验 0.4~0.7mm,降后交平面漂 4~5mm;观测高度 + 深度把夹爪当尖,两拍差 8~36mm,重测守卫把该补的 4mm 也拒掉了。悬停规尖 + 只有 0.1mm 量级,沿用它,只补孔 XY。没有冻住的偏移就不许用法兰凑。 + + 同日第二次:两跳合计 +4.3mm X 把近距检测带崩(k1 像素 446→403,间距 + 60→45mm,残差 2.6→14.8mm),流水线还把走之前的 2.61mm 当终值。所以 + 只许一跳、步长 ≤3mm;超过 8mm 根本不动。 + + ``z_target_m`` 有值时这一跳同时收到贴面法兰高(观察高测补偿,斜线一步 + 贴面)。贴面复拍只记账:近了画面更容易漂,不按近距那一拍撤回观察高的解。 + """ + if self._tip_off is None: + self.get_logger().error( + "下降后补 XY 需要悬停冻住的规尖偏移;没有就不许用法兰凑,保持原地" + ) + return q, Tee, final + off = np.asarray(self._tip_off, dtype=float).reshape(2) + final_in = final + z_hold = float(Tee[2, 3]) + + def _measure(src: Dict[str, Any], tag: str): + nonlocal Tee + try: + _bgr, _depth_m, _intr, res = self._snap_holes(skip_center_gate=True) + except Exception as exc: # noqa: BLE001 + self.get_logger().warn(f"{tag}复拍失败,保持原地:{exc}") + return None + if not res.get("status"): + self.get_logger().warn(f"{tag}丢孔({res.get('msg')}),不再改 XY") + return None + hb = res.get("hole_base") + z_wp = float(res.get("z_wp") or 0.0) + if hb is None or len(hb) != 2 or z_wp <= 0.0: + self.get_logger().warn(f"{tag}没有孔的基座坐标,不再改 XY") + return None + left_b = np.asarray(hb[0], dtype=float) + right_b = np.asarray(hb[1], dtype=float) + k1_b, k2_b = ( + (left_b, right_b) if self.k1_label == "left" else (right_b, left_b) + ) + tgt = k1_b if self.target_hole == "k1" else k2_b + Tee_now = self._lookup(self.base_frame, self.ee_frame) + if Tee_now is not None: + Tee = Tee_now + gxy = np.array( + [float(Tee[0, 3]) + float(off[0]), float(Tee[1, 3]) + float(off[1])] + ) + raw = np.array([float(tgt[0]) - gxy[0], float(tgt[1]) - gxy[1]]) + err = float(np.linalg.norm(raw)) + pair = hole_pair_span_m(k1_b, k2_b) + rec = dict(src) + rec["residual_mm"] = round(err * 1000.0, 2) + rec["tip_offset_m"] = [round(float(off[0]), 5), round(float(off[1]), 5)] + rec["gauge_xy_m"] = [round(float(gxy[0]), 5), round(float(gxy[1]), 5)] + rec["gauge_source"] = "视觉规尖(悬停冻结,下降后只重交孔)" + rec["k1_base_m"] = [round(float(v), 5) for v in k1_b] + rec["k2_base_m"] = [round(float(v), 5) for v in k2_b] + rec["hover_z_m"] = round(float(Tee[2, 3]), 4) + rec["pair_span_mm"] = round(pair * 1000.0, 2) + rec["residual_remeasured"] = True + rec["align_trusted"] = True + rec = self._stamp_bias(rec, tgt_b=tgt, gxy=gxy, tag=tag) + snaps = list(src.get("snaps") or []) + snaps.append({ + "tag": rec.get("tag"), + "residual_mm": rec.get("residual_mm"), + "err_xy_m": rec.get("err_xy_m"), + "along_look_mm": rec.get("along_look_mm"), + "along_right_mm": rec.get("along_right_mm"), + "k1_base_m": rec.get("k1_base_m"), + "gauge_xy_m": rec.get("gauge_xy_m"), + "gauge_source": rec.get("gauge_source"), + "tip_offset_m": rec.get("tip_offset_m"), + "hover_z_m": rec.get("hover_z_m"), + "pair_span_mm": rec.get("pair_span_mm"), + }) + rec["snaps"] = snaps + rec["ok"] = err <= self.align_tol + rec["trim_reverted"] = False + self._publish_result(rec) + self.get_logger().info( + f"[{tag}] 工具=({gxy[0]:.4f},{gxy[1]:.4f})" + f"[悬停冻结] 残差={err * 1000:.2f}mm 间距={pair * 1000:.1f}mm —— 不重测规尖" + ) + return rec, err, raw, pair + + def _revert(xy_flange) -> None: + nonlocal q, Tee + back = np.array([float(xy_flange[0]), float(xy_flange[1]), z_hold]) + okb, q, Tee = self._goto( + q, Tee, back, verticalize=True, + tol_m=0.0004, tol_tilt=self.vert_tol_rad * 2.0, + tag="trim_xy_revert", v=min(float(self.align_speed), 0.010), + max_hops=4, settle_s=0.30, strict_xy=True, + ) + self._pin(q) + if not okb: + self.get_logger().error("下降后补孔撤回没走到,位置以当前 FK 为准") + + if not rclpy.ok(): + return q, Tee, final_in + measured = _measure(final_in, "下降后补孔 0") + if measured is None: + return q, Tee, final_in + rec, err, raw, pair = measured + z_goal = z_hold + blend_z = False + if z_target_m is not None: + z_goal = min(z_hold, float(z_target_m)) + blend_z = (z_hold - z_goal) > 0.0005 + if not hole_pair_span_ok(pair): + self.get_logger().error( + f"下降后两孔间距 {pair * 1000:.1f}mm 不在 50–70mm,检测漂了,不动" + ) + return q, Tee, final_in + if err > ONCE_TRIM_REFUSE_M: + self.get_logger().error( + f"下降后要对 {err * 1000:.1f}mm,超过 {ONCE_TRIM_REFUSE_M * 1000:.0f}mm " + "—— 不像交平面漂移,停在原地" + ) + return q, Tee, final_in + need_xy = err > self.align_tol + if (not need_xy) and (not blend_z): + self.get_logger().info( + f"下降后 XY 已在容差内({err * 1000:.2f}mm),高度保持 {z_hold:.4f}" + ) + return q, Tee, rec + step = np.zeros(2, dtype=float) if not need_xy else np.asarray(raw, dtype=float) + if need_xy and err > ONCE_TRIM_MAX_STEP_M: + step = raw * (ONCE_TRIM_MAX_STEP_M / err) + xy_before = np.array([float(Tee[0, 3]), float(Tee[1, 3])]) + move = np.array([ + float(Tee[0, 3]) + float(step[0]), + float(Tee[1, 3]) + float(step[1]), + z_goal, + ]) + hop_tag = "trim_blend_to_final" if blend_z else "trim_xy_keep_tip" + hop_v = ( + min(float(getattr(self, "final_descent_speed", 0.005) or 0.005), 0.008) + if blend_z + else min(float(self.align_speed), 0.010) + ) + if blend_z: + self.get_logger().info( + f"观察高斜线贴面 Δxy=({step[0] * 1000:+.1f},{step[1] * 1000:+.1f})mm " + f"Δz={(z_goal - z_hold) * 1000:+.1f}mm → 法兰 Z {z_goal:.4f}" + ) + ok, q, Tee = self._goto( + q, Tee, move, verticalize=True, + tol_m=0.0004, tol_tilt=self.vert_tol_rad * 2.0, + tag=hop_tag, v=hop_v, + max_hops=4, settle_s=0.30, strict_xy=True, + ) + self._pin(q) + if not ok: + self.get_logger().warn("下降后 XY 修正没走到,停;残差以走前重测为准") + return q, Tee, rec + if abs(float(Tee[2, 3]) - z_goal) > 0.002: + self.get_logger().error( + f"下降后修正把高度从 {z_hold:.4f} 带到了 {float(Tee[2, 3]):.4f}" + f"(目标 {z_goal:.4f}),撤回" + ) + _revert(xy_before) + rec["trim_reverted"] = True + rec["ok"] = err <= self.align_tol + return q, Tee, rec + after = _measure(rec, "下降后补孔核验") + if blend_z: + if after is None or (not hole_pair_span_ok(after[3])) or after[1] > ONCE_TRIM_REFUSE_M: + self.get_logger().warn( + "贴面复拍不可信,斜线位姿保留(补偿按观察高那一拍)" + ) + rec["close_snap_untrusted"] = True + rec["hover_z_m"] = round(float(Tee[2, 3]), 4) + rec["ok"] = err <= self.align_tol + self._publish_result(rec) + return q, Tee, rec + rec2, err2, _raw2, _pair2 = after + rec2["ok"] = err2 <= self.align_tol + rec2["trim_reverted"] = False + rec2["close_snap_untrusted"] = False + self._publish_result(rec2) + return q, Tee, rec2 + if after is None: + self.get_logger().error("下降后补孔走完复拍失败,撤回这一跳") + _revert(xy_before) + rec["trim_reverted"] = True + rec["ok"] = err <= self.align_tol + return q, Tee, rec + rec2, err2, _raw2, pair2 = after + worse_pair = (not hole_pair_span_ok(pair2)) or (pair2 < pair - 0.002) + worse_res = err2 > err + 1e-6 + if worse_pair or worse_res: + self.get_logger().error( + f"下降后补了 {float(np.linalg.norm(step)) * 1000:.1f}mm 后变差" + f"(残差 {err * 1000:.2f}→{err2 * 1000:.2f}mm," + f"间距 {pair * 1000:.1f}→{pair2 * 1000:.1f}mm),撤回这一跳" + ) + _revert(xy_before) + rec["trim_reverted"] = True + rec["ok"] = err <= self.align_tol + rec["snaps"] = rec2.get("snaps") or rec.get("snaps") + self._publish_result(rec) + return q, Tee, rec + rec2["ok"] = err2 <= self.align_tol + rec2["trim_reverted"] = False + self._publish_result(rec2) + return q, Tee, rec2 + + def _trim_xy_after_descent(self, q, Tee, final: Dict[str, Any]): + """下降之后、保持当前高度,用这一高度的规尖和孔再对一次 XY。 + + 悬停残差不能拿来当下降后的孔位。相机光轴相对法兰约 30°,孔的基座 XY + 对深度大约 0.5 mm/mm。2026-10-09:同一孔在悬停(相机深度 180mm,残差 + 0.22mm)和观测高度(127mm)上反投影,基座 XY 差约 2mm;法兰 XY 下降时 + 只动了 0.2mm。画面里针在孔的上方一截,主要是 15mm 间隙的透视,横着的 + 那 2mm 才是要补的。 + + 多走多拍:只用本高度新量的规尖,不沿用悬停时冻住的偏移。总修正超过 8mm + 就不动 —— 那一档是夹爪/杆身,不是针。量不到规尖也不动,悬停对准的结果留着。 + 单次精拍:观测高度深度会把夹爪当尖(2026-10-13 两拍差 8~36mm),改走 + ``_trim_xy_keep_hover_tip``。 + """ + if getattr(self, "hole_keypoint_once", False): + # 打桩测试把 stub 当 self 传入未绑定方法,必须点到类上的实现。 + z_target = None + if bool(getattr(self, "final_descent_enable", False)): + tip = float(getattr(self, "tool_tip_below_flange_m", 0.0) or 0.0) + surf = float(getattr(self, "surface_z_m", 0.0) or 0.0) + if tip > 0.0 and surf > 0.0: + z_target = flange_z_for_gap_m( + tip, surf, getattr(self, "final_gap_m", 0.002) + ) + return Stage2Locate._trim_xy_keep_hover_tip( + self, q, Tee, final, z_target_m=z_target + ) + if not self.tip_vision: + return q, Tee, final + final_in = final + z_hold = float(Tee[2, 3]) + saved = self._tip_off + budget = 0.008 + moved = 0.0 + prev: Optional[np.ndarray] = None + for it in range(4): + if not rclpy.ok(): + break + try: + _bgr, depth_m, intr, res = self._snap_holes(skip_center_gate=True) + except Exception as exc: # noqa: BLE001 + self.get_logger().warn(f"下降后复拍失败,保持悬停对准的位置:{exc}") + self._tip_off = saved + return q, Tee, final + if not res.get("status"): + self.get_logger().warn(f"下降后丢孔({res.get('msg')}),不再改 XY") + self._tip_off = saved + return q, Tee, final + hb = res.get("hole_base") + z_wp = float(res.get("z_wp") or 0.0) + if hb is None or len(hb) != 2 or z_wp <= 0.0: + self.get_logger().warn("下降后没有孔的基座坐标,不再改 XY") + self._tip_off = saved + return q, Tee, final + left_b = np.asarray(hb[0], dtype=float) + right_b = np.asarray(hb[1], dtype=float) + k1_b, k2_b = (left_b, right_b) if self.k1_label == "left" else (right_b, left_b) + tgt = k1_b if self.target_hole == "k1" else k2_b + Tee_now = self._lookup(self.base_frame, self.ee_frame) + if Tee_now is not None: + Tee = Tee_now + off, tlen, why = self._tip_offset_from_depth( + depth_m, intr, Tee, z_wp_cam=z_wp + ) + if off is None or tlen is None: + self.get_logger().warn(f"下降后没量到规尖({why}),不再改 XY") + self._tip_off = saved + return q, Tee, final + if prev is not None and float(np.linalg.norm(off - prev)) > 0.003: + self.get_logger().warn( + f"下降后规尖两拍差 {float(np.linalg.norm(off - prev))*1000:.1f}mm,这一拍不动" + ) + prev = np.array(off, dtype=float) + continue + prev = np.array(off, dtype=float) + if it == 0: + continue + gxy = np.array([ + float(Tee[0, 3]) + float(off[0]), float(Tee[1, 3]) + float(off[1]) + ]) + raw = np.array([float(tgt[0]) - gxy[0], float(tgt[1]) - gxy[1]]) + err = float(np.linalg.norm(raw)) + final = dict(final) + final["residual_mm"] = round(err * 1000.0, 2) + final["tip_offset_m"] = [round(float(off[0]), 5), round(float(off[1]), 5)] + final["tip_len_m"] = round(float(tlen), 5) + final["gauge_xy_m"] = [round(float(gxy[0]), 5), round(float(gxy[1]), 5)] + final["gauge_source"] = "视觉规尖(下降后重测)" + self._tip_off = np.array(off, dtype=float) + self.get_logger().info( + f"[下降后 {it}] 工具=({gxy[0]:.4f},{gxy[1]:.4f}) " + f"残差={err*1000:.2f}mm {why}" + ) + if err <= self.align_tol: + self.get_logger().info( + f"下降后 XY 已在容差内({err*1000:.2f}mm),高度保持 {z_hold:.4f}" + ) + return q, Tee, final + if moved + err > budget: + self.get_logger().error( + f"下降后要对 {err*1000:.1f}mm(已走 {moved*1000:.1f}mm)," + f"超过 {budget*1000:.0f}mm —— 不像针,停在原地" + ) + self._tip_off = saved + return q, Tee, final_in + + step = raw + if err > 0.004: + step = raw * (0.004 / err) + move = np.array([ + float(Tee[0, 3]) + float(step[0]), + float(Tee[1, 3]) + float(step[1]), + z_hold, + ]) + ok, q, Tee = self._goto( + q, Tee, move, verticalize=True, + tol_m=0.0004, tol_tilt=self.vert_tol_rad * 2.0, + tag="trim_xy", v=min(float(self.align_speed), 0.010), + max_hops=4, settle_s=0.30, strict_xy=True, + ) + self._pin(q) + moved += float(np.linalg.norm(step)) + if not ok: + self.get_logger().warn("下降后 XY 修正没走到,停") + return q, Tee, final + if abs(float(Tee[2, 3]) - z_hold) > 0.002: + self.get_logger().error( + f"下降后修正把高度从 {z_hold:.4f} 带到了 {float(Tee[2, 3]):.4f},停下" + ) + return q, Tee, final + return q, Tee, final def _snap_holes(self, *, skip_center_gate: bool) -> Tuple[np.ndarray, np.ndarray, Dict[str, float], dict]: """多帧拍孔:先对 N 帧做时间中值得到干净图,再在其上检测螺纹嵌件对。 @@ -1253,12 +2653,14 @@ class Stage2Locate(Node): med_depth = ( np.median(np.stack(depths), axis=0).astype(np.float32) if len(depths) > 1 else depths[0] ) + # 对孔只认像素关键点。把深度图传进去,嵌件对会用深度换像素半径,等于又用上了深度。 + det_depth = None if self.hole_visual_only else med_depth res = self._detect_holes_img(med_bgr, skip_center_gate=skip_center_gate, - depth_m=med_depth, intr=last_intr) + depth_m=det_depth, intr=last_intr) if not res.get("status"): for bgr in frames: r2 = self._detect_holes_img(bgr, skip_center_gate=skip_center_gate, - depth_m=med_depth, intr=last_intr) + depth_m=det_depth, intr=last_intr) if r2.get("status"): res = r2 med_bgr = bgr @@ -1285,7 +2687,12 @@ class Stage2Locate(Node): res["snap_frames"] = int(len(frames)) # 把"三维是哪来的"也打出来:这一项错了(真值被当成深度、或反过来) # 会让孔距从 58mm 变成 169mm,而现象看起来只是"检测不认"。 - _src = "真值" if res.get("hole_base") and self._truth_enabled() else "深度反投影" + if self._truth_enabled() and res.get("hole_base"): + _src = "真值" + elif self.hole_visual_only: + _src = "像素交工件面" + else: + _src = "深度反投影" self.get_logger().info( f"精拍 {len(frames)}帧中值图 " f"L=({pts[0][0]:.1f},{pts[0][1]:.1f}) R=({pts[1][0]:.1f},{pts[1][1]:.1f})" @@ -1339,7 +2746,22 @@ class Stage2Locate(Node): self.get_logger().error("JTC action 不在 —— 控制器没起来(T1 run_real.sh --arm 89)") return 2 - if not (self.min_ee_z - 1e-6) <= self.hover_z <= (self.safe_z + 0.05): + if self._hover_refused: + self.get_logger().error(self._hover_refused) + return 2 + if self._final_gap_refused: + self.get_logger().error(self._final_gap_refused) + return 2 + + if self.hover_z_user_set: + z_lo = float(self.ws_min[2]) + z_hi = float(self.ws_max[2]) + if not (z_lo - 1e-6) <= self.hover_z <= (z_hi + 1e-6): + self.get_logger().error( + f"--hover-z {self.hover_z:.3f} 超出工作盒 Z [{z_lo:.3f}, {z_hi:.3f}],拒绝执行" + ) + return 2 + elif not (self.min_ee_z - 1e-6) <= self.hover_z <= (self.safe_z + 0.05): self.get_logger().error( f"hole_hover_z_m={self.hover_z:.3f} 越界 [{self.min_ee_z:.2f}, {self.safe_z + 0.05:.2f}],拒绝执行" ) @@ -1384,7 +2806,11 @@ class Stage2Locate(Node): max_hops=12, hold_xy=True, settle_s=0.30, ) self._pin(q) - z_now = float(Tee[:3, 3][2]) + self._spin(0.2) + Tee_now = self._lookup(self.base_frame, self.ee_frame) + if Tee_now is not None: + Tee = Tee_now + z_now = float(Tee[2, 3]) _, ang2 = self._w_down(Tee[:3, :3]) z_err = abs(z_now - self.hover_z) self.get_logger().info( @@ -1401,12 +2827,21 @@ class Stage2Locate(Node): f"悬停闭环未完全收敛,但 Z 差 {z_err*1000:.1f}mm 可接受,继续拍照定位" ) else: - z_now = float(p0[2]) self._state("hover") + self._pin(q) + self._spin(0.2) + Tee_now = self._lookup(self.base_frame, self.ee_frame) + if Tee_now is not None: + Tee = Tee_now + z_now = float(Tee[2, 3]) + if abs(z_now - self.hover_z) > 0.004: + self.get_logger().error( + f"悬停未达容差(Z={z_now:.3f},目标 {self.hover_z:.3f}),终止" + ) + return 2, q, Tee, {} self.get_logger().info( f"已在悬停高 Z={z_now:.3f}m(目标 {self.hover_z:.3f}),跳过升降" ) - self._pin(q) if self.hover_only: self._state("hover_only_hold") @@ -1439,6 +2874,8 @@ class Stage2Locate(Node): bbox = None truth: Optional[dict] = None bgr = depth_m = intr = None + # 本拍是否"跳过粗居中"(精定位已看到 k1/k2)—— 见下面 holes 分支 + skip_coarse = False time.sleep(self.settle_sec if move_i == 0 else min(0.20, self.settle_sec)) for attempt in range(8): if attempt: @@ -1451,13 +2888,21 @@ class Stage2Locate(Node): break holes = self._detect_holes_img(bgr, skip_center_gate=True) if holes.get("status"): - self.get_logger().info("粗定位 YOLO 空框,但已看到 k1/k2,跳过居中直进精对准") - bbox = holes.get("bbox") - truth = holes + # 精定位已经能看到 k1/k2(它是**直接量孔**,比粗居中可靠), + # 所以不居中、不移动,直接交给精定位。 + # 旧写法在这里把孔检测器的整幅 bbox 拿来当工件目标,然后**照样算 + # 偏差横移**:真机那帧 bbox=[0,0,847,479](整幅画面)⇒ 偏差 + # 55.9mm ⇒ 又挪一次。一句话:"跳过居中"就必须真的不动。 + self.get_logger().info( + "粗定位 YOLO 无可信框(空框/被边缘切),但已看到 k1/k2 " + "—— 跳过粗居中、原地直进精对准" + ) self._publish_overlay(holes.get("draw_img", bgr)) - move_i = self.coarse_max_moves + skip_coarse = True break self.get_logger().warn(f"粗定位第 {attempt + 1}/8 帧未见工件,复拍") + if skip_coarse: + break if bbox is None: if bgr is not None: self._publish_overlay(bgr) @@ -1478,6 +2923,37 @@ class Stage2Locate(Node): if truth is not None and truth.get("part_center_base"): p_base = np.asarray(truth["part_center_base"][0], dtype=float) src = "真值" + # 对孔走平面交点时,框心必须同一条射线∩面。深度框心沿 30° 视线 + # 偏 1~2mm,符号随站位翻(D435 送到夹具位 vs 纯 D405 停在别处), + # 精拍再把这截当 K1.x−规尖.x 走掉,前馈又沿同轴加一次。 + if p_base is None and self.hole_visual_only: + if float(self.surface_z_m) <= 0.0: + self.get_logger().error( + "粗居中要对孔同一平面,但 workpiece_surface_z_m 没有配," + "拒绝用深度图凑框心" + ) + break + T_cam = self._lookup(self.base_frame, self.cam_frame) + if T_cam is None: + self.get_logger().error("粗居中缺 cam TF,拒绝用深度图凑框心") + break + hit = pixel_on_base_plane( + float(bx), + float(by), + float(intr["fx"]), + float(intr["fy"]), + float(intr["cx"]), + float(intr["cy"]), + T_cam, + float(self.surface_z_m), + ) + if hit is None: + self.get_logger().error( + "粗居中框心射线没交到工件面,拒绝用深度图凑" + ) + break + p_base = hit + src = "像素交工件面" if p_base is None: z_wp = self._surface_depth(depth_m, bbox) p_base = self._cam_to_base(self._px_to_cam(bx, by, z_wp, intr)) @@ -1486,6 +2962,17 @@ class Stage2Locate(Node): Tee = T_now gxy = self._gauge_xy(Tee) err_xy = float(np.hypot(p_base[0] - gxy[0], p_base[1] - gxy[1])) + # 目标点先过**误检守卫**:宁可原地不动交给精定位,也不许按一个坏点横移。 + # 一阶段刚锁定时臂已经在工件上方,粗居中的合理位移是厘米级;出现 + # 十几厘米以上的"偏差"或盒外目标,只可能是反投影/检测坏了。 + why = self._coarse_target_reject(p_base, gxy) + if why: + self.get_logger().warn( + f"粗定位目标判误检({why})—— **不移动**,原地直进精定位:" + f"base=({p_base[0]:.3f},{p_base[1]:.3f})[{src}] " + f"夹爪=({gxy[0]:.3f},{gxy[1]:.3f}) 偏差={err_xy*1000:.1f}mm" + ) + break coarse_tol = float(self._hole_cfg.get("coarse_tol_m", 0.006)) self.get_logger().info( f"工件 bbox={bbox} 中心=({bx:.0f},{by:.0f}) " @@ -1526,6 +3013,10 @@ class Stage2Locate(Node): final: Dict[str, Any] = {} xy_gain = 1.0 last_good: Optional[Tuple[np.ndarray, np.ndarray, float, Dict[str, Any]]] = None + # 两孔中点的历史(本拍 = [-1],上一拍 = [-2],上上拍 = [-3]): + # 对准时工具在动、孔位也会被"追"着动,唯一**不该动**的是两孔中点 —— + # 它一动就说明工件在动,而工件只会被工具推走(见 gauge_fsm.drag_verdict)。 + mids: List[Tuple[float, float]] = [] for it in range(self.align_max_iters + 1): self._state(f"snap_fine_{it}") bgr, depth_m, intr, res = self._snap_holes(skip_center_gate=True) @@ -1564,7 +3055,9 @@ class Stage2Locate(Node): if proj is None: proj = self._project_holes(depth_m, pts, radii, bbox_l, intr) if proj is None: - self.get_logger().error("孔深度/手眼投影失败") + self.get_logger().error( + "孔心像素没交到工件面" if self.hole_visual_only else "孔深度/手眼投影失败" + ) if it >= self.align_max_iters: return 4, q, Tee, {} continue @@ -1584,7 +3077,51 @@ class Stage2Locate(Node): Tee_now = self._lookup(self.base_frame, self.ee_frame) if Tee_now is not None: Tee = Tee_now - gxy = self._gauge_xy(Tee) + # ---- 工具位置取"视觉规尖",不是"法兰轴线"-------------------- + # 见 _tip_offset_from_depth / _refresh_tip_offset:规可偏出法兰轴线 ~10mm, + # 把法兰对到孔上等于把规偏着对过去。偏移量准一次后冻结(刚体量)。 + tip_src = "法兰+偏置" + if self.tip_vision and self._tip_off is None: + off, tlen, why = self._tip_offset_from_depth( + depth_m, intr, Tee, z_wp_cam=float(z_wp) + ) + if off is not None and tlen is not None: + self._tip_samp.append((off, tlen)) + self._refresh_tip_offset() + if self.hole_keypoint_once and self._tip_off is None: + self._tip_off = np.asarray(off, dtype=float).reshape(2) + self._tip_len_m = float(tlen) + self.get_logger().warn( + f"单次精拍凑不满 tip_calib_n={self.tip_calib_n},本帧规尖偏移 " + f"({off[0]*1000:+.1f},{off[1]*1000:+.1f})mm 仅用于这一步,未冻结" + ) + tip_src = ( + f"视觉规尖(校准中 n={len(self._tip_samp)} {why})" + if (self._tip_off is None or ( + self.hole_keypoint_once and len(self._tip_samp) < self.tip_calib_n + )) + else "视觉规尖(已冻结)" + ) + if self.hole_keypoint_once and self._tip_off is not None: + tip_src = ( + "视觉规尖(已冻结)" + if len(self._tip_samp) >= self.tip_calib_n + else "视觉规尖(单次精拍·本帧)" + ) + else: + self.get_logger().warn(f" 规尖视觉量取失败:{why}") + elif self._tip_off is not None: + tip_src = "视觉规尖(已冻结)" + if self._tip_off is not None: + gxy = np.array( + [Tee[0, 3] + self._tip_off[0], Tee[1, 3] + self._tip_off[1]] + ) + else: + gxy = self._gauge_xy(Tee) + if self.tip_vision and self._tip_off is None and len(self._tip_samp) == 0: + self.get_logger().warn( + " 规尖还没量到,本拍先用法兰+偏置兜着 —— 此时可能对的是法兰不是规" + ) err = float(np.hypot(tgt_b[0] - gxy[0], tgt_b[1] - gxy[1])) final = { @@ -1598,17 +3135,84 @@ class Stage2Locate(Node): "workpiece_surface_z_m": round(z_wp, 4), "hole_z_m": [round(z_left, 4), round(z_right, 4)], "gauge_xy_m": [round(float(gxy[0]), 5), round(float(gxy[1]), 5)], + "gauge_source": tip_src, + "tip_offset_m": ( + [round(float(self._tip_off[0]), 5), round(float(self._tip_off[1]), 5)] + if self._tip_off is not None + else None + ), + "tip_len_m": (round(self._tip_len_m, 5) if self._tip_len_m else None), "residual_mm": round(err * 1000.0, 2), "hover_z_m": round(float(Tee[2, 3]), 4), "iter": it, "snap_frames": int(res.get("snap_frames") or 1), + "residual_remeasured": False, } + final = self._stamp_bias(final, tgt_b=tgt_b, gxy=gxy, tag=f"fine {it}") + snap0 = { + "tag": final.get("tag"), + "residual_mm": final.get("residual_mm"), + "err_xy_m": final.get("err_xy_m"), + "along_look_mm": final.get("along_look_mm"), + "along_right_mm": final.get("along_right_mm"), + "k1_base_m": final.get("k1_base_m"), + "k2_base_m": final.get("k2_base_m"), + "k1_px": final.get("k1_px"), + "k2_px": final.get("k2_px"), + "gauge_xy_m": final.get("gauge_xy_m"), + "gauge_source": final.get("gauge_source"), + "tip_offset_m": final.get("tip_offset_m"), + "hover_z_m": final.get("hover_z_m"), + "workspace_clipped": final.get("workspace_clipped"), + } + snaps = list(final.get("snaps") or []) + snaps.append(snap0) + final["snaps"] = snaps self.get_logger().info( f"[fine {it}] k1=({k1_b[0]:.4f},{k1_b[1]:.4f}) k2=({k2_b[0]:.4f},{k2_b[1]:.4f}) " f"zL={z_left*1000:.0f} zR={z_right*1000:.0f}mm " - f"gauge=({gxy[0]:.4f},{gxy[1]:.4f}) 残差={err*1000:.2f}mm (tol {self.align_tol*1000:.1f})" + f"工具=({gxy[0]:.4f},{gxy[1]:.4f})[{tip_src}] " + f"残差={err*1000:.2f}mm (tol {self.align_tol*1000:.1f})" ) + # ---- 工件被推走的看门狗 ----------------------------------------- + # 为什么放在"打印之后、动手之前":这一拍的数据已经完整,判出来就 + # 立刻停,不再多推一下(每多推一下工件就多走十几毫米,而它已经 + # 离开孔位了,后面的每一拍都在追一个被自己推着走的目标)。 + mid_now = ( + float(k1_b[0] + k2_b[0]) / 2.0, + float(k1_b[1] + k2_b[1]) / 2.0, + ) + dragged, d_mid = drag_verdict( + mid_now, + mids[-1] if len(mids) >= 1 else None, + mids[-2] if len(mids) >= 2 else None, + ) + mids.append(mid_now) + if dragged: + tool_mm = 0.0 + if last_good is not None: + _g0 = last_good[3].get("gauge_xy_m") or [] + if len(_g0) == 2: + tool_mm = math.hypot(gxy[0] - float(_g0[0]), gxy[1] - float(_g0[1])) * 1000.0 + self.get_logger().error( + f"工件被工具推走了:两孔中点两拍之间挪了 {d_mid*1000:.1f}mm" + f"(同期工具只走了 {tool_mm:.1f}mm)—— 对准闭环追的孔位长在工件上," + f"工件一走,孔位就跟着工具走、残差恒定不收敛。\n" + f" 这**不是**手眼标定/检测的问题(那两样坏了不会让工件移动)。" + f"按下面顺序查:\n" + f" ① 悬停时工具尖端是不是已经进了工件:法兰 z={Tee[2, 3]:.4f} − " + f"工具长(site.yaml 的 gauge_assembly.tool_tip_below_flange_m)" + f" 要高于工件上表面 z={z_wp:.4f};\n" + f" ② 工具长是**实测**的吗(真机夹上规后读 TF;仿真里 " + f"scripts/sim_load_gauge.py 会打印实测值);装夹位置一变它就变;\n" + f" ③ 装夹后规有没有下滑(仿真里合爪后规会落到落座位置," + f"下滑量直接加在工具长上)。" + ) + self._publish_overlay(draw) + self._publish_result(final) + return 6, q, Tee, final + # 在叠图上标目标孔 + 写基座坐标 try: import cv2 @@ -1629,7 +3233,61 @@ class Stage2Locate(Node): self._publish_overlay(draw) self._publish_result(final) + if self.hole_keypoint_once: + commanded_mm = round(err * 1000.0, 2) + if self._tip_off is None and self.tip_vision: + self.get_logger().error( + "单次精拍没量到规尖,这一步对的是法兰。align_trusted=false," + "仍走一次并下降,方便目视;不把法兰对上说成成功" + ) + final["ok"] = False + final["align_trusted"] = False + final["fail_reason"] = "未量到规尖偏移,工具位置退化为法兰轴线" + q, Tee, _moved = self._oneshot_align_move(q, Tee, tgt_b, gxy, err) + final["commanded_residual_mm"] = commanded_mm + if self.hole_once_lock_xy_descend: + final["residual_remeasured"] = False + final["lock_xy_descend"] = True + if self._tip_off is not None: + final["ok"] = True + self.get_logger().warn( + f"视线前馈斜线:悬停指令 {commanded_mm:.2f}mm 已走," + "不补拍。下一步按 k×下降收 XY,一条 MoveL 到贴面。" + "residual_mm 仍是走之前那一拍,不是贴面复测" + ) + else: + q, Tee, final = self._observe_holes( + q, Tee, final, tag="走后核验" + ) + if not final.get("residual_remeasured"): + self.get_logger().error( + f"走后核验没复测到。开环指令残差 {commanded_mm:.2f}mm," + "不是 hop 到位,不把这次当对准成功" + ) + final["ok"] = False + self.get_logger().info( + f"单次精拍悬停走完:指令 {commanded_mm:.2f}mm → " + f"复测 {final.get('residual_mm')}mm;下降后还要补交平面漂的那几毫米" + ) + self._state("aligned") + break + if err <= self.align_tol: + if self.tip_vision and self._tip_off is None: + # 容差达标了,但这一拍的"工具位置"其实是**法兰**(退路了)—— + # 对的是法兰不是规,δ 就是那个 ~10mm 的装夹偏置。2026-10-08 真机 + # 就出现过:tip_offset_m=None、残差 0.15mm 看着漂亮,其实法兰 + # 压在 k1 上、规尖偏出 ~11mm。**不许把没做到说成做到**。 + self.get_logger().error( + f"残差 {err*1000:.2f}mm 达标,但规尖偏移一直没量到(用的是法兰轴线)" + " —— 这个结果不可信:对的可能是法兰、不是规。" + "判失败,摆到能看清规尖再跑(别按这个结果下降)" + ) + final["ok"] = False + final["align_trusted"] = False + final["fail_reason"] = "未量到规尖偏移,工具位置退化为法兰轴线" + self._publish_result(final) + return 8, q, Tee, final self._state("aligned") break if last_good is not None: @@ -1700,20 +3358,84 @@ class Stage2Locate(Node): self.get_logger().warn("对准移动未完全到位,复拍核验") # ---- 4.5) 柔顺轻降到孔面上方 1-2mm(不接触)---- - # 用户要求:对准后轻轻悬在孔上方 1-2mm,不下臂接触。深度反馈闭环,很慢很柔。 - okd, q, Tee = self._descend_above_hole(q, Tee) + # 下降量由**几何**决定(法兰 FK − 工具长 − 工件面 − final_gap),深度读数只 + # 做交叉核对,见 _descend_above_hole 的说明。 + if self.hole_keypoint_once and self.hole_once_lock_xy_descend: + # 视线前馈斜线:不经过观察高、不补交。一条 MoveL 收到贴面。 + lock_gap = ( + self.final_gap_m if self.final_descent_enable else self.observe_gap_m + ) + okd, q, Tee = self._once_ff_diagonal_to_gap( + q, Tee, target_gap_m=lock_gap + ) + elif self.hole_keypoint_once: + # 先降到观察高(约 15mm)再交孔;贴面由补孔斜线一步完成,不再 4mm 切到 2mm。 + okd, q, Tee = self._descend_above_hole( + q, Tee, + target_gap_m=self.observe_gap_m, + step_m=ONCE_APPROACH_STEP_M, + ) + else: + okd, q, Tee = self._descend_above_hole(q, Tee) if not okd: self.get_logger().warn("轻降未完全到位,保持当前高度(安全优先)") + if self.hole_keypoint_once and self.hole_once_lock_xy_descend: + tip_len = float(self.tool_tip_below_flange_m) + surf = float(self.surface_z_m) + if tip_len > 0.0 and surf > 0.0: + self.descent_final_gap_m = float(Tee[2, 3]) - tip_len - surf + elif self.hole_keypoint_once: + # 悬停那一拍的基座 XY 不能带到观测高:前倾 30°,降 50mm 交点会漂约 4mm。 + # 核验记账后补 XY;规尖沿用悬停冻结值,不在观测高度重测。 + q, Tee, final = self._observe_holes(q, Tee, final, tag="降后核验") + q, Tee, final = self._trim_xy_after_descent(q, Tee, final) + tip_len = float(self.tool_tip_below_flange_m) + surf = float(self.surface_z_m) + if tip_len > 0.0 and surf > 0.0: + self.descent_final_gap_m = float(Tee[2, 3]) - tip_len - surf + elif okd: + # 悬停残差在下降 60mm 之后会变大约 2mm(相机 30°,同一孔两个高度 + # 反投影对不齐)。在观测高度重测规尖,只补 XY。 + q, Tee, final = self._trim_xy_after_descent(q, Tee, final) + # 如实汇报**实际**间隙(几何量)——不是把目标值念一遍。停在离面 50mm 时 + # 也显示 ~50mm,现场才看得出"轻降没做到"(R1.1:不许把没做到说成做到)。 + gap_txt = ( + f"{self.descent_final_gap_m * 1000:.1f}" + if self.descent_final_gap_m is not None + else f">{self.final_gap_m * 1000:.1f}(未能测得/未下降)" + ) # ---- 5) 锁定保持 ---- + # 贴面之后就停在这个法兰 Z。没有接触传感器,到位只认 final_gap_mm + # (规尖离面)。三阶段开局会抬回悬高,这里标明已经插到位,流水线不再上抬。 + if ( + self.descent_final_gap_m is not None + and self.final_descent_enable + and not self.hover_only + ): + final = dict(final) + final["insert_held"] = True + final["flange_z_m"] = round(float(Tee[2, 3]), 4) + final["tip_gap_mm"] = round(float(self.descent_final_gap_m) * 1000.0, 2) + final["commanded_gap_mm"] = round(float(self.final_gap_m) * 1000.0, 2) + final["insert_z_source"] = "final_gap_mm" self._state("hold") q_fin = self._q() self._pin(q_fin if q_fin is not None else q) - self.get_logger().info( - f"=== 二阶段定位完成: {self.target_hole} 残差 {final.get('residual_mm', -1)}mm," - f"悬在孔面上方 ~{self.final_gap_m * 1000:.1f}mm(不接触)。" - f"结果: /stage2/result, /tmp/stage2_result.json ===" - ) + if final.get("insert_held"): + self.get_logger().info( + f"=== 二阶段定位完成: {self.target_hole} 残差 {final.get('residual_mm', -1)}mm," + f"法兰 Z={final.get('flange_z_m')}m,规尖离面 {gap_txt}mm" + f"(final_gap {self.final_gap_m * 1000:.1f}mm,无接触传感器)。" + "停在这一高度,不抬回悬高。" + f"结果: /stage2/result, /tmp/stage2_result.json ===" + ) + else: + self.get_logger().info( + f"=== 二阶段定位完成: {self.target_hole} 残差 {final.get('residual_mm', -1)}mm," + f"规尖悬在孔面上方 ≈{gap_txt}mm(不接触)。" + f"结果: /stage2/result, /tmp/stage2_result.json ===" + ) return 0, q_fin if q_fin is not None else q, Tee, final def _linger_hold(self, final: Dict[str, Any], seconds: Optional[float] = None) -> None: diff --git a/build/arm_application/build/lib/arm_application/stage3_search_node.py b/build/arm_application/build/lib/arm_application/stage3_search_node.py index 1b7c119..acf1a50 100644 --- a/build/arm_application/build/lib/arm_application/stage3_search_node.py +++ b/build/arm_application/build/lib/arm_application/stage3_search_node.py @@ -104,6 +104,18 @@ def tactile_timeout_reason(pairs: Sequence[Any], timeout_s: float) -> str: ) return f"触觉话题断流 >{timeout_s:.1f}s(左右指都无新鲜数据)" + +def should_lift_air_baseline( + z_now_m: float, z_air_m: float, *, tactile_live: bool +) -> bool: + """空载抬升只在触觉已经在发、并且当前低于空载高度时做。 + + 触觉没数据时先抬到 hover+50mm 再报断流,等于插孔做到一半把臂送回锁高。 + """ + if not tactile_live: + return False + return float(z_now_m) < float(z_air_m) - 0.008 + def spiral_points( cx: float, cy: float, pitch_mm: float, step_mm: float, r_max_mm: float ) -> List[Tuple[float, float]]: @@ -514,7 +526,8 @@ class Stage3Search(Stage2Locate): tgt[2] += dz_m self._goto(q, Tee, tgt, verticalize=True, tol_m=0.001, tol_tilt=self.vert_tol_rad * 3.0, tag="retract", - v=0.03, max_hops=3, settle_s=0.2, min_dur=0.6) + v=0.03, max_hops=2, settle_s=0.2, min_dur=0.6, + hold_xy=True, z_up_only=True) except Exception: pass @@ -581,9 +594,21 @@ class Stage3Search(Stage2Locate): result: Dict[str, Any] = {"ok": False, "stage": "stage3", "target_hole": self.target_hole} try: # 基线必须悬空测。二阶段结束在 hover≈触面+1mm,带载会把阈值抬飞。 + # 触觉没在发就原地中止,不许先抬到锁高再报断流。 z_now = float(Tee[2, 3]) z_air = float(self.hover_z) + 0.05 - if z_now < z_air - 0.008: + self._spin(0.05) + tac_live = bool( + live_tactile(time.monotonic(), (self._tac_l, self._tac_r)) + ) + if not tac_live: + raise SearchAbort( + tactile_timeout_reason( + (self._tac_l, self._tac_r), float(self.tac_timeout) + ), + code=7, + ) + if should_lift_air_baseline(z_now, z_air, tactile_live=True): self._state("air_baseline") self.get_logger().info( f"抬到 {z_air:.3f}m 测触觉空载基线(当前 Z={z_now:.3f})" diff --git a/build/arm_application/build/lib/arm_application/tactile_node.py b/build/arm_application/build/lib/arm_application/tactile_node.py index f6e652d..85a144f 100644 --- a/build/arm_application/build/lib/arm_application/tactile_node.py +++ b/build/arm_application/build/lib/arm_application/tactile_node.py @@ -22,8 +22,10 @@ from arm_application.site_io import load_site_dict, site_path from arm_msgs.msg import TactileStatus from sensor_msgs.msg import Image +from arm_application.ros_node import TolerantNode -class TactileNode(Node): + +class TactileNode(TolerantNode): def __init__(self) -> None: super().__init__("tactile") self.declare_parameter("publish_hz", 20.0) diff --git a/build/arm_application/build/lib/arm_application/weights_layout.py b/build/arm_application/build/lib/arm_application/weights_layout.py index ceb99d6..75c3a5a 100644 --- a/build/arm_application/build/lib/arm_application/weights_layout.py +++ b/build/arm_application/build/lib/arm_application/weights_layout.py @@ -176,6 +176,51 @@ def staging_dir(root: Union[str, Path]) -> Path: return Path(root) / STAGING_DIRNAME +def infer_group( + root: Union[str, Path], + source: Union[str, Path], + fallback: str = "yolo", +) -> str: + """转换产物该落到**哪个分组**:默认沿用源文件所在的分组。 + + 为什么不能一律落到 ``yolo``(2026-09-28 真机踩到,代价是一次白转) + ---------------------------------------------------------------- + 现场把 ``models/hole_insert/detect_best_1.onnx`` 转 engine,工具默认 + ``--group yolo``,于是产物落到 ``models/yolo/detect_best_1.engine`` —— + 而运行时找 engine 的规则是**同级同名**(``yolo_detector.resolve_weights``: + ``p.with_suffix(".engine")``,即 site.yaml 指的 ``.onnx`` 旁边)。两边 + 一分家,engine 就等于不存在:现象是"启动即报缺 engine",而文件明明躺着。 + 这正是本项目最忌讳的**静默失效** —— 工具没报错,位置也"合理"。 + + 规则: + - 源文件已在权重根目录下的某个分组里(例如 ``models/hole_insert/x.onnx``) + → 沿用 ``hole_insert``。这样"就地转换"永远落在原地,运行时必然找得到; + - 源文件在 ``staging/``、权重根目录之外或根目录正下方 → ``fallback`` + (默认 ``yolo``):那才是"新来的模型,还没决定分组"的正常情形。 + + Args: + root: 权重根目录(``models/``)。 + source: 输入文件。 + fallback: 无法沿用时的分组名。 + + Returns: + 分组名(不带路径)。 + """ + r = Path(root) + try: + rel = Path(source).expanduser().resolve().relative_to(r.resolve()) + except ValueError: + # 不在权重根目录下(/tmp、外部磁盘、staging 之类)→ 没有"原地"可言 + return fallback + if len(rel.parts) < 2: + # 直接躺在 models/ 正下方:没有分组信息,用默认分组 + return fallback + group = rel.parts[0] + if is_staging(r / group) or group.startswith("."): + return fallback + return group + + def staging_files(root: Union[str, Path]) -> List[Path]: """staging 里的待处理文件。 diff --git a/build/arm_application/build/lib/arm_application/yolo_detector.py b/build/arm_application/build/lib/arm_application/yolo_detector.py index 38edb80..9276ca0 100644 --- a/build/arm_application/build/lib/arm_application/yolo_detector.py +++ b/build/arm_application/build/lib/arm_application/yolo_detector.py @@ -43,6 +43,9 @@ class Detection: conf: float cls_id: int cls_name: str + # pose 模型才有:(K, 3) = 每个关键点的 x, y, conf(**原图像素坐标**)。 + # 检测模型恒为 None —— 下游必须先判 None,别假设它有。 + kpts: Optional[np.ndarray] = None @property def cx(self) -> float: @@ -301,12 +304,51 @@ class YoloDetector: return seq, dets, (time.monotonic() - t0) * 1000.0 +def build_detector( + weights: Union[str, Path], + *, + backend: str = "auto", + conf: float = 0.25, + iou: float = 0.45, + device: str = "", + imgsz: int = 640, +): + """按权重类型挑检测器:pose 模型走 ``PoseDetector``,否则走 ``YoloDetector``。 + + 为什么要这个工厂:ultralytics 解不了 pose 的 TensorRT engine(见 + ``pose_detector`` 模块头),所以 pose 必须换成自解码实现。判断依据是模型 + 是不是 ``task=pose`` —— 直接读旁边 ``.onnx`` 的 metadata,不靠调用方声明。 + + 返回对象统一有 ``detect()/infer()/warmup()/imgsz/class_names/class_ids``。 + """ + path = Path(weights).expanduser() + from .pose_detector import PoseDetector, is_pose_model + + if is_pose_model(path): + logger.info("检测到 pose 模型 %s → 用 PoseDetector(自解码关键点)", path.name) + return PoseDetector( + path, + conf=conf, + iou=iou, + device=device or "0", + imgsz=imgsz, + ) + return YoloDetector( + path, + conf=conf, + iou=iou, + device=device, + imgsz=imgsz, + ) + + def _yolo_worker_main(q_in, q_out, cfg: dict) -> None: - """spawn 出来的子进程:只跑 GPU 上的 YOLO。这里绝不能 import rclpy。""" + """spawn 出来的子进程:只跑 GPU 上的检测。这里绝不能 import rclpy。""" try: path = resolve_weights(cfg["weights"], cfg.get("backend") or "auto") - det = YoloDetector( + det = build_detector( path, + backend=cfg.get("backend") or "auto", conf=float(cfg.get("conf") or 0.25), iou=float(cfg.get("iou") or 0.45), device=str(cfg.get("device") or "0"), @@ -336,7 +378,13 @@ def _yolo_worker_main(q_in, q_out, cfg: dict) -> None: dets = det.infer(image, half=bool(cfg.get("half", True))) gpu_ms = (time.monotonic() - t0) * 1000.0 packed = [ - (d.xyxy.astype(np.float32), float(d.conf), int(d.cls_id), str(d.cls_name)) + ( + d.xyxy.astype(np.float32), + float(d.conf), + int(d.cls_id), + str(d.cls_name), + None if d.kpts is None else np.asarray(d.kpts, dtype=np.float32), + ) for d in dets ] _put_drop_old(q_out, ("ok", seq, packed, gpu_ms)) @@ -399,15 +447,20 @@ class YoloInferProcess: def alive(self) -> bool: return bool(self._p is not None and self._p.is_alive()) - def submit(self, image_bgr: np.ndarray, seq: int = 0) -> None: + def submit(self, image_bgr: np.ndarray, seq: int = 0) -> bool: """把最新一帧排进队列。如果 worker 正忙就跳过 —— 它在每次推理后都会 - 排空到队列里最新的帧,所以不会跑任何过期数据。""" + 排空到队列里最新的帧,所以不会跑任何过期数据。 + + 返回是否真的进队。进不去必须告诉调用方,否则一次性会以为「已经在跑」 + 而空等,把 D405 也卡住。 + """ if not self.alive: raise RuntimeError("YOLO 工作进程已死亡") try: self._q_in.put((int(seq), image_bgr), timeout=0.010) + return True except Exception: - pass + return False def wait_result(self, timeout: float = 0.045): """返回 ``(seq, list[Detection], gpu_ms)`` 或 ``None``。""" @@ -444,15 +497,20 @@ class YoloInferProcess: return None seq, packed = int(msg[1]), msg[2] gpu_ms = float(msg[3]) if len(msg) > 3 else 0.0 - dets = [ - Detection( - xyxy=np.asarray(xyxy, dtype=float), - conf=float(conf), - cls_id=int(cid), - cls_name=str(name), + dets = [] + for row in packed: + # 兼容旧格式(4 元组,无关键点),免得子进程和父进程版本不一致时炸掉。 + xyxy, conf, cid, name = row[0], row[1], row[2], row[3] + kpts = row[4] if len(row) > 4 else None + dets.append( + Detection( + xyxy=np.asarray(xyxy, dtype=float), + conf=float(conf), + cls_id=int(cid), + cls_name=str(name), + kpts=None if kpts is None else np.asarray(kpts, dtype=float), + ) ) - for xyxy, conf, cid, name in packed - ] return seq, dets, gpu_ms def infer(self, image_bgr: np.ndarray, *, half: bool = False, seq: int = 0): diff --git a/build/arm_application/colcon_command_prefix_setup_py.sh.env b/build/arm_application/colcon_command_prefix_setup_py.sh.env index 5aa0843..217da1e 100644 --- a/build/arm_application/colcon_command_prefix_setup_py.sh.env +++ b/build/arm_application/colcon_command_prefix_setup_py.sh.env @@ -25,7 +25,7 @@ FORCE_COLOR=0 GDK_BACKEND=x11 GDMSESSION=ubuntu GIO_LAUNCHED_DESKTOP_FILE=/usr/share/applications/cursor.desktop -GIO_LAUNCHED_DESKTOP_FILE_PID=127254 +GIO_LAUNCHED_DESKTOP_FILE_PID=6037 GJS_DEBUG_OUTPUT=stderr GJS_DEBUG_TOPICS=JS ERROR;JS LOG GNOME_DESKTOP_SESSION_ID=this-is-deprecated @@ -36,21 +36,21 @@ GSETTINGS_SCHEMA_DIR_CONDA_BACKUP= GTK_IM_MODULE=ibus GTK_MODULES=gail:atk-bridge HOME=/home/cc -INVOCATION_ID=86f288ce697549d186a52754da3c9b87 -JOURNAL_STREAM=8:47859 +INVOCATION_ID=ab64d5fffd3b4622ba527182659a2dd1 +JOURNAL_STREAM=8:11025 LANG=zh_CN.UTF-8 LANGUAGE=zh_CN:zh -LD_LIBRARY_PATH=/home/cc/ros2/install/arm_msgs/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/ros2/install/gpio_controller/lib:/home/cc/ros2/install/flexiv_robot_states_broadcaster/lib:/home/cc/ros2/install/flexiv_gripper/lib:/home/cc/ros2/install/flexiv_msgs/lib:/home/cc/ros2/install/flexiv_hardware/lib:/home/cc/anaconda3/envs/ros_flexiv/opt/rviz_ogre_vendor/lib +LD_LIBRARY_PATH=/home/cc/ros2/install/arm_msgs/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/ros2/install/gpio_controller/lib:/home/cc/ros2/install/flexiv_robot_states_broadcaster/lib:/home/cc/ros2/install/flexiv_gripper/lib:/home/cc/ros2/install/flexiv_msgs/lib:/home/cc/ros2/install/flexiv_hardware/lib:/home/cc/anaconda3/envs/ros_flexiv/opt/rviz_ogre_vendor/lib LESSCLOSE=/usr/bin/lesspipe %s %s LESSOPEN=| /usr/bin/lesspipe %s LOGNAME=cc LS_COLORS= -MANAGERPID=12153 +MANAGERPID=5173 NO_COLOR=1 OLDPWD=/home/cc/ros2 PATH=/home/cc/.local/bin:/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin:/home/cc/.local/bin:/home/cc/anaconda3/envs/ros_flexiv/bin:/home/cc/anaconda3/condabin:/home/cc/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin PWD=/home/cc/ros2/build/arm_application -PYTHONPATH=/home/cc/ros2/install/arm_msgs/lib/python3.11/site-packages:/home/cc/ros2/build/arm_kinematics:/home/cc/ros2/install/arm_kinematics/lib/python3.11/site-packages:/home/cc/ros2/build/flexiv_test_nodes:/home/cc/ros2/install/flexiv_test_nodes/lib/python3.11/site-packages:/home/cc/ros2/install/flexiv_msgs/lib/python3.11/site-packages:/home/cc/ros2/install/arm_sim_gazebo/lib/python3.11/site-packages:/home/cc/ros2/build/arm_driver_flexiv:/home/cc/ros2/install/arm_driver_flexiv/lib/python3.11/site-packages:/home/cc/ros2/install/arm_control/lib/python3.11/site-packages:/home/cc/ros2/build/arm_application:/home/cc/ros2/install/arm_application/lib/python3.11/site-packages:/home/cc/ros2/build/arm_interfaces:/home/cc/ros2/install/arm_interfaces/lib/python3.11/site-packages:/home/cc/anaconda3/envs/ros_flexiv/lib/python311/site-packages:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages +PYTHONPATH=/home/cc/ros2/install/arm_msgs/lib/python3.11/site-packages:/home/cc/ros2/install/arm_kinematics/lib/python3.11/site-packages:/home/cc/ros2/build/flexiv_test_nodes:/home/cc/ros2/install/flexiv_test_nodes/lib/python3.11/site-packages:/home/cc/ros2/install/flexiv_msgs/lib/python3.11/site-packages:/home/cc/ros2/install/arm_sim_gazebo/lib/python3.11/site-packages:/home/cc/ros2/build/arm_driver_flexiv:/home/cc/ros2/install/arm_driver_flexiv/lib/python3.11/site-packages:/home/cc/ros2/install/arm_control/lib/python3.11/site-packages:/home/cc/ros2/build/arm_application:/home/cc/ros2/install/arm_application/lib/python3.11/site-packages:/home/cc/ros2/build/arm_kinematics:/home/cc/ros2/build/arm_interfaces:/home/cc/ros2/install/arm_interfaces/lib/python3.11/site-packages:/home/cc/anaconda3/envs/ros_flexiv/lib/python311/site-packages:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages QT_ACCESSIBILITY=1 QT_IM_MODULE=ibus ROBOT_SN=Rizon4-063989 @@ -62,7 +62,7 @@ ROS_LOCALHOST_ONLY=0 ROS_OS_OVERRIDE=conda:linux ROS_PYTHON_VERSION=3 ROS_VERSION=2 -SESSION_MANAGER=local/cc:@/tmp/.ICE-unix/12501,unix/cc:/tmp/.ICE-unix/12501 +SESSION_MANAGER=local/cc:@/tmp/.ICE-unix/5424,unix/cc:/tmp/.ICE-unix/5424 SHELL=/bin/bash SHLVL=1 SITE_BASE_FRAME=Rizon4-063989_base_link @@ -94,7 +94,7 @@ SITE_D435_WIDTH=1280 SITE_EE_FRAME=Rizon4-063989_flange SITE_EE_X_M=0.25 SITE_EE_Y_M=0.0 -SITE_EE_Z_M=0.36 +SITE_EE_Z_M=0.32 SITE_FASTDDS_PROFILE= SITE_GO_HOME_POSE=home SITE_GO_HOME_SPEED=0.25 @@ -113,11 +113,11 @@ SITE_GRIP_SPEED=50 SITE_GRIP_STROKE_MM=20.0 SITE_GRIP_VEL_MPS=0.05 SITE_GRIP_VENDOR=dh -SITE_HANDEYE_BOARD_COLS=8 -SITE_HANDEYE_BOARD_COLS_EYE_IN_HAND=8 +SITE_HANDEYE_BOARD_COLS=11 +SITE_HANDEYE_BOARD_COLS_EYE_IN_HAND=11 SITE_HANDEYE_BOARD_COLS_EYE_TO_HAND=11 -SITE_HANDEYE_BOARD_ROWS=11 -SITE_HANDEYE_BOARD_ROWS_EYE_IN_HAND=11 +SITE_HANDEYE_BOARD_ROWS=8 +SITE_HANDEYE_BOARD_ROWS_EYE_IN_HAND=8 SITE_HANDEYE_BOARD_ROWS_EYE_TO_HAND=8 SITE_HANDEYE_BOARD_SRC_EYE_IN_HAND=boards SITE_HANDEYE_BOARD_SRC_EYE_TO_HAND=boards @@ -125,6 +125,9 @@ SITE_HANDEYE_CALIBRATE=/home/cc/ros2/handeye/calibrate.yaml SITE_HANDEYE_FILE=/home/cc/ros2/handeye/results/89_eye_in_hand.yaml SITE_HANDEYE_FILE_EYE_IN_HAND=/home/cc/ros2/handeye/results/89_eye_in_hand.yaml SITE_HANDEYE_FILE_EYE_TO_HAND=/home/cc/ros2/handeye/results/89_d435_eye_to_hand.yaml +SITE_HANDEYE_GRIPPER_TCP_QWXYZ=1.000000,0.000000,0.000000,0.000000 +SITE_HANDEYE_GRIPPER_TCP_XYZ=0.000537,-0.000264,0.226587 +SITE_HANDEYE_GRIPPER_TOOL=tool10120938 SITE_HANDEYE_MODE=eye_in_hand SITE_HANDEYE_MOVE_T=8.0 SITE_HANDEYE_PIN_HOLDS=2 @@ -149,7 +152,7 @@ SITE_HOLE_WEIGHTS=/home/cc/ros2/models/yolo/gongjian0929.onnx SITE_HOLE_WORKPIECE_WEIGHTS=/home/cc/ros2/models/yolo/gongjian0929.onnx SITE_JOINT_PREFIX=Rizon4-063989_ SITE_NAMED_POSES_FILE=/home/cc/ros2/src/arm_control/config/named_poses_89.yaml -SITE_NET_IFACE=enx6c1ff7d071b2 +SITE_NET_IFACE=eth0 SITE_OVERHEAD_CAM_AE_LIMIT_US=8000.0 SITE_OVERHEAD_CAM_AUTO_EXPOSURE=1 SITE_OVERHEAD_CAM_EMITTER=1 @@ -168,7 +171,7 @@ SITE_ROBOT_IP=192.168.2.101 SITE_ROBOT_LABEL=左臂89 SITE_ROBOT_SHORT_ID=89 SITE_ROBOT_SN=Rizon4-063989 -SITE_ROBOT_TOOL_NAME=tool1 +SITE_ROBOT_TOOL_NAME=tool10120938 SITE_ROS2_ROOT=/home/cc/ros2 SITE_SERVO_WATCHDOG=1.2 SITE_SERVO_Z_REF=0.22 @@ -177,11 +180,11 @@ SITE_TACTILE_CONFIG=dd03 SITE_TACTILE_CONFIG_FILE=/home/cc/ros2/devices/sensors/orisys/models/dd03/config.json SITE_TACTILE_LEFT=/dev/v4l/by-path/pci-0000:00:14.0-usb-0:3.4.1:1.0-video-index0 SITE_TACTILE_RIGHT=/dev/v4l/by-path/pci-0000:00:14.0-usb-0:3.4.2:1.0-video-index0 -SITE_TRACK_CAMERA=overhead -SITE_TRACK_CAMERA_FRAME=d435_color_optical_frame -SITE_TRACK_CAM_NAME=d435 -SITE_TRACK_HANDEYE_FILE=/home/cc/ros2/handeye/results/89_d435_eye_to_hand.yaml -SITE_TRACK_HANDEYE_MODE=eye_to_hand +SITE_TRACK_CAMERA=wrist +SITE_TRACK_CAMERA_FRAME=d405_left_color_optical_frame +SITE_TRACK_CAM_NAME=d405_left +SITE_TRACK_HANDEYE_FILE=/home/cc/ros2/handeye/results/89_eye_in_hand.yaml +SITE_TRACK_HANDEYE_MODE=eye_in_hand SITE_YOLO_CONF=0.1 SITE_YOLO_DEVICE=0 SITE_YOLO_IMGSZ=640 @@ -190,7 +193,7 @@ SITE_YOLO_WEIGHTS=/home/cc/ros2/models/yolo/gongjian0929.onnx SITE_YOLO_WEIGHTS_RESOLVED=/home/cc/ros2/models/yolo/gongjian0929.onnx SSH_AGENT_LAUNCHER=gnome-keyring SSH_AUTH_SOCK=/run/user/1000/keyring/ssh -SYSTEMD_EXEC_PID=12520 +SYSTEMD_EXEC_PID=5453 TERM=dumb USER=cc USERNAME=cc @@ -201,8 +204,8 @@ VSCODE_ESM_ENTRYPOINT=vs/workbench/api/node/extensionHostProcess VSCODE_HANDLES_UNCAUGHT_ERRORS=true VSCODE_IPC_HOOK=/run/user/1000/vscode-bd0186cc-3.12-main.sock VSCODE_NLS_CONFIG={"userLocale":"zh-cn","osLocale":"zh-cn","resolvedLanguage":"en","defaultMessagesFile":"/usr/share/cursor/resources/app/out/nls.messages.json","locale":"zh-cn","availableLanguages":{}} -VSCODE_PID=127254 -VSCODE_PROCESS_TITLE=extension-host (agent-exec) ros2 [2-10] +VSCODE_PID=6037 +VSCODE_PROCESS_TITLE=extension-host (agent-exec) ros2 [1-9] WINDOWPATH=2 XAUTHORITY=/run/user/1000/gdm/Xauthority XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg @@ -213,7 +216,7 @@ XDG_RUNTIME_DIR=/run/user/1000 XDG_SESSION_CLASS=user XDG_SESSION_DESKTOP=ubuntu XDG_SESSION_TYPE=x11 -XML_CATALOG_FILES=file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog +XML_CATALOG_FILES=file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog XMODIFIERS=@im=ibus YOLO_AUTOINSTALL=false _=/home/cc/anaconda3/envs/ros_flexiv/bin/colcon diff --git a/build/arm_application/setup.py b/build/arm_application/setup.py index 064bf10..a85f34f 120000 --- a/build/arm_application/setup.py +++ b/build/arm_application/setup.py @@ -1 +1 @@ -../../src/arm_application/setup.py \ No newline at end of file +/home/cc/ros2/src/arm_application/setup.py \ No newline at end of file diff --git a/build/flexiv_hardware/.cmake/api/v1/reply/index-2026-10-12T09-53-12-0314.json b/build/flexiv_hardware/.cmake/api/v1/reply/index-2026-10-19T09-07-09-0335.json similarity index 100% rename from build/flexiv_hardware/.cmake/api/v1/reply/index-2026-10-12T09-53-12-0314.json rename to build/flexiv_hardware/.cmake/api/v1/reply/index-2026-10-19T09-07-09-0335.json diff --git a/build/flexiv_hardware/CMakeFiles/CMakeConfigureLog.yaml b/build/flexiv_hardware/CMakeFiles/CMakeConfigureLog.yaml index 7ecce28..1ecbbfc 100644 --- a/build/flexiv_hardware/CMakeFiles/CMakeConfigureLog.yaml +++ b/build/flexiv_hardware/CMakeFiles/CMakeConfigureLog.yaml @@ -68130,3 +68130,31447 @@ events: CMAKE_SYSTEM_LIBRARY_PATH: - "/usr/lib/X11" ... + +--- +events: + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rclcpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librclcpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "libstatistics_collector" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/liblibstatistics_collector.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "builtin_interfaces__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "builtin_interfaces__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "builtin_interfaces__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/rcutilsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/rosidl_runtime_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcutils" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcutils.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/rcutilsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/rosidl_runtime_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcutils" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcutils.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/ament_cmake_export_libraries-extras.cmake:110 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/rcutilsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/rosidl_runtime_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "dl" + candidate_directories: + - "/home/cc/flexiv_install/lib/" + - "/home/cc/flexiv_install/" + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + - "/home/cc/anaconda3/envs/ros_flexiv/" + - "/home/cc/ros2/install/gpio_controller/lib/" + - "/home/cc/ros2/install/gpio_controller/" + - "/home/cc/ros2/install/flexiv_bringup/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/lib/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/" + - "/home/cc/ros2/install/flexiv_gripper/lib/" + - "/home/cc/ros2/install/flexiv_gripper/" + - "/home/cc/ros2/install/flexiv_msgs/lib/" + - "/home/cc/ros2/install/flexiv_msgs/" + - "/home/cc/ros2/install/flexiv_moveit_config/" + - "/home/cc/ros2/install/flexiv_hardware/lib/" + - "/home/cc/ros2/install/flexiv_hardware/" + - "/home/cc/ros2/install/arm_bringup/" + - "/home/cc/ros2/install/arm_moveit_config/" + - "/home/cc/ros2/install/arm_description/" + - "/home/cc/ros2/install/flexiv_description/" + - "/home/cc/ros2/install/arm_msgs/lib/" + - "/home/cc/ros2/install/arm_msgs/" + - "/home/cc/ros2/install/flexiv_test_nodes/lib/" + - "/home/cc/ros2/install/flexiv_test_nodes/" + - "/home/cc/ros2/install/arm_sim_gazebo/lib/" + - "/home/cc/ros2/install/arm_sim_gazebo/" + - "/home/cc/ros2/install/arm_driver_flexiv/lib/" + - "/home/cc/ros2/install/arm_driver_flexiv/" + - "/home/cc/ros2/install/arm_control/lib/" + - "/home/cc/ros2/install/arm_control/" + - "/home/cc/ros2/install/arm_application/lib/" + - "/home/cc/ros2/install/arm_application/" + - "/home/cc/ros2/install/arm_kinematics/lib/" + - "/home/cc/ros2/install/arm_kinematics/" + - "/home/cc/ros2/install/arm_interfaces/lib/" + - "/home/cc/ros2/install/arm_interfaces/" + - "/home/cc/.local/bin/" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin/" + - "/home/cc/anaconda3/envs/ros_flexiv/bin/" + - "/home/cc/anaconda3/condabin/" + - "/usr/local/sbin/" + - "/usr/local/bin/" + - "/usr/sbin/" + - "/usr/bin/" + - "/sbin/" + - "/bin/" + - "/usr/games/" + - "/usr/local/games/" + - "/snap/bin/" + - "/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/" + - "/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/" + - "/usr/local/lib/" + - "/usr/local/" + - "/usr/lib64/" + - "/usr/lib/" + - "/usr/" + - "/lib64/" + - "/lib/" + - "/opt/" + - "/usr/lib/X11/" + searched_directories: + - "/home/cc/flexiv_install/lib/" + - "/home/cc/flexiv_install/" + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + - "/home/cc/anaconda3/envs/ros_flexiv/" + - "/home/cc/ros2/install/gpio_controller/lib/" + - "/home/cc/ros2/install/gpio_controller/" + - "/home/cc/ros2/install/flexiv_bringup/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/lib/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/" + - "/home/cc/ros2/install/flexiv_gripper/lib/" + - "/home/cc/ros2/install/flexiv_gripper/" + - "/home/cc/ros2/install/flexiv_msgs/lib/" + - "/home/cc/ros2/install/flexiv_msgs/" + - "/home/cc/ros2/install/flexiv_moveit_config/" + - "/home/cc/ros2/install/flexiv_hardware/lib/" + - "/home/cc/ros2/install/flexiv_hardware/" + - "/home/cc/ros2/install/arm_bringup/" + - "/home/cc/ros2/install/arm_moveit_config/" + - "/home/cc/ros2/install/arm_description/" + - "/home/cc/ros2/install/flexiv_description/" + - "/home/cc/ros2/install/arm_msgs/lib/" + - "/home/cc/ros2/install/arm_msgs/" + - "/home/cc/ros2/install/flexiv_test_nodes/lib/" + - "/home/cc/ros2/install/flexiv_test_nodes/" + - "/home/cc/ros2/install/arm_sim_gazebo/lib/" + - "/home/cc/ros2/install/arm_sim_gazebo/" + - "/home/cc/ros2/install/arm_driver_flexiv/lib/" + - "/home/cc/ros2/install/arm_driver_flexiv/" + - "/home/cc/ros2/install/arm_control/lib/" + - "/home/cc/ros2/install/arm_control/" + - "/home/cc/ros2/install/arm_application/lib/" + - "/home/cc/ros2/install/arm_application/" + - "/home/cc/ros2/install/arm_kinematics/lib/" + - "/home/cc/ros2/install/arm_kinematics/" + - "/home/cc/ros2/install/arm_interfaces/lib/" + - "/home/cc/ros2/install/arm_interfaces/" + - "/home/cc/.local/bin/" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin/" + - "/home/cc/anaconda3/envs/ros_flexiv/bin/" + - "/home/cc/anaconda3/condabin/" + - "/usr/local/sbin/" + - "/usr/local/bin/" + - "/usr/sbin/" + - "/usr/bin/" + - "/sbin/" + - "/bin/" + - "/usr/games/" + - "/usr/local/games/" + - "/snap/bin/" + found: "/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/libdl.a" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/ament_cmake_export_libraries-extras.cmake:110 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/rcutilsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/rosidl_runtime_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rt" + candidate_directories: + - "/home/cc/flexiv_install/lib/" + - "/home/cc/flexiv_install/" + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + - "/home/cc/anaconda3/envs/ros_flexiv/" + - "/home/cc/ros2/install/gpio_controller/lib/" + - "/home/cc/ros2/install/gpio_controller/" + - "/home/cc/ros2/install/flexiv_bringup/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/lib/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/" + - "/home/cc/ros2/install/flexiv_gripper/lib/" + - "/home/cc/ros2/install/flexiv_gripper/" + - "/home/cc/ros2/install/flexiv_msgs/lib/" + - "/home/cc/ros2/install/flexiv_msgs/" + - "/home/cc/ros2/install/flexiv_moveit_config/" + - "/home/cc/ros2/install/flexiv_hardware/lib/" + - "/home/cc/ros2/install/flexiv_hardware/" + - "/home/cc/ros2/install/arm_bringup/" + - "/home/cc/ros2/install/arm_moveit_config/" + - "/home/cc/ros2/install/arm_description/" + - "/home/cc/ros2/install/flexiv_description/" + - "/home/cc/ros2/install/arm_msgs/lib/" + - "/home/cc/ros2/install/arm_msgs/" + - "/home/cc/ros2/install/flexiv_test_nodes/lib/" + - "/home/cc/ros2/install/flexiv_test_nodes/" + - "/home/cc/ros2/install/arm_sim_gazebo/lib/" + - "/home/cc/ros2/install/arm_sim_gazebo/" + - "/home/cc/ros2/install/arm_driver_flexiv/lib/" + - "/home/cc/ros2/install/arm_driver_flexiv/" + - "/home/cc/ros2/install/arm_control/lib/" + - "/home/cc/ros2/install/arm_control/" + - "/home/cc/ros2/install/arm_application/lib/" + - "/home/cc/ros2/install/arm_application/" + - "/home/cc/ros2/install/arm_kinematics/lib/" + - "/home/cc/ros2/install/arm_kinematics/" + - "/home/cc/ros2/install/arm_interfaces/lib/" + - "/home/cc/ros2/install/arm_interfaces/" + - "/home/cc/.local/bin/" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin/" + - "/home/cc/anaconda3/envs/ros_flexiv/bin/" + - "/home/cc/anaconda3/condabin/" + - "/usr/local/sbin/" + - "/usr/local/bin/" + - "/usr/sbin/" + - "/usr/bin/" + - "/sbin/" + - "/bin/" + - "/usr/games/" + - "/usr/local/games/" + - "/snap/bin/" + - "/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/" + - "/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/" + - "/usr/local/lib/" + - "/usr/local/" + - "/usr/lib64/" + - "/usr/lib/" + - "/usr/" + - "/lib64/" + - "/lib/" + - "/opt/" + - "/usr/lib/X11/" + searched_directories: + - "/home/cc/flexiv_install/lib/" + - "/home/cc/flexiv_install/" + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + - "/home/cc/anaconda3/envs/ros_flexiv/" + - "/home/cc/ros2/install/gpio_controller/lib/" + - "/home/cc/ros2/install/gpio_controller/" + - "/home/cc/ros2/install/flexiv_bringup/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/lib/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/" + - "/home/cc/ros2/install/flexiv_gripper/lib/" + - "/home/cc/ros2/install/flexiv_gripper/" + - "/home/cc/ros2/install/flexiv_msgs/lib/" + - "/home/cc/ros2/install/flexiv_msgs/" + - "/home/cc/ros2/install/flexiv_moveit_config/" + - "/home/cc/ros2/install/flexiv_hardware/lib/" + - "/home/cc/ros2/install/flexiv_hardware/" + - "/home/cc/ros2/install/arm_bringup/" + - "/home/cc/ros2/install/arm_moveit_config/" + - "/home/cc/ros2/install/arm_description/" + - "/home/cc/ros2/install/flexiv_description/" + - "/home/cc/ros2/install/arm_msgs/lib/" + - "/home/cc/ros2/install/arm_msgs/" + - "/home/cc/ros2/install/flexiv_test_nodes/lib/" + - "/home/cc/ros2/install/flexiv_test_nodes/" + - "/home/cc/ros2/install/arm_sim_gazebo/lib/" + - "/home/cc/ros2/install/arm_sim_gazebo/" + - "/home/cc/ros2/install/arm_driver_flexiv/lib/" + - "/home/cc/ros2/install/arm_driver_flexiv/" + - "/home/cc/ros2/install/arm_control/lib/" + - "/home/cc/ros2/install/arm_control/" + - "/home/cc/ros2/install/arm_application/lib/" + - "/home/cc/ros2/install/arm_application/" + - "/home/cc/ros2/install/arm_kinematics/lib/" + - "/home/cc/ros2/install/arm_kinematics/" + - "/home/cc/ros2/install/arm_interfaces/lib/" + - "/home/cc/ros2/install/arm_interfaces/" + - "/home/cc/.local/bin/" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin/" + - "/home/cc/anaconda3/envs/ros_flexiv/bin/" + - "/home/cc/anaconda3/condabin/" + - "/usr/local/sbin/" + - "/usr/local/bin/" + - "/usr/sbin/" + - "/usr/bin/" + - "/sbin/" + - "/bin/" + - "/usr/games/" + - "/usr/local/games/" + - "/snap/bin/" + found: "/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/librt.a" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/rosidl_runtime_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosidl_runtime_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_runtime_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_fastrtps_c/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_fastrtps_c/cmake/rosidl_typesupport_fastrtps_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw/cmake/rmwConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_fastrtps_cpp/cmake/rosidl_typesupport_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_fastrtps_cpp/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_fastrtps_cpp/cmake/rosidl_typesupport_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_introspection_c/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_introspection_c/cmake/rosidl_typesupport_introspection_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_c/cmake/rosidl_typesupport_c-extras.cmake:13 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_c/cmake/rosidl_typesupport_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosidl_typesupport_introspection_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_introspection_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcpputils/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcpputils/cmake/rcpputilsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_c/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_c/cmake/rosidl_typesupport_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcpputils" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcpputils.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_c/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_c/cmake/rosidl_typesupport_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_introspection_cpp/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_introspection_cpp/cmake/rosidl_typesupport_introspection_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_cpp/cmake/rosidl_typesupport_cpp-extras.cmake:13 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_cpp/cmake/rosidl_typesupport_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosidl_typesupport_introspection_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_introspection_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_cpp/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_cpp/cmake/rosidl_typesupport_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "builtin_interfaces__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "builtin_interfaces__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/rcl_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_interfaces__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/rcl_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_interfaces__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/rcl_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_interfaces__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/rcl_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_interfaces__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/rcl_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_interfaces__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_yaml_param_parser/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_yaml_param_parser/cmake/rcl_yaml_param_parserConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_yaml_param_parser" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_yaml_param_parser.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rmw_dds_commonConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_dds_common__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_dds_common__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rmw_dds_commonConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_dds_common__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_dds_common__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rmw_dds_commonConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_dds_common__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_dds_common__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rmw_dds_commonConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_dds_common" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_dds_common.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rmw_dds_commonConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_dds_common__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_dds_common__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rmw_dds_commonConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_dds_common__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_dds_common__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_shared_cpp/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_shared_cpp/cmake/rmw_fastrtps_shared_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_fastrtps_shared_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_fastrtps_shared_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/tracetools/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/tracetools/cmake/tracetoolsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_shared_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_shared_cpp/cmake/rmw_fastrtps_shared_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "tracetools" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libtracetools.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_logging_spdlog/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_logging_spdlog/cmake/rcl_logging_spdlogConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_logging_spdlog" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_logging_spdlog.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/statistics_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "statistics_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/statistics_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "statistics_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/statistics_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "statistics_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/statistics_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "statistics_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/statistics_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "statistics_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/rosgraph_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosgraph_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/rosgraph_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosgraph_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/rosgraph_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosgraph_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/rosgraph_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosgraph_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/rosgraph_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosgraph_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/rclcpp_lifecycleConfig.cmake:41 (include)" + - "CMakeLists.txt:17 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rclcpp_lifecycle" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librclcpp_lifecycle.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/rcl_lifecycleConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/rclcpp_lifecycleConfig.cmake:41 (include)" + - "CMakeLists.txt:17 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_lifecycle" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_lifecycle.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/lifecycle_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/rcl_lifecycleConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/rclcpp_lifecycleConfig.cmake:41 (include)" + - "CMakeLists.txt:17 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "lifecycle_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/lifecycle_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/rcl_lifecycleConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/rclcpp_lifecycleConfig.cmake:41 (include)" + - "CMakeLists.txt:17 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "lifecycle_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/lifecycle_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/rcl_lifecycleConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/rclcpp_lifecycleConfig.cmake:41 (include)" + - "CMakeLists.txt:17 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "lifecycle_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/lifecycle_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/rcl_lifecycleConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/rclcpp_lifecycleConfig.cmake:41 (include)" + - "CMakeLists.txt:17 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "lifecycle_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/lifecycle_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/rcl_lifecycleConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/rclcpp_lifecycleConfig.cmake:41 (include)" + - "CMakeLists.txt:17 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "lifecycle_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "fake_components" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libfake_components.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "mock_components" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libmock_components.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "hardware_interface" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libhardware_interface.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/unique_identifier_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "unique_identifier_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/unique_identifier_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "unique_identifier_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/unique_identifier_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "unique_identifier_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/unique_identifier_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "unique_identifier_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/unique_identifier_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "unique_identifier_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "action_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "action_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "action_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "action_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "action_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/std_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "std_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/std_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "std_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/std_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "std_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/std_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "std_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/std_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "std_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "geometry_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "geometry_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "geometry_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "geometry_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "geometry_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/sensor_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "sensor_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/sensor_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "sensor_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/sensor_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "sensor_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/sensor_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "sensor_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/sensor_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "sensor_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/trajectory_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "trajectory_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/trajectory_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "trajectory_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/trajectory_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "trajectory_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/trajectory_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "trajectory_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/trajectory_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "trajectory_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "control_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "control_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "control_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "control_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "control_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" +... + +--- +events: + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rclcpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librclcpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "libstatistics_collector" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/liblibstatistics_collector.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "builtin_interfaces__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "builtin_interfaces__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "builtin_interfaces__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/rcutilsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/rosidl_runtime_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcutils" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcutils.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/rcutilsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/rosidl_runtime_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcutils" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcutils.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/ament_cmake_export_libraries-extras.cmake:110 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/rcutilsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/rosidl_runtime_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "dl" + candidate_directories: + - "/home/cc/flexiv_install/lib/" + - "/home/cc/flexiv_install/" + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + - "/home/cc/anaconda3/envs/ros_flexiv/" + - "/home/cc/ros2/install/gpio_controller/lib/" + - "/home/cc/ros2/install/gpio_controller/" + - "/home/cc/ros2/install/flexiv_bringup/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/lib/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/" + - "/home/cc/ros2/install/flexiv_gripper/lib/" + - "/home/cc/ros2/install/flexiv_gripper/" + - "/home/cc/ros2/install/flexiv_msgs/lib/" + - "/home/cc/ros2/install/flexiv_msgs/" + - "/home/cc/ros2/install/flexiv_moveit_config/" + - "/home/cc/ros2/install/flexiv_hardware/lib/" + - "/home/cc/ros2/install/flexiv_hardware/" + - "/home/cc/ros2/install/arm_bringup/" + - "/home/cc/ros2/install/arm_moveit_config/" + - "/home/cc/ros2/install/arm_description/" + - "/home/cc/ros2/install/flexiv_description/" + - "/home/cc/ros2/install/arm_msgs/lib/" + - "/home/cc/ros2/install/arm_msgs/" + - "/home/cc/ros2/install/flexiv_test_nodes/lib/" + - "/home/cc/ros2/install/flexiv_test_nodes/" + - "/home/cc/ros2/install/arm_sim_gazebo/lib/" + - "/home/cc/ros2/install/arm_sim_gazebo/" + - "/home/cc/ros2/install/arm_driver_flexiv/lib/" + - "/home/cc/ros2/install/arm_driver_flexiv/" + - "/home/cc/ros2/install/arm_control/lib/" + - "/home/cc/ros2/install/arm_control/" + - "/home/cc/ros2/install/arm_application/lib/" + - "/home/cc/ros2/install/arm_application/" + - "/home/cc/ros2/install/arm_kinematics/lib/" + - "/home/cc/ros2/install/arm_kinematics/" + - "/home/cc/ros2/install/arm_interfaces/lib/" + - "/home/cc/ros2/install/arm_interfaces/" + - "/home/cc/.local/bin/" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin/" + - "/home/cc/anaconda3/envs/ros_flexiv/bin/" + - "/home/cc/anaconda3/condabin/" + - "/usr/local/sbin/" + - "/usr/local/bin/" + - "/usr/sbin/" + - "/usr/bin/" + - "/sbin/" + - "/bin/" + - "/usr/games/" + - "/usr/local/games/" + - "/snap/bin/" + - "/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/" + - "/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/" + - "/usr/local/lib/" + - "/usr/local/" + - "/usr/lib64/" + - "/usr/lib/" + - "/usr/" + - "/lib64/" + - "/lib/" + - "/opt/" + - "/usr/lib/X11/" + searched_directories: + - "/home/cc/flexiv_install/lib/" + - "/home/cc/flexiv_install/" + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + - "/home/cc/anaconda3/envs/ros_flexiv/" + - "/home/cc/ros2/install/gpio_controller/lib/" + - "/home/cc/ros2/install/gpio_controller/" + - "/home/cc/ros2/install/flexiv_bringup/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/lib/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/" + - "/home/cc/ros2/install/flexiv_gripper/lib/" + - "/home/cc/ros2/install/flexiv_gripper/" + - "/home/cc/ros2/install/flexiv_msgs/lib/" + - "/home/cc/ros2/install/flexiv_msgs/" + - "/home/cc/ros2/install/flexiv_moveit_config/" + - "/home/cc/ros2/install/flexiv_hardware/lib/" + - "/home/cc/ros2/install/flexiv_hardware/" + - "/home/cc/ros2/install/arm_bringup/" + - "/home/cc/ros2/install/arm_moveit_config/" + - "/home/cc/ros2/install/arm_description/" + - "/home/cc/ros2/install/flexiv_description/" + - "/home/cc/ros2/install/arm_msgs/lib/" + - "/home/cc/ros2/install/arm_msgs/" + - "/home/cc/ros2/install/flexiv_test_nodes/lib/" + - "/home/cc/ros2/install/flexiv_test_nodes/" + - "/home/cc/ros2/install/arm_sim_gazebo/lib/" + - "/home/cc/ros2/install/arm_sim_gazebo/" + - "/home/cc/ros2/install/arm_driver_flexiv/lib/" + - "/home/cc/ros2/install/arm_driver_flexiv/" + - "/home/cc/ros2/install/arm_control/lib/" + - "/home/cc/ros2/install/arm_control/" + - "/home/cc/ros2/install/arm_application/lib/" + - "/home/cc/ros2/install/arm_application/" + - "/home/cc/ros2/install/arm_kinematics/lib/" + - "/home/cc/ros2/install/arm_kinematics/" + - "/home/cc/ros2/install/arm_interfaces/lib/" + - "/home/cc/ros2/install/arm_interfaces/" + - "/home/cc/.local/bin/" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin/" + - "/home/cc/anaconda3/envs/ros_flexiv/bin/" + - "/home/cc/anaconda3/condabin/" + - "/usr/local/sbin/" + - "/usr/local/bin/" + - "/usr/sbin/" + - "/usr/bin/" + - "/sbin/" + - "/bin/" + - "/usr/games/" + - "/usr/local/games/" + - "/snap/bin/" + found: "/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/libdl.a" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/ament_cmake_export_libraries-extras.cmake:110 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/rcutilsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/rosidl_runtime_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rt" + candidate_directories: + - "/home/cc/flexiv_install/lib/" + - "/home/cc/flexiv_install/" + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + - "/home/cc/anaconda3/envs/ros_flexiv/" + - "/home/cc/ros2/install/gpio_controller/lib/" + - "/home/cc/ros2/install/gpio_controller/" + - "/home/cc/ros2/install/flexiv_bringup/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/lib/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/" + - "/home/cc/ros2/install/flexiv_gripper/lib/" + - "/home/cc/ros2/install/flexiv_gripper/" + - "/home/cc/ros2/install/flexiv_msgs/lib/" + - "/home/cc/ros2/install/flexiv_msgs/" + - "/home/cc/ros2/install/flexiv_moveit_config/" + - "/home/cc/ros2/install/flexiv_hardware/lib/" + - "/home/cc/ros2/install/flexiv_hardware/" + - "/home/cc/ros2/install/arm_bringup/" + - "/home/cc/ros2/install/arm_moveit_config/" + - "/home/cc/ros2/install/arm_description/" + - "/home/cc/ros2/install/flexiv_description/" + - "/home/cc/ros2/install/arm_msgs/lib/" + - "/home/cc/ros2/install/arm_msgs/" + - "/home/cc/ros2/install/flexiv_test_nodes/lib/" + - "/home/cc/ros2/install/flexiv_test_nodes/" + - "/home/cc/ros2/install/arm_sim_gazebo/lib/" + - "/home/cc/ros2/install/arm_sim_gazebo/" + - "/home/cc/ros2/install/arm_driver_flexiv/lib/" + - "/home/cc/ros2/install/arm_driver_flexiv/" + - "/home/cc/ros2/install/arm_control/lib/" + - "/home/cc/ros2/install/arm_control/" + - "/home/cc/ros2/install/arm_application/lib/" + - "/home/cc/ros2/install/arm_application/" + - "/home/cc/ros2/install/arm_kinematics/lib/" + - "/home/cc/ros2/install/arm_kinematics/" + - "/home/cc/ros2/install/arm_interfaces/lib/" + - "/home/cc/ros2/install/arm_interfaces/" + - "/home/cc/.local/bin/" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin/" + - "/home/cc/anaconda3/envs/ros_flexiv/bin/" + - "/home/cc/anaconda3/condabin/" + - "/usr/local/sbin/" + - "/usr/local/bin/" + - "/usr/sbin/" + - "/usr/bin/" + - "/sbin/" + - "/bin/" + - "/usr/games/" + - "/usr/local/games/" + - "/snap/bin/" + - "/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/" + - "/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/" + - "/usr/local/lib/" + - "/usr/local/" + - "/usr/lib64/" + - "/usr/lib/" + - "/usr/" + - "/lib64/" + - "/lib/" + - "/opt/" + - "/usr/lib/X11/" + searched_directories: + - "/home/cc/flexiv_install/lib/" + - "/home/cc/flexiv_install/" + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + - "/home/cc/anaconda3/envs/ros_flexiv/" + - "/home/cc/ros2/install/gpio_controller/lib/" + - "/home/cc/ros2/install/gpio_controller/" + - "/home/cc/ros2/install/flexiv_bringup/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/lib/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/" + - "/home/cc/ros2/install/flexiv_gripper/lib/" + - "/home/cc/ros2/install/flexiv_gripper/" + - "/home/cc/ros2/install/flexiv_msgs/lib/" + - "/home/cc/ros2/install/flexiv_msgs/" + - "/home/cc/ros2/install/flexiv_moveit_config/" + - "/home/cc/ros2/install/flexiv_hardware/lib/" + - "/home/cc/ros2/install/flexiv_hardware/" + - "/home/cc/ros2/install/arm_bringup/" + - "/home/cc/ros2/install/arm_moveit_config/" + - "/home/cc/ros2/install/arm_description/" + - "/home/cc/ros2/install/flexiv_description/" + - "/home/cc/ros2/install/arm_msgs/lib/" + - "/home/cc/ros2/install/arm_msgs/" + - "/home/cc/ros2/install/flexiv_test_nodes/lib/" + - "/home/cc/ros2/install/flexiv_test_nodes/" + - "/home/cc/ros2/install/arm_sim_gazebo/lib/" + - "/home/cc/ros2/install/arm_sim_gazebo/" + - "/home/cc/ros2/install/arm_driver_flexiv/lib/" + - "/home/cc/ros2/install/arm_driver_flexiv/" + - "/home/cc/ros2/install/arm_control/lib/" + - "/home/cc/ros2/install/arm_control/" + - "/home/cc/ros2/install/arm_application/lib/" + - "/home/cc/ros2/install/arm_application/" + - "/home/cc/ros2/install/arm_kinematics/lib/" + - "/home/cc/ros2/install/arm_kinematics/" + - "/home/cc/ros2/install/arm_interfaces/lib/" + - "/home/cc/ros2/install/arm_interfaces/" + - "/home/cc/.local/bin/" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin/" + - "/home/cc/anaconda3/envs/ros_flexiv/bin/" + - "/home/cc/anaconda3/condabin/" + - "/usr/local/sbin/" + - "/usr/local/bin/" + - "/usr/sbin/" + - "/usr/bin/" + - "/sbin/" + - "/bin/" + - "/usr/games/" + - "/usr/local/games/" + - "/snap/bin/" + found: "/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/librt.a" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/rosidl_runtime_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosidl_runtime_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_runtime_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_fastrtps_c/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_fastrtps_c/cmake/rosidl_typesupport_fastrtps_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw/cmake/rmwConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_fastrtps_cpp/cmake/rosidl_typesupport_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_fastrtps_cpp/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_fastrtps_cpp/cmake/rosidl_typesupport_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_introspection_c/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_introspection_c/cmake/rosidl_typesupport_introspection_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_c/cmake/rosidl_typesupport_c-extras.cmake:13 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_c/cmake/rosidl_typesupport_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosidl_typesupport_introspection_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_introspection_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcpputils/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcpputils/cmake/rcpputilsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_c/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_c/cmake/rosidl_typesupport_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcpputils" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcpputils.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_c/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_c/cmake/rosidl_typesupport_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_introspection_cpp/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_introspection_cpp/cmake/rosidl_typesupport_introspection_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_cpp/cmake/rosidl_typesupport_cpp-extras.cmake:13 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_cpp/cmake/rosidl_typesupport_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosidl_typesupport_introspection_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_introspection_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_cpp/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_cpp/cmake/rosidl_typesupport_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "builtin_interfaces__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "builtin_interfaces__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/rcl_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_interfaces__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/rcl_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_interfaces__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/rcl_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_interfaces__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/rcl_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_interfaces__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/rcl_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_interfaces__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_yaml_param_parser/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_yaml_param_parser/cmake/rcl_yaml_param_parserConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_yaml_param_parser" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_yaml_param_parser.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rmw_dds_commonConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_dds_common__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_dds_common__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rmw_dds_commonConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_dds_common__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_dds_common__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rmw_dds_commonConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_dds_common__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_dds_common__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rmw_dds_commonConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_dds_common" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_dds_common.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rmw_dds_commonConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_dds_common__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_dds_common__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rmw_dds_commonConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_dds_common__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_dds_common__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_shared_cpp/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_shared_cpp/cmake/rmw_fastrtps_shared_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_fastrtps_shared_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_fastrtps_shared_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/tracetools/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/tracetools/cmake/tracetoolsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_shared_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_shared_cpp/cmake/rmw_fastrtps_shared_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "tracetools" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libtracetools.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_logging_spdlog/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_logging_spdlog/cmake/rcl_logging_spdlogConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_logging_spdlog" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_logging_spdlog.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/statistics_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "statistics_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/statistics_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "statistics_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/statistics_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "statistics_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/statistics_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "statistics_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/statistics_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "statistics_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/rosgraph_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosgraph_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/rosgraph_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosgraph_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/rosgraph_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosgraph_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/rosgraph_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosgraph_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/rosgraph_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosgraph_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/rclcpp_lifecycleConfig.cmake:41 (include)" + - "CMakeLists.txt:17 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rclcpp_lifecycle" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librclcpp_lifecycle.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/rcl_lifecycleConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/rclcpp_lifecycleConfig.cmake:41 (include)" + - "CMakeLists.txt:17 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_lifecycle" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_lifecycle.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/lifecycle_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/rcl_lifecycleConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/rclcpp_lifecycleConfig.cmake:41 (include)" + - "CMakeLists.txt:17 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "lifecycle_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/lifecycle_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/rcl_lifecycleConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/rclcpp_lifecycleConfig.cmake:41 (include)" + - "CMakeLists.txt:17 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "lifecycle_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/lifecycle_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/rcl_lifecycleConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/rclcpp_lifecycleConfig.cmake:41 (include)" + - "CMakeLists.txt:17 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "lifecycle_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/lifecycle_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/rcl_lifecycleConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/rclcpp_lifecycleConfig.cmake:41 (include)" + - "CMakeLists.txt:17 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "lifecycle_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/lifecycle_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/rcl_lifecycleConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/rclcpp_lifecycleConfig.cmake:41 (include)" + - "CMakeLists.txt:17 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "lifecycle_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "fake_components" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libfake_components.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "mock_components" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libmock_components.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "hardware_interface" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libhardware_interface.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/unique_identifier_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "unique_identifier_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/unique_identifier_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "unique_identifier_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/unique_identifier_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "unique_identifier_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/unique_identifier_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "unique_identifier_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/unique_identifier_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "unique_identifier_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "action_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "action_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "action_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "action_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "action_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/std_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "std_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/std_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "std_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/std_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "std_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/std_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "std_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/std_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "std_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "geometry_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "geometry_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "geometry_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "geometry_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "geometry_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/sensor_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "sensor_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/sensor_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "sensor_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/sensor_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "sensor_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/sensor_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "sensor_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/sensor_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "sensor_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/trajectory_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "trajectory_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/trajectory_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "trajectory_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/trajectory_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "trajectory_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/trajectory_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "trajectory_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/trajectory_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "trajectory_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "control_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "control_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "control_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "control_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "control_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" +... + +--- +events: + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rclcpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librclcpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "libstatistics_collector" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/liblibstatistics_collector.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "builtin_interfaces__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "builtin_interfaces__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "builtin_interfaces__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/rcutilsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/rosidl_runtime_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcutils" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcutils.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/rcutilsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/rosidl_runtime_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcutils" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcutils.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/ament_cmake_export_libraries-extras.cmake:110 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/rcutilsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/rosidl_runtime_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "dl" + candidate_directories: + - "/home/cc/flexiv_install/lib/" + - "/home/cc/flexiv_install/" + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + - "/home/cc/anaconda3/envs/ros_flexiv/" + - "/home/cc/ros2/install/gpio_controller/lib/" + - "/home/cc/ros2/install/gpio_controller/" + - "/home/cc/ros2/install/flexiv_bringup/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/lib/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/" + - "/home/cc/ros2/install/flexiv_gripper/lib/" + - "/home/cc/ros2/install/flexiv_gripper/" + - "/home/cc/ros2/install/flexiv_msgs/lib/" + - "/home/cc/ros2/install/flexiv_msgs/" + - "/home/cc/ros2/install/flexiv_moveit_config/" + - "/home/cc/ros2/install/flexiv_hardware/lib/" + - "/home/cc/ros2/install/flexiv_hardware/" + - "/home/cc/ros2/install/arm_bringup/" + - "/home/cc/ros2/install/arm_moveit_config/" + - "/home/cc/ros2/install/arm_description/" + - "/home/cc/ros2/install/flexiv_description/" + - "/home/cc/ros2/install/arm_msgs/lib/" + - "/home/cc/ros2/install/arm_msgs/" + - "/home/cc/ros2/install/flexiv_test_nodes/lib/" + - "/home/cc/ros2/install/flexiv_test_nodes/" + - "/home/cc/ros2/install/arm_sim_gazebo/lib/" + - "/home/cc/ros2/install/arm_sim_gazebo/" + - "/home/cc/ros2/install/arm_driver_flexiv/lib/" + - "/home/cc/ros2/install/arm_driver_flexiv/" + - "/home/cc/ros2/install/arm_control/lib/" + - "/home/cc/ros2/install/arm_control/" + - "/home/cc/ros2/install/arm_application/lib/" + - "/home/cc/ros2/install/arm_application/" + - "/home/cc/ros2/install/arm_kinematics/lib/" + - "/home/cc/ros2/install/arm_kinematics/" + - "/home/cc/ros2/install/arm_interfaces/lib/" + - "/home/cc/ros2/install/arm_interfaces/" + - "/home/cc/.local/bin/" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin/" + - "/home/cc/anaconda3/envs/ros_flexiv/bin/" + - "/home/cc/anaconda3/condabin/" + - "/usr/local/sbin/" + - "/usr/local/bin/" + - "/usr/sbin/" + - "/usr/bin/" + - "/sbin/" + - "/bin/" + - "/usr/games/" + - "/usr/local/games/" + - "/snap/bin/" + - "/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/" + - "/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/" + - "/usr/local/lib/" + - "/usr/local/" + - "/usr/lib64/" + - "/usr/lib/" + - "/usr/" + - "/lib64/" + - "/lib/" + - "/opt/" + - "/usr/lib/X11/" + searched_directories: + - "/home/cc/flexiv_install/lib/" + - "/home/cc/flexiv_install/" + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + - "/home/cc/anaconda3/envs/ros_flexiv/" + - "/home/cc/ros2/install/gpio_controller/lib/" + - "/home/cc/ros2/install/gpio_controller/" + - "/home/cc/ros2/install/flexiv_bringup/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/lib/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/" + - "/home/cc/ros2/install/flexiv_gripper/lib/" + - "/home/cc/ros2/install/flexiv_gripper/" + - "/home/cc/ros2/install/flexiv_msgs/lib/" + - "/home/cc/ros2/install/flexiv_msgs/" + - "/home/cc/ros2/install/flexiv_moveit_config/" + - "/home/cc/ros2/install/flexiv_hardware/lib/" + - "/home/cc/ros2/install/flexiv_hardware/" + - "/home/cc/ros2/install/arm_bringup/" + - "/home/cc/ros2/install/arm_moveit_config/" + - "/home/cc/ros2/install/arm_description/" + - "/home/cc/ros2/install/flexiv_description/" + - "/home/cc/ros2/install/arm_msgs/lib/" + - "/home/cc/ros2/install/arm_msgs/" + - "/home/cc/ros2/install/flexiv_test_nodes/lib/" + - "/home/cc/ros2/install/flexiv_test_nodes/" + - "/home/cc/ros2/install/arm_sim_gazebo/lib/" + - "/home/cc/ros2/install/arm_sim_gazebo/" + - "/home/cc/ros2/install/arm_driver_flexiv/lib/" + - "/home/cc/ros2/install/arm_driver_flexiv/" + - "/home/cc/ros2/install/arm_control/lib/" + - "/home/cc/ros2/install/arm_control/" + - "/home/cc/ros2/install/arm_application/lib/" + - "/home/cc/ros2/install/arm_application/" + - "/home/cc/ros2/install/arm_kinematics/lib/" + - "/home/cc/ros2/install/arm_kinematics/" + - "/home/cc/ros2/install/arm_interfaces/lib/" + - "/home/cc/ros2/install/arm_interfaces/" + - "/home/cc/.local/bin/" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin/" + - "/home/cc/anaconda3/envs/ros_flexiv/bin/" + - "/home/cc/anaconda3/condabin/" + - "/usr/local/sbin/" + - "/usr/local/bin/" + - "/usr/sbin/" + - "/usr/bin/" + - "/sbin/" + - "/bin/" + - "/usr/games/" + - "/usr/local/games/" + - "/snap/bin/" + found: "/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/libdl.a" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/ament_cmake_export_libraries-extras.cmake:110 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/rcutilsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/rosidl_runtime_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rt" + candidate_directories: + - "/home/cc/flexiv_install/lib/" + - "/home/cc/flexiv_install/" + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + - "/home/cc/anaconda3/envs/ros_flexiv/" + - "/home/cc/ros2/install/gpio_controller/lib/" + - "/home/cc/ros2/install/gpio_controller/" + - "/home/cc/ros2/install/flexiv_bringup/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/lib/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/" + - "/home/cc/ros2/install/flexiv_gripper/lib/" + - "/home/cc/ros2/install/flexiv_gripper/" + - "/home/cc/ros2/install/flexiv_msgs/lib/" + - "/home/cc/ros2/install/flexiv_msgs/" + - "/home/cc/ros2/install/flexiv_moveit_config/" + - "/home/cc/ros2/install/flexiv_hardware/lib/" + - "/home/cc/ros2/install/flexiv_hardware/" + - "/home/cc/ros2/install/arm_bringup/" + - "/home/cc/ros2/install/arm_moveit_config/" + - "/home/cc/ros2/install/arm_description/" + - "/home/cc/ros2/install/flexiv_description/" + - "/home/cc/ros2/install/arm_msgs/lib/" + - "/home/cc/ros2/install/arm_msgs/" + - "/home/cc/ros2/install/flexiv_test_nodes/lib/" + - "/home/cc/ros2/install/flexiv_test_nodes/" + - "/home/cc/ros2/install/arm_sim_gazebo/lib/" + - "/home/cc/ros2/install/arm_sim_gazebo/" + - "/home/cc/ros2/install/arm_driver_flexiv/lib/" + - "/home/cc/ros2/install/arm_driver_flexiv/" + - "/home/cc/ros2/install/arm_control/lib/" + - "/home/cc/ros2/install/arm_control/" + - "/home/cc/ros2/install/arm_application/lib/" + - "/home/cc/ros2/install/arm_application/" + - "/home/cc/ros2/install/arm_kinematics/lib/" + - "/home/cc/ros2/install/arm_kinematics/" + - "/home/cc/ros2/install/arm_interfaces/lib/" + - "/home/cc/ros2/install/arm_interfaces/" + - "/home/cc/.local/bin/" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin/" + - "/home/cc/anaconda3/envs/ros_flexiv/bin/" + - "/home/cc/anaconda3/condabin/" + - "/usr/local/sbin/" + - "/usr/local/bin/" + - "/usr/sbin/" + - "/usr/bin/" + - "/sbin/" + - "/bin/" + - "/usr/games/" + - "/usr/local/games/" + - "/snap/bin/" + - "/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/" + - "/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/" + - "/usr/local/lib/" + - "/usr/local/" + - "/usr/lib64/" + - "/usr/lib/" + - "/usr/" + - "/lib64/" + - "/lib/" + - "/opt/" + - "/usr/lib/X11/" + searched_directories: + - "/home/cc/flexiv_install/lib/" + - "/home/cc/flexiv_install/" + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + - "/home/cc/anaconda3/envs/ros_flexiv/" + - "/home/cc/ros2/install/gpio_controller/lib/" + - "/home/cc/ros2/install/gpio_controller/" + - "/home/cc/ros2/install/flexiv_bringup/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/lib/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/" + - "/home/cc/ros2/install/flexiv_gripper/lib/" + - "/home/cc/ros2/install/flexiv_gripper/" + - "/home/cc/ros2/install/flexiv_msgs/lib/" + - "/home/cc/ros2/install/flexiv_msgs/" + - "/home/cc/ros2/install/flexiv_moveit_config/" + - "/home/cc/ros2/install/flexiv_hardware/lib/" + - "/home/cc/ros2/install/flexiv_hardware/" + - "/home/cc/ros2/install/arm_bringup/" + - "/home/cc/ros2/install/arm_moveit_config/" + - "/home/cc/ros2/install/arm_description/" + - "/home/cc/ros2/install/flexiv_description/" + - "/home/cc/ros2/install/arm_msgs/lib/" + - "/home/cc/ros2/install/arm_msgs/" + - "/home/cc/ros2/install/flexiv_test_nodes/lib/" + - "/home/cc/ros2/install/flexiv_test_nodes/" + - "/home/cc/ros2/install/arm_sim_gazebo/lib/" + - "/home/cc/ros2/install/arm_sim_gazebo/" + - "/home/cc/ros2/install/arm_driver_flexiv/lib/" + - "/home/cc/ros2/install/arm_driver_flexiv/" + - "/home/cc/ros2/install/arm_control/lib/" + - "/home/cc/ros2/install/arm_control/" + - "/home/cc/ros2/install/arm_application/lib/" + - "/home/cc/ros2/install/arm_application/" + - "/home/cc/ros2/install/arm_kinematics/lib/" + - "/home/cc/ros2/install/arm_kinematics/" + - "/home/cc/ros2/install/arm_interfaces/lib/" + - "/home/cc/ros2/install/arm_interfaces/" + - "/home/cc/.local/bin/" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin/" + - "/home/cc/anaconda3/envs/ros_flexiv/bin/" + - "/home/cc/anaconda3/condabin/" + - "/usr/local/sbin/" + - "/usr/local/bin/" + - "/usr/sbin/" + - "/usr/bin/" + - "/sbin/" + - "/bin/" + - "/usr/games/" + - "/usr/local/games/" + - "/snap/bin/" + found: "/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/librt.a" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/rosidl_runtime_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosidl_runtime_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_runtime_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_fastrtps_c/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_fastrtps_c/cmake/rosidl_typesupport_fastrtps_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw/cmake/rmwConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_fastrtps_cpp/cmake/rosidl_typesupport_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_fastrtps_cpp/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_fastrtps_cpp/cmake/rosidl_typesupport_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_introspection_c/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_introspection_c/cmake/rosidl_typesupport_introspection_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_c/cmake/rosidl_typesupport_c-extras.cmake:13 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_c/cmake/rosidl_typesupport_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosidl_typesupport_introspection_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_introspection_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcpputils/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcpputils/cmake/rcpputilsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_c/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_c/cmake/rosidl_typesupport_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcpputils" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcpputils.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_c/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_c/cmake/rosidl_typesupport_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_introspection_cpp/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_introspection_cpp/cmake/rosidl_typesupport_introspection_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_cpp/cmake/rosidl_typesupport_cpp-extras.cmake:13 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_cpp/cmake/rosidl_typesupport_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosidl_typesupport_introspection_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_introspection_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_cpp/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_cpp/cmake/rosidl_typesupport_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "builtin_interfaces__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "builtin_interfaces__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/rcl_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_interfaces__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/rcl_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_interfaces__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/rcl_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_interfaces__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/rcl_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_interfaces__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/rcl_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_interfaces__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_yaml_param_parser/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_yaml_param_parser/cmake/rcl_yaml_param_parserConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_yaml_param_parser" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_yaml_param_parser.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rmw_dds_commonConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_dds_common__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_dds_common__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rmw_dds_commonConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_dds_common__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_dds_common__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rmw_dds_commonConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_dds_common__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_dds_common__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rmw_dds_commonConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_dds_common" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_dds_common.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rmw_dds_commonConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_dds_common__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_dds_common__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rmw_dds_commonConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_dds_common__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_dds_common__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_shared_cpp/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_shared_cpp/cmake/rmw_fastrtps_shared_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_fastrtps_shared_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_fastrtps_shared_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/tracetools/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/tracetools/cmake/tracetoolsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_shared_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_shared_cpp/cmake/rmw_fastrtps_shared_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "tracetools" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libtracetools.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_logging_spdlog/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_logging_spdlog/cmake/rcl_logging_spdlogConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_logging_spdlog" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_logging_spdlog.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/statistics_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "statistics_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/statistics_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "statistics_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/statistics_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "statistics_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/statistics_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "statistics_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/statistics_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "statistics_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/rosgraph_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosgraph_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/rosgraph_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosgraph_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/rosgraph_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosgraph_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/rosgraph_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosgraph_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/rosgraph_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosgraph_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/rclcpp_lifecycleConfig.cmake:41 (include)" + - "CMakeLists.txt:17 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rclcpp_lifecycle" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librclcpp_lifecycle.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/rcl_lifecycleConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/rclcpp_lifecycleConfig.cmake:41 (include)" + - "CMakeLists.txt:17 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_lifecycle" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_lifecycle.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/lifecycle_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/rcl_lifecycleConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/rclcpp_lifecycleConfig.cmake:41 (include)" + - "CMakeLists.txt:17 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "lifecycle_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/lifecycle_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/rcl_lifecycleConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/rclcpp_lifecycleConfig.cmake:41 (include)" + - "CMakeLists.txt:17 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "lifecycle_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/lifecycle_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/rcl_lifecycleConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/rclcpp_lifecycleConfig.cmake:41 (include)" + - "CMakeLists.txt:17 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "lifecycle_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/lifecycle_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/rcl_lifecycleConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/rclcpp_lifecycleConfig.cmake:41 (include)" + - "CMakeLists.txt:17 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "lifecycle_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/lifecycle_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/rcl_lifecycleConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/rclcpp_lifecycleConfig.cmake:41 (include)" + - "CMakeLists.txt:17 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "lifecycle_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "fake_components" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libfake_components.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "mock_components" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libmock_components.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "hardware_interface" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libhardware_interface.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/unique_identifier_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "unique_identifier_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/unique_identifier_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "unique_identifier_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/unique_identifier_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "unique_identifier_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/unique_identifier_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "unique_identifier_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/unique_identifier_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "unique_identifier_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "action_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "action_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "action_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "action_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "action_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/std_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "std_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/std_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "std_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/std_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "std_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/std_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "std_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/std_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "std_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "geometry_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "geometry_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "geometry_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "geometry_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "geometry_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/sensor_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "sensor_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/sensor_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "sensor_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/sensor_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "sensor_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/sensor_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "sensor_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/sensor_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "sensor_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/trajectory_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "trajectory_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/trajectory_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "trajectory_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/trajectory_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "trajectory_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/trajectory_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "trajectory_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/trajectory_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "trajectory_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "control_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "control_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "control_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "control_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "control_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" +... + +--- +events: + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rclcpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librclcpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "libstatistics_collector" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/liblibstatistics_collector.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "builtin_interfaces__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "builtin_interfaces__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "builtin_interfaces__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/rcutilsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/rosidl_runtime_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcutils" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcutils.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/rcutilsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/rosidl_runtime_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcutils" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcutils.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/ament_cmake_export_libraries-extras.cmake:110 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/rcutilsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/rosidl_runtime_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "dl" + candidate_directories: + - "/home/cc/flexiv_install/lib/" + - "/home/cc/flexiv_install/" + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + - "/home/cc/anaconda3/envs/ros_flexiv/" + - "/home/cc/ros2/install/gpio_controller/lib/" + - "/home/cc/ros2/install/gpio_controller/" + - "/home/cc/ros2/install/flexiv_bringup/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/lib/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/" + - "/home/cc/ros2/install/flexiv_gripper/lib/" + - "/home/cc/ros2/install/flexiv_gripper/" + - "/home/cc/ros2/install/flexiv_msgs/lib/" + - "/home/cc/ros2/install/flexiv_msgs/" + - "/home/cc/ros2/install/flexiv_moveit_config/" + - "/home/cc/ros2/install/flexiv_hardware/lib/" + - "/home/cc/ros2/install/flexiv_hardware/" + - "/home/cc/ros2/install/arm_bringup/" + - "/home/cc/ros2/install/arm_moveit_config/" + - "/home/cc/ros2/install/arm_description/" + - "/home/cc/ros2/install/flexiv_description/" + - "/home/cc/ros2/install/arm_msgs/lib/" + - "/home/cc/ros2/install/arm_msgs/" + - "/home/cc/ros2/install/flexiv_test_nodes/lib/" + - "/home/cc/ros2/install/flexiv_test_nodes/" + - "/home/cc/ros2/install/arm_sim_gazebo/lib/" + - "/home/cc/ros2/install/arm_sim_gazebo/" + - "/home/cc/ros2/install/arm_driver_flexiv/lib/" + - "/home/cc/ros2/install/arm_driver_flexiv/" + - "/home/cc/ros2/install/arm_control/lib/" + - "/home/cc/ros2/install/arm_control/" + - "/home/cc/ros2/install/arm_application/lib/" + - "/home/cc/ros2/install/arm_application/" + - "/home/cc/ros2/install/arm_kinematics/lib/" + - "/home/cc/ros2/install/arm_kinematics/" + - "/home/cc/ros2/install/arm_interfaces/lib/" + - "/home/cc/ros2/install/arm_interfaces/" + - "/home/cc/.local/bin/" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin/" + - "/home/cc/anaconda3/envs/ros_flexiv/bin/" + - "/home/cc/anaconda3/condabin/" + - "/usr/local/sbin/" + - "/usr/local/bin/" + - "/usr/sbin/" + - "/usr/bin/" + - "/sbin/" + - "/bin/" + - "/usr/games/" + - "/usr/local/games/" + - "/snap/bin/" + - "/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/" + - "/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/" + - "/usr/local/lib/" + - "/usr/local/" + - "/usr/lib64/" + - "/usr/lib/" + - "/usr/" + - "/lib64/" + - "/lib/" + - "/opt/" + - "/usr/lib/X11/" + searched_directories: + - "/home/cc/flexiv_install/lib/" + - "/home/cc/flexiv_install/" + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + - "/home/cc/anaconda3/envs/ros_flexiv/" + - "/home/cc/ros2/install/gpio_controller/lib/" + - "/home/cc/ros2/install/gpio_controller/" + - "/home/cc/ros2/install/flexiv_bringup/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/lib/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/" + - "/home/cc/ros2/install/flexiv_gripper/lib/" + - "/home/cc/ros2/install/flexiv_gripper/" + - "/home/cc/ros2/install/flexiv_msgs/lib/" + - "/home/cc/ros2/install/flexiv_msgs/" + - "/home/cc/ros2/install/flexiv_moveit_config/" + - "/home/cc/ros2/install/flexiv_hardware/lib/" + - "/home/cc/ros2/install/flexiv_hardware/" + - "/home/cc/ros2/install/arm_bringup/" + - "/home/cc/ros2/install/arm_moveit_config/" + - "/home/cc/ros2/install/arm_description/" + - "/home/cc/ros2/install/flexiv_description/" + - "/home/cc/ros2/install/arm_msgs/lib/" + - "/home/cc/ros2/install/arm_msgs/" + - "/home/cc/ros2/install/flexiv_test_nodes/lib/" + - "/home/cc/ros2/install/flexiv_test_nodes/" + - "/home/cc/ros2/install/arm_sim_gazebo/lib/" + - "/home/cc/ros2/install/arm_sim_gazebo/" + - "/home/cc/ros2/install/arm_driver_flexiv/lib/" + - "/home/cc/ros2/install/arm_driver_flexiv/" + - "/home/cc/ros2/install/arm_control/lib/" + - "/home/cc/ros2/install/arm_control/" + - "/home/cc/ros2/install/arm_application/lib/" + - "/home/cc/ros2/install/arm_application/" + - "/home/cc/ros2/install/arm_kinematics/lib/" + - "/home/cc/ros2/install/arm_kinematics/" + - "/home/cc/ros2/install/arm_interfaces/lib/" + - "/home/cc/ros2/install/arm_interfaces/" + - "/home/cc/.local/bin/" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin/" + - "/home/cc/anaconda3/envs/ros_flexiv/bin/" + - "/home/cc/anaconda3/condabin/" + - "/usr/local/sbin/" + - "/usr/local/bin/" + - "/usr/sbin/" + - "/usr/bin/" + - "/sbin/" + - "/bin/" + - "/usr/games/" + - "/usr/local/games/" + - "/snap/bin/" + found: "/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/libdl.a" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/ament_cmake_export_libraries-extras.cmake:110 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcutils/cmake/rcutilsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/rosidl_runtime_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rt" + candidate_directories: + - "/home/cc/flexiv_install/lib/" + - "/home/cc/flexiv_install/" + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + - "/home/cc/anaconda3/envs/ros_flexiv/" + - "/home/cc/ros2/install/gpio_controller/lib/" + - "/home/cc/ros2/install/gpio_controller/" + - "/home/cc/ros2/install/flexiv_bringup/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/lib/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/" + - "/home/cc/ros2/install/flexiv_gripper/lib/" + - "/home/cc/ros2/install/flexiv_gripper/" + - "/home/cc/ros2/install/flexiv_msgs/lib/" + - "/home/cc/ros2/install/flexiv_msgs/" + - "/home/cc/ros2/install/flexiv_moveit_config/" + - "/home/cc/ros2/install/flexiv_hardware/lib/" + - "/home/cc/ros2/install/flexiv_hardware/" + - "/home/cc/ros2/install/arm_bringup/" + - "/home/cc/ros2/install/arm_moveit_config/" + - "/home/cc/ros2/install/arm_description/" + - "/home/cc/ros2/install/flexiv_description/" + - "/home/cc/ros2/install/arm_msgs/lib/" + - "/home/cc/ros2/install/arm_msgs/" + - "/home/cc/ros2/install/flexiv_test_nodes/lib/" + - "/home/cc/ros2/install/flexiv_test_nodes/" + - "/home/cc/ros2/install/arm_sim_gazebo/lib/" + - "/home/cc/ros2/install/arm_sim_gazebo/" + - "/home/cc/ros2/install/arm_driver_flexiv/lib/" + - "/home/cc/ros2/install/arm_driver_flexiv/" + - "/home/cc/ros2/install/arm_control/lib/" + - "/home/cc/ros2/install/arm_control/" + - "/home/cc/ros2/install/arm_application/lib/" + - "/home/cc/ros2/install/arm_application/" + - "/home/cc/ros2/install/arm_kinematics/lib/" + - "/home/cc/ros2/install/arm_kinematics/" + - "/home/cc/ros2/install/arm_interfaces/lib/" + - "/home/cc/ros2/install/arm_interfaces/" + - "/home/cc/.local/bin/" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin/" + - "/home/cc/anaconda3/envs/ros_flexiv/bin/" + - "/home/cc/anaconda3/condabin/" + - "/usr/local/sbin/" + - "/usr/local/bin/" + - "/usr/sbin/" + - "/usr/bin/" + - "/sbin/" + - "/bin/" + - "/usr/games/" + - "/usr/local/games/" + - "/snap/bin/" + - "/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/" + - "/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/" + - "/usr/local/lib/" + - "/usr/local/" + - "/usr/lib64/" + - "/usr/lib/" + - "/usr/" + - "/lib64/" + - "/lib/" + - "/opt/" + - "/usr/lib/X11/" + searched_directories: + - "/home/cc/flexiv_install/lib/" + - "/home/cc/flexiv_install/" + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + - "/home/cc/anaconda3/envs/ros_flexiv/" + - "/home/cc/ros2/install/gpio_controller/lib/" + - "/home/cc/ros2/install/gpio_controller/" + - "/home/cc/ros2/install/flexiv_bringup/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/lib/" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster/" + - "/home/cc/ros2/install/flexiv_gripper/lib/" + - "/home/cc/ros2/install/flexiv_gripper/" + - "/home/cc/ros2/install/flexiv_msgs/lib/" + - "/home/cc/ros2/install/flexiv_msgs/" + - "/home/cc/ros2/install/flexiv_moveit_config/" + - "/home/cc/ros2/install/flexiv_hardware/lib/" + - "/home/cc/ros2/install/flexiv_hardware/" + - "/home/cc/ros2/install/arm_bringup/" + - "/home/cc/ros2/install/arm_moveit_config/" + - "/home/cc/ros2/install/arm_description/" + - "/home/cc/ros2/install/flexiv_description/" + - "/home/cc/ros2/install/arm_msgs/lib/" + - "/home/cc/ros2/install/arm_msgs/" + - "/home/cc/ros2/install/flexiv_test_nodes/lib/" + - "/home/cc/ros2/install/flexiv_test_nodes/" + - "/home/cc/ros2/install/arm_sim_gazebo/lib/" + - "/home/cc/ros2/install/arm_sim_gazebo/" + - "/home/cc/ros2/install/arm_driver_flexiv/lib/" + - "/home/cc/ros2/install/arm_driver_flexiv/" + - "/home/cc/ros2/install/arm_control/lib/" + - "/home/cc/ros2/install/arm_control/" + - "/home/cc/ros2/install/arm_application/lib/" + - "/home/cc/ros2/install/arm_application/" + - "/home/cc/ros2/install/arm_kinematics/lib/" + - "/home/cc/ros2/install/arm_kinematics/" + - "/home/cc/ros2/install/arm_interfaces/lib/" + - "/home/cc/ros2/install/arm_interfaces/" + - "/home/cc/.local/bin/" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin/" + - "/home/cc/anaconda3/envs/ros_flexiv/bin/" + - "/home/cc/anaconda3/condabin/" + - "/usr/local/sbin/" + - "/usr/local/bin/" + - "/usr/sbin/" + - "/usr/bin/" + - "/sbin/" + - "/bin/" + - "/usr/games/" + - "/usr/local/games/" + - "/snap/bin/" + found: "/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/librt.a" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_runtime_c/cmake/rosidl_runtime_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosidl_runtime_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_runtime_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_fastrtps_c/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_fastrtps_c/cmake/rosidl_typesupport_fastrtps_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw/cmake/rmwConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_fastrtps_cpp/cmake/rosidl_typesupport_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_fastrtps_cpp/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_fastrtps_cpp/cmake/rosidl_typesupport_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_introspection_c/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_introspection_c/cmake/rosidl_typesupport_introspection_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_c/cmake/rosidl_typesupport_c-extras.cmake:13 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_c/cmake/rosidl_typesupport_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosidl_typesupport_introspection_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_introspection_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcpputils/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcpputils/cmake/rcpputilsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_c/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_c/cmake/rosidl_typesupport_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcpputils" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcpputils.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_c/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_c/cmake/rosidl_typesupport_cConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_introspection_cpp/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_introspection_cpp/cmake/rosidl_typesupport_introspection_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_cpp/cmake/rosidl_typesupport_cpp-extras.cmake:13 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_cpp/cmake/rosidl_typesupport_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosidl_typesupport_introspection_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_introspection_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_cpp/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosidl_typesupport_cpp/cmake/rosidl_typesupport_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "builtin_interfaces__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/builtin_interfaces/cmake/builtin_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "builtin_interfaces__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/rcl_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_interfaces__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/rcl_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_interfaces__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/rcl_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_interfaces__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/rcl_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_interfaces__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_interfaces/cmake/rcl_interfacesConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_interfaces__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_yaml_param_parser/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_yaml_param_parser/cmake/rcl_yaml_param_parserConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_yaml_param_parser" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_yaml_param_parser.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rmw_dds_commonConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_dds_common__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_dds_common__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rmw_dds_commonConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_dds_common__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_dds_common__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rmw_dds_commonConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_dds_common__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_dds_common__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rmw_dds_commonConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_dds_common" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_dds_common.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rmw_dds_commonConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_dds_common__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_dds_common__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_dds_common/cmake/rmw_dds_commonConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_dds_common__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_dds_common__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_shared_cpp/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_shared_cpp/cmake/rmw_fastrtps_shared_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rmw_fastrtps_shared_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_fastrtps_shared_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/tracetools/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/tracetools/cmake/tracetoolsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_shared_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_shared_cpp/cmake/rmw_fastrtps_shared_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_fastrtps_cpp/cmake/rmw_fastrtps_cppConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation_cmake/cmake/get_default_rmw_implementation.cmake:64 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementation-extras.cmake:19 (get_default_rmw_implementation)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rmw_implementation/cmake/rmw_implementationConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "tracetools" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libtracetools.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_logging_spdlog/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_logging_spdlog/cmake/rcl_logging_spdlogConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl/cmake/rclConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_logging_spdlog" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_logging_spdlog.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/statistics_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "statistics_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/statistics_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "statistics_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/statistics_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "statistics_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/statistics_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "statistics_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/statistics_msgs/cmake/statistics_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/libstatistics_collector/cmake/libstatistics_collectorConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "statistics_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/rosgraph_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosgraph_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/rosgraph_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosgraph_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/rosgraph_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosgraph_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/rosgraph_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosgraph_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rosgraph_msgs/cmake/rosgraph_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp/cmake/rclcppConfig.cmake:41 (include)" + - "CMakeLists.txt:16 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rosgraph_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/rclcpp_lifecycleConfig.cmake:41 (include)" + - "CMakeLists.txt:17 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rclcpp_lifecycle" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librclcpp_lifecycle.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/rcl_lifecycleConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/rclcpp_lifecycleConfig.cmake:41 (include)" + - "CMakeLists.txt:17 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "rcl_lifecycle" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_lifecycle.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/lifecycle_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/rcl_lifecycleConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/rclcpp_lifecycleConfig.cmake:41 (include)" + - "CMakeLists.txt:17 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "lifecycle_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/lifecycle_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/rcl_lifecycleConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/rclcpp_lifecycleConfig.cmake:41 (include)" + - "CMakeLists.txt:17 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "lifecycle_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/lifecycle_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/rcl_lifecycleConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/rclcpp_lifecycleConfig.cmake:41 (include)" + - "CMakeLists.txt:17 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "lifecycle_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/lifecycle_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/rcl_lifecycleConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/rclcpp_lifecycleConfig.cmake:41 (include)" + - "CMakeLists.txt:17 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "lifecycle_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/lifecycle_msgs/cmake/lifecycle_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rcl_lifecycle/cmake/rcl_lifecycleConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/rclcpp_lifecycle/cmake/rclcpp_lifecycleConfig.cmake:41 (include)" + - "CMakeLists.txt:17 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "lifecycle_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "fake_components" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libfake_components.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "mock_components" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libmock_components.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "hardware_interface" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libhardware_interface.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/unique_identifier_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "unique_identifier_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/unique_identifier_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "unique_identifier_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/unique_identifier_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "unique_identifier_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/unique_identifier_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "unique_identifier_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/unique_identifier_msgs/cmake/unique_identifier_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "unique_identifier_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "action_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "action_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "action_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "action_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/action_msgs/cmake/action_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "action_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/std_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "std_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/std_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "std_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/std_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "std_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/std_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "std_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/std_msgs/cmake/std_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "std_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "geometry_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "geometry_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "geometry_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "geometry_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/geometry_msgs/cmake/geometry_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "geometry_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/sensor_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "sensor_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/sensor_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "sensor_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/sensor_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "sensor_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/sensor_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "sensor_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/sensor_msgs/cmake/sensor_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "sensor_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/trajectory_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "trajectory_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/trajectory_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "trajectory_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/trajectory_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "trajectory_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/trajectory_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "trajectory_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/trajectory_msgs/cmake/trajectory_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "trajectory_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "control_msgs__rosidl_generator_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_generator_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "control_msgs__rosidl_typesupport_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_typesupport_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/ament_cmake_export_libraries-extras.cmake:40 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "control_msgs__rosidl_typesupport_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_typesupport_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "control_msgs__rosidl_typesupport_fastrtps_c" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_typesupport_fastrtps_c.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" + - + kind: "find-v1" + backtrace: + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake:18 (find_library)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/control_msgs/cmake/control_msgsConfig.cmake:41 (include)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/ament_cmake_export_dependencies-extras.cmake:21 (find_package)" + - "/home/cc/anaconda3/envs/ros_flexiv/share/hardware_interface/cmake/hardware_interfaceConfig.cmake:41 (include)" + - "CMakeLists.txt:18 (find_package)" + mode: "library" + variable: "_lib" + description: "Path to a library." + settings: + SearchFramework: "NEVER" + SearchAppBundle: "NEVER" + CMAKE_FIND_USE_CMAKE_PATH: true + CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true + CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true + CMAKE_FIND_USE_INSTALL_PREFIX: true + names: + - "control_msgs__rosidl_typesupport_fastrtps_cpp" + candidate_directories: + - "/home/cc/anaconda3/envs/ros_flexiv/lib/" + found: "/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_typesupport_fastrtps_cpp.so" + search_context: + CMAKE_PREFIX_PATH: + - "/home/cc/flexiv_install" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{CMAKE_PREFIX_PATH}: + - "/home/cc/ros2/install/gpio_controller" + - "/home/cc/ros2/install/flexiv_bringup" + - "/home/cc/ros2/install/flexiv_robot_states_broadcaster" + - "/home/cc/ros2/install/flexiv_gripper" + - "/home/cc/ros2/install/flexiv_msgs" + - "/home/cc/ros2/install/flexiv_moveit_config" + - "/home/cc/ros2/install/flexiv_hardware" + - "/home/cc/ros2/install/arm_bringup" + - "/home/cc/ros2/install/arm_moveit_config" + - "/home/cc/ros2/install/arm_description" + - "/home/cc/ros2/install/flexiv_description" + - "/home/cc/ros2/install/arm_msgs" + - "/home/cc/ros2/install/flexiv_test_nodes" + - "/home/cc/ros2/install/arm_sim_gazebo" + - "/home/cc/ros2/install/arm_driver_flexiv" + - "/home/cc/ros2/install/arm_control" + - "/home/cc/ros2/install/arm_application" + - "/home/cc/ros2/install/arm_kinematics" + - "/home/cc/ros2/install/arm_interfaces" + - "/home/cc/anaconda3/envs/ros_flexiv" + ENV{PATH}: + - "/home/cc/.local/bin" + - "/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin" + - "/home/cc/.local/bin" + - "/home/cc/anaconda3/envs/ros_flexiv/bin" + - "/home/cc/anaconda3/condabin" + - "/home/cc/.local/bin" + - "/usr/local/sbin" + - "/usr/local/bin" + - "/usr/sbin" + - "/usr/bin" + - "/sbin" + - "/bin" + - "/usr/games" + - "/usr/local/games" + - "/snap/bin" + - "/snap/bin" + CMAKE_INSTALL_PREFIX: "/home/cc/ros2/install/flexiv_hardware" + CMAKE_SYSTEM_PREFIX_PATH: + - "/home/cc/anaconda3/envs/ros_flexiv/bin/../x86_64-conda-linux-gnu/sysroot/usr" + - "/usr/local" + - "/usr" + - "/" + - "/home/cc/anaconda3/envs/ros_flexiv" + - "/home/cc/ros2/install/flexiv_hardware" + - "/usr/X11R6" + - "/usr/pkg" + - "/opt" + - "/home/cc/anaconda3/envs/ros_flexiv" + CMAKE_SYSTEM_LIBRARY_PATH: + - "/usr/lib/X11" +... diff --git a/build/flexiv_hardware/CMakeFiles/flexiv_hardware.dir/compiler_depend.internal b/build/flexiv_hardware/CMakeFiles/flexiv_hardware.dir/compiler_depend.internal index dfb3034..2768f33 100644 --- a/build/flexiv_hardware/CMakeFiles/flexiv_hardware.dir/compiler_depend.internal +++ b/build/flexiv_hardware/CMakeFiles/flexiv_hardware.dir/compiler_depend.internal @@ -22,283 +22,6 @@ CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o /home/cc/anaconda3/envs/ros_flexiv/include/class_loader/class_loader/visibility_control.hpp /home/cc/anaconda3/envs/ros_flexiv/include/console_bridge/console.h /home/cc/anaconda3/envs/ros_flexiv/include/console_bridge/console_bridge_export.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Cholesky - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Core - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Dense - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Eigen - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Eigenvalues - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Geometry - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Householder - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/IterativeLinearSolvers - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Jacobi - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/LU - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/OrderingMethods - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/QR - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/SVD - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Sparse - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/SparseCholesky - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/SparseCore - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/SparseLU - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/SparseQR - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Version - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Cholesky/InternalHeaderCheck.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Cholesky/LDLT.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Cholesky/LLT.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/ArithmeticSequence.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Array.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/ArrayBase.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/ArrayWrapper.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Assign.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/AssignEvaluator.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/BandMatrix.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Block.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/CommaInitializer.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/ConditionEstimator.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/CoreEvaluators.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/CoreIterators.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/CwiseBinaryOp.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/CwiseNullaryOp.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/CwiseTernaryOp.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/CwiseUnaryOp.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/CwiseUnaryView.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/DenseBase.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/DenseCoeffsBase.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/DenseStorage.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/DeviceWrapper.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Diagonal.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/DiagonalMatrix.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/DiagonalProduct.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Dot.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/EigenBase.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Fill.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/FindCoeff.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Fuzzy.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/GeneralProduct.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/GenericPacketMath.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/GlobalFunctions.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/IO.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/IndexedView.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/InnerProduct.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/InternalHeaderCheck.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Inverse.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Map.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/MapBase.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/MathFunctions.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/MathFunctionsImpl.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Matrix.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/MatrixBase.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/NestByValue.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/NoAlias.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/NumTraits.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/PartialReduxEvaluator.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/PermutationMatrix.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/PlainObjectBase.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Product.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/ProductEvaluators.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Random.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/RandomImpl.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/RealView.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Redux.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Ref.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Replicate.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Reshaped.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/ReturnByValue.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Reverse.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Select.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/SelfAdjointView.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/SelfCwiseBinaryOp.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/SkewSymmetricMatrix3.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Solve.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/SolveTriangular.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/SolverBase.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/StableNorm.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/StlIterators.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Stride.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Swap.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Transpose.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Transpositions.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/TriangularMatrix.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/VectorBlock.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/VectorwiseOp.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Visitor.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/Default/BFloat16.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/Default/ConjHelper.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/Default/Half.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/Default/Settings.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/SSE/Complex.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/SSE/MathFunctions.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/SSE/PacketMath.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/SSE/Reductions.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/SSE/TypeCasting.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/functors/AssignmentFunctors.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/functors/BinaryFunctors.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/functors/NullaryFunctors.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/functors/StlFunctors.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/functors/TernaryFunctors.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/functors/UnaryFunctors.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/GeneralBlockPanelKernel.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/GeneralMatrixVector.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/Parallelizer.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/SelfadjointProduct.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/SelfadjointRank2Update.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/TriangularMatrixVector.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/TriangularSolverMatrix.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/TriangularSolverVector.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/Assert.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/BlasUtil.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/ConfigureVectorization.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/Constants.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/DisableStupidWarnings.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/EmulateArray.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/ForwardDeclarations.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/IndexedViewHelper.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/IntegralConstant.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/MKL_support.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/Macros.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/Memory.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/Meta.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/MoreMeta.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/ReenableStupidWarnings.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/ReshapedHelper.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/Serializer.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/StaticAssert.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/SymbolicIndex.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/XprHelper.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/ComplexEigenSolver.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/ComplexSchur.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/EigenSolver.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/HessenbergDecomposition.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/InternalHeaderCheck.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/RealQZ.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/RealSchur.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/Tridiagonalization.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/AlignedBox.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/AngleAxis.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/EulerAngles.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/Homogeneous.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/Hyperplane.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/InternalHeaderCheck.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/OrthoMethods.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/ParametrizedLine.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/Quaternion.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/Rotation2D.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/RotationBase.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/Scaling.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/Transform.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/Translation.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/Umeyama.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/arch/Geometry_SIMD.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Householder/BlockHouseholder.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Householder/Householder.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Householder/HouseholderSequence.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Householder/InternalHeaderCheck.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Jacobi/InternalHeaderCheck.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Jacobi/Jacobi.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/LU/Determinant.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/LU/FullPivLU.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/LU/InternalHeaderCheck.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/LU/InverseImpl.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/LU/PartialPivLU.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/LU/arch/InverseSize4.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/OrderingMethods/Amd.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/OrderingMethods/Eigen_Colamd.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/OrderingMethods/InternalHeaderCheck.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/OrderingMethods/Ordering.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/QR/ColPivHouseholderQR.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/QR/CompleteOrthogonalDecomposition.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/QR/FullPivHouseholderQR.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/QR/HouseholderQR.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/QR/InternalHeaderCheck.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SVD/BDCSVD.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SVD/InternalHeaderCheck.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SVD/JacobiSVD.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SVD/SVDBase.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SVD/UpperBidiagonalization.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCholesky/InternalHeaderCheck.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/AmbiVector.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/CompressedStorage.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/InternalHeaderCheck.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseAssign.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseBlock.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseColEtree.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseCompressedBase.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseCwiseBinaryOp.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseCwiseUnaryOp.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseDenseProduct.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseDiagonalProduct.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseDot.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseFuzzy.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseMap.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseMatrix.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseMatrixBase.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparsePermutation.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseProduct.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseRedux.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseRef.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseSelfAdjointView.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseSolverBase.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseSparseProductWithPruning.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseTranspose.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseTriangularView.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseUtil.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseVector.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseView.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/TriangularSolver.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/InternalHeaderCheck.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLUImpl.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_Memory.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_Structs.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_Utils.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_column_bmod.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_column_dfs.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_kernel_bmod.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_panel_bmod.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_panel_dfs.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_pivotL.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_pruneL.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_relax_snode.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseQR/InternalHeaderCheck.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseQR/SparseQR.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/misc/Image.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/misc/InternalHeaderCheck.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/misc/Kernel.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/misc/RealSvd2x2.h - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/plugins/ArrayCwiseBinaryOps.inc - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/plugins/ArrayCwiseUnaryOps.inc - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/plugins/BlockMethods.inc - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/plugins/CommonCwiseBinaryOps.inc - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/plugins/CommonCwiseUnaryOps.inc - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/plugins/IndexedViewMethods.inc - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/plugins/MatrixCwiseBinaryOps.inc - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/plugins/MatrixCwiseUnaryOps.inc - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/plugins/ReshapedMethods.inc /home/cc/anaconda3/envs/ros_flexiv/include/hardware_interface/handle.hpp /home/cc/anaconda3/envs/ros_flexiv/include/hardware_interface/hardware_info.hpp /home/cc/anaconda3/envs/ros_flexiv/include/hardware_interface/macros.hpp @@ -787,12 +510,10 @@ CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cctype /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cerrno /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/chrono - /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/climits /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/clocale /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cmath /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/codecvt /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/compare - /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/complex /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/concepts /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/condition_variable /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/csignal @@ -872,7 +593,6 @@ CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/utility /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/variant /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/vector - /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/version /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/atomic_word.h /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/basic_file.h /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/c++allocator.h @@ -889,17 +609,11 @@ CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/messages_members.h /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/os_defines.h /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/time_members.h - /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/emmintrin.h - /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/limits.h - /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/mm_malloc.h - /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/mmintrin.h /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/stdalign.h /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/stdarg.h /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/stdbool.h /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/stddef.h /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/stdint.h - /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/syslimits.h - /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/xmmintrin.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/alloca.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/arpa/inet.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/asm-generic/bitsperlong.h @@ -933,15 +647,12 @@ CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/iscanonical.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/libc-header-start.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/libm-simd-decl-stubs.h - /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/local_lim.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/locale.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/long-double.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/math-vector.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/mathcalls-helper-functions.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/mathcalls-narrow.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/mathcalls.h - /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/posix1_lim.h - /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/posix2_lim.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/posix_opt.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/pthread_stack_min-dynamic.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/pthreadtypes-arch.h @@ -1014,14 +725,12 @@ CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/wint_t.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/typesizes.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/uintn-identity.h - /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/uio_lim.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/unistd_ext.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/waitflags.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/waitstatus.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/wchar.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/wctype-wchar.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/wordsize.h - /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/xopen_lim.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/ctype.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/endian.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/errno.h @@ -1031,10 +740,8 @@ CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/gnu/stubs.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/ifaddrs.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/libintl.h - /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/limits.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/linux/close_range.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/linux/errno.h - /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/linux/limits.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/linux/posix_types.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/linux/stddef.h /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/locale.h @@ -1063,7 +770,6 @@ CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o /home/cc/flexiv_install/include/flexiv/rdk/data.hpp /home/cc/flexiv_install/include/flexiv/rdk/mode.hpp /home/cc/flexiv_install/include/flexiv/rdk/robot.hpp - /home/cc/flexiv_install/include/flexiv/rdk/utility.hpp /home/cc/ros2/src/flexiv_hardware/include/flexiv_hardware/flexiv_hardware_interface.hpp /home/cc/ros2/src/flexiv_hardware/include/flexiv_hardware/visibility_control.h diff --git a/build/flexiv_hardware/CMakeFiles/flexiv_hardware.dir/compiler_depend.make b/build/flexiv_hardware/CMakeFiles/flexiv_hardware.dir/compiler_depend.make index e0abe29..933333b 100644 --- a/build/flexiv_hardware/CMakeFiles/flexiv_hardware.dir/compiler_depend.make +++ b/build/flexiv_hardware/CMakeFiles/flexiv_hardware.dir/compiler_depend.make @@ -21,283 +21,6 @@ CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o: /home/cc/ros /home/cc/anaconda3/envs/ros_flexiv/include/class_loader/class_loader/visibility_control.hpp \ /home/cc/anaconda3/envs/ros_flexiv/include/console_bridge/console.h \ /home/cc/anaconda3/envs/ros_flexiv/include/console_bridge/console_bridge_export.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Cholesky \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Core \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Dense \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Eigen \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Eigenvalues \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Geometry \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Householder \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/IterativeLinearSolvers \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Jacobi \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/LU \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/OrderingMethods \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/QR \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/SVD \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Sparse \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/SparseCholesky \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/SparseCore \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/SparseLU \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/SparseQR \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Version \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Cholesky/InternalHeaderCheck.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Cholesky/LDLT.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Cholesky/LLT.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/ArithmeticSequence.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Array.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/ArrayBase.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/ArrayWrapper.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Assign.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/AssignEvaluator.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/BandMatrix.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Block.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/CommaInitializer.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/ConditionEstimator.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/CoreEvaluators.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/CoreIterators.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/CwiseBinaryOp.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/CwiseNullaryOp.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/CwiseTernaryOp.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/CwiseUnaryOp.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/CwiseUnaryView.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/DenseBase.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/DenseCoeffsBase.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/DenseStorage.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/DeviceWrapper.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Diagonal.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/DiagonalMatrix.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/DiagonalProduct.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Dot.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/EigenBase.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Fill.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/FindCoeff.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Fuzzy.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/GeneralProduct.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/GenericPacketMath.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/GlobalFunctions.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/IO.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/IndexedView.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/InnerProduct.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/InternalHeaderCheck.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Inverse.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Map.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/MapBase.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/MathFunctions.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/MathFunctionsImpl.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Matrix.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/MatrixBase.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/NestByValue.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/NoAlias.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/NumTraits.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/PartialReduxEvaluator.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/PermutationMatrix.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/PlainObjectBase.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Product.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/ProductEvaluators.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Random.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/RandomImpl.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/RealView.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Redux.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Ref.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Replicate.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Reshaped.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/ReturnByValue.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Reverse.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Select.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/SelfAdjointView.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/SelfCwiseBinaryOp.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/SkewSymmetricMatrix3.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Solve.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/SolveTriangular.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/SolverBase.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/StableNorm.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/StlIterators.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Stride.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Swap.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Transpose.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Transpositions.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/TriangularMatrix.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/VectorBlock.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/VectorwiseOp.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Visitor.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/Default/BFloat16.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/Default/ConjHelper.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/Default/Half.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/Default/Settings.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/SSE/Complex.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/SSE/MathFunctions.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/SSE/PacketMath.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/SSE/Reductions.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/SSE/TypeCasting.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/functors/AssignmentFunctors.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/functors/BinaryFunctors.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/functors/NullaryFunctors.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/functors/StlFunctors.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/functors/TernaryFunctors.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/functors/UnaryFunctors.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/GeneralBlockPanelKernel.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/GeneralMatrixVector.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/Parallelizer.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/SelfadjointProduct.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/SelfadjointRank2Update.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/TriangularMatrixVector.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/TriangularSolverMatrix.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/TriangularSolverVector.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/Assert.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/BlasUtil.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/ConfigureVectorization.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/Constants.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/DisableStupidWarnings.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/EmulateArray.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/ForwardDeclarations.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/IndexedViewHelper.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/IntegralConstant.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/MKL_support.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/Macros.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/Memory.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/Meta.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/MoreMeta.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/ReenableStupidWarnings.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/ReshapedHelper.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/Serializer.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/StaticAssert.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/SymbolicIndex.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/XprHelper.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/ComplexEigenSolver.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/ComplexSchur.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/EigenSolver.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/HessenbergDecomposition.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/InternalHeaderCheck.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/RealQZ.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/RealSchur.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/Tridiagonalization.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/AlignedBox.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/AngleAxis.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/EulerAngles.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/Homogeneous.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/Hyperplane.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/InternalHeaderCheck.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/OrthoMethods.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/ParametrizedLine.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/Quaternion.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/Rotation2D.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/RotationBase.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/Scaling.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/Transform.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/Translation.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/Umeyama.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/arch/Geometry_SIMD.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Householder/BlockHouseholder.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Householder/Householder.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Householder/HouseholderSequence.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Householder/InternalHeaderCheck.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Jacobi/InternalHeaderCheck.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Jacobi/Jacobi.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/LU/Determinant.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/LU/FullPivLU.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/LU/InternalHeaderCheck.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/LU/InverseImpl.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/LU/PartialPivLU.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/LU/arch/InverseSize4.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/OrderingMethods/Amd.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/OrderingMethods/Eigen_Colamd.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/OrderingMethods/InternalHeaderCheck.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/OrderingMethods/Ordering.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/QR/ColPivHouseholderQR.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/QR/CompleteOrthogonalDecomposition.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/QR/FullPivHouseholderQR.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/QR/HouseholderQR.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/QR/InternalHeaderCheck.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SVD/BDCSVD.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SVD/InternalHeaderCheck.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SVD/JacobiSVD.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SVD/SVDBase.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SVD/UpperBidiagonalization.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCholesky/InternalHeaderCheck.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/AmbiVector.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/CompressedStorage.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/InternalHeaderCheck.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseAssign.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseBlock.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseColEtree.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseCompressedBase.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseCwiseBinaryOp.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseCwiseUnaryOp.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseDenseProduct.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseDiagonalProduct.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseDot.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseFuzzy.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseMap.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseMatrix.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseMatrixBase.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparsePermutation.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseProduct.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseRedux.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseRef.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseSelfAdjointView.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseSolverBase.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseSparseProductWithPruning.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseTranspose.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseTriangularView.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseUtil.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseVector.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseView.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/TriangularSolver.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/InternalHeaderCheck.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLUImpl.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_Memory.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_Structs.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_Utils.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_column_bmod.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_column_dfs.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_kernel_bmod.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_panel_bmod.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_panel_dfs.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_pivotL.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_pruneL.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_relax_snode.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseQR/InternalHeaderCheck.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseQR/SparseQR.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/misc/Image.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/misc/InternalHeaderCheck.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/misc/Kernel.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/misc/RealSvd2x2.h \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/plugins/ArrayCwiseBinaryOps.inc \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/plugins/ArrayCwiseUnaryOps.inc \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/plugins/BlockMethods.inc \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/plugins/CommonCwiseBinaryOps.inc \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/plugins/CommonCwiseUnaryOps.inc \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/plugins/IndexedViewMethods.inc \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/plugins/MatrixCwiseBinaryOps.inc \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/plugins/MatrixCwiseUnaryOps.inc \ - /home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/plugins/ReshapedMethods.inc \ /home/cc/anaconda3/envs/ros_flexiv/include/hardware_interface/handle.hpp \ /home/cc/anaconda3/envs/ros_flexiv/include/hardware_interface/hardware_info.hpp \ /home/cc/anaconda3/envs/ros_flexiv/include/hardware_interface/macros.hpp \ @@ -786,12 +509,10 @@ CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o: /home/cc/ros /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cctype \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cerrno \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/chrono \ - /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/climits \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/clocale \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cmath \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/codecvt \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/compare \ - /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/complex \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/concepts \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/condition_variable \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/csignal \ @@ -871,7 +592,6 @@ CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o: /home/cc/ros /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/utility \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/variant \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/vector \ - /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/version \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/atomic_word.h \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/basic_file.h \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/c++allocator.h \ @@ -888,17 +608,11 @@ CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o: /home/cc/ros /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/messages_members.h \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/os_defines.h \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/time_members.h \ - /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/emmintrin.h \ - /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/limits.h \ - /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/mm_malloc.h \ - /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/mmintrin.h \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/stdalign.h \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/stdarg.h \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/stdbool.h \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/stddef.h \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/stdint.h \ - /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/syslimits.h \ - /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/xmmintrin.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/alloca.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/arpa/inet.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/asm-generic/bitsperlong.h \ @@ -932,15 +646,12 @@ CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o: /home/cc/ros /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/iscanonical.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/libc-header-start.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/libm-simd-decl-stubs.h \ - /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/local_lim.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/locale.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/long-double.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/math-vector.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/mathcalls-helper-functions.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/mathcalls-narrow.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/mathcalls.h \ - /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/posix1_lim.h \ - /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/posix2_lim.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/posix_opt.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/pthread_stack_min-dynamic.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/pthreadtypes-arch.h \ @@ -1013,14 +724,12 @@ CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o: /home/cc/ros /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/wint_t.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/typesizes.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/uintn-identity.h \ - /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/uio_lim.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/unistd_ext.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/waitflags.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/waitstatus.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/wchar.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/wctype-wchar.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/wordsize.h \ - /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/xopen_lim.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/ctype.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/endian.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/errno.h \ @@ -1030,10 +739,8 @@ CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o: /home/cc/ros /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/gnu/stubs.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/ifaddrs.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/libintl.h \ - /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/limits.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/linux/close_range.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/linux/errno.h \ - /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/linux/limits.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/linux/posix_types.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/linux/stddef.h \ /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/locale.h \ @@ -1062,7 +769,6 @@ CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o: /home/cc/ros /home/cc/flexiv_install/include/flexiv/rdk/data.hpp \ /home/cc/flexiv_install/include/flexiv/rdk/mode.hpp \ /home/cc/flexiv_install/include/flexiv/rdk/robot.hpp \ - /home/cc/flexiv_install/include/flexiv/rdk/utility.hpp \ /home/cc/ros2/src/flexiv_hardware/include/flexiv_hardware/flexiv_hardware_interface.hpp \ /home/cc/ros2/src/flexiv_hardware/include/flexiv_hardware/visibility_control.h @@ -1221,73 +927,53 @@ libflexiv_hardware.so: /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o -CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o: - /home/cc/flexiv_install/lib/libflexiv_rdk.a: -/home/cc/flexiv_install/lib/libRBDynParsers.so.1.9: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libyaml-cpp.so.0.8.0: +/home/cc/flexiv_install/lib/libRBDyn.so.1.9.0: /home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_typesupport_introspection_cpp.so: -/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_typesupport_fastrtps_cpp.so: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_typesupport_fastrtps_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_typesupport_c.so: +/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_typesupport_introspection_c.so: /home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_typesupport_fastrtps_cpp.so: +/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_typesupport_fastrtps_c.so: + /home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_typesupport_cpp.so: -/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_generator_py.so: +CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o: -/home/cc/anaconda3/envs/ros_flexiv/lib/libtracetools.so: +/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_typesupport_c.so: /home/cc/anaconda3/envs/ros_flexiv/lib/libtinyxml2.so.11.0.0: -/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_typesupport_introspection_cpp.so: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_typesupport_fastrtps_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_typesupport_cpp.so: - /home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_generator_c.so: /home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_typesupport_introspection_cpp.so: /home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_typesupport_introspection_c.so: -/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_typesupport_introspection_c.so: +/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_typesupport_cpp.so: -/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_typesupport_fastrtps_cpp.so: +/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_typesupport_c.so: -/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_typesupport_fastrtps_c.so: +/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_typesupport_introspection_c.so: -/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_generator_c.so: +/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_generator_py.so: /home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_typesupport_introspection_cpp.so: /home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_typesupport_introspection_c.so: -/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_typesupport_fastrtps_cpp.so: +/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_typesupport_fastrtps_c.so: -/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_generator_py.so: +/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_introspection_c.so: -/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_introspection_cpp.so: +/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_cpp.so: -/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_fastrtps_cpp.so: +/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_c.so: -/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_runtime_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_typesupport_introspection_cpp.so: - -/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_typesupport_introspection_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_typesupport_fastrtps_cpp.so: - -/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_typesupport_fastrtps_c.so: +/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_typesupport_cpp.so: /home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_typesupport_c.so: @@ -1295,27 +981,11 @@ CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o: /home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_generator_c.so: -/home/cc/anaconda3/envs/ros_flexiv/lib/librmw.so: - -/home/cc/anaconda3/envs/ros_flexiv/lib/librcutils.so: - /home/cc/anaconda3/envs/ros_flexiv/lib/librcpputils.so: -/home/cc/anaconda3/envs/ros_flexiv/lib/librclcpp.so: - -/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_yaml_param_parser.so: - /home/cc/anaconda3/envs/ros_flexiv/lib/librcl_logging_spdlog.so: -/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_logging_interface.so: - -/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_lifecycle.so: - -/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_typesupport_introspection_cpp.so: - -/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_typesupport_introspection_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_typesupport_fastrtps_cpp.so: +/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_typesupport_cpp.so: /home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_typesupport_c.so: @@ -1327,161 +997,1135 @@ CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o: /home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_typesupport_introspection_c.so: +/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_typesupport_fastrtps_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_typesupport_cpp.so: + /home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_typesupport_fastrtps_cpp.so: /home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_typesupport_cpp.so: -/home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_typesupport_c.so: - /home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_generator_c.so: -/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_typesupport_introspection_cpp.so: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_typesupport_introspection_c.so: +/home/cc/anaconda3/envs/ros_flexiv/lib/liblibstatistics_collector.so: /home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_typesupport_fastrtps_cpp.so: -/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_typesupport_fastrtps_c.so: +/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_typesupport_cpp.so: /home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_typesupport_c.so: /home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_generator_py.so: -/home/cc/anaconda3/envs/ros_flexiv/lib/libfoonathan_memory-0.7.3.so: +/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_generator_c.so: -/home/cc/anaconda3/envs/ros_flexiv/lib/libfastrtps.so.2.6.10: +/home/cc/anaconda3/envs/ros_flexiv/lib/libhardware_interface.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libfastcdr.so.1.0.24: /home/cc/anaconda3/envs/ros_flexiv/lib/libfake_components.so: +/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_typesupport_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_typesupport_introspection_cpp.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_typesupport_fastrtps_cpp.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_typesupport_fastrtps_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_typesupport_cpp.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_typesupport_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_generator_py.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_generator_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libconsole_bridge.so.1.0: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_typesupport_fastrtps_cpp.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_typesupport_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_generator_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_typesupport_introspection_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_typesupport_fastrtps_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_typesupport_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_generator_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib64/libc_nonshared.a: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/libm.so: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/crtn.o: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/crti.o: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/lib64/libm.so.6: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/lib64/libc.so.6: + +/home/cc/flexiv_install/include/flexiv/rdk/data.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/wctype.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/wchar.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/sys/socket.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libyaml-cpp.so.0.8.0: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/sys/single_threaded.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/sys/select.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/sys/cdefs.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/strings.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/stdlib.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/stdio.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/signal.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/sched.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/netinet/in.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/math.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/linux/stddef.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/linux/posix_types.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/linux/close_range.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/libintl.h: + /home/cc/anaconda3/envs/ros_flexiv/lib/libcrypto.so: -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/qos_overriding_options.hpp: +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/gnu/stubs-64.h: -/home/cc/anaconda3/envs/ros_flexiv/include/rcpputils/rcpputils/visibility_control.hpp: +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/features.h: -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/parameter_map.hpp: +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/errno.h: -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/detail/resolve_enable_topic_statistics.hpp: +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/ctype.h: -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/node_waitables_interface.hpp: +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/uintn-identity.h: -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/CwiseUnaryView.h: +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/typesizes.h: -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/node_timers_interface_traits.hpp: +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/wint_t.h: -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/node_graph_interface.hpp: +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/struct_tm.h: -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_tempbuf.h: +/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_generator_c.so: -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/pstl/glue_numeric_defs.h: +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/struct_timeval.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_runtime_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/struct_itimerspec.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/struct_iovec.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/struct___jmp_buf_tag.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/struct_FILE.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/sigval_t.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/sigset_t.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libmock_components.so: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/sigevent_t.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/locale_t.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/error_t.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/clockid_t.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/__sigval_t.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/__sigset_t.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/__locale_t.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/__fpos_t.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/__fpos64_t.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/__FILE.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/timex.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/timesize.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/thread-shared-types.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/struct_rwlock.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/stdint-uintn.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/socket_type.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/socket.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/sockaddr.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/sigthread.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/sigstksz.h: + +/home/cc/flexiv_install/include/flexiv/rdk/mode.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/sigstack.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/signum-generic.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/signum-arch.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/signal_ext.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/siginfo-consts.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/sigevent-consts.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/select.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/sched.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/pthreadtypes.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/pthread_stack_min-dynamic.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/mathcalls.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_generator_py.so: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/mathcalls-helper-functions.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/libm-simd-decl-stubs.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/libc-header-start.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/iscanonical.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/getopt_posix.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/fp-fast.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/flt-eval-method.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/unistd.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/floatn.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_typesupport_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/locale.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/environments.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/endianness.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_typesupport_fastrtps_cpp.so: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/cpu-set.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/confname.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_typesupport_introspection_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/asm/sockios.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/asm/posix_types_64.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/asm/errno.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/asm/bitsperlong.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/asm-generic/errno.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/asm-generic/bitsperlong.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_fastrtps_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/alloca.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/stdint.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/stddef.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_yaml_param_parser.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_typesupport_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/stdbool.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/stdalign.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/cxxabi_tweaks.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/ctype_inline.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/ctype_base.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/messages_members.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/cpu_defines.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/wordsize.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/c++locale.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/c++io.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/c++config.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/atomic_word.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/vector: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/variant: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/utility: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/asm-generic/sockios.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/unordered_map: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/typeinfo: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/math-vector.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/typeindex: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/tuple: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/tr1/special_function_util.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/tr1/riemann_zeta.tcc: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/tr1/poly_hermite.tcc: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/os_defines.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/tr1/modified_bessel_func.tcc: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_typesupport_fastrtps_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/tr1/legendre_function.tcc: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/tr1/hypergeometric.tcc: + +/home/cc/ros2/src/flexiv_hardware/include/flexiv_hardware/flexiv_hardware_interface.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/tr1/gamma.tcc: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/asm-generic/errno-base.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/tr1/bessel_function.tcc: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/system_error: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/string_view: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/string: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/streambuf: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/stdlib.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/set: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/struct_osockaddr.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/ratio: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/mathcalls-narrow.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/pstl/pstl_config.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/sys/types.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/sigaction.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/pstl/glue_memory_defs.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/pstl/glue_algorithm_defs.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/pstl/execution_defs.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/ostream: + +/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_logging_interface.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/numeric: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/c++allocator.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/new: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/memory: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/locale: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/parameter_value.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/parameter.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/align.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/node_topics_interface.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/detail/qos_parameters.hpp: /home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/node_clock_interface.hpp: /home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/node_base_interface_traits.hpp: -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/ArrayBase.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/get_node_timers_interface.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/hardware_interface/types/hardware_interface_return_values.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/list.tcc: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/get_node_base_interface.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/create_timer.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_impl.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/libc.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_runtime_cpp/rosidl_runtime_cpp/bounded_vector.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/message_memory_strategy.hpp: +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/enable_special_members.h: /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/struct_sigstack.h: +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/message_memory_strategy.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/state.hpp: + /home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/memory_strategy.hpp: -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/macros.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_typesupport_fastrtps_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/network_flow_endpoint_array.h: - /home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/memory_strategies.hpp: -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/init_options.hpp: +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/type_adapter.hpp: -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_descriptor__struct.hpp: +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/intra_process_buffer_type.hpp: -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/subscription_options.h: +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/describe_parameters__type_support.hpp: -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/generic_subscription.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/sys/ucontext.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/generic_publisher.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/builtin_interfaces/builtin_interfaces/msg/detail/time__traits.hpp: +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/qos_profiles.h: /home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/future_return_code.hpp: /home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/experimental/subscription_intra_process_buffer.hpp: -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/experimental/ros_message_intra_process_buffer.hpp: +/home/cc/anaconda3/envs/ros_flexiv/lib/librcutils.so: -/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_runtime_c/rosidl_runtime_c/visibility_control.h: +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/basic_file.h: -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/experimental/intra_process_manager.hpp: +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/experimental/subscription_intra_process_base.hpp: -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/tr1/ell_integral.tcc: +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/libgcc.a: -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/tr1/exp_integral.tcc: +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/executors/static_single_threaded_executor.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/map: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/executors/multi_threaded_executor.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/executors/static_executor_entities_collector.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/time_members.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/types/string_map.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/clock_t.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/atomic: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/pthread.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/executors.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/executor.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/librt.a: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/service.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/allocated_ptr.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_typesupport_fastrtps_cpp.so: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/node_parameters_interface_traits.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/duration.hpp: /home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/experimental/executable_list.hpp: -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/experimental/create_intra_process_buffer.hpp: +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/detail/subscription_callback_type_helper.hpp: -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/XprHelper.h: +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/detail/resolve_intra_process_buffer_type.hpp: -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/executors/single_threaded_executor.hpp: +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/predefined_ops.h: -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/codecvt: +/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_typesupport_introspection_c.so: -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/waitable.hpp: +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/node_topics_interface_traits.hpp: -/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/shared_library.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/iostream: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_typesupport_introspection_cpp.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/detail/rmw_implementation_specific_subscription_payload.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Householder: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/detail/qos_parameters.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/detail/cpp_callback_trampoline.hpp: +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/set_parameters_atomically__builder.hpp: /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/floatn-common.h: -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/streambuf_iterator.h: +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/detail/cpp_callback_trampoline.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/wait_set_policies/detail/synchronization_policy_common.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/locale_classes.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/ret_types.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/experimental/subscription_intra_process.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_algo.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_yaml_param_parser/rcl_yaml_param_parser/visibility_control.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_yaml_param_parser/rcl_yaml_param_parser/types.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/librclcpp_lifecycle.so: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/topic_statistics_state.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/types/rcutils_ret.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_lifecycle/rcl_lifecycle/default_state_machine.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/set_parameters_atomically__struct.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/ss_flags.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/node_base_interface.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/set_parameters__type_support.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/crtbeginS.o: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/event.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/class_loader/class_loader/visibility_control.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/create_subscription.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_implementation.so: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/set_parameters__traits.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/client.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/list_parameters__type_support.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_typesupport_introspection_cpp.so: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/get_parameters__type_support.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cstdint: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/struct_mutex.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/list_parameters__struct.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/get_parameter_types.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/list_parameters__builder.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_yaml_param_parser/rcl_yaml_param_parser/parser.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/get_parameter_types__struct.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/ext/numeric_traits.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/node_timers_interface_traits.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/get_parameter_types__builder.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/qos_policy_kind.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/describe_parameters__traits.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/arguments.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_event__traits.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/experimental/buffers/ring_buffer_implementation.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/loaned_message.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/lib/libgcc_s.so.1: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/floating_point_range__traits.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_generator_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/csignal: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/is_ros_compatible_type.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/testing/fault_injection.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/localefwd.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/allocator.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_typesupport_fastrtps_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/set_parameters_result__builder.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/builtin_interfaces/builtin_interfaces/msg/detail/duration__type_support.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/std_function.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/types.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/graph.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/librclcpp.so: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/list_parameters_result__traits.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/functexcept.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/hardware_interface/hardware_info.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_runtime_c/rosidl_runtime_c/message_type_support_struct.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/allocator/allocator_deleter.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/iterator: + +/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/detail/transition__traits.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_generator_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/subscription_base.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_typesupport_introspection_cpp.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/locale_conv.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/detail/transition__struct.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/get_parameters__struct.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/pthreadtypes-arch.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_lifecycle/rcl_lifecycle/data_types.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/logging.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/detail/state__type_support.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libssl.so: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/posix_opt.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/memoryfwd.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/sys/ucontext.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/generic_subscription.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/lib64/ld-linux-x86-64.so.2: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/byteswap.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/basic_ios.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/transition.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/rosidl_generator_cpp__visibility_control.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/types/string_array.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/domain_id.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_event__struct.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_runtime_cpp/rosidl_runtime_cpp/traits.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cstddef: + +/home/cc/anaconda3/envs/ros_flexiv/include/libstatistics_collector/libstatistics_collector/topic_statistics_collector/topic_statistics_collector.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/detail/state__struct.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libclass_loader.so: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/timer_t.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/locale_facets.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/cookie_io_functions_t.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/builtin_interfaces/builtin_interfaces/msg/detail/duration__traits.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/set_parameters__builder.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/libstatistics_collector/libstatistics_collector/moving_average_statistics/types.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/basic_ios.tcc: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stringfwd.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/node_waitables_interface.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/intra_process_setting.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/detail/transition_event__struct.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcpputils/rcpputils/time.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/impl/cpp/demangle.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/experimental/buffers/intra_process_buffer.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/detail/state__struct.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/libstatistics_collector/libstatistics_collector/moving_average_statistics/moving_average.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/contexts/default_context.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/ifaddrs.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/arpa/inet.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/log_level.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cstring: + +/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/rosidl_generator_c__visibility_control.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/mbstate_t.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/istream: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/node.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter__type_support.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/node_parameters_interface.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/console_bridge/console.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/tr1/exp_integral.tcc: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/tr1/ell_integral.tcc: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/experimental/intra_process_manager.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/wait.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/detail/resolve_use_intra_process.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/unique_lock.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/generic_publisher.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/builtin_interfaces/builtin_interfaces/msg/detail/time__traits.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_typesupport_fastrtps_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/detail/rmw_implementation_specific_subscription_payload.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/allocator.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/publisher.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/ctime: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/parameter_service.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_typesupport_fastrtps_cpp.so: + +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/event.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/functional_hash.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/libgcc_s.so: + +/home/cc/anaconda3/envs/ros_flexiv/include/hardware_interface/handle.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/detail/transition__struct.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_bvector.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/set_parameters_atomically__type_support.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/postypes.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/builtin_interfaces/builtin_interfaces/msg/detail/time__builder.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/get_parameter_types__type_support.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/builtin_interfaces/builtin_interfaces/msg/detail/time__type_support.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_typesupport_fastrtps_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_lifecycle/rcl_lifecycle/visibility_control.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/libstatistics_collector/libstatistics_collector/topic_statistics_collector/constants.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/libc.so: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_impl.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/macros.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/builtin_interfaces/builtin_interfaces/msg/time.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/wait_result_kind.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/time.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/uses_allocator_args.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_typesupport_introspection_cpp.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/iostream: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/shared_library.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/waitable.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/exceptions.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/builtin_interfaces/builtin_interfaces/msg/duration.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/types/char_array.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cstdlib: + +/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/detail/transition__builder.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/hardware_interface/visibility_control.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/statistics_msgs/statistics_msgs/msg/detail/statistic_data_point__struct.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/libdl.a: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/exceptions/exceptions.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/hashtable_policy.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/class_loader/class_loader/class_loader_core.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/stdint.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/type_traits: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/clock.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/detail/state__traits.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/locale_facets_nonio.tcc: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/string.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_construct.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/iomanip: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/time.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/gthr-default.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/parameter_descriptor.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/detail/state__builder.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/publisher_base.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_lifecycle/rcl_lifecycle/rcl_lifecycle.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/parameter_event_handler.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libfoonathan_memory-0.7.3.so: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/logger.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/lib64/libmvec.so.1: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/list_parameters_result__struct.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/class_loader/class_loader/class_loader.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_type__struct.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/incompatible_qos_events_statuses.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/librcl.so: + +/home/cc/anaconda3/envs/ros_flexiv/include/libstatistics_collector/libstatistics_collector/collector/collector.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/detail/transition_event__type_support.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/types/hash_map.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/libstdc++.so: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/endian.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/rcl.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/debug/assertions.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_typesupport_introspection_cpp.so: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/set_parameters_result__struct.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/libstatistics_collector/libstatistics_collector/topic_statistics_collector/received_message_age.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_typesupport_cpp.so: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/timer.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/asm-generic/posix_types.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/rosidl_generator_cpp__visibility_control.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/node_logging_interface.hpp: + +/home/cc/ros2/src/flexiv_hardware/src/flexiv_hardware_interface.cpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/node_options.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/get_parameters__traits.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/transition_event.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_descriptor__traits.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/memory_resource.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/functional: + +/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_runtime_c/rosidl_runtime_c/visibility_control.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/experimental/ros_message_intra_process_buffer.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_value__traits.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/time.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cctype: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/waitflags.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/allocator/allocator_common.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cwctype: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_iterator_base_types.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/class_loader/class_loader/exceptions.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_introspection_cpp.so: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/get_parameters__builder.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/client.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/subscription.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/__mbstate_t.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/std_thread.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_pair.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_typesupport_introspection_cpp.so: + +/home/cc/anaconda3/envs/ros_flexiv/include/class_loader/class_loader/meta_object.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/typesupport_helpers.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/init_options.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_descriptor__struct.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/events_statuses/liveliness_lost.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/node_timers_interface.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/describe_parameters__struct.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/subscription.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/get_message_type_support_handle.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/subscription_options.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/unordered_map.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/sstream: + +/home/cc/anaconda3/envs/ros_flexiv/include/libstatistics_collector/libstatistics_collector/collector/generate_statistics_message.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/stdio.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/optional: + +/home/cc/anaconda3/envs/ros_flexiv/include/builtin_interfaces/builtin_interfaces/msg/detail/duration__struct.hpp: + +/home/cc/flexiv_install/include/flexiv/rdk/robot.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_type__traits.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/set_parameters__struct.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/network_flow_endpoints.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/wait_set.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/get_parameter_types__traits.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_typesupport_cpp.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/list: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/context.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_generator_py.so: + +/home/cc/anaconda3/envs/ros_flexiv/include/class_loader/class_loader/register_macro.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_value__type_support.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/wchar.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/get_node_topics_interface.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_runtime_cpp/rosidl_typesupport_cpp/service_type_support.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/event.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/librmw.so: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/detail/rmw_implementation_specific_publisher_payload.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/set_parameters.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/future: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/timer.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/ostream.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/event_callback.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_typesupport_introspection_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/list_parameters_result__type_support.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/parse_numbers.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/function_traits.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/shared_ptr.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/guard_condition.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cwchar: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/wait_result.hpp: /home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/create_generic_publisher.hpp: /home/cc/anaconda3/envs/ros_flexiv/include/rcpputils/rcpputils/shared_library.hpp: -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/create_client.hpp: +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/siginfo_t.h: -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/publisher_options.h: +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/subscription_content_filter_options.h: -/home/cc/flexiv_install/lib/libspdlog.so.1.9.2: +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/in.h: -/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/subscription.h: +/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/init_options.h: -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stream_iterator.h: +/home/cc/anaconda3/envs/ros_flexiv/lib/libtracetools.so: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/assert.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/list_parameters_result__builder.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_value__builder.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/get_parameters.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/macros.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/publisher.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/asm/posix_types.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/list_parameters_result.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/logging.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/long-double.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/types.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_generator_py.so: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/parameter_map.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/detail/resolve_enable_topic_statistics.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/linux/errno.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/builtin_interfaces/builtin_interfaces/msg/detail/duration__builder.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/wait_set_policies/detail/storage_policy_common.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/locale.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/expand_topic_or_service_name.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/error_handling.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/floating_point_range__struct.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/list_parameters.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/tr1/beta_function.tcc: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/integer_range__struct.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/integer_range__traits.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/experimental/buffers/buffer_implementation_base.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/unordered_set: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/executor_options.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter__traits.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/stdio_lim.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/ext/string_conversions.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/hardware_interface/types/lifecycle_state_names.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_iterator.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/hardware_interface/macros.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/atomic_lockfree_defines.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_event__type_support.hpp: /home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/any_service_callback.hpp: @@ -1489,17 +2133,19 @@ CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o: /home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/types/array_list.h: -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/utilities.hpp: +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_type__type_support.hpp: -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/set_parameters_atomically.hpp: +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/set_parameters_result__type_support.hpp: -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_event__builder.hpp: +/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_typesupport_introspection_cpp.so: -/home/cc/anaconda3/envs/ros_flexiv/include/statistics_msgs/statistics_msgs/msg/detail/metrics_message__struct.hpp: +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/parameter.hpp: -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/detail/resolve_intra_process_buffer_type.hpp: +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_set.h: -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector.h: +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/specfun.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/guard_condition.hpp: /home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/set_parameters_atomically__traits.hpp: @@ -1507,2150 +2153,622 @@ CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o: /home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/topic_statistics/subscription_topic_statistics.hpp: -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseDiagonalProduct.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/set_parameters__struct.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/set_parameters__builder.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/builtin_interfaces/builtin_interfaces/msg/detail/duration__traits.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/cookie_io_functions_t.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/list_parameters__type_support.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/list_parameters__traits.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/macros.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_lifecycle/rcl_lifecycle/data_types.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/pthreadtypes-arch.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/get_parameters__struct.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/OrderingMethods/InternalHeaderCheck.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/get_parameters__builder.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/get_parameter_types__traits.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/intra_process_buffer_type.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/publisher_options.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/set_parameters_result.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/xopen_lim.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/shared_mutex: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/asm-generic/posix_types.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/parameter.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/list_parameters_result.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/set_parameters_result__type_support.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/detail/transition_event__functions.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/callback_group.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Ref.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/localhost.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/set_parameters_result__builder.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/SSE/TypeCasting.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/detail/subscription_callback_type_helper.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/Homogeneous.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/ArithmeticSequence.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_type__builder.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/statistics_msgs/statistics_msgs/msg/detail/metrics_message__type_support.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_event__struct.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_generator_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/chrono.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter__traits.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter__struct.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/libstatistics_collector/libstatistics_collector/collector/metric_details_interface.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_runtime_cpp/rosidl_typesupport_cpp/message_type_support.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_value__traits.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Solve.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter__builder.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/sig_atomic_t.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Assign.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/exceptions.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/wait.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/syslimits.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/mbstate_t.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/posix1_lim.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/network_flow_endpoints.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/algorithmfwd.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/log_level.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/arpa/inet.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/guard_condition.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/linux/limits.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/set_parameters__traits.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/get_parameters__type_support.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libfastcdr.so.1.0.24: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cstdint: - -/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/transition_event.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/transition.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_uninitialized.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/state.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/detail/transition_event__type_support.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_typesupport_fastrtps_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/rosidl_generator_c__visibility_control.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cstring: - -/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/detail/transition__type_support.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cmath: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/invoke.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/detail/transition__traits.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/detail/transition__struct.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/detail/state__type_support.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/locale_facets_nonio.tcc: - -/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/detail/state__struct.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/experimental/buffers/intra_process_buffer.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_typesupport_fastrtps_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/detail/state__struct.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/libstatistics_collector/libstatistics_collector/topic_statistics_collector/topic_statistics_collector.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/EulerAngles.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/GenericPacketMath.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/get_parameter_types__type_support.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/builtin_interfaces/builtin_interfaces/msg/detail/time__type_support.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/RealSchur.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/detail/transition__builder.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cstdlib: - -/home/cc/anaconda3/envs/ros_flexiv/include/hardware_interface/types/lifecycle_state_names.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/functors/NullaryFunctors.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_iterator.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/ext/string_conversions.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/stdio_lim.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/hardware_interface/types/hardware_interface_type_values.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/version.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/init.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/algorithm: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/detail/resolve_use_intra_process.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/compare: - -/home/cc/anaconda3/envs/ros_flexiv/include/hardware_interface/handle.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/message_info.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/libgcc_s.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/macros.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/rosidl_generator_cpp__visibility_control.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/context.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_generator_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/node_topics_interface.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/list: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/istream: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/plugins/IndexedViewMethods.inc: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/function_traits.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/shared_ptr.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Block.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/subscription_content_filter_options.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/libstatistics_collector/libstatistics_collector/visibility_control.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/topic_endpoint_info_array.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_pivotL.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/parameter_event_handler.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_generator_py.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_lifecycle/rcl_lifecycle/rcl_lifecycle.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/LU/arch/InverseSize4.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/typesizes.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_column_dfs.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_Memory.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLUImpl.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/unordered_map: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/asm-generic/sockios.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_generator_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/logger.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/SymbolicIndex.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/LU/PartialPivLU.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/libgcc.a: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseView.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_generator_py.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/executors/static_executor_entities_collector.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/allocator/allocator_deleter.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseUtil.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/basic_string.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseTriangularView.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_event__type_support.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/get_node_parameters_interface.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/atomic_futex.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/TriangularSolverVector.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/clock.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/publisher.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/lib64/libmvec.so.1: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/CwiseUnaryOp.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCholesky/InternalHeaderCheck.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/pstl/glue_algorithm_defs.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/experimental/subscription_intra_process_base.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/basic_file.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_panel_dfs.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/events_statuses/events_statuses.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Swap.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_tree.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/list_parameters_result__traits.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/graph.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/Default/Half.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/allocated_ptr.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/postypes.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_introspection_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_typesupport_cpp.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/contexts/default_context.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_lifecycle/rcl_lifecycle/default_state_machine.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/SolveTriangular.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/EmulateArray.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/event_callback.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/builtin_interfaces/builtin_interfaces/msg/detail/duration__type_support.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_value__builder.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/get_parameter_types.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/list_parameters__struct.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/VectorwiseOp.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Eigenvalues: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseMatrix.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/cxxabi_tweaks.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/ParametrizedLine.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/errno.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/RandomImpl.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/parse_numbers.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Random.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/ProductEvaluators.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_typesupport_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/ReturnByValue.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/time.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/monostate.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/event.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/subscription_traits.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/wait_set_template.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libhardware_interface.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/AssignEvaluator.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_lifecycle/rcl_lifecycle/visibility_control.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/libstatistics_collector/libstatistics_collector/topic_statistics_collector/constants.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/CoreIterators.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_runtime_cpp/rosidl_runtime_cpp/service_type_support_decl.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/fp-fast.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/NumTraits.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/MatrixBase.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/loaned_message.hpp: +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cxxabi.h: /home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/siginfo-consts-arch.h: -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_event__traits.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/floating_point_range__traits.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/lib/libgcc_s.so.1: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Reverse.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/plugins/ArrayCwiseBinaryOps.inc: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/subscription_factory.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/SparseLU: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Matrix.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/__fpos64_t.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/qos.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/getopt_core.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Select.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/MathFunctionsImpl.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/qos_event.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/type_support_decl.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/MathFunctions.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/specfun.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_column_bmod.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/MapBase.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseCwiseUnaryOp.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/TriangularSolver.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/node_parameters_interface.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/console_bridge/console.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/parameter_client.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/chrono: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/wctype-wchar.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/ForwardDeclarations.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/backward/binders.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/EigenBase.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/exception_ptr.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/get_node_topics_interface.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/wordsize.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/DiagonalProduct.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/executor_options.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/unordered_set: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Diagonal.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/experimental/subscription_intra_process.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/integer_range__struct.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/tr1/beta_function.tcc: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/list_parameters.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/SolverBase.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/shared_ptr_atomic.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/crtbeginS.o: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/expand_topic_or_service_name.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Eigen: - -/home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_typesupport_fastrtps_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/rclcpp.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/libstatistics_collector/libstatistics_collector/topic_statistics_collector/received_message_age.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/IntegralConstant.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/set_parameters_result__struct.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_typesupport_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/NoAlias.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/asm/posix_types.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/class_loader/class_loader/register_macro.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Core: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/experimental/buffers/ring_buffer_implementation.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/asm-generic/bitsperlong.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libmock_components.so: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/locale_classes.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Version: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/DiagonalMatrix.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseRedux.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/sstream.tcc: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_typesupport_introspection_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/stack_t.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Visitor.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/plugins/ArrayCwiseUnaryOps.inc: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/event.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Jacobi/InternalHeaderCheck.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter__type_support.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/SSE/Reductions.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseAssign.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/CwiseTernaryOp.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/get_parameters.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/builtin_interfaces/builtin_interfaces/msg/detail/duration__struct.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/OrderingMethods/Amd.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/optional: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/stdio.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/create_subscription.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/functors/TernaryFunctors.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/Translation.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Jacobi: - -/home/cc/anaconda3/envs/ros_flexiv/include/builtin_interfaces/builtin_interfaces/msg/detail/duration__builder.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/wait_set_policies/detail/storage_policy_common.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/misc/Image.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/waitstatus.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/class_loader/class_loader/meta_object.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/SelfadjointRank2Update.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Fill.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_type__type_support.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/GeneralMatrixVector.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/detail/transition_event__struct.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/ComplexSchur.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/NestByValue.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/BandMatrix.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/future: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/InternalHeaderCheck.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/class_loader/class_loader/exceptions.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/node_logging_interface.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/is_ros_compatible_type.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/exceptions/exceptions.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_fastrtps_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/libdl.a: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Sparse: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/sockaddr.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Transpositions.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/functors/BinaryFunctors.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/struct_timespec.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Stride.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/error_handling.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/ss_flags.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/RotationBase.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/locale.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/ReshapedHelper.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/list_parameters_result__struct.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/c++locale.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/typesupport_helpers.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/CwiseBinaryOp.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Jacobi/Jacobi.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/streambuf.tcc: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_set.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/plugins/MatrixCwiseBinaryOps.inc: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Dot.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/locale: - -/home/cc/anaconda3/envs/ros_flexiv/lib/librcl.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/list_parameters__builder.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_typesupport_fastrtps_cpp.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/Hyperplane.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_value__type_support.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/iosfwd: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseFuzzy.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/node_topics_interface_traits.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/set_parameters_atomically__builder.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/libstatistics_collector/libstatistics_collector/moving_average_statistics/types.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/message_sequence.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/types/uint8_array.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/sigcontext.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_generator_py.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/parameter_value.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/QR/InternalHeaderCheck.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/VectorBlock.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/builtin_interfaces/builtin_interfaces/msg/detail/time__struct.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/misc/InternalHeaderCheck.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparsePermutation.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/RealQZ.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_typesupport_cpp.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/node_options.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/mutex: - -/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/detail/state__traits.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/builtin_interfaces/builtin_interfaces/msg/time.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/macros.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/create_publisher.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_relops.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/node_parameters_interface_traits.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseSparseProductWithPruning.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/Default/BFloat16.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/allocator.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_multimap.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_typesupport_cpp.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/get_parameter_types__struct.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/qos_profiles.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_type__traits.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/visibility_control.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/security_options.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/OrderingMethods: - -/home/cc/anaconda3/envs/ros_flexiv/include/statistics_msgs/statistics_msgs/msg/metrics_message.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_runtime_c/rosidl_runtime_c/string.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Reshaped.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/integer_range__traits.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/SelfadjointProduct.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/SparseCholesky: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/QR/FullPivHouseholderQR.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Householder/HouseholderSequence.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/rosidl_generator_cpp__visibility_control.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/OrthoMethods.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/SSE/Complex.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcpputils/rcpputils/time.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseCompressedBase.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/waitflags.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Transpose.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Fuzzy.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Inverse.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/arguments.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseMap.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_panel_bmod.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/hardware_interface/hardware_info.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/tracetools/tracetools/tracetools.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/asm/socket.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Cholesky/LDLT.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/Assert.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/erase_if.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/plugins/ReshapedMethods.inc: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/functors/AssignmentFunctors.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/names_and_types.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Cholesky/LLT.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/subscription_wait_set_mask.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/Default/Settings.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/LU/InverseImpl.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/GeneralProduct.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/ctype_inline.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Array.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/statistics_msgs/statistics_msgs/msg/detail/metrics_message__traits.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/list_parameters_result__type_support.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_type__struct.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/timer.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/guard_condition.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/GlobalFunctions.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/builtin_interfaces/builtin_interfaces/msg/detail/time__builder.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/QR: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/struct_mutex.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/event.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_runtime_cpp/rosidl_typesupport_cpp/service_type_support.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/CommaInitializer.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/executors/multi_threaded_executor.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Geometry: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/istream.tcc: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/stdlib-bsearch.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/ConfigureVectorization.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseQR/SparseQR.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/wait_set_policies/detail/write_preferring_read_write_lock.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/string_view.tcc: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/IndexedViewHelper.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseQR/InternalHeaderCheck.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/ConditionEstimator.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/ifaddrs.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_runtime_cpp/rosidl_runtime_cpp/message_initialization.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SVD/UpperBidiagonalization.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/libstatistics_collector/libstatistics_collector/collector/generate_statistics_message.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/sstream: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/TriangularSolverMatrix.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/nested_exception.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/SelfAdjointView.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/unistd_ext.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/plugins/CommonCwiseUnaryOps.inc: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_typesupport_cpp.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/QR/HouseholderQR.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_bvector.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/backward/auto_ptr.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/FILE.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_options.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseDenseProduct.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/visibility_control_macros.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/visibility_control.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/LU: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/node_timers_interface.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/DenseCoeffsBase.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/events_statuses/liveliness_lost.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/SVD: - -/home/cc/anaconda3/envs/ros_flexiv/include/hardware_interface/macros.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/atomic_lockfree_defines.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/ReenableStupidWarnings.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/CompressedStorage.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/linux/posix_types.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/node.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/parameter_event.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/detail/rmw_implementation_specific_payload.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_yaml_param_parser/rcl_yaml_param_parser/visibility_control.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libament_index_cpp.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/functors/StlFunctors.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/duration.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/PermutationMatrix.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/IO.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/OrderingMethods/Eigen_Colamd.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/GeneralBlockPanelKernel.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/sigevent-consts.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SVD/BDCSVD.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/netinet/in.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/publisher.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/ctime: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/misc/RealSvd2x2.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/InnerProduct.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/Parallelizer.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_runtime_cpp/rosidl_runtime_cpp/message_type_support_decl.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/uses_allocator.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/gthr.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/PlainObjectBase.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/TriangularMatrixVector.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/node_time_source_interface.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/visibility_control.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/parameter_descriptor.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/detail/state__builder.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/gthr-default.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_Utils.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/sigval_t.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SVD/JacobiSVD.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/ret_types.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/BlasUtil.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/charconv.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_typesupport_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/AngleAxis.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/InternalHeaderCheck.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/DeviceWrapper.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/Constants.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/ptr_traits.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/DisableStupidWarnings.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/DenseStorage.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Replicate.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcpputils/rcpputils/scope_exit.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/logging.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/topic_endpoint_info.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libssl.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/executor.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/SSE/PacketMath.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/RealView.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/service.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_typesupport_cpp.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/set_parameters_atomically__struct.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/rcl.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/rmw.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_raw_storage_iter.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/debug/assertions.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/libstdc++.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/Macros.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_typesupport_fastrtps_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/describe_parameters__traits.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/libstatistics_collector/libstatistics_collector/topic_statistics_collector/received_message_period.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/MoreMeta.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcpputils/rcpputils/pointer_traits.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/Serializer.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/StaticAssert.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/ArrayWrapper.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_typesupport_interface/rosidl_typesupport_interface/macros.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/array: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/ComplexEigenSolver.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/features-time64.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/memory: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/any_executable.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/EigenSolver.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/pstl/execution_defs.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/InternalHeaderCheck.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/atomic_base.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/list_parameters_result__builder.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/assert.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/in.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_descriptor__traits.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/LU/Determinant.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/wait_set_policies/dynamic_storage.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseColEtree.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_generator_py.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/impl/cpp/demangle.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libyaml.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/PartialReduxEvaluator.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/libstatistics_collector/libstatistics_collector/collector/collector.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/librt.a: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/AlignedBox.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/mmintrin.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/stdbool.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_Structs.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/Quaternion.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/locale_facets.tcc: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/executors.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/pthread.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/Rotation2D.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/locale_classes.tcc: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/InternalHeaderCheck.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cstddef: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/Transform.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/stddef.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_value__struct.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/parameter.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SVD/InternalHeaderCheck.h: - -/home/cc/flexiv_install/lib/libRBDyn.so.1.9.0: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/SelfCwiseBinaryOp.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/misc/Kernel.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/Umeyama.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_generator_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Householder/BlockHouseholder.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Product.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/exception_defines.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/QR/ColPivHouseholderQR.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/wait_set_policies/detail/synchronization_policy_common.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/class_loader/class_loader/class_loader.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/hashtable.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/SkewSymmetricMatrix3.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/liblibstatistics_collector.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/set_parameters_atomically__type_support.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/set_parameters__type_support.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/stdlib.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/types.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/HessenbergDecomposition.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/std_function.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/events_statuses/liveliness_changed.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/OrderingMethods/Ordering.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/SparseQR: - -/home/cc/anaconda3/envs/ros_flexiv/include/builtin_interfaces/builtin_interfaces/msg/duration.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/LU/FullPivLU.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/intra_process_setting.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/LU/InternalHeaderCheck.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/functors/UnaryFunctors.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/librmw_implementation.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_pruneL.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/Meta.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_typesupport_introspection_cpp.so: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/node_handle.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/StlIterators.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_typesupport_cpp.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Householder/InternalHeaderCheck.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/logging_rosout.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/class_loader/class_loader/visibility_control.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseBlock.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/concepts: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/publisher_factory.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/allocator.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/hardware_interface/visibility_control.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseMatrixBase.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/DenseBase.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseRef.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/client.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libconsole_bridge.so.1.0: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Householder/Householder.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseSelfAdjointView.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/serialized_message.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/cxxabi_init_exception.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/service.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/subscription.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/subscription_base.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/subscription_options.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/time.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/timer.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/topic_statistics_state.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_kernel_bmod.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/visibility_control.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/gnu/stubs.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/wait_result.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cwchar: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/wait_result_kind.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/wait_set.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/setjmp.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/wait_set_policies/static_storage.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/time64.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/node_services_interface.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/wait_set_policies/thread_safe_synchronization.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/detail/transition__struct.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/cpp_type_traits.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseTranspose.h: +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/parameter_type.hpp: /home/cc/anaconda3/envs/ros_flexiv/include/rclcpp_lifecycle/rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp: /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/ext/type_traits.h: +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/list.tcc: + +/home/cc/anaconda3/envs/ros_flexiv/include/hardware_interface/types/hardware_interface_return_values.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/get_node_timers_interface.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/create_timer.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/get_node_base_interface.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/create_client.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/publisher_options.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/libstatistics_collector/libstatistics_collector/collector/metric_details_interface.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter__struct.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_runtime_cpp/rosidl_typesupport_cpp/message_type_support.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/describe_parameters.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/publisher_options.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/describe_parameters__builder.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/mutex: + +/home/cc/anaconda3/envs/ros_flexiv/include/builtin_interfaces/builtin_interfaces/msg/detail/time__struct.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_raw_storage_iter.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/getopt_core.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/qos.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/type_support_decl.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/qos_event.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/monostate.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/time.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/qos_overriding_options.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libyaml.so: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/siginfo-arch.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/condition_variable: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/rate.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_typesupport_introspection_cpp.so: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/struct_timespec.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/any_executable.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_runtime_c/rosidl_runtime_c/sequence_bound.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/rclcpp.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_algobase.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_iterator_base_funcs.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/serialized_message.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/sig_atomic_t.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter__builder.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/exception.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/service.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/subscription_content_filter_options.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/subscription_factory.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/subscription_options.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/subscription_wait_set_mask.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/qsort.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_generator_py.so: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/time.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/waitstatus.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_type__builder.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/statistics_msgs/statistics_msgs/msg/detail/metrics_message__type_support.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/node_services_interface.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/utilities.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_generator_py.so: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/gnu/stubs.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/visibility_control.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libsensor_msgs__rosidl_typesupport_fastrtps_cpp.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/string_view.tcc: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/wait_set_policies/detail/write_preferring_read_write_lock.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/experimental/create_intra_process_buffer.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/wait_set_policies/dynamic_storage.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_typesupport_cpp.so: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/setjmp.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/wait_set_policies/sequential_synchronization.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/librosgraph_msgs__rosidl_typesupport_fastrtps_cpp.so: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/time64.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/wait_set_policies/static_storage.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/subscription_traits.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/wait_set_template.hpp: + /home/cc/anaconda3/envs/ros_flexiv/include/rclcpp_lifecycle/rclcpp_lifecycle/state.hpp: /home/cc/anaconda3/envs/ros_flexiv/include/rclcpp_lifecycle/rclcpp_lifecycle/visibility_control.h: -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/allocator/allocator_common.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcpputils/rcpputils/filesystem_helper.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bit: +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/exception_ptr.h: /home/cc/anaconda3/envs/ros_flexiv/include/rcpputils/rcpputils/join.hpp: -/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_typesupport_cpp.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/Default/ConjHelper.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/error_handling.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/uniform_int_dist.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/wchar.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/CoreEvaluators.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/endian.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/this_thread_sleep.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/pluginlib/pluginlib/class_list_macros.hpp: - -/home/cc/ros2/src/flexiv_hardware/src/flexiv_hardware_interface.cpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/qsort.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/network_flow_endpoint.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcpputils/rcpputils/thread_safety_annotations.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/allocator.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/types.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/types/hash_map.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/types/rcutils_ret.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/types/string_map.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/init_options.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/time_members.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/domain_id.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseDot.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseProduct.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/fp-logb.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/error_handling.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/stdlib-float.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/describe_parameters.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/event_callback_type.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/events_statuses/message_lost.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_typesupport_cpp.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/events_statuses/offered_deadline_missed.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/events_statuses/requested_deadline_missed.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_descriptor__type_support.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/get_topic_names_and_types.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/impl/config.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/linux/errno.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/incompatible_qos_events_statuses.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/MKL_support.h: +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/endian.h: /home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/init.h: /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_map.h: -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/endian.h: +/home/cc/anaconda3/envs/ros_flexiv/include/rcpputils/rcpputils/pointer_traits.hpp: -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/init_options.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/network_flow_endpoint.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/IndexedView.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/qos_policy_kind.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/set_parameters.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Cholesky/InternalHeaderCheck.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/qos_string_conversions.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/locale_facets_nonio.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseSolverBase.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/serialized_message.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/logging_macros.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/stdint-intn.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/subscription_content_filter_options.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/siginfo_t.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/stdc-predef.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_typesupport_introspection_cpp.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/types.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_typesupport_introspection_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_runtime_c/rosidl_runtime_c/message_initialization.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/testing/fault_injection.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_runtime_c/rosidl_runtime_c/message_type_support_struct.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_runtime_c/rosidl_runtime_c/primitives_sequence.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_runtime_c/rosidl_runtime_c/service_type_support_struct.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/parameter_service.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_runtime_cpp/rosidl_runtime_cpp/traits.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/statistics_msgs/statistics_msgs/msg/detail/metrics_message__builder.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/statistics_msgs/statistics_msgs/msg/detail/statistic_data_point__struct.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/statistics_msgs/statistics_msgs/msg/detail/statistic_data_point__traits.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/struct_sched_param.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/tracetools/tracetools/config.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/AmbiVector.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/tracetools/tracetools/visibility_control.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/atomic: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/time.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/clock_t.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/floating_point_range__struct.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseCwiseBinaryOp.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/align.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/alloc_traits.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/basic_ios.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/arch/SSE/MathFunctions.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/lib64/ld-linux-x86-64.so.2: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/basic_ios.tcc: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/basic_string.tcc: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/char_traits.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/logging.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/concept_check.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/enable_special_members.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/fstream.tcc: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/functexcept.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_typesupport_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/cxxabi_forced.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/functional_hash.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/hash_bytes.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/experimental/buffers/buffer_implementation_base.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/tr1/poly_laguerre.tcc: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/hashtable_policy.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/ios_base.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_typesupport_introspection_cpp.so: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/locale_facets.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/timer_t.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/stdint.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libclass_loader.so: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/localefwd.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/get_parameters__traits.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/memory_resource.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/FindCoeff.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/memoryfwd.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/posix_opt.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/StableNorm.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/move.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/new_allocator.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_yaml_param_parser/rcl_yaml_param_parser/parser.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/time_t.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/parameter_type.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/crtendS.o: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/ostream.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/statistics_msgs/statistics_msgs/msg/rosidl_generator_cpp__visibility_control.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/stdarg.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_runtime_c/rosidl_runtime_c/sequence_bound.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/ostream_insert.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/predefined_ops.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/quoted_string.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/refwrap.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_typesupport_introspection_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/requires_hosted.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/shared_ptr_base.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/std_abs.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/std_mutex.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/hardware_interface/system_interface.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/limits: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/climits: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/std_thread.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_algo.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/timesize.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_algobase.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/set_parameters_result__traits.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_construct.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_relax_snode.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/string.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_function.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_heap.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cstdio: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/net/if.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/byteswap.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_iterator_base_funcs.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/rate.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_iterator_base_types.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cwctype: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/InternalHeaderCheck.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_list.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_multiset.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_numeric.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/SparseCore: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_pair.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_vector.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stringfwd.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/unique_ptr.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/context.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/builtin_interfaces/builtin_interfaces/msg/rosidl_generator_cpp__visibility_control.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/unordered_map.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/unordered_set.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Redux.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/codecvt.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/thread: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/time.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/utility.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/vector.tcc: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cctype: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/time.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/libpthread.a: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cerrno: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/clocale: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/complex: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/plugins/BlockMethods.inc: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/condition_variable: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/Map.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/siginfo-arch.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/csignal: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cxxabi.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/types/char_array.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/exception: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/stdexcept: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/ext/aligned_buffer.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/IterativeLinearSolvers: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/ext/alloc_traits.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/TriangularMatrix.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/ext/atomicity.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_generator_py.so: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/ext/concurrence.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/ext/numeric_traits.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/functional: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/initializer_list: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/asm-generic/socket.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/errno.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/iomanip: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/ios: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/new: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/types/string_array.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/c++allocator.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/sigthread.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/numeric: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/ostream: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/pstl/glue_memory_defs.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/sigaction.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/sys/types.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/pstl/pstl_config.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/mathcalls-narrow.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/Tridiagonalization.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/ratio: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/struct_osockaddr.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/set: - -/home/cc/anaconda3/envs/ros_flexiv/include/libstatistics_collector/libstatistics_collector/moving_average_statistics/moving_average.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/streambuf: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/string: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/string_view: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/system_error: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/describe_parameters__struct.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/tr1/bessel_function.tcc: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/publisher_base.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/asm-generic/errno-base.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/tr1/gamma.tcc: - -/home/cc/ros2/src/flexiv_hardware/include/flexiv_hardware/flexiv_hardware_interface.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/tr1/hypergeometric.tcc: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/tr1/legendre_function.tcc: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/tr1/modified_bessel_func.tcc: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/os_defines.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/tr1/poly_hermite.tcc: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/tr1/riemann_zeta.tcc: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/tr1/special_function_util.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/tuple: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/executors/static_single_threaded_executor.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/typeindex: - -/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_cpp.so: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/math-vector.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/typeinfo: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Dense: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/utility: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/variant: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/exception.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/vector: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/error_constants.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/version: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/describe_parameters__builder.hpp: - -/home/cc/ros2/src/flexiv_hardware/include/flexiv_hardware/visibility_control.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/atomic_word.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/c++config.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/c++io.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/get_parameter_types__builder.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/cpu_defines.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SVD/SVDBase.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/ctype_base.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/emmintrin.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/limits.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/iterator: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/mm_malloc.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/stdalign.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/stdint.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/xmmintrin.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_typesupport_introspection_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/alloca.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/asm-generic/errno.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/asm/bitsperlong.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/asm/errno.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/asm/posix_types_64.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/asm/sockios.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_typesupport_introspection_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/confname.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/map: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/cpu-set.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cassert: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/endianness.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/environments.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/locale.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/util/Memory.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/floatn.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/unistd.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_typesupport_fastrtps_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/flt-eval-method.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/snprintf.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/getopt_posix.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/type_adapter.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/iscanonical.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/libc-header-start.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/plugins/CommonCwiseBinaryOps.inc: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_generator_py.so: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/mathcalls.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/posix2_lim.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/pthread_stack_min-dynamic.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/pthreadtypes.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/get_message_type_support_handle.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/sched.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/select.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/siginfo-consts.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/node_base_interface.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/wait_set_policies/sequential_synchronization.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/uses_allocator_args.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/signal_ext.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/signum-arch.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/range_access.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/signum-generic.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/sigstack.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/librclcpp_lifecycle.so: - -/home/cc/flexiv_install/include/flexiv/rdk/mode.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/arch/Geometry_SIMD.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/sigstksz.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/socket.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libtrajectory_msgs__rosidl_generator_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/socket_type.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/client.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/stdint-uintn.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/struct_rwlock.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/thread-shared-types.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_descriptor__builder.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/timex.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/__FILE.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/__fpos_t.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/__locale_t.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/__sigset_t.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/__sigval_t.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/clockid_t.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/error_t.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/libm-simd-decl-stubs.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/locale_t.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/sigevent_t.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/sigset_t.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/struct_FILE.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/__mbstate_t.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/struct___jmp_buf_tag.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/struct_iovec.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/struct_itimerspec.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/struct_timeval.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/describe_parameters__type_support.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/struct_tm.h: +/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_typesupport_cpp.so: /home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_typesupport_fastrtps_cpp.so: -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/wint_t.h: +/home/cc/anaconda3/envs/ros_flexiv/include/rcpputils/rcpputils/thread_safety_annotations.hpp: -/home/cc/anaconda3/envs/ros_flexiv/include/tracetools/tracetools/utils.hpp: +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/publisher_factory.hpp: -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/uintn-identity.h: +/home/cc/anaconda3/envs/ros_flexiv/include/rcpputils/rcpputils/visibility_control.hpp: -/home/cc/anaconda3/envs/ros_flexiv/include/rcl_yaml_param_parser/rcl_yaml_param_parser/types.h: +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/event_callback_type.h: -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h: +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/streambuf.tcc: -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/messages_members.h: +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/detail/list_parameters__traits.hpp: -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/uio_lim.h: +/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/macros.h: -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/ctype.h: +/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/init.h: -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/detail/rmw_implementation_specific_publisher_payload.hpp: +/home/cc/anaconda3/envs/ros_flexiv/include/hardware_interface/system_interface.hpp: -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/local_lim.h: +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/compare: -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/features.h: +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/algorithm: -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/create_generic_subscription.hpp: +/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/types.h: -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/type_traits: +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/init_options.h: -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/gnu/stubs-64.h: +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/char_traits.h: -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/fstream: +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/sigcontext.h: -/home/cc/flexiv_install/include/flexiv/rdk/utility.hpp: +/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/types/uint8_array.h: -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/libintl.h: +/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_typesupport_introspection_c.so: -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/debug/debug.h: +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/node_time_source_interface.hpp: -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/limits.h: +/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/visibility_control.h: -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/linux/close_range.h: +/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/detail/transition__type_support.hpp: -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/long-double.h: +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/invoke.h: -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/linux/stddef.h: +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_options.hpp: -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/math.h: +/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/visibility_control_macros.h: -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/sched.h: +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/fp-logb.h: -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/parameter_value.hpp: +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/domain_id.h: -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Geometry/Scaling.h: +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/stdlib-float.h: -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/signal.h: +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/error_handling.h: -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/stdio.h: +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/events_statuses/events_statuses.h: -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/plugins/MatrixCwiseUnaryOps.inc: +/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/snprintf.h: -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/Cholesky: +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/allocator.h: -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/mathcalls-helper-functions.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/stdlib.h: - -/home/cc/flexiv_install/include/flexiv/rdk/robot.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/strings.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/Core/CwiseNullaryOp.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/sys/cdefs.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/sys/select.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/sys/single_threaded.h: - -/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/domain_id.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/sys/socket.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/ostream.tcc: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/wchar.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/wctype.h: - -/home/cc/flexiv_install/include/flexiv/rdk/data.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCore/SparseVector.h: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/lib64/libc.so.6: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/lib64/libm.so.6: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/crti.o: - -/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/class_loader/class_loader/class_loader_core.hpp: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/crtn.o: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/libm.so: - -/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib64/libc_nonshared.a: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_generator_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/unique_lock.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_typesupport_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libaction_msgs__rosidl_typesupport_fastrtps_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_typesupport_c.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/eigen3/Eigen/src/QR/CompleteOrthogonalDecomposition.h: - -/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_typesupport_fastrtps_cpp.so: - -/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/any_subscription_callback.hpp: +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_numeric.h: /home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/events_statuses/incompatible_qos.h: -/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/locale_conv.h: +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/wctype-wchar.h: -/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_generator_c.so: +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/parameter_client.hpp: -/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_generator_py.so: +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/chrono: -/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_typesupport_c.so: +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/events_statuses/liveliness_changed.h: + +/home/cc/flexiv_install/lib/libRBDynParsers.so.1.9: + +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/events_statuses/message_lost.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/events_statuses/offered_deadline_missed.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/events_statuses/requested_deadline_missed.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/get_topic_names_and_types.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_typesupport_introspection_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/impl/config.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/callback_group.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/lifecycle_msgs/lifecycle_msgs/msg/detail/transition_event__functions.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/set_parameters_result__traits.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_descriptor__builder.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/localhost.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_interfaces__rosidl_typesupport_fastrtps_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/include/builtin_interfaces/builtin_interfaces/msg/rosidl_generator_cpp__visibility_control.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/message_sequence.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/names_and_types.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/clocale: + +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/network_flow_endpoint.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/macros.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/network_flow_endpoint_array.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/move.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/liblifecycle_msgs__rosidl_typesupport_fastrtps_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/locale_facets_nonio.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/qos_string_conversions.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/concept_check.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/rmw.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libunique_identifier_msgs__rosidl_typesupport_fastrtps_cpp.so: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/visibility_control.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/security_options.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/stdint-intn.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/serialized_message.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/stdc-predef.h: /home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/time.h: -/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_typesupport_cpp.so: +/home/cc/anaconda3/envs/ros_flexiv/include/rcpputils/rcpputils/scope_exit.hpp: -/home/cc/anaconda3/envs/ros_flexiv/lib/libcontrol_msgs__rosidl_typesupport_fastrtps_cpp.so: +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/topic_endpoint_info.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/libstatistics_collector/libstatistics_collector/visibility_control.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/topic_endpoint_info_array.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rmw/rmw/visibility_control.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_runtime_c/rosidl_runtime_c/message_initialization.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/stdarg.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/ostream.tcc: + +/home/cc/flexiv_install/lib/libspdlog.so.1.9.2: + +/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_runtime_c/rosidl_runtime_c/primitives_sequence.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/statistics_msgs/statistics_msgs/msg/detail/metrics_message__builder.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_runtime_c/rosidl_runtime_c/string.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_typesupport_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libfastrtps.so.2.6.10: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_list.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/network_flow_endpoint.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_runtime_cpp/rosidl_runtime_cpp/bounded_vector.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_typesupport_fastrtps_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_runtime_cpp/rosidl_runtime_cpp/message_initialization.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/srv/set_parameters_atomically.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/tracetools/tracetools/utils.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_event__builder.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/statistics_msgs/statistics_msgs/msg/detail/metrics_message__struct.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/errno.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/asm-generic/socket.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/initializer_list: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/struct_sched_param.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/statistics_msgs/statistics_msgs/msg/detail/statistic_data_point__traits.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/statistics_msgs/statistics_msgs/msg/metrics_message.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/statistics_msgs/statistics_msgs/msg/rosidl_generator_cpp__visibility_control.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/tracetools/tracetools/config.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/logging_macros.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/this_thread_sleep.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/asm/socket.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/libstatistics_collector/libstatistics_collector/topic_statistics_collector/received_message_period.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/tracetools/tracetools/tracetools.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_vector.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/tracetools/tracetools/visibility_control.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libstatistics_msgs__rosidl_generator_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_typesupport_interface/rosidl_typesupport_interface/macros.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/array: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/FILE.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/backward/auto_ptr.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/pluginlib/pluginlib/class_list_macros.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/backward/binders.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/gthr.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_runtime_cpp/rosidl_runtime_cpp/message_type_support_decl.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/uses_allocator.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcpputils/rcpputils/filesystem_helper.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bit: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/alloc_traits.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/librosidl_typesupport_fastrtps_cpp.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/atomic_base.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/get_node_parameters_interface.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/atomic_futex.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/basic_string.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/basic_string.tcc: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/charconv.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/error_constants.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/vector.tcc: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_descriptor__type_support.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/chrono.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/codecvt.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/wait_set_policies/thread_safe_synchronization.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/cpp_type_traits.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/parameter_value.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/cxxabi_forced.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/concepts: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/cxxabi_init_exception.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/erase_if.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/exception_defines.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/pstl/glue_numeric_defs.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/node_interfaces/node_graph_interface.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_tempbuf.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/fstream.tcc: + +/home/cc/anaconda3/envs/ros_flexiv/lib/librcl_lifecycle.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/requires_hosted.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/tr1/poly_laguerre.tcc: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/hash_bytes.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/hashtable.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/unique_ptr.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/ios_base.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/stdlib-bsearch.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/istream.tcc: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/locale_classes.tcc: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libament_index_cpp.so: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/detail/rmw_implementation_specific_payload.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/parameter_event.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/locale_facets.tcc: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/unistd_ext.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/nested_exception.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/crtendS.o: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/time_t.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/new_allocator.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/statistics_msgs/statistics_msgs/msg/detail/metrics_message__traits.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/node_handle.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/ostream_insert.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/lib/libpthread.a: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/ptr_traits.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/quoted_string.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/shared_mutex: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/set_parameters_result.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/range_access.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/refwrap.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/logging_rosout.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/algorithmfwd.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/shared_ptr_atomic.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/shared_ptr_base.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/bits/types/stack_t.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/sstream.tcc: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/std_abs.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libgeometry_msgs__rosidl_typesupport_introspection_c.so: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/net/if.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cstdio: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_heap.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/limits: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/std_mutex.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_function.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libstd_msgs__rosidl_generator_py.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_multimap.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_multiset.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/create_publisher.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_relops.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcl_interfaces/rcl_interfaces/msg/detail/parameter_value__struct.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_tree.h: + +/home/cc/anaconda3/envs/ros_flexiv/x86_64-conda-linux-gnu/sysroot/usr/include/features-time64.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/message_info.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_uninitialized.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/any_subscription_callback.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stream_iterator.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/create_generic_subscription.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/streambuf_iterator.h: + +/home/cc/ros2/src/flexiv_hardware/include/flexiv_hardware/visibility_control.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/error_handling.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/uniform_int_dist.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/thread: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/unordered_set.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/utility.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/hardware_interface/types/hardware_interface_type_values.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_runtime_cpp/rosidl_runtime_cpp/service_type_support_decl.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/version.h: + +/home/cc/anaconda3/envs/ros_flexiv/include/rosidl_runtime_c/rosidl_runtime_c/service_type_support_struct.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cassert: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/iosfwd: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cerrno: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/context.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/cmath: + +/home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/executors/single_threaded_executor.hpp: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/codecvt: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/debug/debug.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/stdexcept: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/exception: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/ext/aligned_buffer.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/ext/alloc_traits.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/libbuiltin_interfaces__rosidl_generator_py.so: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/ext/atomicity.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/ext/concurrence.h: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/fstream: + +/home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/ios: diff --git a/build/flexiv_hardware/CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o b/build/flexiv_hardware/CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o index 4251942..2d47328 100644 Binary files a/build/flexiv_hardware/CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o and b/build/flexiv_hardware/CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o differ diff --git a/build/flexiv_hardware/CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o.d b/build/flexiv_hardware/CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o.d index 0aed5e6..b2a1bb8 100644 --- a/build/flexiv_hardware/CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o.d +++ b/build/flexiv_hardware/CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o.d @@ -237,10 +237,16 @@ CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o: \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/basic_file.h \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/x86_64-conda-linux-gnu/bits/c++io.h \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/fstream.tcc \ + /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/map \ + /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_tree.h \ + /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/ext/aligned_buffer.h \ + /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/node_handle.h \ + /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_map.h \ + /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_multimap.h \ + /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/erase_if.h \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/variant \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/enable_special_members.h \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/monostate.h \ - /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/ext/aligned_buffer.h \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/thread \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/std_thread.h \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/unique_ptr.h \ @@ -328,11 +334,8 @@ CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o: \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/std_function.h \ /home/cc/anaconda3/envs/ros_flexiv/include/rclcpp/rclcpp/executors/multi_threaded_executor.hpp \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/set \ - /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_tree.h \ - /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/node_handle.h \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_set.h \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_multiset.h \ - /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/erase_if.h \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/unordered_map \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/unordered_map.h \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/hashtable.h \ @@ -344,9 +347,6 @@ CMakeFiles/flexiv_hardware.dir/src/flexiv_hardware_interface.cpp.o: \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/list \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_list.h \ /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/list.tcc \ - /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/map \ - /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_map.h \ - /home/cc/anaconda3/envs/ros_flexiv/lib/gcc/x86_64-conda-linux-gnu/15.2.0/include/c++/bits/stl_multimap.h \ /home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/guard_condition.h \ /home/cc/anaconda3/envs/ros_flexiv/include/rcl/rcl/allocator.h \ /home/cc/anaconda3/envs/ros_flexiv/include/rcutils/rcutils/allocator.h \ diff --git a/build/flexiv_hardware/cmake_args.last b/build/flexiv_hardware/cmake_args.last index ddde9cc..7aacf90 100644 --- a/build/flexiv_hardware/cmake_args.last +++ b/build/flexiv_hardware/cmake_args.last @@ -1 +1 @@ -['-DCMAKE_BUILD_TYPE=Release'] \ No newline at end of file +['-DAMENT_CMAKE_SYMLINK_INSTALL=1'] \ No newline at end of file diff --git a/build/flexiv_hardware/colcon_command_prefix_build.sh.env b/build/flexiv_hardware/colcon_command_prefix_build.sh.env index 3b2cefa..031ae8d 100644 --- a/build/flexiv_hardware/colcon_command_prefix_build.sh.env +++ b/build/flexiv_hardware/colcon_command_prefix_build.sh.env @@ -25,7 +25,7 @@ FORCE_COLOR=0 GDK_BACKEND=x11 GDMSESSION=ubuntu GIO_LAUNCHED_DESKTOP_FILE=/usr/share/applications/cursor.desktop -GIO_LAUNCHED_DESKTOP_FILE_PID=6891 +GIO_LAUNCHED_DESKTOP_FILE_PID=6037 GJS_DEBUG_OUTPUT=stderr GJS_DEBUG_TOPICS=JS ERROR;JS LOG GNOME_DESKTOP_SESSION_ID=this-is-deprecated @@ -36,16 +36,16 @@ GSETTINGS_SCHEMA_DIR_CONDA_BACKUP= GTK_IM_MODULE=ibus GTK_MODULES=gail:atk-bridge HOME=/home/cc -INVOCATION_ID=952153b6dc4b4b6fb5c6cb619223b6b1 -JOURNAL_STREAM=8:35948 +INVOCATION_ID=ab64d5fffd3b4622ba527182659a2dd1 +JOURNAL_STREAM=8:11025 LANG=zh_CN.UTF-8 LANGUAGE=zh_CN:zh -LD_LIBRARY_PATH=/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/ros2/install/gpio_controller/lib:/home/cc/ros2/install/flexiv_robot_states_broadcaster/lib:/home/cc/ros2/install/flexiv_gripper/lib:/home/cc/ros2/install/flexiv_msgs/lib:/home/cc/ros2/install/flexiv_hardware/lib:/home/cc/ros2/install/arm_msgs/lib:/home/cc/anaconda3/envs/ros_flexiv/opt/rviz_ogre_vendor/lib +LD_LIBRARY_PATH=/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt_libs:/home/cc/anaconda3/envs/ros_flexiv/lib/python3.11/site-packages/tensorrt:/home/cc/flexiv_install/lib:/home/cc/ros2/install/gpio_controller/lib:/home/cc/ros2/install/flexiv_robot_states_broadcaster/lib:/home/cc/ros2/install/flexiv_gripper/lib:/home/cc/ros2/install/flexiv_msgs/lib:/home/cc/ros2/install/flexiv_hardware/lib:/home/cc/ros2/install/arm_msgs/lib:/home/cc/anaconda3/envs/ros_flexiv/opt/rviz_ogre_vendor/lib LESSCLOSE=/usr/bin/lesspipe %s %s LESSOPEN=| /usr/bin/lesspipe %s LOGNAME=cc LS_COLORS= -MANAGERPID=4447 +MANAGERPID=5173 NO_COLOR=1 OLDPWD=/home/cc/ros2 PATH=/home/cc/.local/bin:/usr/share/cursor/resources/app/node_modules/@vscode/ripgrep/bin:/home/cc/.local/bin:/home/cc/anaconda3/envs/ros_flexiv/bin:/home/cc/anaconda3/condabin:/home/cc/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin @@ -62,7 +62,7 @@ ROS_LOCALHOST_ONLY=0 ROS_OS_OVERRIDE=conda:linux ROS_PYTHON_VERSION=3 ROS_VERSION=2 -SESSION_MANAGER=local/cc:@/tmp/.ICE-unix/4703,unix/cc:/tmp/.ICE-unix/4703 +SESSION_MANAGER=local/cc:@/tmp/.ICE-unix/5424,unix/cc:/tmp/.ICE-unix/5424 SHELL=/bin/bash SHLVL=1 SITE_BASE_FRAME=Rizon4-063989_base_link @@ -125,10 +125,8 @@ SITE_HANDEYE_CALIBRATE=/home/cc/ros2/handeye/calibrate.yaml SITE_HANDEYE_FILE=/home/cc/ros2/handeye/results/89_eye_in_hand.yaml SITE_HANDEYE_FILE_EYE_IN_HAND=/home/cc/ros2/handeye/results/89_eye_in_hand.yaml SITE_HANDEYE_FILE_EYE_TO_HAND=/home/cc/ros2/handeye/results/89_d435_eye_to_hand.yaml -SITE_HANDEYE_GRIPPER_FRAME=tool10120938 -SITE_HANDEYE_GRIPPER_TCP_FILE=/home/cc/ros2/handeye/tools/89_tool10120938.yaml SITE_HANDEYE_GRIPPER_TCP_QWXYZ=1.000000,0.000000,0.000000,0.000000 -SITE_HANDEYE_GRIPPER_TCP_XYZ=-0.000500,0.006700,0.224500 +SITE_HANDEYE_GRIPPER_TCP_XYZ=0.000537,-0.000264,0.226587 SITE_HANDEYE_GRIPPER_TOOL=tool10120938 SITE_HANDEYE_MODE=eye_in_hand SITE_HANDEYE_MOVE_T=8.0 @@ -195,7 +193,7 @@ SITE_YOLO_WEIGHTS=/home/cc/ros2/models/yolo/gongjian0929.onnx SITE_YOLO_WEIGHTS_RESOLVED=/home/cc/ros2/models/yolo/gongjian0929.onnx SSH_AGENT_LAUNCHER=gnome-keyring SSH_AUTH_SOCK=/run/user/1000/keyring/ssh -SYSTEMD_EXEC_PID=4732 +SYSTEMD_EXEC_PID=5453 TERM=dumb USER=cc USERNAME=cc @@ -206,8 +204,8 @@ VSCODE_ESM_ENTRYPOINT=vs/workbench/api/node/extensionHostProcess VSCODE_HANDLES_UNCAUGHT_ERRORS=true VSCODE_IPC_HOOK=/run/user/1000/vscode-bd0186cc-3.12-main.sock VSCODE_NLS_CONFIG={"userLocale":"zh-cn","osLocale":"zh-cn","resolvedLanguage":"en","defaultMessagesFile":"/usr/share/cursor/resources/app/out/nls.messages.json","locale":"zh-cn","availableLanguages":{}} -VSCODE_PID=6891 -VSCODE_PROCESS_TITLE=extension-host (agent-exec) ros2 [2-10] +VSCODE_PID=6037 +VSCODE_PROCESS_TITLE=extension-host (agent-exec) ros2 [1-9] WINDOWPATH=2 XAUTHORITY=/run/user/1000/gdm/Xauthority XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg @@ -218,7 +216,7 @@ XDG_RUNTIME_DIR=/run/user/1000 XDG_SESSION_CLASS=user XDG_SESSION_DESKTOP=ubuntu XDG_SESSION_TYPE=x11 -XML_CATALOG_FILES=file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog +XML_CATALOG_FILES=file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog file:///home/cc/anaconda3/envs/ros_flexiv/etc/xml/catalog file:///etc/xml/catalog XMODIFIERS=@im=ibus YOLO_AUTOINSTALL=false _=/home/cc/anaconda3/envs/ros_flexiv/bin/colcon @@ -228,4 +226,3 @@ _CONDA_EXE=/home/cc/anaconda3/bin/conda _CONDA_ROOT=/home/cc/anaconda3 _ZO_DOCTOR=0 __CURSOR_SANDBOX_ENV_RESTORE=builtin unset CURSOR_CONVERSATION_ID CURSOR_AGENT_STORE_FILES_DIR CURSOR_AGENT_STORE_SHARED_PATHS 2>/dev/null || true; builtin export CURSOR_CONVERSATION_ID='7ba025d5-5ac0-4a64-808c-1ce67e3bb09f' -__EGL_VENDOR_LIBRARY_DIRS=/home/cc/anaconda3/share/glvnd/egl_vendor.d diff --git a/build/flexiv_hardware/libflexiv_hardware.so b/build/flexiv_hardware/libflexiv_hardware.so index bac94b6..b2f8d9e 100755 Binary files a/build/flexiv_hardware/libflexiv_hardware.so and b/build/flexiv_hardware/libflexiv_hardware.so differ diff --git a/config/site.example.yaml b/config/site.example.yaml index 587fc9e..7dd45d0 100644 --- a/config/site.example.yaml +++ b/config/site.example.yaml @@ -936,8 +936,8 @@ gauge_assembly: # ---- S01 回 home 后按工具系逆时针预绕到极限角 ---- # 预绕是为了给 S08 的棘轮留出回转行程:不预绕,拧两圈就贴关节限位。 extreme_angle_deg: 150.0 # 想转多少度(按工具系逆时针) - extreme_speed_deg_s: 10.0 # 关节角速度 [deg/s]。2026-10-19 左臂 A7 咬合从 20 降到 10, - # 限位到限位约 34s(原先约 17s)。顺时针进孔用这个速度。 + extreme_speed_deg_s: 10.0 # 规装配预绕的关节角速度 [deg/s]。 + # 插孔后的四段 A7 不读这个数,走接口上限 0.90 rad/s。 unwind_open_permille: 400 # 第三步松爪只开到这个千分比。0=合,1000=全开。 # 2026-10-19 从 200 改成 400,只张开这个量。 unwind_lift_mm: 3.0 # 第三步张开后只抬的 TCP Z [mm](0.3cm)。 diff --git a/config/site.yaml b/config/site.yaml index 19f1311..144de26 100644 --- a/config/site.yaml +++ b/config/site.yaml @@ -920,8 +920,8 @@ gauge_assembly: # ---- S01 回 home 后按工具系逆时针预绕到极限角 ---- # 预绕是为了给 S08 的棘轮留出回转行程:不预绕,拧两圈就贴关节限位。 extreme_angle_deg: 150.0 # 想转多少度(按工具系逆时针) - extreme_speed_deg_s: 10.0 # 关节角速度 [deg/s]。2026-10-19 左臂 A7 咬合从 20 降到 10, - # 限位到限位约 34s(原先约 17s)。顺时针进孔用这个速度。 + extreme_speed_deg_s: 10.0 # 规装配预绕的关节角速度 [deg/s]。 + # 插孔后的四段 A7 不读这个数,走接口上限 0.90 rad/s。 unwind_open_permille: 400 # 第三步松爪只开到这个千分比。0=合,1000=全开。 # 2026-10-19 从 200 改成 400,只张开这个量。 unwind_lift_mm: 3.0 # 第三步张开后只抬的 TCP Z [mm](0.3cm)。 diff --git a/docs/HANDBOOK.md b/docs/HANDBOOK.md index 47d8df8..cf17863 100644 --- a/docs/HANDBOOK.md +++ b/docs/HANDBOOK.md @@ -93,7 +93,7 @@ ROS 相对 XY,`keep_z`。硬件在 MoveL 期间不灌关节指令。D435 这 `tool10120938` 的 TCP 长度(0.226587 m,2026-10-16 下午 RDK 重读)加上 `final_gap_mm` 之上,不按旧 tool1 的 0.223 m。 贴面之后就停在这个法兰高度,不抬回 `hole_hover_z_m`。没有接触传感器。 `stage2.hole_entry_mm`(现为 1)> 0 时,插孔目标改成规尖在工件上表面以下这么深(孔口凹槽),再转 A7;为 0 时仍停在 `final_gap_mm`。进孔超过 8 mm(板厚 12 mm)直接拒绝。2026-10-19 12:20 写成 4 mm 时,臂在面下 1.6 mm 被挡住。 -然后只转左臂 A7(厂家 `SendJointPosition` 的第 7 轴,模式 `NRT_JOINT_POSITION`):先逆时针转到软件限位内侧 `extreme_margin_deg`,再顺时针转到另一侧。顺时针到位记为「首轮咬合结束」。接着 `run_gripper.sh --arm <臂号> --cli pos` 加上 `unwind_open_permille`(现为 400,不全开),再用一条厂家 `MoveL` 只抬 TCP 的 Z `unwind_lift_mm`(现为 3,即 0.3 cm;XY 和姿态不动,不拆成关节小跳)。这条和随后的下降都带 `zoneRadius=ZFine`、`targetTolerLevel=1`:厂家默认 `Z50` 和等级 3 会在还差约 0.5 mm 时就报到位,下降和记住的上抬对不上,合爪就不会发。A7 逆时针回到限位。请求速度是接口上限 0.90 rad/s;两端速度为 0 的样条峰速约是平均的 1.5 倍,所以整段按平均约 34 °/s 排程,避免时间到了还差几十度。然后下降刚才实测的那一段(不另写一个下降量),`--cli close`。合爪目标是位置 0;固件在位置先到时写 grip=1(到位),力先到才写 grip=2(夹住)。手指已经在合拢端就继续,还停在张开位则不转。再按 `extreme_speed_deg_s` 顺时针转到限位。前六轴不动。顺时针是进孔,逆时针是出孔。夹爪或这一段 Z 对不上,就停在当前关节。 +然后只转左臂 A7(厂家 `SendJointPosition` 的第 7 轴,模式 `NRT_JOINT_POSITION`):先逆时针转到软件限位内侧 `extreme_margin_deg`,再顺时针转到另一侧。顺时针到位记为「首轮咬合结束」。接着 `run_gripper.sh --arm <臂号> --cli pos` 加上 `unwind_open_permille`(现为 400,不全开),再用一条厂家 `MoveL` 只抬 TCP 的 Z `unwind_lift_mm`(现为 3,即 0.3 cm;XY 和姿态不动,不拆成关节小跳)。这条和随后的下降都带 `zoneRadius=ZFine`、`targetTolerLevel=1`:厂家默认 `Z50` 和等级 3 会在还差约 0.5 mm 时就报到位,下降和记住的上抬对不上,合爪就不会发。A7 再逆时针回到限位。然后下降刚才实测的那一段(不另写一个下降量),`--cli close`。合爪目标是位置 0;固件在位置先到时写 grip=1(到位),力先到才写 grip=2(夹住)。手指已经在合拢端就继续,还停在张开位则不转。再顺时针转到限位。这四段 A7 都请求接口上限 0.90 rad/s;两端速度为 0 的样条峰速约是平均的 1.5 倍,所以整段按平均约 34 °/s 排程,避免时间到了还差几十度。`extreme_speed_deg_s` 只留给规装配预绕。前六轴不动。顺时针是进孔,逆时针是出孔。夹爪或这一段 Z 对不上,就停在当前关节。 只测 D435 这一段位移时加 `--d435-only`:不交 D405、不进二阶段,并且要求先停 `run_real.sh`。 ```bash diff --git a/handeye/poses/backup/89_eye_in_hand_21pts_before_20261016.yaml b/handeye/poses/backup/89_eye_in_hand_21pts_before_20261016.yaml new file mode 100644 index 0000000..c4642b3 --- /dev/null +++ b/handeye/poses/backup/89_eye_in_hand_21pts_before_20261016.yaml @@ -0,0 +1,56 @@ +# 手眼标定示教的关节位姿(7 关节 × N)。由 calibrate + waypoints 共用。 +# +# 在这里编辑,或者: +# bash ~/ros2/scripts/run_handeye.sh teach +# bash ~/ros2/scripts/run_handeye.sh merge +# +# /** 这样任意节点名都能收到这些参数。 + +/**: + ros__parameters: + num_poses: 21 + # 2026-09-02 通过 handeye_teach 示教(RDK 自由驱动) + waypoint_positions: [ + # pose 0 + -0.928421, -1.237477, 1.528823, 1.526334, -1.230146, 0.098562, 0.538531, + # pose 1 + -0.970203, -1.315554, 1.553230, 1.669383, -1.407869, 0.125907, 0.578173, + # pose 2 + -0.967819, -1.525572, 1.706057, 1.357062, -1.211051, 0.023232, 0.193541, + # pose 3 + -1.065106, -1.624218, 1.793644, 1.279402, -1.120929, 0.019151, 0.139658, + # pose 4 + -0.386279, -1.551838, 1.563578, 1.552444, -1.775337, -0.341974, 0.957445, + # pose 5 + -0.227779, -1.219414, 1.026882, 0.828801, -0.916809, -0.166985, 0.034154, + # pose 6 + -0.324968, -1.273082, 1.092344, 0.723132, -0.922095, -0.206413, 0.152082, + # pose 7 + -0.421966, -1.309101, 1.143065, 0.606456, -0.906673, -0.219282, 0.237953, + # pose 8 + -0.851598, -1.260600, 1.302895, 1.127033, -0.969809, 0.032856, 0.642673, + # pose 9 + -0.951418, -0.550124, 0.848598, 2.139787, -1.025778, 1.184418, 0.598394, + # pose 10 + -0.834498, -0.635767, 0.970038, 2.058410, -1.035138, 1.032040, 0.738619, + # pose 11 + -0.519528, -0.883321, 1.135035, 1.830274, -1.100901, 0.234065, -0.069068, + # pose 12 + -0.347358, -1.081426, 1.192233, 1.514557, -1.244594, -0.116668, -0.564362, + # pose 13 + -0.364832, -1.102689, 1.224844, 1.520320, -1.265760, -0.136855, -0.582459, + # pose 14 + -1.130796, -1.316186, 1.711089, 1.821409, -1.278003, 0.010885, -1.337210, + # pose 15 + -0.732222, -1.376363, 1.812339, 1.293854, -1.410826, -0.226771, -0.217230, + # pose 16 + -0.885017, -1.493416, 1.894070, 1.379021, -1.520015, -0.257115, 1.025331, + # pose 17 + -0.911769, -1.532695, 1.944123, 1.427787, -1.560513, -0.267425, 1.004398, + # pose 18 + -1.436271, -1.768595, 1.559397, 2.244717, -2.057112, 0.341785, 0.749883, + # pose 19 + -1.511828, -1.759337, 1.620075, 2.131574, -1.946595, 0.328227, 0.584657, + # pose 20 + -1.180482, -1.643241, 1.865851, 1.597699, -1.464982, 0.097605, -0.217780, + ] diff --git a/handeye/poses/backup/89_eye_to_hand_24pts_before_20261016.yaml b/handeye/poses/backup/89_eye_to_hand_24pts_before_20261016.yaml new file mode 100644 index 0000000..b2261ea --- /dev/null +++ b/handeye/poses/backup/89_eye_to_hand_24pts_before_20261016.yaml @@ -0,0 +1,60 @@ +# 眼在手外示教关节(7 关节 × N)。板夹在 tool10120938 上,顶置 D435 看它。 +# +# 由 teach → merge 写入,不要手抄眼在手上那份(两种模式的姿态完全不同)。 +# +# bash ~/ros2/scripts/run_handeye.sh --arm 89 teach --mode eye_to_hand --points 12 +# bash ~/ros2/scripts/run_handeye.sh --arm 89 merge --mode eye_to_hand + +/**: + ros__parameters: + num_poses: 24 + waypoint_positions: [ + # pose 0 + -1.241563, -0.359631, 0.346153, 2.172565, -0.179027, 0.929920, -0.778876, + # pose 1 + -1.388832, -0.554698, 0.416075, 1.897617, -0.358341, 0.827495, -0.762302, + # pose 2 + -1.436048, -0.573046, 0.461762, 1.870967, -0.387696, 0.813090, -0.762917, + # pose 3 + -1.614491, -0.519365, 0.693991, 2.156193, -0.499113, 0.968762, 0.073287, + # pose 4 + -2.020087, -0.869088, 1.059166, 2.155478, -1.198473, 0.740567, 0.478840, + # pose 5 + -2.082145, -1.122210, 1.203011, 1.950272, -1.269847, 0.434138, -0.641975, + # pose 6 + -1.983153, -0.886082, 0.999329, 2.324821, -1.272773, 0.754127, 0.313613, + # pose 7 + -2.021479, -0.886609, 1.055679, 2.337716, -1.282773, 0.669319, -0.028355, + # pose 8 + -2.022792, -0.947211, 1.118194, 2.127275, -1.211995, 0.527528, -0.169900, + # pose 9 + -2.004766, -1.065820, 1.183799, 1.901084, -1.217488, 0.380285, -0.312733, + # pose 10 + -1.942863, -1.219617, 1.256733, 1.653113, -1.222302, 0.261818, -0.420706, + # pose 11 + -2.039558, -1.082441, 1.189833, 1.996967, -1.241252, 0.521591, 0.526563, + # pose 12 + -2.098074, -1.006236, 1.538183, 2.118382, -0.737422, 0.019903, 0.648802, + # pose 13 + -2.039609, -1.159222, 1.488501, 1.908579, -1.168793, -0.140451, 0.034889, + # pose 14 + -1.880783, -1.104601, 1.579382, 2.036427, -0.665049, 0.254105, 1.518504, + # pose 15 + -2.015530, -1.535468, 1.711220, 1.836908, -1.707450, -0.400234, -0.708683, + # pose 16 + -1.997672, -1.626362, 1.529443, 2.200206, -1.291013, 0.398664, 1.954208, + # pose 17 + -1.981875, -1.620651, 1.545443, 2.373140, -1.167365, 0.396487, 2.012547, + # pose 18 + -2.179415, -1.511968, 1.578832, 2.401706, -1.326480, -0.051353, 1.137181, + # pose 19 + -2.173463, -1.530413, 1.575534, 2.173673, -1.289673, -0.090117, 0.867214, + # pose 20 + -2.096314, -1.569352, 1.579820, 1.942057, -1.458598, -0.057003, 0.572953, + # pose 21 + -2.129376, -1.566787, 1.903585, 1.962858, -1.454137, -0.335990, -0.148441, + # pose 22 + -2.020280, -1.527165, 1.887130, 1.728957, -1.491867, -0.370585, -0.277940, + # pose 23 + -2.140817, -1.607357, 1.617236, 2.153850, -1.571057, -0.147540, 0.770535, + ] diff --git a/handeye/results/backup/89_d435_eye_to_hand_tool10120938_oldtcp_20261012.yaml b/handeye/results/backup/89_d435_eye_to_hand_tool10120938_oldtcp_20261012.yaml new file mode 100644 index 0000000..8039d08 --- /dev/null +++ b/handeye/results/backup/89_d435_eye_to_hand_tool10120938_oldtcp_20261012.yaml @@ -0,0 +1,22 @@ +# 手眼标定结果 +# mode: eye_to_hand +# camera_source: d435 +# views: 24 +# utc: 2026-10-12T05:20:30.137123+00:00 +# board: 11x8 square_m=0.02 +# gripper_tool: tool10120938 +# T_4x4 = cam→基座(AX=XB 的手是 TCP,不折到法兰) +# 旧结果备份在 results/backup/ +gripper_tool: tool10120938 +T_flange_to_tool: + - [1.00000000, 0.00000000, 0.00000000, -0.00050000] + - [0.00000000, 1.00000000, 0.00000000, 0.00670000] + - [0.00000000, 0.00000000, 1.00000000, 0.22450000] + - [0.00000000, 0.00000000, 0.00000000, 1.00000000] +# T_cam_to_base (eye_to_hand) +translation_m: [0.37094529, -0.52805928, 0.73745585] +T_4x4: + - [-0.00990083, 0.99909706, -0.04131632, 0.37094529] + - [0.99991380, 0.01024832, 0.00820703, -0.52805928] + - [0.00862304, -0.04123150, -0.99911241, 0.73745585] + - [0.00000000, 0.00000000, 0.00000000, 1.00000000] diff --git a/handeye/results/backup/89_eye_in_hand_tool10120938_20261012.yaml b/handeye/results/backup/89_eye_in_hand_tool10120938_20261012.yaml new file mode 100644 index 0000000..9cfa770 --- /dev/null +++ b/handeye/results/backup/89_eye_in_hand_tool10120938_20261012.yaml @@ -0,0 +1,28 @@ +# 手眼标定结果 +# mode: eye_in_hand +# camera_source: d405_left +# views: 21 +# utc: 2026-10-12T03:29:51.243487+00:00 +# board: 11x8 square_m=0.015 +# gripper_tool: tool10120938 +# T_4x4 = cam→法兰(AX=XB 在 TCP 上解,再左乘 T_flange_to_tool) +# T_cam_to_tool 是原始求解;旧的法兰/tool1 备份在 results/backup/ +# 2026-10-12 第一次写出的 T_4x4 乘序反了(tz≈-296 mm),已按同一份 T_cam_to_tool 重折。 +gripper_tool: tool10120938 +T_flange_to_tool: + - [1.00000000, 0.00000000, 0.00000000, -0.00050000] + - [0.00000000, 1.00000000, 0.00000000, 0.00670000] + - [0.00000000, 0.00000000, 1.00000000, 0.22450000] + - [0.00000000, 0.00000000, 0.00000000, 1.00000000] +T_cam_to_tool: + - [-0.03435184, -0.86951953, 0.49270249, -0.05961995] + - [0.99932767, -0.03620511, 0.00577974, -0.01523625] + - [0.01281276, 0.49256977, 0.87017863, -0.09761517] + - [0.00000000, 0.00000000, 0.00000000, 1.00000000] +# T_cam_to_flange (eye_in_hand,由工具 TCP 折算) +translation_m: [-0.06011995, -0.00853625, 0.12688483] +T_4x4: + - [-0.03435184, -0.86951953, 0.49270249, -0.06011995] + - [0.99932767, -0.03620511, 0.00577974, -0.00853625] + - [0.01281276, 0.49256977, 0.87017863, 0.12688483] + - [0.00000000, 0.00000000, 0.00000000, 1.00000000] diff --git a/install/arm_application/lib/arm_application/assembly_pipeline b/install/arm_application/lib/arm_application/assembly_pipeline index 83e04c4..375a5b4 100755 --- a/install/arm_application/lib/arm_application/assembly_pipeline +++ b/install/arm_application/lib/arm_application/assembly_pipeline @@ -1,10 +1,10 @@ #!/home/cc/anaconda3/envs/ros_flexiv/bin/python3.11 -# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application==0.1.0','console_scripts','assembly_pipeline' +# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application','console_scripts','assembly_pipeline' import re import sys # for compatibility with easy_install; see #2198 -__requires__ = 'arm-application==0.1.0' +__requires__ = 'arm-application' try: from importlib.metadata import distribution @@ -30,4 +30,4 @@ globals().setdefault('load_entry_point', importlib_load_entry_point) if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(load_entry_point('arm-application==0.1.0', 'console_scripts', 'assembly_pipeline')()) + sys.exit(load_entry_point('arm-application', 'console_scripts', 'assembly_pipeline')()) diff --git a/install/arm_application/lib/arm_application/demo_named_poses b/install/arm_application/lib/arm_application/demo_named_poses index 7c827cb..bcc7ed6 100755 --- a/install/arm_application/lib/arm_application/demo_named_poses +++ b/install/arm_application/lib/arm_application/demo_named_poses @@ -1,10 +1,10 @@ #!/home/cc/anaconda3/envs/ros_flexiv/bin/python3.11 -# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application==0.1.0','console_scripts','demo_named_poses' +# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application','console_scripts','demo_named_poses' import re import sys # for compatibility with easy_install; see #2198 -__requires__ = 'arm-application==0.1.0' +__requires__ = 'arm-application' try: from importlib.metadata import distribution @@ -30,4 +30,4 @@ globals().setdefault('load_entry_point', importlib_load_entry_point) if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(load_entry_point('arm-application==0.1.0', 'console_scripts', 'demo_named_poses')()) + sys.exit(load_entry_point('arm-application', 'console_scripts', 'demo_named_poses')()) diff --git a/install/arm_application/lib/arm_application/dh_pgea b/install/arm_application/lib/arm_application/dh_pgea index ca6dd44..667b08b 100755 --- a/install/arm_application/lib/arm_application/dh_pgea +++ b/install/arm_application/lib/arm_application/dh_pgea @@ -1,10 +1,10 @@ #!/home/cc/anaconda3/envs/ros_flexiv/bin/python3.11 -# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application==0.1.0','console_scripts','dh_pgea' +# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application','console_scripts','dh_pgea' import re import sys # for compatibility with easy_install; see #2198 -__requires__ = 'arm-application==0.1.0' +__requires__ = 'arm-application' try: from importlib.metadata import distribution @@ -30,4 +30,4 @@ globals().setdefault('load_entry_point', importlib_load_entry_point) if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(load_entry_point('arm-application==0.1.0', 'console_scripts', 'dh_pgea')()) + sys.exit(load_entry_point('arm-application', 'console_scripts', 'dh_pgea')()) diff --git a/install/arm_application/lib/arm_application/dh_pgea_cli b/install/arm_application/lib/arm_application/dh_pgea_cli index 81ecdd2..c099aec 100755 --- a/install/arm_application/lib/arm_application/dh_pgea_cli +++ b/install/arm_application/lib/arm_application/dh_pgea_cli @@ -1,10 +1,10 @@ #!/home/cc/anaconda3/envs/ros_flexiv/bin/python3.11 -# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application==0.1.0','console_scripts','dh_pgea_cli' +# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application','console_scripts','dh_pgea_cli' import re import sys # for compatibility with easy_install; see #2198 -__requires__ = 'arm-application==0.1.0' +__requires__ = 'arm-application' try: from importlib.metadata import distribution @@ -30,4 +30,4 @@ globals().setdefault('load_entry_point', importlib_load_entry_point) if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(load_entry_point('arm-application==0.1.0', 'console_scripts', 'dh_pgea_cli')()) + sys.exit(load_entry_point('arm-application', 'console_scripts', 'dh_pgea_cli')()) diff --git a/install/arm_application/lib/arm_application/dual_gripper b/install/arm_application/lib/arm_application/dual_gripper index bf6c529..000f1cb 100755 --- a/install/arm_application/lib/arm_application/dual_gripper +++ b/install/arm_application/lib/arm_application/dual_gripper @@ -1,10 +1,10 @@ #!/home/cc/anaconda3/envs/ros_flexiv/bin/python3.11 -# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application==0.1.0','console_scripts','dual_gripper' +# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application','console_scripts','dual_gripper' import re import sys # for compatibility with easy_install; see #2198 -__requires__ = 'arm-application==0.1.0' +__requires__ = 'arm-application' try: from importlib.metadata import distribution @@ -30,4 +30,4 @@ globals().setdefault('load_entry_point', importlib_load_entry_point) if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(load_entry_point('arm-application==0.1.0', 'console_scripts', 'dual_gripper')()) + sys.exit(load_entry_point('arm-application', 'console_scripts', 'dual_gripper')()) diff --git a/install/arm_application/lib/arm_application/dual_gripper_cli b/install/arm_application/lib/arm_application/dual_gripper_cli index 1a713e1..489005e 100755 --- a/install/arm_application/lib/arm_application/dual_gripper_cli +++ b/install/arm_application/lib/arm_application/dual_gripper_cli @@ -1,10 +1,10 @@ #!/home/cc/anaconda3/envs/ros_flexiv/bin/python3.11 -# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application==0.1.0','console_scripts','dual_gripper_cli' +# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application','console_scripts','dual_gripper_cli' import re import sys # for compatibility with easy_install; see #2198 -__requires__ = 'arm-application==0.1.0' +__requires__ = 'arm-application' try: from importlib.metadata import distribution @@ -30,4 +30,4 @@ globals().setdefault('load_entry_point', importlib_load_entry_point) if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(load_entry_point('arm-application==0.1.0', 'console_scripts', 'dual_gripper_cli')()) + sys.exit(load_entry_point('arm-application', 'console_scripts', 'dual_gripper_cli')()) diff --git a/install/arm_application/lib/arm_application/gauge_assembly b/install/arm_application/lib/arm_application/gauge_assembly index 5270ad3..5db1dad 100755 --- a/install/arm_application/lib/arm_application/gauge_assembly +++ b/install/arm_application/lib/arm_application/gauge_assembly @@ -1,10 +1,10 @@ #!/home/cc/anaconda3/envs/ros_flexiv/bin/python3.11 -# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application==0.1.0','console_scripts','gauge_assembly' +# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application','console_scripts','gauge_assembly' import re import sys # for compatibility with easy_install; see #2198 -__requires__ = 'arm-application==0.1.0' +__requires__ = 'arm-application' try: from importlib.metadata import distribution @@ -30,4 +30,4 @@ globals().setdefault('load_entry_point', importlib_load_entry_point) if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(load_entry_point('arm-application==0.1.0', 'console_scripts', 'gauge_assembly')()) + sys.exit(load_entry_point('arm-application', 'console_scripts', 'gauge_assembly')()) diff --git a/install/arm_application/lib/arm_application/goto_ee_plane b/install/arm_application/lib/arm_application/goto_ee_plane index 9b2bf55..97447be 100755 --- a/install/arm_application/lib/arm_application/goto_ee_plane +++ b/install/arm_application/lib/arm_application/goto_ee_plane @@ -1,10 +1,10 @@ #!/home/cc/anaconda3/envs/ros_flexiv/bin/python3.11 -# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application==0.1.0','console_scripts','goto_ee_plane' +# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application','console_scripts','goto_ee_plane' import re import sys # for compatibility with easy_install; see #2198 -__requires__ = 'arm-application==0.1.0' +__requires__ = 'arm-application' try: from importlib.metadata import distribution @@ -30,4 +30,4 @@ globals().setdefault('load_entry_point', importlib_load_entry_point) if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(load_entry_point('arm-application==0.1.0', 'console_scripts', 'goto_ee_plane')()) + sys.exit(load_entry_point('arm-application', 'console_scripts', 'goto_ee_plane')()) diff --git a/install/arm_application/lib/arm_application/handeye_calibrate b/install/arm_application/lib/arm_application/handeye_calibrate index 05964cc..7614cfe 100755 --- a/install/arm_application/lib/arm_application/handeye_calibrate +++ b/install/arm_application/lib/arm_application/handeye_calibrate @@ -1,10 +1,10 @@ #!/home/cc/anaconda3/envs/ros_flexiv/bin/python3.11 -# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application==0.1.0','console_scripts','handeye_calibrate' +# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application','console_scripts','handeye_calibrate' import re import sys # for compatibility with easy_install; see #2198 -__requires__ = 'arm-application==0.1.0' +__requires__ = 'arm-application' try: from importlib.metadata import distribution @@ -30,4 +30,4 @@ globals().setdefault('load_entry_point', importlib_load_entry_point) if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(load_entry_point('arm-application==0.1.0', 'console_scripts', 'handeye_calibrate')()) + sys.exit(load_entry_point('arm-application', 'console_scripts', 'handeye_calibrate')()) diff --git a/install/arm_application/lib/arm_application/handeye_teach b/install/arm_application/lib/arm_application/handeye_teach index cb30156..9e55a1c 100755 --- a/install/arm_application/lib/arm_application/handeye_teach +++ b/install/arm_application/lib/arm_application/handeye_teach @@ -1,10 +1,10 @@ #!/home/cc/anaconda3/envs/ros_flexiv/bin/python3.11 -# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application==0.1.0','console_scripts','handeye_teach' +# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application','console_scripts','handeye_teach' import re import sys # for compatibility with easy_install; see #2198 -__requires__ = 'arm-application==0.1.0' +__requires__ = 'arm-application' try: from importlib.metadata import distribution @@ -30,4 +30,4 @@ globals().setdefault('load_entry_point', importlib_load_entry_point) if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(load_entry_point('arm-application==0.1.0', 'console_scripts', 'handeye_teach')()) + sys.exit(load_entry_point('arm-application', 'console_scripts', 'handeye_teach')()) diff --git a/install/arm_application/lib/arm_application/handeye_waypoints b/install/arm_application/lib/arm_application/handeye_waypoints index 461792e..e9ac708 100755 --- a/install/arm_application/lib/arm_application/handeye_waypoints +++ b/install/arm_application/lib/arm_application/handeye_waypoints @@ -1,10 +1,10 @@ #!/home/cc/anaconda3/envs/ros_flexiv/bin/python3.11 -# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application==0.1.0','console_scripts','handeye_waypoints' +# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application','console_scripts','handeye_waypoints' import re import sys # for compatibility with easy_install; see #2198 -__requires__ = 'arm-application==0.1.0' +__requires__ = 'arm-application' try: from importlib.metadata import distribution @@ -30,4 +30,4 @@ globals().setdefault('load_entry_point', importlib_load_entry_point) if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(load_entry_point('arm-application==0.1.0', 'console_scripts', 'handeye_waypoints')()) + sys.exit(load_entry_point('arm-application', 'console_scripts', 'handeye_waypoints')()) diff --git a/install/arm_application/lib/arm_application/hole_detect b/install/arm_application/lib/arm_application/hole_detect index f2b2bc9..cc928b1 100755 --- a/install/arm_application/lib/arm_application/hole_detect +++ b/install/arm_application/lib/arm_application/hole_detect @@ -1,10 +1,10 @@ #!/home/cc/anaconda3/envs/ros_flexiv/bin/python3.11 -# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application==0.1.0','console_scripts','hole_detect' +# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application','console_scripts','hole_detect' import re import sys # for compatibility with easy_install; see #2198 -__requires__ = 'arm-application==0.1.0' +__requires__ = 'arm-application' try: from importlib.metadata import distribution @@ -30,4 +30,4 @@ globals().setdefault('load_entry_point', importlib_load_entry_point) if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(load_entry_point('arm-application==0.1.0', 'console_scripts', 'hole_detect')()) + sys.exit(load_entry_point('arm-application', 'console_scripts', 'hole_detect')()) diff --git a/install/arm_application/lib/arm_application/move_to_pose_client b/install/arm_application/lib/arm_application/move_to_pose_client index 73cf946..d352fd4 100755 --- a/install/arm_application/lib/arm_application/move_to_pose_client +++ b/install/arm_application/lib/arm_application/move_to_pose_client @@ -1,10 +1,10 @@ #!/home/cc/anaconda3/envs/ros_flexiv/bin/python3.11 -# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application==0.1.0','console_scripts','move_to_pose_client' +# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application','console_scripts','move_to_pose_client' import re import sys # for compatibility with easy_install; see #2198 -__requires__ = 'arm-application==0.1.0' +__requires__ = 'arm-application' try: from importlib.metadata import distribution @@ -30,4 +30,4 @@ globals().setdefault('load_entry_point', importlib_load_entry_point) if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(load_entry_point('arm-application==0.1.0', 'console_scripts', 'move_to_pose_client')()) + sys.exit(load_entry_point('arm-application', 'console_scripts', 'move_to_pose_client')()) diff --git a/install/arm_application/lib/arm_application/perception_node b/install/arm_application/lib/arm_application/perception_node index 8679a28..cd09119 100755 --- a/install/arm_application/lib/arm_application/perception_node +++ b/install/arm_application/lib/arm_application/perception_node @@ -1,10 +1,10 @@ #!/home/cc/anaconda3/envs/ros_flexiv/bin/python3.11 -# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application==0.1.0','console_scripts','perception_node' +# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application','console_scripts','perception_node' import re import sys # for compatibility with easy_install; see #2198 -__requires__ = 'arm-application==0.1.0' +__requires__ = 'arm-application' try: from importlib.metadata import distribution @@ -30,4 +30,4 @@ globals().setdefault('load_entry_point', importlib_load_entry_point) if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(load_entry_point('arm-application==0.1.0', 'console_scripts', 'perception_node')()) + sys.exit(load_entry_point('arm-application', 'console_scripts', 'perception_node')()) diff --git a/install/arm_application/lib/arm_application/realsense_color_pub b/install/arm_application/lib/arm_application/realsense_color_pub index 1453e5a..3881ab2 100755 --- a/install/arm_application/lib/arm_application/realsense_color_pub +++ b/install/arm_application/lib/arm_application/realsense_color_pub @@ -1,10 +1,10 @@ #!/home/cc/anaconda3/envs/ros_flexiv/bin/python3.11 -# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application==0.1.0','console_scripts','realsense_color_pub' +# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application','console_scripts','realsense_color_pub' import re import sys # for compatibility with easy_install; see #2198 -__requires__ = 'arm-application==0.1.0' +__requires__ = 'arm-application' try: from importlib.metadata import distribution @@ -30,4 +30,4 @@ globals().setdefault('load_entry_point', importlib_load_entry_point) if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(load_entry_point('arm-application==0.1.0', 'console_scripts', 'realsense_color_pub')()) + sys.exit(load_entry_point('arm-application', 'console_scripts', 'realsense_color_pub')()) diff --git a/install/arm_application/lib/arm_application/realsense_view b/install/arm_application/lib/arm_application/realsense_view index 48049cf..43f31d0 100755 --- a/install/arm_application/lib/arm_application/realsense_view +++ b/install/arm_application/lib/arm_application/realsense_view @@ -1,10 +1,10 @@ #!/home/cc/anaconda3/envs/ros_flexiv/bin/python3.11 -# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application==0.1.0','console_scripts','realsense_view' +# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application','console_scripts','realsense_view' import re import sys # for compatibility with easy_install; see #2198 -__requires__ = 'arm-application==0.1.0' +__requires__ = 'arm-application' try: from importlib.metadata import distribution @@ -30,4 +30,4 @@ globals().setdefault('load_entry_point', importlib_load_entry_point) if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(load_entry_point('arm-application==0.1.0', 'console_scripts', 'realsense_view')()) + sys.exit(load_entry_point('arm-application', 'console_scripts', 'realsense_view')()) diff --git a/install/arm_application/lib/arm_application/run_joint_trajectory b/install/arm_application/lib/arm_application/run_joint_trajectory index 19b0f14..18e3e1b 100755 --- a/install/arm_application/lib/arm_application/run_joint_trajectory +++ b/install/arm_application/lib/arm_application/run_joint_trajectory @@ -1,10 +1,10 @@ #!/home/cc/anaconda3/envs/ros_flexiv/bin/python3.11 -# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application==0.1.0','console_scripts','run_joint_trajectory' +# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application','console_scripts','run_joint_trajectory' import re import sys # for compatibility with easy_install; see #2198 -__requires__ = 'arm-application==0.1.0' +__requires__ = 'arm-application' try: from importlib.metadata import distribution @@ -30,4 +30,4 @@ globals().setdefault('load_entry_point', importlib_load_entry_point) if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(load_entry_point('arm-application==0.1.0', 'console_scripts', 'run_joint_trajectory')()) + sys.exit(load_entry_point('arm-application', 'console_scripts', 'run_joint_trajectory')()) diff --git a/install/arm_application/lib/arm_application/servo_node b/install/arm_application/lib/arm_application/servo_node index 66bfece..113d9ea 100755 --- a/install/arm_application/lib/arm_application/servo_node +++ b/install/arm_application/lib/arm_application/servo_node @@ -1,10 +1,10 @@ #!/home/cc/anaconda3/envs/ros_flexiv/bin/python3.11 -# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application==0.1.0','console_scripts','servo_node' +# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application','console_scripts','servo_node' import re import sys # for compatibility with easy_install; see #2198 -__requires__ = 'arm-application==0.1.0' +__requires__ = 'arm-application' try: from importlib.metadata import distribution @@ -30,4 +30,4 @@ globals().setdefault('load_entry_point', importlib_load_entry_point) if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(load_entry_point('arm-application==0.1.0', 'console_scripts', 'servo_node')()) + sys.exit(load_entry_point('arm-application', 'console_scripts', 'servo_node')()) diff --git a/install/arm_application/lib/arm_application/stage2_locate b/install/arm_application/lib/arm_application/stage2_locate index 56a842a..94ac024 100755 --- a/install/arm_application/lib/arm_application/stage2_locate +++ b/install/arm_application/lib/arm_application/stage2_locate @@ -1,10 +1,10 @@ #!/home/cc/anaconda3/envs/ros_flexiv/bin/python3.11 -# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application==0.1.0','console_scripts','stage2_locate' +# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application','console_scripts','stage2_locate' import re import sys # for compatibility with easy_install; see #2198 -__requires__ = 'arm-application==0.1.0' +__requires__ = 'arm-application' try: from importlib.metadata import distribution @@ -30,4 +30,4 @@ globals().setdefault('load_entry_point', importlib_load_entry_point) if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(load_entry_point('arm-application==0.1.0', 'console_scripts', 'stage2_locate')()) + sys.exit(load_entry_point('arm-application', 'console_scripts', 'stage2_locate')()) diff --git a/install/arm_application/lib/arm_application/stage3_search b/install/arm_application/lib/arm_application/stage3_search index f1a3a02..4e25cb9 100755 --- a/install/arm_application/lib/arm_application/stage3_search +++ b/install/arm_application/lib/arm_application/stage3_search @@ -1,10 +1,10 @@ #!/home/cc/anaconda3/envs/ros_flexiv/bin/python3.11 -# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application==0.1.0','console_scripts','stage3_search' +# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application','console_scripts','stage3_search' import re import sys # for compatibility with easy_install; see #2198 -__requires__ = 'arm-application==0.1.0' +__requires__ = 'arm-application' try: from importlib.metadata import distribution @@ -30,4 +30,4 @@ globals().setdefault('load_entry_point', importlib_load_entry_point) if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(load_entry_point('arm-application==0.1.0', 'console_scripts', 'stage3_search')()) + sys.exit(load_entry_point('arm-application', 'console_scripts', 'stage3_search')()) diff --git a/install/arm_application/lib/arm_application/tactile b/install/arm_application/lib/arm_application/tactile index 952fc9f..36ea5a5 100755 --- a/install/arm_application/lib/arm_application/tactile +++ b/install/arm_application/lib/arm_application/tactile @@ -1,10 +1,10 @@ #!/home/cc/anaconda3/envs/ros_flexiv/bin/python3.11 -# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application==0.1.0','console_scripts','tactile' +# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application','console_scripts','tactile' import re import sys # for compatibility with easy_install; see #2198 -__requires__ = 'arm-application==0.1.0' +__requires__ = 'arm-application' try: from importlib.metadata import distribution @@ -30,4 +30,4 @@ globals().setdefault('load_entry_point', importlib_load_entry_point) if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(load_entry_point('arm-application==0.1.0', 'console_scripts', 'tactile')()) + sys.exit(load_entry_point('arm-application', 'console_scripts', 'tactile')()) diff --git a/install/arm_application/lib/arm_application/tactile_cli b/install/arm_application/lib/arm_application/tactile_cli index 570ae0f..4fbccf6 100755 --- a/install/arm_application/lib/arm_application/tactile_cli +++ b/install/arm_application/lib/arm_application/tactile_cli @@ -1,10 +1,10 @@ #!/home/cc/anaconda3/envs/ros_flexiv/bin/python3.11 -# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application==0.1.0','console_scripts','tactile_cli' +# EASY-INSTALL-ENTRY-SCRIPT: 'arm-application','console_scripts','tactile_cli' import re import sys # for compatibility with easy_install; see #2198 -__requires__ = 'arm-application==0.1.0' +__requires__ = 'arm-application' try: from importlib.metadata import distribution @@ -30,4 +30,4 @@ globals().setdefault('load_entry_point', importlib_load_entry_point) if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(load_entry_point('arm-application==0.1.0', 'console_scripts', 'tactile_cli')()) + sys.exit(load_entry_point('arm-application', 'console_scripts', 'tactile_cli')()) diff --git a/install/arm_application/lib/python3.11/site-packages/arm-application.egg-link b/install/arm_application/lib/python3.11/site-packages/arm-application.egg-link new file mode 100644 index 0000000..ef45187 --- /dev/null +++ b/install/arm_application/lib/python3.11/site-packages/arm-application.egg-link @@ -0,0 +1,2 @@ +/home/cc/ros2/build/arm_application +. \ No newline at end of file diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/__init__.py b/install/arm_application/lib/python3.11/site-packages/arm_application/__init__.py deleted file mode 100644 index 3f4946f..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/__init__.py +++ /dev/null @@ -1,32 +0,0 @@ -"""arm_application —— Flexiv Rizon + D405 + DH 夹爪的现场节点包。 - -对外可直接运行的 ROS 程序(见 ``setup.py`` 的 ``console_scripts``) ------------------------------------------------------------------- -相机: realsense_color_pub -感知: perception_node -伺服: servo_node -手眼: handeye_teach、handeye_waypoints、handeye_calibrate -夹爪: dh_pgea、dh_pgea_cli、dual_gripper、dual_gripper_cli -入孔检测: hole_detect -触觉: tactile、tactile_cli -辅助: goto_ee_plane、demo_named_poses、run_joint_trajectory - -可复用的 Python 模块(可以在你自己的节点里 import) ------------------------------------------------------------------- -``yolo_detector`` YOLO / TensorRT 推理 + ``pick_best`` 挑最优框 -``box_tracker`` 像素平面内的匀速模型框预测(丢帧时"滑行"用) -``plane_feature`` 在 YOLO 框内取立体平面的质心 -``dh_pgea`` 大寰 PGEA 的官方 Modbus RTU 客户端 -``dh_official`` ``dual_gripper`` 用的 DH Modbus 客户端 -``dual_gripper`` 左 PGEA + 右 RGI -``hole_detector`` yolo / hough / two_stage 三种孔心检测 -``orisys_tactile`` Orisys 视触觉适配器 -``geom_ik`` Rizon 几何雅可比 / DLS / 手眼加载 -``handeye_lib`` 棋盘格 + OpenCV ``calibrateHandEye`` -``handeye_realsense`` D405 的话题 / 序列号辅助 -``pid_controller`` 带积分分离的 PID -``kalman_filter`` 三维匀速模型卡尔曼滤波 - -现场操作请走 ``scripts/*.sh`` 和 ``config/site.yaml``,不要直接 import 这些模块。 -接口契约见 ``docs/INTERFACES.md``。 -""" diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/box_tracker.py b/install/arm_application/lib/python3.11/site-packages/arm_application/box_tracker.py deleted file mode 100644 index daf8786..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/box_tracker.py +++ /dev/null @@ -1,85 +0,0 @@ -#!/usr/bin/env python3 -"""针对 YOLO ``xyxy`` 框(像素坐标系)的匀速跟踪器。 - -用于避免工件快速运动时丢失锁定:下一帧的闸门使用*预测*框, -短暂的 YOLO 漏检则由惯性滑行(coast)维持叠加显示。 -""" - -from __future__ import annotations - -from typing import Optional, Tuple - -import numpy as np - - -def _center(xyxy: np.ndarray) -> np.ndarray: - return np.array( - [0.5 * (float(xyxy[0]) + float(xyxy[2])), 0.5 * (float(xyxy[1]) + float(xyxy[3]))], - dtype=float, - ) - - -def _wh(xyxy: np.ndarray) -> Tuple[float, float]: - return ( - max(8.0, float(xyxy[2]) - float(xyxy[0])), - max(8.0, float(xyxy[3]) - float(xyxy[1])), - ) - - -class BoxTracker: - def __init__( - self, - *, - vmax_px_s: float = 1800.0, - v_lpf: float = 0.70, - max_dt: float = 0.25, - ) -> None: - self.vmax_px_s = float(vmax_px_s) - self.v_lpf = float(np.clip(v_lpf, 0.05, 1.0)) - self.max_dt = float(max_dt) - self.xyxy: Optional[np.ndarray] = None - self.v = np.zeros(2, dtype=float) # 中心点 px/s - self.t: Optional[float] = None - - def reset(self) -> None: - self.xyxy = None - self.v[:] = 0.0 - self.t = None - - def predict(self, t: float, img_wh: Optional[Tuple[int, int]] = None) -> Optional[np.ndarray]: - if self.xyxy is None: - return None - out = self.xyxy.copy() - if self.t is None: - return out - dt = float(np.clip(t - self.t, 0.0, self.max_dt)) - if dt <= 1e-4: - return out - c = _center(out) + self.v * dt - w, h = _wh(out) - x1, y1 = c[0] - 0.5 * w, c[1] - 0.5 * h - x2, y2 = c[0] + 0.5 * w, c[1] + 0.5 * h - if img_wh is not None: - iw, ih = float(img_wh[0]), float(img_wh[1]) - x1 = float(np.clip(x1, 0.0, iw - 2.0)) - y1 = float(np.clip(y1, 0.0, ih - 2.0)) - x2 = float(np.clip(x2, x1 + 4.0, iw)) - y2 = float(np.clip(y2, y1 + 4.0, ih)) - return np.array([x1, y1, x2, y2], dtype=float) - - def update(self, xyxy: np.ndarray, t: float) -> None: - xyxy = np.asarray(xyxy, dtype=float).reshape(4) - c = _center(xyxy) - if self.xyxy is not None and self.t is not None: - dt = float(t - self.t) - if dt > 0.28: - self.v[:] = 0.0 - elif dt > 1e-3: - inst = (c - _center(self.xyxy)) / dt - n = float(np.hypot(inst[0], inst[1])) - if n > self.vmax_px_s > 0.0: - inst = inst * (self.vmax_px_s / n) - a = self.v_lpf - self.v = a * inst + (1.0 - a) * self.v - self.xyxy = xyxy.copy() - self.t = float(t) diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/demo_named_poses.py b/install/arm_application/lib/python3.11/site-packages/arm_application/demo_named_poses.py deleted file mode 100644 index 40cff4f..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/demo_named_poses.py +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/env python3 -"""演示:通过 ``/set_named_pose`` 循环切换命名位姿(对任何后端都适用)。""" - -from __future__ import annotations - -import time - -import rclpy -from rclpy.node import Node - -from arm_msgs.srv import SetNamedPose - -from arm_application.ros_node import TolerantNode - - -class DemoNamedPoses(TolerantNode): - def __init__(self) -> None: - super().__init__('demo_named_poses') - self.declare_parameter( - 'poses', ['home', 'ready', 'inspect', 'pos_left', 'home'] - ) - self.declare_parameter('velocity_scale', 0.5) - self.declare_parameter('dwell_sec', 0.3) - self.declare_parameter('loops', 1) - self.poses = list( - self.get_parameter('poses').get_parameter_value().string_array_value - or ['home', 'ready', 'inspect', 'home'] - ) - self.velocity_scale = float(self.get_parameter('velocity_scale').value) - self.dwell_sec = float(self.get_parameter('dwell_sec').value) - self.loops = int(self.get_parameter('loops').value) - self._cli = self.create_client(SetNamedPose, 'set_named_pose') - - def run(self) -> int: - if not self._cli.wait_for_service(timeout_sec=15.0): - self.get_logger().error('``/set_named_pose`` 服务不可用') - return 1 - for loop in range(max(self.loops, 1)): - self.get_logger().info(f'第 {loop + 1}/{self.loops} 轮') - for pose in self.poses: - req = SetNamedPose.Request() - req.pose_name = pose - req.velocity_scale = self.velocity_scale - req.acceleration_scale = self.velocity_scale - fut = self._cli.call_async(req) - deadline = time.monotonic() + 60.0 - while rclpy.ok() and not fut.done(): - rclpy.spin_once(self, timeout_sec=0.05) - if time.monotonic() > deadline: - self.get_logger().error(f'{pose} 调用超时') - return 2 - res = fut.result() - if res is None or not res.success: - self.get_logger().error( - f'{pose} 执行失败:{res.message if res else "无响应"}' - ) - return 3 - self.get_logger().info(f'{pose}:{res.message}') - time.sleep(self.dwell_sec) - self.get_logger().info('演示结束') - return 0 - - -def main(args=None) -> None: - rclpy.init(args=args) - node = DemoNamedPoses() - code = 1 - try: - code = node.run() - except KeyboardInterrupt: - code = 0 - finally: - node.destroy_node() - if rclpy.ok(): - rclpy.shutdown() - raise SystemExit(code) - - -if __name__ == '__main__': - main() diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/dh_official.py b/install/arm_application/lib/python3.11/site-packages/arm_application/dh_official.py deleted file mode 100644 index 2467ae9..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/dh_official.py +++ /dev/null @@ -1,286 +0,0 @@ -"""DH-Robotics 官方 Modbus RTU 控制(非 Flexiv RDK)。 - -覆盖两类设备: -- PGE/PGEA 平行夹爪:初始化 0x0100,力 0x0101,位置 0x0103(0~1000‰),速度 0x0104。 -- RGI 旋转夹爪:在平行夹爪寄存器基础上,增加旋转角度 0x0105、旋转速度 0x0107、 - 旋转力 0x0108;反馈增加旋转角度 0x0208、旋转初始化状态 0x020A、旋转状态 0x020B。 - -说明: -- RGI 手册示例中负角度使用“反码/one's complement”:+360 -> 0x0168,-360 -> 0xFE97。 - 因此这里默认按 one's complement 编解码;若后续厂家确认为 two's complement,只改 - `_encode_signed` / `_decode_signed` 两处即可。 -- 写位置/角度寄存器后会立即运动,没有 ChangingTek SDK 的 0x0108 触发寄存器。 -""" - -from __future__ import annotations - -import threading -import time -from typing import Iterable - - -# ============================================================================= -# DH-Robotics Modbus 寄存器映射 -# ============================================================================= - -# 基础控制寄存器(保持寄存器,功能码 03/06/10) -REG_INIT = 0x0100 # 0x01 初始化,0xA5 完全初始化 -REG_FORCE = 0x0101 # 夹爪闭合力,20~100 % -REG_POSITION = 0x0103 # 手指参考位置,0~1000 千分比 -REG_SPEED = 0x0104 # 手指开合速度,1~100 % - -# RGI 旋转控制寄存器 -REG_ROTATION_ANGLE = 0x0105 # 目标旋转角度,有符号角度值 -REG_ROTATION_SPEED = 0x0107 # 旋转速度,1~100 % -REG_ROTATION_FORCE = 0x0108 # 旋转力/力矩,20~100 % - -# 反馈寄存器 -REG_INIT_STATE = 0x0200 # 0 未初始化,1 已初始化,2 初始化中 -REG_GRIPPER_STATE = 0x0201 # 0 运动中,1 已到位,2 已夹到物体,3 物体掉落 -REG_CURRENT_POSITION = 0x0202 # 当前手指位置,千分比 -REG_ROTATION_ANGLE_FB = 0x0208 # 当前旋转角度,有符号角度值 -REG_ROTATION_INIT_STATE = 0x020A # 0 未初始化,1 已初始化,2 初始化中 -REG_ROTATION_STATE = 0x020B # 0 运动中,1 已到位,2 受阻,3 曾经受阻 - -# 配置寄存器 -REG_SAVE_PARAMS = 0x0300 # 写入 1 可把所有参数保存到 flash - - -class DHModbusError(RuntimeError): - """DH Modbus 通信或协议错误。""" - - -def _clamp_int(value: float | int, lo: int, hi: int) -> int: - return int(max(lo, min(hi, int(round(float(value)))))) - - -def _encode_signed(value: float | int) -> int: - """把有符号角度值编码为 DH 的反码(one's complement)寄存器值。 - - RGI 手册示例:+360 -> 0x0168,-360 -> 0xFE97。 - """ - value = _clamp_int(value, -32767, 32767) - if value >= 0: - return value & 0xFFFF - return (~abs(value)) & 0xFFFF - - -def _decode_signed(raw: int) -> int: - """把 DH 的反码(one's complement)寄存器值解码为有符号整数。""" - raw = int(raw) & 0xFFFF - if raw & 0x8000: - mag = (~raw) & 0x7FFF - return -mag - return raw & 0x7FFF - - -class DHModbusClient: - """面向 DH-Robotics 夹爪的最小线程安全 Modbus RTU 客户端。""" - - def __init__( - self, - port: str, - slave_id: int = 1, - baudrate: int = 115200, - timeout: float = 0.2, - *, - bytesize: int = 8, - parity: str = "N", - stopbits: int = 1, - ) -> None: - try: - import minimalmodbus - import serial - except ImportError as exc: # pragma: no cover - 取决于运行时环境 - raise DHModbusError( - "缺少 minimalmodbus/pyserial。请先安装:pip install minimalmodbus pyserial" - ) from exc - - parity_map = { - "N": serial.PARITY_NONE, - "E": serial.PARITY_EVEN, - "O": serial.PARITY_ODD, - } - self.instrument = minimalmodbus.Instrument(port, int(slave_id)) - self.instrument.serial.baudrate = int(baudrate) - self.instrument.serial.bytesize = int(bytesize) - self.instrument.serial.parity = parity_map.get(str(parity).upper(), serial.PARITY_NONE) - self.instrument.serial.stopbits = int(stopbits) - self.instrument.serial.timeout = float(timeout) - self.instrument.mode = minimalmodbus.MODE_RTU - self.instrument.clear_buffers_before_each_transaction = True - try: - self.instrument.serial.exclusive = True - except Exception: - pass - self._lock = threading.Lock() - self.port = port - - def close(self) -> None: - with self._lock: - try: - self.instrument.serial.close() - except Exception: - pass - - # ------------------------------------------------------------------ - # 底层寄存器读写 - # ------------------------------------------------------------------ - def write_register(self, address: int, value: int) -> None: - value = _clamp_int(value, 0, 0xFFFF) - last_exc: Exception | None = None - for attempt in range(3): - try: - with self._lock: - self.instrument.write_register(address, value, functioncode=6) - return - except Exception as exc: - last_exc = exc - time.sleep(0.05 * (attempt + 1)) - raise DHModbusError(f"写寄存器 0x{address:04X}={value} 失败: {last_exc}") from last_exc - - def read_register(self, address: int) -> int: - last_exc: Exception | None = None - for attempt in range(3): - try: - with self._lock: - return int(self.instrument.read_register(address, functioncode=3)) - except Exception as exc: - last_exc = exc - time.sleep(0.05 * (attempt + 1)) - hint = "" - text = str(last_exc).lower() - if "multiple access" in text or "no data" in text: - hint = f"。串口 {getattr(self, 'port', '')} 可能被其它进程占用,先执行: fuser -k {getattr(self, 'port', '/dev/ttyUSB*')}" - raise DHModbusError(f"读寄存器 0x{address:04X} 失败: {last_exc}{hint}") from last_exc - - def write_registers(self, address: int, values: Iterable[int]) -> None: - vals = [_clamp_int(v, 0, 0xFFFF) for v in values] - with self._lock: - self.instrument.write_registers(address, vals) - - def read_registers(self, address: int, count: int) -> list[int]: - with self._lock: - return [int(v) for v in self.instrument.read_registers(address, count, functioncode=3)] - - def write_signed_register(self, address: int, value: float | int) -> None: - self.write_register(address, _encode_signed(value)) - - def read_signed_register(self, address: int) -> int: - return _decode_signed(self.read_register(address)) - - # ------------------------------------------------------------------ - # PGE/PGEA/RGI 通用控制 - # ------------------------------------------------------------------ - def initialize(self, *, full: bool = False, rotation: bool = False, timeout: float = 10.0) -> None: - """初始化/回零夹爪,并等待其就绪。""" - self.write_register(REG_INIT, 0xA5 if full else 0x01) - start = time.monotonic() - while time.monotonic() - start < timeout: - init_state = self.read_register(REG_INIT_STATE) - rot_ok = True - if rotation: - rot_ok = self.read_register(REG_ROTATION_INIT_STATE) == 1 - if init_state == 1 and rot_ok: - return - time.sleep(0.1) - raise DHModbusError(f"夹爪初始化超时(>{timeout:.1f}s)") - - def save_parameters(self) -> None: - self.write_register(REG_SAVE_PARAMS, 1) - - def set_force_pct(self, force_pct: float | int) -> int: - value = _clamp_int(force_pct, 20, 100) - self.write_register(REG_FORCE, value) - return value - - def set_speed_pct(self, speed_pct: float | int) -> int: - value = _clamp_int(speed_pct, 1, 100) - self.write_register(REG_SPEED, value) - return value - - def set_position_per_mille(self, position: float | int) -> int: - value = _clamp_int(position, 0, 1000) - # 与 dh_pgea.latched_position_break 同一份:命令已是目标时先写当前位置, - # 读回之后再写最终值。60ms 后写回旧命令,固件采样不到,手指不动。 - from arm_application.dh_pgea import latched_position_break - - try: - cmd = _clamp_int(self.read_register(REG_POSITION), 0, 1000) - except Exception: - cmd = value - try: - cur = self.get_position_per_mille() - except Exception: - cur = value - bridge = latched_position_break(cmd, cur, value) - if bridge is not None: - self.write_register(REG_POSITION, bridge) - deadline = time.monotonic() + 0.6 - echoed = False - while time.monotonic() < deadline: - try: - if _clamp_int(self.read_register(REG_POSITION), 0, 1000) == bridge: - echoed = True - break - except Exception: - pass - time.sleep(0.05) - if not echoed: - raise DHModbusError( - f"位置命令中间值 {bridge} 没有读回,不再写入最终目标 {value}" - ) - time.sleep(0.15) - self.write_register(REG_POSITION, value) - return value - - def get_position_per_mille(self) -> int: - return _clamp_int(self.read_register(REG_CURRENT_POSITION), 0, 1000) - - def get_gripper_state(self) -> int: - return self.read_register(REG_GRIPPER_STATE) - - def get_init_state(self) -> int: - return self.read_register(REG_INIT_STATE) - - def hold_current_position(self) -> None: - """在没有专用停止寄存器的 DH 夹爪上尽力停止/保持。""" - self.set_position_per_mille(self.get_position_per_mille()) - - # ------------------------------------------------------------------ - # RGI 旋转控制 - # ------------------------------------------------------------------ - def set_rotation_speed_pct(self, speed_pct: float | int) -> int: - value = _clamp_int(speed_pct, 1, 100) - self.write_register(REG_ROTATION_SPEED, value) - return value - - def set_rotation_force_pct(self, force_pct: float | int) -> int: - value = _clamp_int(force_pct, 20, 100) - self.write_register(REG_ROTATION_FORCE, value) - return value - - def set_rotation_angle_deg(self, angle_deg: float | int) -> int: - angle = _clamp_int(angle_deg, -32767, 32767) - self.write_signed_register(REG_ROTATION_ANGLE, angle) - return angle - - def get_rotation_angle_raw(self) -> int: - return self.read_register(REG_ROTATION_ANGLE_FB) & 0xFFFF - - def get_rotation_angle_deg(self) -> int: - return self.read_signed_register(REG_ROTATION_ANGLE_FB) - - def get_rotation_init_state(self) -> int: - return self.read_register(REG_ROTATION_INIT_STATE) - - def get_rotation_state(self) -> int: - return self.read_register(REG_ROTATION_STATE) - - def hold_current_rotation(self) -> None: - """重新下发当前反馈角度来停止旋转。""" - self.write_register(REG_ROTATION_ANGLE, self.get_rotation_angle_raw()) - - def hold_current_all(self) -> None: - self.hold_current_position() - self.hold_current_rotation() diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/dh_pgea.py b/install/arm_application/lib/python3.11/site-packages/arm_application/dh_pgea.py deleted file mode 100644 index 117d46a..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/dh_pgea.py +++ /dev/null @@ -1,725 +0,0 @@ -#!/usr/bin/env python3 -"""DH Robotics PGE / PGEA Modbus RTU 客户端。 - -移植自官方 C++ 驱动: - DH-Robotics/dh_gripper_ros → DH_Modbus_Gripper - (工厂会按型号名里是否包含 ``PGE`` / ``PGEA`` 映射到本类) - -Flexiv RDK 的 ``Gripper`` 驱动不了这个夹爪:它不是 Studio Device。 -改用 RS485(USB–UART)通信,寄存器与 DH 的 ROS 驱动完全一致。 - -寄存器(保持寄存器,FC03 读 / FC06 写,CRC-16/Modbus 小端): - 0x0100 初始化,写 0xA5 - 0x0101 力 20–100 % - 0x0103 位置 0–1000 ‰ - 0x0104 速度 1–100 % - 0x0200 初始化状态 0=需要 1=完成 2=进行中 - 0x0201 夹持状态 0=运动中 1=已到位 2=已夹住 3=已掉落 - 0x0202 当前位置 -""" - -from __future__ import annotations - -import argparse -import sys -import threading -import time -from dataclasses import dataclass -from typing import Optional - -try: - import serial -except ImportError as exc: # pragma: no cover - raise SystemExit( - "缺少 pyserial。在 conda 环境 ros_flexiv 里执行:pip install pyserial" - ) from exc - - -# 官方 CRC-16/Modbus(与 dh_modbus_gripper.cpp 使用同一张表)。 -_CRC_TABLE = ( - 0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241, - 0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440, - 0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40, - 0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841, - 0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40, - 0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41, - 0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641, - 0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040, - 0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240, - 0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441, - 0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41, - 0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840, - 0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41, - 0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40, - 0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640, - 0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041, - 0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240, - 0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441, - 0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41, - 0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840, - 0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41, - 0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40, - 0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640, - 0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041, - 0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241, - 0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440, - 0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40, - 0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841, - 0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40, - 0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41, - 0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641, - 0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040, -) - -REG_INIT = 0x0100 -REG_FORCE = 0x0101 -REG_POSITION = 0x0103 -REG_SPEED = 0x0104 -REG_INIT_STATE = 0x0200 -REG_GRIP_STATE = 0x0201 -REG_CUR_POSITION = 0x0202 - -INIT_CMD = 0xA5 - -S_INIT_NOT = 0 -S_INIT_FINISHED = 1 -S_INIT_DOING = 2 - -S_GRIP_MOVING = 0 -S_GRIP_ARRIVED = 1 -S_GRIP_CAUGHT = 2 -S_GRIP_DROPPED = 3 - -GRIP_STATE_NAME = { - S_GRIP_MOVING: "moving", - S_GRIP_ARRIVED: "arrived", - S_GRIP_CAUGHT: "caught", - S_GRIP_DROPPED: "dropped", -} - -INIT_STATE_NAME = { - S_INIT_NOT: "need_init", - S_INIT_FINISHED: "initialized", - S_INIT_DOING: "initializing", -} - - -def latched_position_break(command: int, current: int, target: int) -> Optional[int]: - """命令寄存器已经等于目标、手指却不在目标上时,返回要先写入的中间位置。 - - 大寰固件:再写一遍与 0x0103 当前值相同的数,不会启动新运动。 - 开爪卡在 caught 时就是这样——命令已是 1000,手指停在夹持位。 - 先把命令改成当前位置(手指本来就在这,不会再夹紧),等读回确认 - 固件已经采样,再写最终目标。只 sleep 几十毫秒就写回旧值,控制周期 - 来不及看到中间值,最终仍是旧命令,手指不动。 - """ - cmd = int(max(0, min(1000, command))) - cur = int(max(0, min(1000, current))) - pos = int(max(0, min(1000, target))) - if cmd != pos or abs(cur - pos) <= 25: - return None - if cur != cmd: - return cur - return 0 if cmd != 0 else 40 - - -def grip_motion_settled( - grip_state: int, position: int, target: int, seen_motion: bool -) -> bool: - """这一拍能不能算「这句位置命令已经结束」。 - - 张开前本来就是 caught、位置还停在夹持位:不能当成张开完成。 - 闭合夹住物体:动过之后停在比目标更开的位置,算完成。 - """ - near = abs(int(position) - int(target)) <= 25 - if grip_state in (S_GRIP_ARRIVED, S_GRIP_DROPPED) and near: - return True - if grip_state == S_GRIP_CAUGHT and seen_motion: - if int(target) + 25 < int(position): - return True - if near: - return True - return False - - -def crc16_modbus(data: bytes) -> int: - """官方 DH CRC16(Modbus,线路上按小端发送)。""" - crc = 0xFFFF - for byte in data: - crc = (crc >> 8) ^ _CRC_TABLE[(crc ^ byte) & 0xFF] - return crc - - -def _frame(slave: int, func: int, index: int, value: int) -> bytes: - body = bytes( - [ - slave & 0xFF, - func & 0xFF, - (index >> 8) & 0xFF, - index & 0xFF, - (value >> 8) & 0xFF, - value & 0xFF, - ] - ) - crc = crc16_modbus(body) - return body + bytes([crc & 0xFF, (crc >> 8) & 0xFF]) - - -@dataclass -class GripperState: - init_state: int = S_INIT_NOT - grip_state: int = S_GRIP_MOVING - position: int = 0 - target_position: int = 0 - target_force: int = 0 - stroke_mm: float = 20.0 - - @property - def initialized(self) -> bool: - return self.init_state == S_INIT_FINISHED - - @property - def width_mm(self) -> float: - return float(self.position) / 1000.0 * float(self.stroke_mm) - - def as_tuple(self) -> tuple[float, float, float, float, float]: - return ( - 1.0 if self.initialized else 0.0, - float(self.grip_state), - float(self.position), - float(self.target_position), - float(self.target_force), - ) - - def summary(self) -> str: - return ( - f"init={INIT_STATE_NAME.get(self.init_state, self.init_state)} " - f"grip={GRIP_STATE_NAME.get(self.grip_state, self.grip_state)} " - f"pos={self.position}/1000 ({self.width_mm:.2f} mm) " - f"target={self.target_position} force={self.target_force}%" - ) - - -class DhPgeaError(RuntimeError): - pass - - -WIRING_HINT = ( - "PC 已发出 Modbus,夹爪 0 字节返回。不是力/速度参数问题。按顺序查:\n" - " 1) 夹爪 24 V DC 已上电(指示灯亮)\n" - " 2) USB 转接头必须是 RS485(A/B),不能是 TTL 的 TX/RX\n" - " 3) A↔A、B↔B;不通就对调 A/B\n" - " 4) 先 Ctrl+C 停节点,再:bash ~/ros2/scripts/run_gripper.sh --cli scan" -) - - -def open_failure_text(port: str, exc: BaseException) -> str: - """串口打不开时把「被占用」和「没应答」分开。 - - 独占锁失败(errno 11)以前和真没上电写成同一句「需要 24 V DC」, - 界面上看起来像缺自动上电,实际是别的进程还握着这个口。 - """ - text = str(exc).lower() - errno = getattr(exc, "errno", None) - busy = errno in (11, 16) or any( - token in text - for token in ( - "temporarily unavailable", - "device or resource busy", - "could not exclusively lock", - "resource busy", - ) - ) - if busy: - return ( - f"无法独占打开 {port}:{exc}。" - "串口已被别的进程占用(夹爪驱动或状态读取)。" - ) - return ( - f"无法打开 {port}:{exc}。" - "需要 24 V DC 供电 + RS485 接线,且当前用户在 dialout 组内。" - ) - - -class DhPgeaGripper: - """面向 PGE / PGEA 的线程安全 Modbus RTU 客户端(官方寄存器映射)。""" - - def __init__( - self, - port: str = "/dev/ttyUSB0", - baudrate: int = 115200, - slave_id: int = 1, - timeout_s: float = 0.25, - stroke_mm: float = 20.0, - rs485_rts: str = "", - ) -> None: - self.port = port - self.baudrate = int(baudrate) - self.slave_id = int(slave_id) - self.timeout_s = float(timeout_s) - self.stroke_mm = float(stroke_mm) - mode = str(rs485_rts or "").strip().lower() - if mode in ("", "off", "none", "false", "0"): - mode = "" - if mode not in ("", "tx", "tx_inv"): - raise DhPgeaError(f"rs485_rts 只能是 ''、tx 或 tx_inv,实际为 {rs485_rts!r}") - self.rs485_rts = mode - self._ser: Optional[serial.Serial] = None - self._lock = threading.Lock() - - def open(self) -> None: - if self._ser is not None and self._ser.is_open: - return - try: - self._ser = serial.Serial( - port=self.port, - baudrate=self.baudrate, - bytesize=serial.EIGHTBITS, - parity=serial.PARITY_NONE, - stopbits=serial.STOPBITS_ONE, - timeout=self.timeout_s, - write_timeout=self.timeout_s, - xonxoff=False, - rtscts=False, - dsrdtr=False, - exclusive=True, - ) - except Exception as exc: - raise DhPgeaError(open_failure_text(self.port, exc)) from exc - try: - self._ser.dtr = True - except Exception: - pass - self._set_tx(False) - self._ser.reset_input_buffer() - self._ser.reset_output_buffer() - time.sleep(0.05) - - def close(self) -> None: - if self._ser is not None: - try: - self._ser.close() - except Exception: - pass - self._ser = None - - def __enter__(self) -> "DhPgeaGripper": - self.open() - return self - - def __exit__(self, *args) -> None: - self.close() - - def write_register(self, index: int, value: int, retries: int = 3) -> bool: - """FC06 写,等待回显(对应官方 WriteRegisterFunc)。""" - frame = _frame(self.slave_id, 0x06, index, int(value) & 0xFFFF) - with self._lock: - for _ in range(max(1, retries)): - if self._transact(frame, 8) == frame: - return True - time.sleep(0.02) - return False - - def read_register(self, index: int, retries: int = 8) -> int: - """FC03 读一个保持寄存器(对应官方 ReadRegisterFunc)。""" - req = _frame(self.slave_id, 0x03, index, 1) - last: Optional[bytes] = None - with self._lock: - for _ in range(max(1, retries)): - rsp = self._transact(req, 7) - last = rsp - if rsp is None or len(rsp) != 7: - time.sleep(0.02) - continue - if crc16_modbus(rsp[:-2]) != (rsp[5] | (rsp[6] << 8)): - continue - if rsp[0] != (self.slave_id & 0xFF) or rsp[1] != 0x03: - continue - return (rsp[3] << 8) | (rsp[4] & 0xFF) - hint = f" last={last.hex() if last else '(empty)'}" - raise DhPgeaError( - f"在 {self.port} 上 Modbus 读 0x{index:04X} 失败 " - f"(无有效应答{hint})。baud={self.baudrate} slave={self.slave_id} " - f"rts={self.rs485_rts or 'off'}" - ) - - def probe(self) -> int: - """短读一次初始化状态。夹爪无应答时会抛异常。""" - return self.read_register(REG_INIT_STATE, retries=2) - - def _set_tx(self, tx: bool) -> None: - if not self.rs485_rts or self._ser is None: - return - try: - if self.rs485_rts == "tx": - self._ser.rts = bool(tx) - else: - self._ser.rts = not bool(tx) - except Exception: - pass - - def _transact(self, frame: bytes, expect: int) -> Optional[bytes]: - if self._ser is None or not self._ser.is_open: - raise DhPgeaError("串口未打开") - bit_s = 10.0 / max(1, self.baudrate) - self._set_tx(True) - if self.rs485_rts: - time.sleep(2.0 * bit_s) - self._ser.reset_input_buffer() - self._ser.write(frame) - self._ser.flush() - if self.rs485_rts: - time.sleep(len(frame) * bit_s + 0.0008) - self._set_tx(False) - deadline = time.monotonic() + self.timeout_s - buf = bytearray() - while time.monotonic() < deadline and len(buf) < expect: - chunk = self._ser.read(expect - len(buf)) - if chunk: - buf.extend(chunk) - return bytes(buf) if buf else None - - def initialization(self) -> bool: - return self.write_register(REG_INIT, INIT_CMD) - - def initialize( - self, timeout_s: float = 20.0, poll_s: float = 0.2, *, force: bool = False - ) -> bool: - """写 0xA5,然后等到初始化状态 == 完成(对应官方上电流程)。 - - ``force=False`` 时,已经完成就不再写(节点启动不要每次都让手指找零)。 - 命令行 ``init`` 必须 ``force=True``:状态字已经是完成时,不写 0xA5 - 手指根本不会回零,看起来像初始化失效。 - """ - state = self.get_init_state() - if state == S_INIT_FINISHED and not force: - return True - if not self.initialization(): - raise DhPgeaError("初始化写 0x0100=0xA5 失败(无 Modbus 回显)") - deadline = time.monotonic() + float(timeout_s) - # force 时必须先看到状态离开「完成」,否则读到的还是写之前的旧值。 - saw_busy = not force - while time.monotonic() < deadline: - state = self.get_init_state() - if state != S_INIT_FINISHED: - saw_busy = True - elif saw_busy: - return True - time.sleep(poll_s) - raise DhPgeaError( - f"初始化在 {timeout_s:.0f}s 后超时(state={state})。" - "首次上电时手指本应先回零一次。" - ) - - def set_target_force(self, force_pct: int) -> bool: - force_pct = int(max(20, min(100, force_pct))) - return self.write_register(REG_FORCE, force_pct) - - def set_target_speed(self, speed_pct: int) -> bool: - speed_pct = int(max(1, min(100, speed_pct))) - return self.write_register(REG_SPEED, speed_pct) - - def _wait_command_echo(self, value: int, timeout_s: float = 0.6) -> bool: - """等到 0x0103 读回就是刚写进去的值。读不回就不要再写下一笔。""" - deadline = time.monotonic() + float(timeout_s) - while time.monotonic() < deadline: - try: - if self.get_target_position(retries=1) == int(value): - return True - except Exception: - pass - time.sleep(0.05) - return False - - def set_target_position(self, pos: int) -> bool: - pos = int(max(0, min(1000, pos))) - try: - cmd = self.get_target_position(retries=2) - except Exception: - cmd = pos - try: - cur = self.get_current_position(retries=2) - except Exception: - cur = pos - bridge = latched_position_break(cmd, cur, pos) - if bridge is not None: - if not self.write_register(REG_POSITION, bridge): - return False - if not self._wait_command_echo(bridge): - return False - # 读回只说明寄存器改了。再留一个控制周期,避免下一笔把中间值盖掉。 - time.sleep(0.15) - return self.write_register(REG_POSITION, pos) - - def wait_settle(self, target: int, timeout_s: float = 6.0) -> GripperState: - """等到到位或夹住,或超时返回最后一帧。 - - 张开前状态字已经是 caught 时不能立刻返回:那是上一句命令的残留, - 手指还停在夹持位。 - """ - t0 = time.monotonic() - last = None - seen_motion = False - st = self.get_run_states() - while time.monotonic() - t0 < timeout_s: - st = self.get_run_states() - if last is not None and st.position != last: - seen_motion = True - last = st.position - if st.grip_state == S_GRIP_MOVING: - seen_motion = True - time.sleep(0.08) - continue - if grip_motion_settled(st.grip_state, st.position, target, seen_motion): - return st - time.sleep(0.08) - return st - - def get_init_state(self, retries: int = 8) -> int: - return self.read_register(REG_INIT_STATE, retries=retries) - - def get_grip_state(self, retries: int = 8) -> int: - return self.read_register(REG_GRIP_STATE, retries=retries) - - def get_current_position(self, retries: int = 8) -> int: - return self.read_register(REG_CUR_POSITION, retries=retries) - - def get_target_position(self, retries: int = 8) -> int: - return self.read_register(REG_POSITION, retries=retries) - - def get_target_force(self, retries: int = 8) -> int: - return self.read_register(REG_FORCE, retries=retries) - - def get_run_states(self, retries: int = 8) -> GripperState: - return GripperState( - init_state=self.get_init_state(retries=retries), - grip_state=self.get_grip_state(retries=retries), - position=self.get_current_position(retries=retries), - target_position=self.get_target_position(retries=retries), - target_force=self.get_target_force(retries=retries), - stroke_mm=self.stroke_mm, - ) - - def open_jaw(self, force: int = 50, speed: int = 50) -> bool: - ok = self.set_target_force(force) - ok = self.set_target_speed(speed) and ok - return self.set_target_position(1000) and ok - - def close_jaw(self, force: int = 50, speed: int = 50) -> bool: - ok = self.set_target_force(force) - ok = self.set_target_speed(speed) and ok - return self.set_target_position(0) and ok - - def move(self, position: int, force: int = 50, speed: int = 50) -> bool: - ok = self.set_target_force(force) - ok = self.set_target_speed(speed) and ok - return self.set_target_position(position) and ok - - -def _selfcheck_crc() -> None: - """官方简短手册示例:设置位置 500。""" - frame = _frame(1, 0x06, 0x0103, 500) - expect = bytes([0x01, 0x06, 0x01, 0x03, 0x01, 0xF4, 0x78, 0x21]) - if frame != expect: - raise AssertionError(f"CRC 不匹配:{frame.hex()} != {expect.hex()}") - - -def _site_defaults() -> dict: - try: - from pathlib import Path - - root = Path(__file__).resolve().parents[3] - sys.path.insert(0, str(root / "scripts" / "lib")) - from export_site_env import load_site # type: ignore - - g = (load_site().get("gripper") or {}) - return { - "port": str(g.get("port") or "/dev/ttyUSB0"), - "baudrate": int(g.get("baud") or 115200), - "slave_id": int(g.get("slave_id") or 1), - "stroke_mm": float(g.get("stroke_mm") or 20.0), - "force": int(g.get("force_pct") or 50), - "speed": int(g.get("speed_pct") or 50), - "rs485_rts": str(g.get("rs485_rts") or ""), - } - except Exception: - return { - "port": "/dev/ttyUSB0", - "baudrate": 115200, - "slave_id": 1, - "stroke_mm": 20.0, - "force": 50, - "speed": 50, - "rs485_rts": "", - } - - -def _scan_bus(port: str) -> int: - """遍历波特率 × 从站号 × RTS,直到某个组合有应答。""" - bauds = (115200, 57600, 38400, 19200, 9600) - slaves = (1, 2, 3) - rts_modes = ("", "tx", "tx_inv") - print(f"扫描 {port}(请先停掉 ROS 节点 —— 该串口是独占的)") - for baud in bauds: - for slave in slaves: - for rts in rts_modes: - label = f"baud={baud} slave={slave} rts={rts or 'off'}" - g = DhPgeaGripper( - port=port, - baudrate=baud, - slave_id=slave, - timeout_s=0.08, - rs485_rts=rts, - ) - try: - g.open() - state = g.probe() - print(f"OK {label} init_state={state}") - print(f" → site.yaml: baud: {baud} slave_id: {slave} rs485_rts: \"{rts}\"") - g.close() - return 0 - except DhPgeaError: - print(f" miss {label}") - finally: - g.close() - print("所有组合都无应答。", file=sys.stderr) - print(WIRING_HINT, file=sys.stderr) - return 1 - - -def ctrl_values( - cmd: str, - value: str = "", - force: int = 50, - speed: int = 50, -) -> Optional[tuple[float, float, float, float]]: - """节点已经占着串口时,改发 ``/gripper/ctrl`` 的四个数。 - - 顺序是初始化、位置千分比、力度、速度。``probe`` / ``status`` 只读,返回 None。 - """ - name = str(cmd or "").strip().lower() - if name in ("probe", "status"): - return None - if name == "init": - return (1.0, 0.0, float(force), float(speed)) - if name == "open": - pos = 1000 - elif name == "close": - pos = 0 - elif name in ("pos", "move"): - if str(value).strip() == "": - raise ValueError("pos 需要 0–1000") - pos = int(round(float(value))) - if pos < 0 or pos > 1000: - raise ValueError("位置只接受 0–1000") - else: - raise ValueError(f"节点在线时不支持 {name}") - return (0.0, float(pos), float(force), float(speed)) - - -def _cli(argv: Optional[list[str]] = None) -> int: - site = _site_defaults() - ap = argparse.ArgumentParser( - description="DH PGEA Modbus 命令行工具(官方寄存器映射,不用 Flexiv RDK)" - ) - ap.add_argument("--port", default=site["port"]) - ap.add_argument("--baud", type=int, default=site["baudrate"]) - ap.add_argument("--slave", type=int, default=site["slave_id"]) - ap.add_argument("--force", type=int, default=site["force"]) - ap.add_argument("--speed", type=int, default=site["speed"]) - ap.add_argument("--rts", default=site.get("rs485_rts") or "", help="RS485 DE:空 | tx | tx_inv") - ap.add_argument( - "cmd", - choices=["probe", "init", "status", "open", "close", "pos", "selfcheck", "scan"], - ) - ap.add_argument("value", nargs="?", default="", help="'pos' 命令的位置,0–1000") - args = ap.parse_args(argv) - - if args.cmd == "selfcheck": - _selfcheck_crc() - print("CRC 自检通过(01 06 01 03 01 F4 78 21)") - return 0 - if args.cmd == "scan": - return _scan_bus(args.port) - - grip = DhPgeaGripper( - port=args.port, - baudrate=args.baud, - slave_id=args.slave, - stroke_mm=float(site["stroke_mm"]), - rs485_rts=args.rts, - ) - try: - grip.open() - except DhPgeaError as exc: - print(f"错误:{exc}", file=sys.stderr) - return 1 - - try: - if args.cmd == "probe": - st = grip.get_run_states(retries=2) - print(st.summary()) - return 0 - if args.cmd == "init": - print("正在初始化(手指回零,已初始化也会再做一次)…") - grip.initialize(force=True) - print(grip.get_run_states().summary()) - return 0 - if args.cmd == "status": - print(grip.get_run_states().summary()) - return 0 - if args.cmd == "open": - if not grip.open_jaw(args.force, args.speed): - raise DhPgeaError("张开写入失败") - st = grip.wait_settle(1000) - print(st.summary()) - if abs(st.position - 1000) > 25: - print( - "张开失败:手指没有离开夹持位。" - "若仍是 grip=caught,先取下工件再执行 init。", - file=sys.stderr, - ) - return 1 - return 0 - if args.cmd == "close": - if not grip.close_jaw(args.force, args.speed): - raise DhPgeaError("闭合写入失败") - st = grip.wait_settle(0) - print(st.summary()) - # 夹住物体时位置停在厚度上,grip=caught 算成功。停在张开位则失败。 - if st.grip_state != S_GRIP_CAUGHT and abs(st.position) > 25: - print("闭合失败:手指没有朝合拢方向离开原位。", file=sys.stderr) - return 1 - return 0 - if args.cmd == "pos": - if args.value == "": - print("用法:pos <0-1000>", file=sys.stderr) - return 2 - pos = int(float(args.value)) - if not grip.move(pos, args.force, args.speed): - raise DhPgeaError("位置写入失败") - st = grip.wait_settle(pos) - print(st.summary()) - grasped_short = st.grip_state == S_GRIP_CAUGHT and st.position > pos - if abs(st.position - pos) > 25 and not grasped_short: - print( - f"位置 {pos} 没有到位(仍在 {st.position})。", - file=sys.stderr, - ) - return 1 - return 0 - except DhPgeaError as exc: - print(f"错误:{exc}", file=sys.stderr) - print(WIRING_HINT, file=sys.stderr) - return 1 - finally: - grip.close() - return 0 - - -def main(argv: Optional[list[str]] = None) -> int: - return _cli(argv) - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/dh_pgea_node.py b/install/arm_application/lib/python3.11/site-packages/arm_application/dh_pgea_node.py deleted file mode 100644 index 5c43870..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/dh_pgea_node.py +++ /dev/null @@ -1,246 +0,0 @@ -#!/usr/bin/env python3 -"""DH PGEA 的 ROS 2 节点(官方 Modbus RTU,不用 Flexiv 夹爪)。 - -话题(布局与 DH-Robotics/dh_gripper_ros 一致): - /gripper/ctrl std_msgs/Float32MultiArray - data: [initialize, position, force, speed] - initialize>0.5 → 写 0xA5;否则设置力/速度/位置 - /gripper/states std_msgs/Float32MultiArray - data: [initialized, grip_state, position, target_pos, target_force] - /gripper/joint_states sensor_msgs/JointState - -服务(std_srvs/Trigger): - /gripper/initialize /gripper/open /gripper/close - -不要设置 Flexiv bringup 的 load_gripper:=true —— 那只是 Flexiv-GN01 用的。 -""" - -from __future__ import annotations - -import threading -from typing import Optional - -import rclpy -from rcl_interfaces.msg import ParameterDescriptor -from rclpy.node import Node -from sensor_msgs.msg import JointState -from std_msgs.msg import Float32, Float32MultiArray, MultiArrayDimension, MultiArrayLayout -from std_srvs.srv import Trigger - -from arm_application.dh_pgea import ( - DhPgeaError, - DhPgeaGripper, - GripperState, - WIRING_HINT, -) -from arm_application.ros_node import TolerantNode, param_as_str - - -def _as_ctrl_array(msg: Float32MultiArray) -> tuple[float, float, float, float]: - data = list(msg.data) - while len(data) < 4: - data.append(0.0) - return float(data[0]), float(data[1]), float(data[2]), float(data[3]) - - -class DhPgeaNode(TolerantNode): - def __init__(self) -> None: - super().__init__("dh_pgea") - self.declare_parameter("port", "/dev/ttyUSB0") - self.declare_parameter("baud", 115200) - self.declare_parameter("slave_id", 1) - self.declare_parameter("stroke_mm", 20.0) - self.declare_parameter("force_pct", 50) - self.declare_parameter("speed_pct", 50) - self.declare_parameter("auto_init", True) - self.declare_parameter("state_hz", 20.0) - self.declare_parameter("open_position", 1000) - self.declare_parameter("close_position", 0) - self._model = param_as_str(self, "model", "PGEA-100-20-W") - self._sn = param_as_str(self, "serial_number", "") - self._rts = param_as_str(self, "rs485_rts", "") - - self._port = str(self.get_parameter("port").value) - self._baud = int(self.get_parameter("baud").value) - self._slave = int(self.get_parameter("slave_id").value) - self._stroke = float(self.get_parameter("stroke_mm").value) - self._force = int(self.get_parameter("force_pct").value) - self._speed = int(self.get_parameter("speed_pct").value) - _auto = self.get_parameter("auto_init").value - if isinstance(_auto, str): - self._auto_init = _auto.strip().lower() in ("1", "true", "yes") - else: - self._auto_init = bool(_auto) - self._open_pos = int(self.get_parameter("open_position").value) - self._close_pos = int(self.get_parameter("close_position").value) - hz = float(self.get_parameter("state_hz").value) - - self._grip = DhPgeaGripper( - port=self._port, - baudrate=self._baud, - slave_id=self._slave, - stroke_mm=self._stroke, - rs485_rts=self._rts, - ) - self._state = GripperState(stroke_mm=self._stroke) - self._cmd_lock = threading.Lock() - - self._pub_state = self.create_publisher(Float32MultiArray, "/gripper/states", 10) - self._pub_js = self.create_publisher(JointState, "/gripper/joint_states", 10) - self.create_subscription(Float32MultiArray, "/gripper/ctrl", self._on_ctrl, 10) - self.create_subscription(Float32, "/gripper/set_position", self._on_set_pos, 10) - - self.create_service(Trigger, "/gripper/initialize", self._srv_init) - self.create_service(Trigger, "/gripper/open", self._srv_open) - self.create_service(Trigger, "/gripper/close", self._srv_close) - - self.get_logger().info( - f"DH {self._model} SN={self._sn or '?'} " - f"{self._port} @{self._baud} slave={self._slave} rts={self._rts or 'off'} " - f"(官方 Modbus RTU;未使用 Flexiv RDK 夹爪 API)" - ) - try: - self._grip.open() - except DhPgeaError as exc: - self.get_logger().error(str(exc)) - raise - - self._online = False - try: - self._grip.probe() - self._online = True - except DhPgeaError as exc: - self.get_logger().error(str(exc)) - for line in WIRING_HINT.splitlines(): - self.get_logger().error(line) - self.get_logger().error("会持续重试;在总线恢复应答前 open/close 都会失败") - - if self._auto_init and self._online: - try: - self._grip.initialize() - self.get_logger().info("夹爪已初始化") - except DhPgeaError as exc: - self.get_logger().error(f"auto_init 失败:{exc}") - self._online = False - - period = 1.0 / max(1.0, hz) - self._timer = self.create_timer(period, self._on_timer) - - def destroy_node(self) -> bool: - try: - self._grip.close() - except Exception: - pass - return super().destroy_node() - - def _apply_move(self, position: int, force: Optional[int] = None, speed: Optional[int] = None) -> str: - with self._cmd_lock: - f = self._force if force is None else int(force) - s = self._speed if speed is None else int(speed) - if force is not None: - self._force = f - if speed is not None: - self._speed = s - if not self._grip.move(int(position), f, s): - raise DhPgeaError("移动写入失败") - return f"pos={int(position)} force={f}% speed={s}%" - - def _on_ctrl(self, msg: Float32MultiArray) -> None: - initialize, position, force, speed = _as_ctrl_array(msg) - try: - if initialize > 0.5: - self._grip.initialize() - self.get_logger().info("通过 /gripper/ctrl 触发初始化") - return - f = int(force) if force > 0 else self._force - s = int(speed) if speed > 0 else self._speed - info = self._apply_move(int(position), f, s) - self.get_logger().info(f"ctrl {info}") - except DhPgeaError as exc: - self.get_logger().error(str(exc)) - - def _on_set_pos(self, msg: Float32) -> None: - try: - info = self._apply_move(int(msg.data)) - self.get_logger().info(f"set_position {info}") - except DhPgeaError as exc: - self.get_logger().error(str(exc)) - - def _srv_init(self, _req, resp): - try: - self._grip.initialize() - resp.success = True - resp.message = self._grip.get_run_states().summary() - except DhPgeaError as exc: - resp.success = False - resp.message = str(exc) - return resp - - def _srv_open(self, _req, resp): - try: - info = self._apply_move(self._open_pos) - resp.success = True - resp.message = info - except DhPgeaError as exc: - resp.success = False - resp.message = str(exc) - return resp - - def _srv_close(self, _req, resp): - try: - info = self._apply_move(self._close_pos) - resp.success = True - resp.message = info - except DhPgeaError as exc: - resp.success = False - resp.message = str(exc) - return resp - - def _on_timer(self) -> None: - try: - st = self._grip.get_run_states(retries=2 if self._online else 1) - self._state = st - if not self._online: - self._online = True - self.get_logger().info("夹爪总线已恢复") - except DhPgeaError as exc: - self._online = False - self.get_logger().warn(str(exc), throttle_duration_sec=5.0) - return - - arr = Float32MultiArray() - arr.layout = MultiArrayLayout( - dim=[MultiArrayDimension(label="dh_pgea", size=5, stride=5)], - data_offset=0, - ) - arr.data = list(st.as_tuple()) - self._pub_state.publish(arr) - - js = JointState() - js.header.stamp = self.get_clock().now().to_msg() - js.name = ["gripper_finger1_joint"] - # 官方 ROS 驱动把 0–1000 映射到约 0–0.637 rad;我们这里也发布 mm。 - js.position = [float(st.width_mm) * 0.001] - js.effort = [float(st.target_force)] - self._pub_js.publish(js) - - -def main(args=None) -> None: - rclpy.init(args=args) - node = None - try: - node = DhPgeaNode() - rclpy.spin(node) - except KeyboardInterrupt: - pass - except DhPgeaError: - pass - finally: - if node is not None: - node.destroy_node() - if rclpy.ok(): - rclpy.shutdown() - - -if __name__ == "__main__": - main() diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/dual_gripper.py b/install/arm_application/lib/python3.11/site-packages/arm_application/dual_gripper.py deleted file mode 100644 index f576d94..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/dual_gripper.py +++ /dev/null @@ -1,803 +0,0 @@ -"""双臂夹爪统一控制架构(DH-Robotics 官方 Modbus RTU,非 Flexiv RDK)。 - -设计目标: -- 左臂(Rizon4-063989):大寰 PGEA 平行夹爪,控制行程/夹持力/速度。 -- 右臂(Rizon4-063991):大寰 RGI-100-30-O-S-M1 旋转夹爪,控制手指夹持与旋转角度/圈数/速度。 -- 统一接口,便于后续扩展到 ROS2 节点和新项目脚本。 - -注意:DH 官方协议是“写位置/角度寄存器后立即运动”,没有 ChangingTek SDK 的 0x0108 触发寄存器。 -""" - -from __future__ import annotations - -import time -from abc import ABC, abstractmethod -from dataclasses import dataclass, field -from enum import Enum, auto -from pathlib import Path -from typing import Any - -import numpy as np - -from arm_application.dh_official import DHModbusClient, DHModbusError - - -class GripperType(Enum): - PARALLEL = auto() # 平行夹爪 - ROTARY = auto() # 旋转夹爪 - VACUUM = auto() # 真空吸盘(预留) - - -class GripperState(Enum): - IDLE = auto() - MOVING = auto() - GRIPPING = auto() - RELEASING = auto() - ERROR = auto() - - -@dataclass -class GripperStatus: - """夹爪状态反馈。""" - - state: GripperState = GripperState.IDLE - position: float = 0.0 # 平行:mm;旋转:角度 deg - force: float = 0.0 # 最近一次命令力/力矩 % - velocity: float = 0.0 # 最近一次命令速度 % - is_moving: bool = False - is_gripped: bool = False # 是否夹持到物体 - connected: bool = False - initialized: bool = False - finger_position_per_mille: float = 0.0 - rotation_deg: float = 0.0 - gripper_state: int = -1 # DH 0x0201:0 moving,1 reached,2 caught,3 dropped - rotation_state: int = -1 # RGI 0x020B:0 moving,1 reached,2 blocking,3 blocked - error_msg: str = "" - timestamp: float = field(default_factory=time.time) - - -@dataclass -class GripperCommand: - """夹爪控制指令。""" - - target_position: float | None = None # 平行:mm;旋转:deg - target_force: float | None = None # 目标力/力矩 % - target_velocity: float | None = None # 目标速度 % - wait_complete: bool = True # 是否等待完成 - timeout: float = 10.0 # 超时时间 - - -class BaseGripper(ABC): - """夹爪基类,定义统一接口。""" - - name: str = "base_gripper" - gripper_type: GripperType = GripperType.PARALLEL - - def __init__(self, config: dict[str, Any] | None = None) -> None: - self.cfg = config or {} - self._connected = False - self._status = GripperStatus() - - @abstractmethod - def connect(self) -> None: ... - - @abstractmethod - def disconnect(self) -> None: ... - - @abstractmethod - def execute(self, cmd: GripperCommand) -> GripperStatus: ... - - @abstractmethod - def get_status(self) -> GripperStatus: ... - - def is_connected(self) -> bool: - return self._connected - - def open(self, **kwargs) -> GripperStatus: - raise NotImplementedError - - def close(self, **kwargs) -> GripperStatus: - raise NotImplementedError - - def stop(self) -> None: - raise NotImplementedError - - -# ============================================================================= -# 大寰平行夹爪(PGE/PGEA 系列) -# ============================================================================= - -@dataclass -class ParallelGripperConfig: - """大寰平行夹爪配置。""" - - port: str = "/dev/ttyUSB0" - slave_id: int = 1 - baudrate: int = 115200 - timeout: float = 0.2 - - # PGEA-100-40 行程为 40mm;若实际是 PGEA-100-26,请把 stroke_max 改成 26.0。 - stroke_min: float = 0.0 - stroke_max: float = 40.0 - - # 默认参数(DH 百分比) - default_speed: int = 50 - default_force: int = 50 - force_min: int = 20 - force_max: int = 100 - - # 控制行为 - auto_initialize: bool = True - init_timeout: float = 10.0 - position_tolerance_per_mille: int = 15 - status_poll_interval: float = 0.05 - - -class ParallelGripper(BaseGripper): - """大寰 PGE/PGEA 平行夹爪。""" - - name = "dh_pgea_parallel" - gripper_type = GripperType.PARALLEL - - def __init__(self, config: ParallelGripperConfig | None = None) -> None: - super().__init__() - self.cfg = config or ParallelGripperConfig() - self._client: DHModbusClient | None = None - self._last_position_mm = float(self.cfg.stroke_min) - self._last_force = int(self.cfg.default_force) - self._last_speed = int(self.cfg.default_speed) - - def connect(self) -> None: - if self._client is not None: - self.disconnect() - self._client = DHModbusClient( - self.cfg.port, - slave_id=self.cfg.slave_id, - baudrate=self.cfg.baudrate, - timeout=self.cfg.timeout, - ) - self._connected = True - self._status.connected = True - self._status.state = GripperState.IDLE - self._status.error_msg = "" - if self.cfg.auto_initialize: - self.initialize() - - def disconnect(self) -> None: - if self._client is not None: - self._client.close() - self._client = None - self._connected = False - self._status.connected = False - self._status.state = GripperState.IDLE - - def initialize(self, full: bool = False) -> None: - self._require_client() - assert self._client is not None - self._client.initialize(full=full, rotation=False, timeout=self.cfg.init_timeout) - self._status.initialized = True - - def _require_client(self) -> None: - if not self._connected or self._client is None: - self._status.state = GripperState.ERROR - self._status.error_msg = "平行夹爪未连接" - raise DHModbusError(self._status.error_msg) - - def _mm_to_per_mille(self, position_mm: float) -> int: - lo = float(self.cfg.stroke_min) - hi = float(self.cfg.stroke_max) - if hi <= lo: - hi = lo + 1.0 - ratio = (float(position_mm) - lo) / (hi - lo) - return int(np.clip(round(ratio * 1000.0), 0, 1000)) - - def _per_mille_to_mm(self, position: float | int) -> float: - lo = float(self.cfg.stroke_min) - hi = float(self.cfg.stroke_max) - return lo + (float(position) / 1000.0) * (hi - lo) - - def execute(self, cmd: GripperCommand) -> GripperStatus: - try: - self._require_client() - except DHModbusError: - return self._status - assert self._client is not None - - position_mm = self._last_position_mm if cmd.target_position is None else float(cmd.target_position) - position_mm = float(np.clip(position_mm, self.cfg.stroke_min, self.cfg.stroke_max)) - speed = int(np.clip(cmd.target_velocity or self.cfg.default_speed, 1, 100)) - force = int(np.clip(cmd.target_force or self.cfg.default_force, self.cfg.force_min, self.cfg.force_max)) - - self._client.set_speed_pct(speed) - self._client.set_force_pct(force) - target_per_mille = self._client.set_position_per_mille(self._mm_to_per_mille(position_mm)) - - self._last_position_mm = position_mm - self._last_speed = speed - self._last_force = force - self._status.state = GripperState.MOVING - self._status.error_msg = "" - - if cmd.wait_complete: - self._wait_complete(target_per_mille, cmd.timeout) - return self.get_status() - - def _wait_complete(self, target_per_mille: int, timeout: float) -> None: - assert self._client is not None - start = time.monotonic() - time.sleep(0.05) - while time.monotonic() - start < timeout: - state = self._client.get_gripper_state() - pos = self._client.get_position_per_mille() - self._status.gripper_state = state - self._status.finger_position_per_mille = float(pos) - self._status.position = self._per_mille_to_mm(pos) - self._status.is_moving = state == 0 - self._status.is_gripped = state == 2 - if state in (1, 2): - self._status.state = GripperState.GRIPPING if state == 2 else GripperState.IDLE - return - if state == 3: - self._status.state = GripperState.ERROR - self._status.error_msg = "夹持后物体掉落" - return - if abs(pos - target_per_mille) <= self.cfg.position_tolerance_per_mille and state != 0: - self._status.state = GripperState.IDLE - return - time.sleep(self.cfg.status_poll_interval) - self._status.state = GripperState.ERROR - self._status.error_msg = f"平行夹爪运动超时(>{timeout:.1f}s)" - - def get_status(self) -> GripperStatus: - if not self._connected or self._client is None: - self._status.connected = False - return self._status - try: - pos = self._client.get_position_per_mille() - state = self._client.get_gripper_state() - init_state = self._client.get_init_state() - self._status.connected = True - self._status.initialized = init_state == 1 - self._status.finger_position_per_mille = float(pos) - self._status.position = self._per_mille_to_mm(pos) - self._status.velocity = float(self._last_speed) - self._status.force = float(self._last_force) - self._status.gripper_state = state - self._status.is_moving = state == 0 - self._status.is_gripped = state == 2 - if self._status.state != GripperState.ERROR: - self._status.state = GripperState.MOVING if state == 0 else ( - GripperState.GRIPPING if state == 2 else GripperState.IDLE - ) - self._status.timestamp = time.time() - except Exception as exc: - self._status.state = GripperState.ERROR - self._status.error_msg = str(exc) - self._status.connected = False - return self._status - - def open(self, force: int | None = None, speed: int | None = None, **kwargs) -> GripperStatus: - # DH 千分比:0‰=闭合,1000‰=张开,对应行程 0mm -> stroke_max。 - return self.execute(GripperCommand( - target_position=float(self.cfg.stroke_max), - target_force=force or self.cfg.default_force, - target_velocity=speed or self.cfg.default_speed, - **kwargs, - )) - - def close(self, force: int | None = None, speed: int | None = None, **kwargs) -> GripperStatus: - return self.execute(GripperCommand( - target_position=float(self.cfg.stroke_min), - target_force=force or self.cfg.default_force, - target_velocity=speed or self.cfg.default_speed, - **kwargs, - )) - - def move_to(self, position_mm: float, force: int | None = None, speed: int | None = None, - **kwargs) -> GripperStatus: - return self.execute(GripperCommand( - target_position=position_mm, - target_force=force or self.cfg.default_force, - target_velocity=speed or self.cfg.default_speed, - **kwargs, - )) - - def set_force(self, force_pct: int) -> None: - self._require_client() - assert self._client is not None - self._last_force = self._client.set_force_pct(force_pct) - - def set_speed(self, speed_pct: int) -> None: - self._require_client() - assert self._client is not None - self._last_speed = self._client.set_speed_pct(speed_pct) - - def stop(self) -> None: - if self._client is not None: - self._client.hold_current_position() - self._status.state = GripperState.IDLE - - -# ============================================================================= -# 大寰旋转夹爪(RGI-100-30-O-S-M1) -# ============================================================================= - -@dataclass -class RotaryGripperConfig: - """大寰 RGI 旋转夹爪配置。""" - - port: str = "/dev/ttyUSB1" - slave_id: int = 1 - baudrate: int = 115200 - timeout: float = 0.2 - - # RGI 旋转角度寄存器是 signed 16bit;为避免 one's-complement 负零歧义,默认限制在 ±32767。 - angle_min: float = -32767.0 - angle_max: float = 32767.0 - max_step_deg: float = 30000.0 # rotate_revolutions 分段旋转的最大单步角度 - - # DH 手册:手指位置 0~1000‰。0=闭合,1000=张开。RGI-100 行程约 70mm。 - finger_open_per_mille: int = 1000 - finger_close_per_mille: int = 0 - - # 默认参数(DH 百分比) - default_speed: int = 50 # 旋转速度 % - default_torque: int = 50 # 旋转力/力矩 % - default_finger_speed: int = 50 # 手指速度 % - default_finger_force: int = 50 # 手指夹持力 % - torque_min: int = 20 - torque_max: int = 100 - - # 控制行为 - auto_initialize: bool = True - init_timeout: float = 15.0 # RGI 初始化包含旋转找零,时间更长 - angle_tolerance_deg: float = 1.0 - status_poll_interval: float = 0.05 - - -class RotaryGripper(BaseGripper): - """大寰 RGI-100-30-O-S-M1 旋转夹爪。""" - - name = "dh_rgi_rotary" - gripper_type = GripperType.ROTARY - - def __init__(self, config: RotaryGripperConfig | None = None) -> None: - super().__init__() - self.cfg = config or RotaryGripperConfig() - self._client: DHModbusClient | None = None - self._last_angle = 0.0 - self._last_torque = int(self.cfg.default_torque) - self._last_speed = int(self.cfg.default_speed) - self._last_finger_force = int(self.cfg.default_finger_force) - self._last_finger_speed = int(self.cfg.default_finger_speed) - self._last_finger_per_mille = int(self.cfg.finger_open_per_mille) - - def connect(self) -> None: - if self._client is not None: - self.disconnect() - self._client = DHModbusClient( - self.cfg.port, - slave_id=self.cfg.slave_id, - baudrate=self.cfg.baudrate, - timeout=self.cfg.timeout, - ) - self._connected = True - self._status.connected = True - self._status.state = GripperState.IDLE - self._status.error_msg = "" - if self.cfg.auto_initialize: - self.initialize() - - def disconnect(self) -> None: - if self._client is not None: - self._client.close() - self._client = None - self._connected = False - self._status.connected = False - self._status.state = GripperState.IDLE - - def initialize(self, full: bool = False) -> None: - self._require_client() - assert self._client is not None - self._client.initialize(full=full, rotation=True, timeout=self.cfg.init_timeout) - self._status.initialized = True - - def _require_client(self) -> None: - if not self._connected or self._client is None: - self._status.state = GripperState.ERROR - self._status.error_msg = "旋转夹爪未连接" - raise DHModbusError(self._status.error_msg) - - def execute(self, cmd: GripperCommand) -> GripperStatus: - """执行旋转指令;cmd.target_position 单位为度。""" - return self.rotate_to( - self._last_angle if cmd.target_position is None else float(cmd.target_position), - speed=cmd.target_velocity, - torque=cmd.target_force, - wait_complete=cmd.wait_complete, - timeout=cmd.timeout, - ) - - def _wait_complete(self, target_angle: float, timeout: float) -> None: - assert self._client is not None - start = time.monotonic() - start_angle = float(self._client.get_rotation_angle_deg()) - expected = abs(float(target_angle) - start_angle) + 30.0 - settled = 0 - last_angle = start_angle - time.sleep(0.05) - while time.monotonic() - start < timeout: - rot_state = self._client.get_rotation_state() - angle = float(self._client.get_rotation_angle_deg()) - self._status.rotation_state = rot_state - self._status.rotation_deg = angle - self._status.position = angle - self._status.is_moving = rot_state == 0 - if abs(angle - start_angle) > expected: - self._client.hold_current_rotation() - self._status.state = GripperState.ERROR - self._status.error_msg = ( - f"旋转超程保护:目标 {target_angle:.1f}°,从 {start_angle:.1f}° 跑到 {angle:.1f}°,已发停止" - ) - return - if rot_state in (1, 2): - self._status.state = GripperState.IDLE if rot_state == 1 else GripperState.GRIPPING - if rot_state == 2: - self._status.error_msg = "旋转受阻(blocking)" - return - if rot_state == 3: - self._status.state = GripperState.ERROR - self._status.error_msg = "旋转曾受阻且未到目标位" - return - if abs(angle - float(target_angle)) <= self.cfg.angle_tolerance_deg: - settled += 1 - if settled >= 3: - self._status.state = GripperState.IDLE - self._status.is_moving = False - return - elif abs(angle - last_angle) <= self.cfg.angle_tolerance_deg: - settled += 1 - if settled >= 8 and abs(angle - float(target_angle)) <= 15.0: - self._status.state = GripperState.IDLE - self._status.is_moving = False - return - else: - settled = 0 - last_angle = angle - time.sleep(self.cfg.status_poll_interval) - self._client.hold_current_rotation() - self._status.state = GripperState.ERROR - self._status.error_msg = f"旋转运动超时(>{timeout:.1f}s),已发停止" - - def get_status(self) -> GripperStatus: - if not self._connected or self._client is None: - self._status.connected = False - return self._status - try: - finger_pos = self._client.get_position_per_mille() - finger_state = self._client.get_gripper_state() - init_state = self._client.get_init_state() - rot_angle = self._client.get_rotation_angle_deg() - rot_state = self._client.get_rotation_state() - rot_init = self._client.get_rotation_init_state() - - self._status.connected = True - self._status.initialized = init_state == 1 and rot_init == 1 - self._status.finger_position_per_mille = float(finger_pos) - self._status.rotation_deg = float(rot_angle) - self._status.position = float(rot_angle) - self._status.velocity = float(self._last_speed) - self._status.force = float(self._last_torque) - self._status.gripper_state = finger_state - self._status.rotation_state = rot_state - self._status.is_moving = finger_state == 0 or rot_state == 0 - self._status.is_gripped = finger_state == 2 - if self._status.state != GripperState.ERROR: - if finger_state == 2 or rot_state == 2: - self._status.state = GripperState.GRIPPING - elif finger_state == 0 or rot_state == 0: - self._status.state = GripperState.MOVING - else: - self._status.state = GripperState.IDLE - self._status.timestamp = time.time() - except Exception as exc: - self._status.state = GripperState.ERROR - self._status.error_msg = str(exc) - self._status.connected = False - return self._status - - # ----------------------------- - # 手指夹持 - # ----------------------------- - def move_fingers(self, position_per_mille: int, force: int | None = None, - speed: int | None = None, wait_complete: bool = True, - timeout: float = 10.0) -> GripperStatus: - try: - self._require_client() - except DHModbusError: - return self._status - assert self._client is not None - target = int(np.clip(position_per_mille, 0, 1000)) - f = int(np.clip(force or self.cfg.default_finger_force, 20, 100)) - s = int(np.clip(speed or self.cfg.default_finger_speed, 1, 100)) - self._client.set_speed_pct(s) - self._client.set_force_pct(f) - self._client.set_position_per_mille(target) - self._last_finger_per_mille = target - self._last_finger_force = f - self._last_finger_speed = s - if wait_complete: - start = time.monotonic() - time.sleep(0.05) - while time.monotonic() - start < timeout: - state = self._client.get_gripper_state() - pos = self._client.get_position_per_mille() - self._status.gripper_state = state - self._status.finger_position_per_mille = float(pos) - if state in (1, 2): - break - if state == 3: - self._status.state = GripperState.ERROR - self._status.error_msg = "夹持后物体掉落" - break - time.sleep(self.cfg.status_poll_interval) - return self.get_status() - - def open_fingers(self, **kwargs) -> GripperStatus: - return self.move_fingers(self.cfg.finger_open_per_mille, **kwargs) - - def close_fingers(self, **kwargs) -> GripperStatus: - return self.move_fingers(self.cfg.finger_close_per_mille, **kwargs) - - # ----------------------------- - # 旋转 - # ----------------------------- - def rotate_to(self, angle_deg: float, speed: int | None = None, torque: int | None = None, - wait_complete: bool = True, timeout: float = 10.0, **kwargs) -> GripperStatus: - try: - self._require_client() - except DHModbusError: - return self._status - assert self._client is not None - - angle = float(np.clip(angle_deg, self.cfg.angle_min, self.cfg.angle_max)) - s = int(np.clip(speed or self.cfg.default_speed, 1, 100)) - t = int(np.clip(torque or self.cfg.default_torque, self.cfg.torque_min, self.cfg.torque_max)) - - self._client.set_rotation_speed_pct(s) - self._client.set_rotation_force_pct(t) - target = self._client.set_rotation_angle_deg(angle) - - self._last_angle = float(target) - self._last_speed = s - self._last_torque = t - self._status.state = GripperState.MOVING - self._status.error_msg = "" - - if wait_complete: - self._wait_complete(float(target), timeout) - return self.get_status() - - def rotate_by(self, delta_deg: float, **kwargs) -> GripperStatus: - current = self.get_status().rotation_deg - return self.rotate_to(current + float(delta_deg), **kwargs) - - def rotate_revolutions(self, revolutions: float, **kwargs) -> GripperStatus: - """旋转指定圈数;超过单步角度范围时自动分段,并按实际反馈角度结算。""" - remaining = float(revolutions) * 360.0 - status = self.get_status() - max_step = abs(float(self.cfg.max_step_deg)) or 30000.0 - while abs(remaining) > 1e-6: - before = float(self.get_status().rotation_deg) - step = float(np.clip(remaining, -max_step, max_step)) - status = self.rotate_to(before + step, **kwargs) - if status.state == GripperState.ERROR: - return status - after = float(status.rotation_deg) - achieved = after - before - if abs(achieved) < max(1.0, abs(step) * 0.2): - status.state = GripperState.ERROR - status.error_msg = ( - "旋转未达到预期步进,可能超出角度寄存器范围或反馈异常:" - f"step={step:.3f}, before={before:.3f}, after={after:.3f}" - ) - return status - remaining -= achieved - return status - - def home_rotation(self, **kwargs) -> GripperStatus: - return self.rotate_to(0.0, **kwargs) - - def set_rotation_speed(self, speed_pct: int) -> None: - self._require_client() - assert self._client is not None - self._last_speed = self._client.set_rotation_speed_pct(speed_pct) - - def set_rotation_torque(self, torque_pct: int) -> None: - self._require_client() - assert self._client is not None - self._last_torque = self._client.set_rotation_force_pct(torque_pct) - - def set_finger_speed(self, speed_pct: int) -> None: - self._require_client() - assert self._client is not None - self._last_finger_speed = self._client.set_speed_pct(speed_pct) - - def set_finger_force(self, force_pct: int) -> None: - self._require_client() - assert self._client is not None - self._last_finger_force = self._client.set_force_pct(force_pct) - - def open(self, **kwargs) -> GripperStatus: - """对于 RGI,open 定义为张开手指;旋转请用 rotate_to/rotate_revolutions。""" - return self.open_fingers(**kwargs) - - def close(self, **kwargs) -> GripperStatus: - """对于 RGI,close 定义为闭合手指;旋转请用 rotate_to/rotate_revolutions。""" - return self.close_fingers(**kwargs) - - def stop(self) -> None: - if self._client is not None: - self._client.hold_current_all() - self._status.state = GripperState.IDLE - - -# ============================================================================= -# 双臂夹爪管理器 -# ============================================================================= - -@dataclass -class DualArmGripperConfig: - """双臂夹爪配置。 - - 这里**没有** ``left_arm_sn`` / ``right_arm_sn``:它们曾经存在但从来没有被读过 - (只写不读的死字段,R5.5),而且默认值是本机的 SN —— 换台臂就会误导读者。 - 哪个侧别是哪台臂,由 ``load_from_site()`` 从 site.yaml 的 ``robots[].arm`` 决定。 - """ - - left_gripper: ParallelGripperConfig = field(default_factory=ParallelGripperConfig) - right_gripper: RotaryGripperConfig = field(default_factory=RotaryGripperConfig) - - -class DualArmGripperManager: - """双臂夹爪管理器:统一控制左右臂夹爪。""" - - def __init__(self, config: DualArmGripperConfig | None = None) -> None: - self.cfg = config or DualArmGripperConfig() - self._left: ParallelGripper | None = None - self._right: RotaryGripper | None = None - - @property - def left(self) -> ParallelGripper: - if self._left is None: - self._left = ParallelGripper(self.cfg.left_gripper) - return self._left - - @property - def right(self) -> RotaryGripper: - if self._right is None: - self._right = RotaryGripper(self.cfg.right_gripper) - return self._right - - def connect_all(self) -> None: - self.left.connect() - self.right.connect() - - def disconnect_all(self) -> None: - if self._left: - self._left.disconnect() - if self._right: - self._right.disconnect() - - def initialize_all(self, full: bool = False) -> None: - self.left.initialize(full=full) - self.right.initialize(full=full) - - def get_all_status(self) -> dict[str, GripperStatus]: - return { - "left": self.left.get_status(), - "right": self.right.get_status(), - } - - def emergency_stop(self) -> None: - self.left.stop() - self.right.stop() - - -def load_dual_arm_gripper_config(path: str | Path) -> DualArmGripperConfig: - """从 configs/dual_arm_robot.yaml 加载双臂夹爪配置。""" - import yaml - - data = yaml.safe_load(Path(path).read_text(encoding="utf-8")) or {} - left = data.get("left_arm", {}) or {} - right = data.get("right_arm", {}) or {} - grip = data.get("gripper", {}) or {} - parallel = grip.get("parallel", {}) or {} - rotary = grip.get("rotary", {}) or {} - - left_cfg = ParallelGripperConfig( - port=left.get("gripper_port", "/dev/ttyUSB0"), - slave_id=int(left.get("gripper_slave_id", 1)), - baudrate=int(left.get("gripper_baudrate", 115200)), - stroke_min=float(parallel.get("stroke_min", 0.0)), - stroke_max=float(parallel.get("stroke_max", 40.0)), - default_speed=int(parallel.get("default_speed", 50)), - default_force=int(parallel.get("default_force", 50)), - force_min=int(parallel.get("force_min", 20)), - force_max=int(parallel.get("force_max", 100)), - auto_initialize=bool(parallel.get("auto_initialize", True)), - ) - right_cfg = RotaryGripperConfig( - port=right.get("gripper_port", "/dev/ttyUSB1"), - slave_id=int(right.get("gripper_slave_id", 1)), - baudrate=int(right.get("gripper_baudrate", 115200)), - angle_min=float(rotary.get("angle_min", -32767.0)), - angle_max=float(rotary.get("angle_max", 32767.0)), - max_step_deg=float(rotary.get("max_step_deg", 30000.0)), - finger_open_per_mille=int(rotary.get("finger_open_per_mille", 1000)), - finger_close_per_mille=int(rotary.get("finger_close_per_mille", 0)), - default_speed=int(rotary.get("default_speed", 50)), - default_torque=int(rotary.get("default_torque", 50)), - default_finger_speed=int(rotary.get("default_finger_speed", 50)), - default_finger_force=int(rotary.get("default_finger_force", 50)), - torque_min=int(rotary.get("torque_min", 20)), - torque_max=int(rotary.get("torque_max", 100)), - auto_initialize=bool(rotary.get("auto_initialize", True)), - ) - return DualArmGripperConfig( - left_gripper=left_cfg, - right_gripper=right_cfg, - ) - - -def load_from_site(data: dict) -> DualArmGripperConfig: - """从 ``~/ros2/config/site.yaml`` 构建 ``DualArmGripperConfig``。 - - 左右靠 ``robots[].arm`` 认,**不靠 SN 里的数字**:``"063989 就是左臂"`` - 是站点数据,写进代码后换个站点就会把左右夹爪搞反 - (症状是"右臂的旋转爪去开左臂的平行爪",串口对不上才报错)。 - """ - robots = list((data.get("robot") or {}).get("robots") or []) - left = next((r for r in robots if str(r.get("arm") or "").lower() == "left"), {}) - right = next((r for r in robots if str(r.get("arm") or "").lower() == "right"), {}) - g = data.get("gripper") or {} - parallel = g.get("parallel") or {} - rotary = g.get("rotary") or {} - lg = left.get("gripper") or {} - rg = right.get("gripper") or {} - stroke = float(lg.get("stroke_mm") or parallel.get("stroke_max") or g.get("stroke_mm") or 20.0) - left_cfg = ParallelGripperConfig( - port=str(lg.get("port") or "/dev/ttyUSB0"), - slave_id=int(lg.get("slave_id") or g.get("slave_id") or 1), - baudrate=int(lg.get("baud") or g.get("baud") or 115200), - stroke_min=float(parallel.get("stroke_min") or 0.0), - stroke_max=stroke, - default_speed=int(parallel.get("default_speed") or g.get("speed_pct") or 50), - default_force=int(parallel.get("default_force") or g.get("force_pct") or 50), - force_min=int(parallel.get("force_min") or 20), - force_max=int(parallel.get("force_max") or 100), - auto_initialize=bool(lg.get("auto_init", parallel.get("auto_initialize", True))), - init_timeout=float(parallel.get("init_timeout") or 10.0), - ) - right_cfg = RotaryGripperConfig( - port=str(rg.get("port") or "/dev/ttyUSB1"), - slave_id=int(rg.get("slave_id") or 1), - baudrate=int(rg.get("baud") or g.get("baud") or 115200), - angle_min=float(rotary.get("angle_min") or -32767.0), - angle_max=float(rotary.get("angle_max") or 32767.0), - max_step_deg=float(rotary.get("max_step_deg") or 30000.0), - finger_open_per_mille=int(rotary.get("finger_open_per_mille") or 1000), - finger_close_per_mille=int(rotary.get("finger_close_per_mille") or 0), - default_speed=int(rotary.get("default_speed") or 50), - default_torque=int(rotary.get("default_torque") or 50), - default_finger_speed=int(rotary.get("default_finger_speed") or 50), - default_finger_force=int(rotary.get("default_finger_force") or 50), - torque_min=int(rotary.get("torque_min") or 20), - torque_max=int(rotary.get("torque_max") or 100), - auto_initialize=bool(rg.get("auto_init", rotary.get("auto_initialize", False))), - init_timeout=float(rotary.get("init_timeout") or 15.0), - ) - return DualArmGripperConfig( - left_gripper=left_cfg, - right_gripper=right_cfg, - ) diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/dual_gripper_cli.py b/install/arm_application/lib/python3.11/site-packages/arm_application/dual_gripper_cli.py deleted file mode 100644 index f4f3402..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/dual_gripper_cli.py +++ /dev/null @@ -1,190 +0,0 @@ -#!/usr/bin/env python3 -"""DH PGEA(左臂)与 RGI(右臂)的命令行工具。从 site.yaml 读取串口。""" - -from __future__ import annotations - -import argparse -import os -import sys -import time -from pathlib import Path - -import yaml - -from arm_application.dual_gripper import DualArmGripperManager, load_from_site - - -def _site_path() -> Path: - env = os.environ.get("SITE_CONFIG", "").strip() - if env: - return Path(env).expanduser() - return Path.home() / "ros2" / "config" / "site.yaml" - - -def _print_status(label: str, status) -> None: - print( - f" {label}: state={status.state.name} " - f"pos={status.position:.2f} finger={status.finger_position_per_mille:.0f}‰ " - f"rot={status.rotation_deg:.2f}° moving={status.is_moving} " - f"gripped={status.is_gripped} init={status.initialized} " - f"err={status.error_msg or '-'}" - ) - - -def _load_site_exporter(): - """复用 ``scripts/lib/export_site_env.py`` —— 它才是 --arm 别名的权威定义。 - - 这里**不自己再抄一份** ``89 -> SN`` 的映射:抄一份就多一处会漂移的地方(M2)。 - """ - root = Path(__file__).resolve().parents[3] - lib = str(root / "scripts" / "lib") - if lib not in sys.path: - sys.path.insert(0, lib) - import export_site_env # type: ignore - - return export_site_env - - -def _normalize_arm(raw: str, data: dict) -> str: - """把 --arm 的写法归一成 ``left`` / ``right`` / ``both``。 - - 别名(``89`` 这类)由 ``export_site_env`` 从 site.yaml 的 ``robots[]`` 现算 - (臂号 = 该臂 SN 末两位)。代码里**不写死** SN,否则换台机器人后会指错臂, - 而症状是"给右臂发命令,左臂动了"。 - """ - t = (raw or "").strip() - if t.lower() in ("both", "dual", "all"): - return "both" - site_env = _load_site_exporter() - sn, matched = site_env.resolve_robot_sn(data, t) - if not matched: - raise SystemExit( - f"未知的 --arm {raw!r}:不在 site.yaml 的 robot.robots[] 里。\n" - f"可用:\n{site_env.describe_arms(data)}\n" - f"也可以直接写 left|right|both。" - ) - for row in (data.get("robot") or {}).get("robots") or []: - if str(row.get("sn") or "").strip() != sn: - continue - arm = str(row.get("arm") or "").strip().lower() - if arm in ("left", "right"): - return arm - raise SystemExit( - f"--arm {raw!r} 选中了 {sn},但 site.yaml 里这台臂没写 arm: left|right," - f"无法判断操作哪个夹爪。请补上这个键。" - ) - raise SystemExit( - f"--arm {raw!r} 解析出 {sn},但它不在 site.yaml 的 robot.robots[] 里," - f"无法判断是哪个夹爪。" - ) - - -def test_parallel(manager: DualArmGripperManager, args: argparse.Namespace) -> None: - gripper = manager.left - print(f"=== PGEA 平行夹爪({gripper.cfg.port})===") - gripper.connect() - _print_status("已连接", gripper.get_status()) - if args.test in ("init", "probe", "all"): - if args.test != "probe": - gripper.initialize(full=args.init_full) - _print_status("初始化", gripper.get_status()) - if args.test in ("open", "all"): - _print_status("张开", gripper.open(force=args.force, speed=args.speed)) - if args.test in ("close", "all"): - _print_status("闭合", gripper.close(force=args.force, speed=args.speed)) - if args.test in ("move", "pos") and args.pos is not None: - _print_status("移动", gripper.move_to(args.pos, force=args.force, speed=args.speed)) - if args.test in ("status", "probe"): - _print_status("状态", gripper.get_status()) - - -def test_rotary(manager: DualArmGripperManager, args: argparse.Namespace) -> None: - gripper = manager.right - print(f"=== RGI 旋转夹爪({gripper.cfg.port})===") - gripper.connect() - _print_status("已连接", gripper.get_status()) - if args.test in ("init", "all"): - gripper.initialize(full=args.init_full) - _print_status("初始化", gripper.get_status()) - if args.test in ("open", "all"): - _print_status("张开", gripper.open_fingers(force=args.force, speed=args.speed)) - if args.test in ("close", "all"): - _print_status("闭合", gripper.close_fingers(force=args.force, speed=args.speed)) - if args.test in ("move", "pos") and args.pos is not None: - _print_status("手指", gripper.move_fingers(int(args.pos), force=args.force, speed=args.speed)) - if args.test in ("rotate", "rotate_to", "all"): - if args.revolutions is not None: - _print_status( - "圈数", - gripper.rotate_revolutions(args.revolutions, speed=args.speed, torque=args.force), - ) - else: - angle = args.angle if args.angle is not None else 90.0 - _print_status("旋转", gripper.rotate_to(angle, speed=args.speed, torque=args.force)) - if args.test == "rotate_by": - delta = args.angle if args.angle is not None else 45.0 - _print_status("相对旋转", gripper.rotate_by(delta, speed=args.speed, torque=args.force)) - if args.test in ("status", "probe"): - _print_status("状态", gripper.get_status()) - - -def main() -> int: - parser = argparse.ArgumentParser(description="DH PGEA / RGI 命令行工具(串口来自 site.yaml)") - parser.add_argument( - "--arm", - # 默认取当前臂(parse_arm_args.sh / load_site_config.sh 已经把它放进环境)。 - # **不**兜底成某个具体臂号:那等于"没选臂时也能跑,跑的是哪台看运气"。 - default=( - os.environ.get("SITE_ROBOT_ARM") - or os.environ.get("ROBOT_SN") - or os.environ.get("SITE_ROBOT_SN") - or "" - ), - help="left|right|both,或该臂的臂号(= SN 末两位,由 site.yaml 决定)", - ) - parser.add_argument( - "--test", - default="status", - help="probe|init|open|close|move|pos|rotate|rotate_by|status", - ) - parser.add_argument("--pos", type=float, default=None, help="PGEA 为 mm;RGI 为手指 0-1000") - parser.add_argument("--angle", type=float, default=None) - parser.add_argument("--revolutions", type=float, default=None) - parser.add_argument("--speed", type=int, default=25) - parser.add_argument("--force", type=int, default=33) - parser.add_argument("--init-full", action="store_true") - parser.add_argument("--site", default="") - args = parser.parse_args() - - site = Path(args.site).expanduser() if args.site else _site_path() - if not site.is_file(): - print(f"错误:site.yaml 缺失:{site}", file=sys.stderr) - return 1 - data = yaml.safe_load(site.read_text(encoding="utf-8")) or {} - manager = DualArmGripperManager(load_from_site(data)) - arm = _normalize_arm(str(args.arm), data) - print(f"site={site} arm={arm} test={args.test}") - - try: - if arm == "left": - test_parallel(manager, args) - elif arm == "right": - test_rotary(manager, args) - else: - test_parallel(manager, args) - test_rotary(manager, args) - except KeyboardInterrupt: - print("收到中断 —— 停止") - manager.emergency_stop() - return 130 - except Exception as exc: - print(f"错误:{exc}", file=sys.stderr) - return 1 - finally: - manager.disconnect_all() - time.sleep(0.05) - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/dual_gripper_node.py b/install/arm_application/lib/python3.11/site-packages/arm_application/dual_gripper_node.py deleted file mode 100644 index d877002..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/dual_gripper_node.py +++ /dev/null @@ -1,320 +0,0 @@ -"""ROS 2 双臂 DH 夹爪节点(左臂 PGEA + 右臂 RGI)。使用 arm_msgs,而非 Flexiv RDK。""" - -from __future__ import annotations - -import os -import threading -from pathlib import Path - -import rclpy -import yaml -from rclpy.callback_groups import ReentrantCallbackGroup -from rclpy.executors import MultiThreadedExecutor -from rclpy.node import Node - -from arm_application.dual_gripper import ( - DualArmGripperManager, - GripperState, - load_dual_arm_gripper_config, - load_from_site, -) -from arm_msgs.msg import GripperCommand as GripperCommandMsg -from arm_msgs.msg import GripperStatus as GripperStatusMsg -from arm_msgs.srv import GripperExecute - -from arm_application.ros_node import TolerantNode - - -def _site_path() -> Path: - env = os.environ.get("SITE_CONFIG", "").strip() - if env: - return Path(env).expanduser() - return Path.home() / "ros2" / "config" / "site.yaml" - - -def _as_bool(val, default: bool = True) -> bool: - if val is None: - return default - if isinstance(val, str): - return val.strip().lower() in ("1", "true", "yes", "on") - return bool(val) - - -class DualGripperNode(TolerantNode): - def __init__(self) -> None: - super().__init__("dual_gripper_driver") - self.declare_parameter("config_file", "") - self.declare_parameter("auto_connect", True) - self.declare_parameter("allow_offline", True) - self.declare_parameter("publish_hz", 10.0) - self.declare_parameter("sides", "left,right") - - self._cb_group = ReentrantCallbackGroup() - self._locks = {"left": threading.Lock(), "right": threading.Lock()} - sides_raw = str(self.get_parameter("sides").value or "left,right") - self._sides = [s.strip().lower() for s in sides_raw.split(",") if s.strip()] - if not self._sides: - self._sides = ["left", "right"] - - cfg_path = self.get_parameter("config_file").get_parameter_value().string_value.strip() - if cfg_path: - self._manager = DualArmGripperManager(load_dual_arm_gripper_config(cfg_path)) - else: - site = _site_path() - data = yaml.safe_load(site.read_text(encoding="utf-8")) or {} - self._manager = DualArmGripperManager(load_from_site(data)) - self.get_logger().info(f"夹爪配置来自 site.yaml:{site}") - - self._connect_errors: dict[str, str] = {} - if _as_bool(self.get_parameter("auto_connect").value, True): - self._connect_all() - - self._left_pub = self.create_publisher(GripperStatusMsg, "~/left/status", 10) - self._right_pub = self.create_publisher(GripperStatusMsg, "~/right/status", 10) - if "left" in self._sides: - self.create_subscription( - GripperCommandMsg, - "~/left/command", - lambda msg: self._on_command("left", msg), - 10, - callback_group=self._cb_group, - ) - self.create_service( - GripperExecute, - "~/left/execute", - lambda req, resp: self._on_execute("left", req, resp), - callback_group=self._cb_group, - ) - if "right" in self._sides: - self.create_subscription( - GripperCommandMsg, - "~/right/command", - lambda msg: self._on_command("right", msg), - 10, - callback_group=self._cb_group, - ) - self.create_service( - GripperExecute, - "~/right/execute", - lambda req, resp: self._on_execute("right", req, resp), - callback_group=self._cb_group, - ) - - period = 1.0 / max(1e-3, float(self.get_parameter("publish_hz").value)) - self.create_timer(period, self._publish_status, callback_group=self._cb_group) - self.get_logger().info( - f"dual_gripper_driver ready sides={self._sides} " - "~/left|right/command status execute" - ) - - def _connect_all(self) -> None: - mapping = (("left", self._manager.left), ("right", self._manager.right)) - for side, gripper in mapping: - if side not in self._sides: - continue - try: - gripper.connect() - self.get_logger().info(f"{side} 夹爪已连接:{gripper.cfg.port}") - except Exception as exc: - self._connect_errors[side] = str(exc) - self.get_logger().error(f"{side} 夹爪连接失败:{exc}") - if self._connect_errors and not _as_bool(self.get_parameter("allow_offline").value, True): - raise RuntimeError(f"夹爪连接失败:{self._connect_errors}") - - def _gripper(self, side: str): - return self._manager.left if side == "left" else self._manager.right - - def _execute(self, side: str, msg: GripperCommandMsg): - gripper = self._gripper(side) - command = (msg.command or "").strip().lower() - timeout = float(msg.timeout or 10.0) - wait = bool(msg.wait_complete) - - if side in self._connect_errors and not gripper.is_connected(): - status = gripper.get_status() - status.error_msg = self._connect_errors[side] - return status - - if command == "connect": - gripper.connect() - self._connect_errors.pop(side, None) - return gripper.get_status() - if command == "init": - gripper.initialize(full=False) - return gripper.get_status() - if command == "init_full": - gripper.initialize(full=True) - return gripper.get_status() - if command == "stop": - gripper.stop() - return gripper.get_status() - - if side == "left": - if command == "open": - return gripper.open( - force=int(msg.force) if msg.force else None, - speed=int(msg.speed) if msg.speed else None, - wait_complete=wait, - timeout=timeout, - ) - if command == "close": - return gripper.close( - force=int(msg.force) if msg.force else None, - speed=int(msg.speed) if msg.speed else None, - wait_complete=wait, - timeout=timeout, - ) - if command == "move": - return gripper.move_to( - float(msg.position), - force=int(msg.force) if msg.force else None, - speed=int(msg.speed) if msg.speed else None, - wait_complete=wait, - timeout=timeout, - ) - if command == "set_force": - gripper.set_force(int(msg.force)) - return gripper.get_status() - if command == "set_speed": - gripper.set_speed(int(msg.speed)) - return gripper.get_status() - else: - if command == "open": - return gripper.open_fingers( - force=int(msg.force) if msg.force else None, - speed=int(msg.speed) if msg.speed else None, - wait_complete=wait, - timeout=timeout, - ) - if command == "close": - return gripper.close_fingers( - force=int(msg.force) if msg.force else None, - speed=int(msg.speed) if msg.speed else None, - wait_complete=wait, - timeout=timeout, - ) - if command == "move": - return gripper.move_fingers( - int(msg.position), - force=int(msg.force) if msg.force else None, - speed=int(msg.speed) if msg.speed else None, - wait_complete=wait, - timeout=timeout, - ) - if command in ("rotate", "rotate_to"): - return gripper.rotate_to( - float(msg.position), - speed=int(msg.speed) if msg.speed else None, - torque=int(msg.force) if msg.force else None, - wait_complete=wait, - timeout=timeout, - ) - if command == "rotate_by": - return gripper.rotate_by( - float(msg.position), - speed=int(msg.speed) if msg.speed else None, - torque=int(msg.force) if msg.force else None, - wait_complete=wait, - timeout=timeout, - ) - if command == "rotate_revolutions": - return gripper.rotate_revolutions( - float(msg.position), - speed=int(msg.speed) if msg.speed else None, - torque=int(msg.force) if msg.force else None, - wait_complete=wait, - timeout=timeout, - ) - if command == "home_rotation": - return gripper.home_rotation( - speed=int(msg.speed) if msg.speed else None, - torque=int(msg.force) if msg.force else None, - wait_complete=wait, - timeout=timeout, - ) - if command == "set_force": - gripper.set_rotation_torque(int(msg.force)) - return gripper.get_status() - if command == "set_speed": - gripper.set_rotation_speed(int(msg.speed)) - return gripper.get_status() - if command == "set_finger_force": - gripper.set_finger_force(int(msg.force)) - return gripper.get_status() - if command == "set_finger_speed": - gripper.set_finger_speed(int(msg.speed)) - return gripper.get_status() - - status = gripper.get_status() - status.state = GripperState.ERROR - status.error_msg = f"不支持的命令 {command!r}(side={side})" - return status - - def _on_command(self, side: str, msg: GripperCommandMsg) -> None: - with self._locks[side]: - status = self._execute(side, msg) - if status.state == GripperState.ERROR: - self.get_logger().warn(f"{side} 命令 {msg.command!r} 失败:{status.error_msg}") - - def _on_execute(self, side: str, request: GripperExecute.Request, response: GripperExecute.Response): - with self._locks[side]: - status = self._execute(side, request.command) - response.success = status.state != GripperState.ERROR and status.connected - response.message = status.error_msg or "OK" - response.status = self._to_status_msg(side, status) - return response - - def _to_status_msg(self, side: str, status) -> GripperStatusMsg: - gripper = self._gripper(side) - msg = GripperStatusMsg() - msg.header.stamp = self.get_clock().now().to_msg() - msg.header.frame_id = f"{side}_gripper" - msg.name = gripper.name - msg.gripper_type = gripper.gripper_type.name.lower() - msg.state = status.state.name - msg.connected = bool(status.connected) - msg.initialized = bool(status.initialized) - msg.is_moving = bool(status.is_moving) - msg.is_gripped = bool(status.is_gripped) - msg.position = float(status.position) - msg.finger_position_per_mille = float(status.finger_position_per_mille) - msg.rotation_deg = float(status.rotation_deg) - msg.gripper_state = int(status.gripper_state) - msg.rotation_state = int(status.rotation_state) - msg.velocity = float(status.velocity) - msg.force = float(status.force) - msg.error_msg = status.error_msg or "" - return msg - - def _publish_status(self) -> None: - if "left" in self._sides: - left_status = self._manager.left.get_status() - if "left" in self._connect_errors and not left_status.connected: - left_status.error_msg = self._connect_errors["left"] - self._left_pub.publish(self._to_status_msg("left", left_status)) - if "right" in self._sides: - right_status = self._manager.right.get_status() - if "right" in self._connect_errors and not right_status.connected: - right_status.error_msg = self._connect_errors["right"] - self._right_pub.publish(self._to_status_msg("right", right_status)) - - def destroy_node(self) -> bool: - try: - self._manager.disconnect_all() - finally: - return super().destroy_node() - - -def main() -> None: - rclpy.init() - node = DualGripperNode() - executor = MultiThreadedExecutor(num_threads=4) - try: - rclpy.spin(node, executor=executor) - finally: - node.destroy_node() - rclpy.shutdown() - - -if __name__ == "__main__": - main() diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/gauge_assembly_node.py b/install/arm_application/lib/python3.11/site-packages/arm_application/gauge_assembly_node.py deleted file mode 100644 index 5578c20..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/gauge_assembly_node.py +++ /dev/null @@ -1,2623 +0,0 @@ -#!/usr/bin/env python3 -"""通止规装配主流程(看板 S00–S11 + E1/E2)。 - -一次完整装配做什么 ------------------- -1. **S00** 自检:机械臂伺服 / 相机预览 / 夹爪伺服 / 触觉图传 / 算法权重, - 全部就绪才开指令窗(缺什么、缺了会怎样,逐条打印); -2. **S01** 回 home,再按工具系逆时针预绕到"不触发关节极限的极限角" —— - 这一步是给 S08 的棘轮留出回转行程,不然后面转两圈就贴限位; -3. **S02** 夹持确认(预留,默认跳过:传感器方案在优化、D435 未标定); -4. **S04** 腕部 D405 跟踪 k0(S03 手外粗定位只作兜底:跟踪丢了才去, - 今天 D435 还没标定,所以会明确报"缺哪个文件"而不是假装在做); -5. **S05** 画面稳定 T 秒后精拍定位 k1/k2,并记下当时的位姿; -6. **S06→S09** 对当前孔:正悬停 → 柔顺接触 → 棘轮式拧入 → 反向拧出; -7. **S10** 换到下一个孔(回到 S05 记的位姿),重复 S06–S09; -8. **S11** 复位退出。 - -异常分支:**E1** 掉件(张开爪 → 回 S01 流程 → 提示人工放好 → 按 R 继续)、 -**E2** 任意阶段超时/报错 → 退到安全高度后中止。 - -怎么跑 ------- -:: - - # 真机(先起机械臂与相机:run_real.sh / run_camera_d405.sh) - bash scripts/run_gauge_assembly.sh --arm 89 # 完整流程 - bash scripts/run_gauge_assembly.sh --arm 89 --dry-run # 只验编排,不动臂 - bash scripts/run_gauge_assembly.sh --arm 89 --holes 1 # 只装 k1 - - # 仿真(先起仿真:run_sim_gz.sh) - bash scripts/run_gauge_assembly.sh --sim - -诚实标注(哪些已经能信、哪些还不能) ------------------------------------- -**已经钉住的**(有单测/有验收判据): - -* S00–S11 的顺序、E1/E2 的落点(``gauge_fsm`` 92 项单测); -* 配置解析与单位、未知键报错(``gauge_config``); -* S01 的限位夹取与"真的绕工具 Z 转了"的事后验证(``gauge_kin``,用 TF 实测); -* 夹爪后端按**服务类型**选择(``gauge_gripper``); -* S00 的必检/选检划分(``gauge_boot``)。 - -**还不能信的**(必须真机标定/标定后才能用): - -* S07 的切向阈值、S08 的力判据:全部是"相对静止基线的增量"(任意单位), - 必须现场标定,代码只给了起点值和打印; -* S03 手外粗定位:D435 还没有 eye-to-hand 标定文件 → 目前必然走兜底; -* S02 夹持确认:预留,默认跳过。 -""" - -from __future__ import annotations - -import dataclasses -import json -import math -import os -import time -from pathlib import Path -from typing import Any, Dict, Iterable, List, Mapping, Optional, Sequence, Tuple - -import numpy as np -import rclpy -from rclpy.qos import ( - DurabilityPolicy, - QoSProfile, - ReliabilityPolicy, - qos_profile_sensor_data, -) -from sensor_msgs.msg import CameraInfo, Image -from std_msgs.msg import Bool, Float32MultiArray, String -from std_srvs.srv import Trigger -from trajectory_msgs.msg import JointTrajectory - -from arm_msgs.msg import GripperStatus -from arm_msgs.srv import GripperExecute - -from arm_application.gauge_boot import ( - dependency_advice, - missing_modules, - perception_source_of, - BootCheck, - abs_name, - blocking_failures, - build_checks, - format_report, - optional_warnings, - summary_counts, -) -from arm_application.gauge_config import ( - GaugeConfig, - GaugeConfigError, - from_site, - snap_feature_of, -) -from arm_application.gauge_fsm import ( - DESCEND_STALL_STEPS, - ENTRY_HIGH, - ROT_AXIS, - ROT_LIMIT, - ROT_SHORT, - Event, - FsmError, - GaugeContext, - GAUGE_SHOULDER_ABOVE_TIP_M, - GaugeFsm, - State, - descend_budget_m, - descend_iter_budget, - descend_needed_m, - descend_progress, - hole_entry_verdict, - descend_tol_m, - is_joint_limit_error, - pixel_stable, - points_stable, - ratchet_cycles, - ratchet_delta_rad, - ratchet_travel_ok, - relief_tol_m, - rotation_verdict, - screw_stop, - tangential_jump, - tool_clearance_m, - wrench_live, - wrench_touch, -) -from arm_application.gauge_gripper import ( - CONTRACT_STATUS_TOPIC, - GripperInterfaceError, - describe_backend_choice, - is_dropped_from_state, - is_gripped_from_state, - legacy_states_to_fields, - pick_backend, -) -from arm_application.gauge_kin import ( - axis_misalignment_deg, - match_limits, - parse_joint_limits, - prewind, - rotation_about_axis_deg, - vertical_down_error_deg, -) -from arm_application.pipeline_node import AssemblyPipeline -from arm_application.handeye_realsense import resolve_realsense_topics -from arm_application.site_io import ( - deep_merge, - load_site_dict, - overhead_camera, - resolve_eye_to_hand_file, - ros2_root, -) -# 复用同一份图像解码与轨迹点构造,别在这里再写一份(规则 M2) -from arm_application.stage2_locate_node import _bgr_copy, _pt as _joint_point - -#: 允许的"绕轴验证"误差 [deg]。超过就说明这根关节轴不是工具 Z 轴, -#: 后面所有以"转多少度"为单位的动作都不成立 —— 必须报错而不是继续。 -AXIS_VERIFY_TOL_DEG = 5.0 -#: 棘轮转腕时距离关节限位保留的余量 [deg]。 -#: 3° 不够用:实测轨迹会**自己**少走 ~5°(比如命令 180° 只到位 175.1°, -#: 而关节7 的限位正好是 175.06° —— 两者叠在一起,判断"是被限位截住还是 -#: 没走完"就分不清了)。留 8° 让这两种情况都还没有贴住。 -RATCHET_LIMIT_MARGIN_DEG = 8.0 -#: 限制"跟踪丢失 → 粗定位 → 跟踪"的来回次数,防死循环。 -MAX_TRACK_RETRIES = 3 - -#: ``stage2_locate`` 返回码 → 人话。为什么要这张表:日志里只有 ``code=6`` 时, -#: 现场只能去翻源码;而每个码对应的**下一步动作完全不同**(垂直化/粗定位/ -#: 检测/对准/工件被推走),写在这里就不用来回翻了。 -_LOCATE_CODE_HINT: Dict[int, str] = { - 2: "(垂直化或悬停失败:工具轴没竖直、或悬停高度到不了)", - 3: "(粗定位失败:视野里没框到工件 —— 看相机/光照/权重)", - 4: "(k1/k2 解不出来:孔被挡、曝光不对、或孔根本没在视野里)", - 5: "(对准迭代用满仍未收敛:检查手眼/相机安装,或放宽 align_tol_m)", - 6: "(工件被工具推走:不是手眼/检测的问题,是悬停时工具尖端已经进了工件" - " —— 查 gauge_assembly.tool_tip_below_flange_m 与 servo.hole_hover_z_m)", - 8: "(规尖偏移一直没量到:残差看着达标、但用的是**法兰轴线**不是规尖 —— " - "对的可能是法兰、不是规;摆到能看清规尖再跑。看日志『规尖视觉量取失败』)", -} - - -class GaugeAbort(RuntimeError): - """阶段内部判定要中止。带上 exit code,方便脚本区分原因。""" - - def __init__(self, message: str, code: int = 6) -> None: - super().__init__(message) - self.code = code - - -class GripperClient: - """夹爪出入口:``open/close/is_gripped`` 三个动作,与后端无关。 - - 后端由 :func:`arm_application.gauge_gripper.pick_backend` 按**服务类型**决定 - (真机今天是 Trigger,契约/仿真 是 GripperExecute),应用层不需要知道。 - """ - - #: 判"掉件"的开口塌陷量 [mm]:被夹住的工件掉了以后,两指会一路合到底, - #: 开口从"工件宽度"塌下去几十毫米。为什么不用 ``is_gripped`` 瞬时值 —— 见 - #: :meth:`dropped` 的说明(那是个推断值,会被 S08 的指令切换抖出假 E1)。 - DROP_COLLAPSE_MM = 5.0 - - def __init__(self, node: Any, backend: str, status_topic: str) -> None: - self._node = node - self.backend = backend - self._open_cli = None - self._close_cli = None - self._last_gripped: Optional[bool] = None - self._legacy_grip_state: Optional[int] = None - self._ever_gripped = False - #: 最近一帧的开口 [mm](契约后端才有)。掉件判据看它。 - self._last_aperture: Optional[float] = None - #: "夹住那一刻"的开口 [mm]。掉件判据是相对它的**塌陷量**,不是绝对值。 - self._grip_aperture: Optional[float] = None - - if backend == "contract": - self._open_cli = node.create_client(GripperExecute, "/gripper/open") - self._close_cli = node.create_client(GripperExecute, "/gripper/close") - node.create_subscription(GripperStatus, status_topic, self._on_contract, 10) - else: - self._open_cli = node.create_client(Trigger, "/gripper/open") - self._close_cli = node.create_client(Trigger, "/gripper/close") - node.create_subscription(Float32MultiArray, status_topic, self._on_legacy, 10) - - # -- 状态回调 --------------------------------------------------------- - def _on_contract(self, msg: GripperStatus) -> None: - pos = float(getattr(msg, "position", float("nan"))) - if math.isfinite(pos): - self._last_aperture = pos - self._last_gripped = bool(msg.is_gripped) - # ⚠️ 这里**故意不**记"夹住时的开口"。曾经记过,代价是一个假 E1: - # 本后端的 is_gripped 是**推断值**,夹爪**全开**时也会闪成 True - # (实测 99.29mm,见 dropped 的说明),于是基准被记成 99.29mm、 - # 塌陷量算成 77mm ⇒ "通止规掉了(E1)",而规好好地在爪里。 - # 基准只由 :meth:`adopt_current_grip` 在**明确知道夹住了**的时候记。 - - def _on_legacy(self, msg: Float32MultiArray) -> None: - fields = legacy_states_to_fields(list(msg.data)) - if not fields: - return - self._legacy_grip_state = int(fields["grip_state"]) - got = is_gripped_from_state(self._legacy_grip_state) - if got is not None: - self._last_gripped = got - if got: - # 老后端只有状态字、没有开口,掉件判据本来就吃状态字(见 dropped), - # 所以这里记"曾经夹住过"是对的。 - self._ever_gripped = True - - # -- 查询 ------------------------------------------------------------- - def seen(self) -> bool: - """收到过状态帧吗。S00 用它判断"状态话题有没有人发"。 - - 不能用 `topic list` 里有名字代替:话题在、发布者不在,是最常见的 - 假阳性(run_all.sh 踩过)。""" - return self._last_gripped is not None or self._legacy_grip_state is not None - - def is_gripped(self) -> Optional[bool]: - """``True``/``False``/``None``(后端给不出明确答案)。""" - return self._last_gripped - - def aperture(self) -> Optional[float]: - """最近一帧的**开口** [mm](只有契约后端的 ``position`` 有;没有返回 None)。""" - return self._last_aperture - - def grip_aperture(self) -> Optional[float]: - """第一次判到"夹住"时的开口 [mm](掉件判据的基准,见 :meth:`dropped`)。""" - return self._grip_aperture - - def collapse_mm(self) -> Optional[float]: - """相对夹住时的**开口塌陷量** [mm](正 = 比夹住时更小)。拿不到返回 None。 - - S08/S09 每轮都要"松爪 → 回转 → 夹紧",日志里必须看得到这个数: - 它一路变大就说明每轮夹紧都比上一轮更往里挤,或者规在往下滑。 - """ - if self._grip_aperture is None or self._last_aperture is None: - return None - return float(self._grip_aperture) - float(self._last_aperture) - - # -- 开口的"等稳定"与"记基准" ------------------------------------------ - def settle(self, *, settle_s: float = 1.0, tol_mm: float = 0.05) -> Optional[float]: - """等开口**稳定**下来,返回稳定后的开口 [mm](拿不到读数返回 None)。 - - 为什么必须有这个(2026-09-24 用日志抓到的): - ``close``/``open`` 服务**返回时动作还没做完**(JTC 轨迹是异步的)。 - 立刻读开口会读到**松手前的旧值**——实测 S08 夹紧后立刻读,读到的还是 - 全开 99.93mm,于是日志与基准全错("夹住时 99.29mm")。谁要在动作之后 - 判断开口,都必须先过这里。 - """ - spin = getattr(self._node, "_spin", None) - deadline = time.monotonic() + max(0.0, settle_s) - prev = self._last_aperture - stable = 0 - while True: - if spin is not None: - spin(0.05) - else: # pragma: no cover - 只有测试桩走这里 - time.sleep(0.05) - now = self._last_aperture - if now is not None and prev is not None and abs(float(now) - float(prev)) <= tol_mm: - stable += 1 - if stable >= 2: - return float(now) - else: - stable = 0 - prev = now - if time.monotonic() >= deadline: - return None if now is None else float(now) - - def adopt_current_grip(self, why: str, *, settle_s: float = 1.0) -> Optional[float]: - """把**当前**开口记为"夹住时的开口"(掉件判据的基准),并记"曾经夹住过"。 - - 只在**明确知道爪里夹着规**的时刻调用(S00 自检通过后、以及每一次 - 确认夹紧之后)——它是掉件判据唯一的参照,随手记会让判据失去意义 - (见 :meth:`dropped` 与 :meth:`_on_contract` 的说明)。 - """ - ap = self.settle(settle_s=settle_s) - if ap is None: - # 拿不到开口(老固件/别的夹爪)也要记"曾经夹住过":否则 dropped() - # 会永远返回 False,那比"会抖的旧判据"更糟(真掉件也看不见)。 - self._ever_gripped = True - self._node.get_logger().warn( - f"拿不到开口读数({why})—— 掉件判据退回状态字,会抖但不会漏" - ) - return None - self._grip_aperture = float(ap) - self._ever_gripped = True - self._node.get_logger().info(f"夹持基准:开口 {ap:.2f}mm({why})") - return float(ap) - - def dropped(self) -> bool: - """E1 掉件:**曾经夹住过**,现在报"掉落"。 - - 装配前爪里本来就空,那时状态字也可能是"掉落/无物",直接判会一开场就 - 报 E1(``is_dropped_from_state`` 里解释了这一点)。 - - **契约后端的判据是"开口塌陷",不是 ``is_gripped`` 的瞬时翻转** - (2026-09-24 实测踩到,值得完整读): - - 仿真里 ``is_gripped`` 是**推断值**("指令到了合拢侧 + 实际开口比指令 - 大出容差")。S08 会在"合到某个开口 / 全合"之间发指令 —— 只要某一帧 - 的指令落到与实际开口同一档,``is_gripped`` 就翻成 False。于是 - **S08 第 2/12 轮直接报 E1**(爪里其实好好的,是判据在抖), - 然后整条流程去等人工"放好通止规",而仿真里根本没人能做这件事。 - 更坏的是这个推断值在**全开**时也会闪成 True(实测 99.29mm)—— - 拿它当基准就会得到"塌陷 77mm"的假 E1。所以基准只由 - :meth:`adopt_current_grip` 明确记录(见 :meth:`_on_contract`)。 - - 真正"掉了"的物理表现是**两指合到底**:开口从"工件宽度"塌到几毫米, - 是几十毫米的变化,不会被指令切换带偏。所以判据用 - ``夹住时的开口 − 当前开口 ≥ DROP_COLLAPSE_MM``。 - """ - if not self._ever_gripped: - return False - if self.backend == "legacy" and self._legacy_grip_state is not None: - return is_dropped_from_state(self._legacy_grip_state, self._ever_gripped) - if self._grip_aperture is None or self._last_aperture is None: - # 没有开口读数(老固件/别的夹爪不给 position):退回旧判据。 - # 它确实会抖,但比"永远判不了掉件"好 —— 而且这种情况本身会 - # 在 S00 的自检里被 `position` 相关检查点到。 - return self._last_gripped is False - return ( - float(self._grip_aperture) - float(self._last_aperture) - ) >= self.DROP_COLLAPSE_MM - - # -- 动作 ------------------------------------------------------------- - def _call( - self, client: Any, tag: str, timeout_s: float, - force_pct: Optional[float] = None, speed_pct: Optional[float] = None, - ) -> bool: - if client is None or not client.wait_for_service(timeout_sec=timeout_s): - self._node.get_logger().error(f"夹爪服务 {tag} 不在(后端 {self.backend})") - return False - if self.backend == "contract": - req: Any = GripperExecute.Request() - req.command.command = tag - # 力/速度只对**契约后端**有效:真机今天的 dh_pgea 驱动是 - # std_srvs/Trigger(只有开/合两个动作,力与速度在驱动侧配), - # 所以那两个键在真机上不起作用 —— 这是保留下来的规格差异, - # 文档里已写明,不要以为"填了没效果"是 bug。 - if force_pct is not None: - req.command.force = float(force_pct) - if speed_pct is not None: - req.command.speed = float(speed_pct) - else: - req = Trigger.Request() - fut = client.call_async(req) - t0 = time.monotonic() - while not fut.done() and time.monotonic() - t0 < timeout_s: - self._node._spin(0.02) - if not fut.done(): - self._node.get_logger().error(f"夹爪 {tag} 超时 {timeout_s:.1f}s") - return False - try: - resp = fut.result() - except Exception as exc: # noqa: BLE001 - self._node.get_logger().error(f"夹爪 {tag} 调用异常:{exc}") - return False - ok = bool(getattr(resp, "success", True)) - if not ok: - self._node.get_logger().error( - f"夹爪 {tag} 失败:{getattr(resp, 'message', '(无消息)')}" - ) - return ok - - def open(self, timeout_s: float = 5.0) -> bool: - if self._node.cfg.dry_run: - self._node.get_logger().info("[干跑] 夹爪张开") - return True - return self._call(self._open_cli, "open", timeout_s) - - def close(self, timeout_s: float = 5.0) -> bool: - if self._node.cfg.dry_run: - self._node.get_logger().info("[干跑] 夹爪夹紧") - return True - return self._call( - self._close_cli, "close", timeout_s, - force_pct=self._node.cfg.screw_grip_force_pct, - speed_pct=self._node.cfg.screw_grip_speed_pct, - ) - - -class GaugeAssembly(AssemblyPipeline): - """S00–S11 的执行器:状态机的每一步在这类里实现。 - - 继承 :class:`~arm_application.pipeline_node.AssemblyPipeline` 是为了复用 - 已经调通的**跟踪拉起/停止**(``_run_stage1``/``_stop_stage1``/``_track_z``) - 与整条 stage2 定位链(``_run_locate``)—— 这些是阶段式流水线的公共骨架, - 抄一份只会让"改了 A 忘了改 B"变成常态(规则 M2)。 - """ - - #: 状态 → 处理方法名。**顺序即流程**,与 gauge_fsm.TRANSITIONS 一一对应。 - _STEPS: Dict[State, str] = { - State.BOOT: "_step_boot", - State.HOME_EXTREME: "_step_home_extreme", - State.GRIP_CHECK: "_step_grip_check", - State.COARSE: "_step_coarse", - State.TRACK: "_step_track", - State.SNAP: "_step_snap", - State.HOVER_K: "_step_hover_k", - State.CONTACT: "_step_contact", - State.SCREW_IN: "_step_screw_in", - State.UNSCREW: "_step_unscrew", - State.NEXT_HOLE: "_step_next_hole", - State.RESET: "_step_reset", - } - - def __init__(self, node_name: str = "gauge_assembly") -> None: - super().__init__(node_name=node_name) - - self.declare_parameter("dry_run", False) - self.declare_parameter("holes_total", -1) # >0 覆盖 site - self.declare_parameter("gripper_backend", "auto") # auto|contract|legacy - # 结论落盘路径。**为什么要落盘**:`ros2 launch` 在 Humble 下**恒定退出码 0** - # (实测:子进程 exit 3,ros2 launch 仍返回 0),所以包一层脚本时 - # `$?` 判不出成败 —— 自动化里会把"流程失败"记成"成功"。结论文件是唯一 - # 能被脚本/CI 读到的东西,由 run_gauge_assembly.sh 传入并读回。 - self.declare_parameter("result_file", "/tmp/gauge_assembly_result.json") - # 眼在手外标定产物的**确切路径**,由 launch 按 site.yaml 派生后传入 - # (`<臂号>_<相机>_eye_to_hand.yaml`)。为什么不让节点自己拼: - # "臂号 = SN 末两位"这条口径只有 export_site_env 一处实现,节点再写一遍 - # 必然漂移;而漂移的症状是"标定做完了、S03 却找不到文件",回退到 S04 跟踪, - # 看起来像跟踪的问题。留空则退回下面那串候选名(兼容旧命名/仿真)。 - self.declare_parameter("coarse_eye_to_hand_file", "") - - site = load_site_dict() - # robots[].gauge_assembly 覆盖全局段 —— 与 servo / paths / perception 同一套规矩。 - # 为什么必须有这条(2026-09-24):几何类参数是**按台子**的。 - # `workpiece_surface_z_m` 在仿真里是 0.412(仿真臂站在地面、台面 0.40m 高), - # 真机是 0.012(基座与台面同高)。写死全局值的话,S07 的 - # "悬停时工具尖端离面多高"自检会算错 —— 而现象是"一路下压判不到接触", - # 看起来像力阈值标歪了,排查会从阈值开始走偏。 - _robot = self._robot_dict(site) - if isinstance(_robot.get("gauge_assembly"), dict): - site = dict(site) - site["gauge_assembly"] = deep_merge( - site.get("gauge_assembly") or {}, _robot["gauge_assembly"] - ) - overrides: Dict[str, Any] = {} - if bool(self.get_parameter("dry_run").value): - overrides["dry_run"] = True - holes = int(self.get_parameter("holes_total").value) - if holes > 0: - overrides["holes_total"] = holes - # 工具长:仿真里由启动脚本传**实测值**(上料脚本刚量的),真机不传(走 site)。 - # 为什么必须能覆盖:这个值决定悬停高度与 S07 下探预算,而仿真里规会在指间 - # 下滑到落座位置、下滑量随装夹变化(实测见过 243 / 254mm,差 11mm)。 - # 差 11mm 的后果见 gauge_fsm.hover_z_guard / drag_verdict 的说明。 - tool_len = float(self.get_parameter("tool_tip_below_flange_m").value) - if tool_len > 0.0: - overrides["tool_tip_below_flange_m"] = tool_len - try: - self.cfg: GaugeConfig = from_site(site, overrides=overrides or None) - except GaugeConfigError as exc: - raise GaugeAbort(f"gauge_assembly 配置有问题:\n{exc}", code=3) from exc - - self._site = site - self._warn_if_section_missing(site) - - # ---- 自检清单(纯内容 + 本机名字)---- - self._gripper_prefer = str(self.get_parameter("gripper_backend").value or "auto") - # robots[] 里的 tool_name 优先(一台机器一个工具),没有就用全局 robot.tool_name - self.tool_name = str( - self._robot_dict(site).get("tool_name") - or (site.get("robot") or {}).get("tool_name") or "" - ) - self._weights = str((site.get("paths") or {}).get("yolo_weights") or "") - # 夹爪后端要按"服务实际类型"选,所以放到 S00 里做(此时才知道服务在不在) - self._boot_results: List[Tuple[BootCheck, bool, str]] = [] - - self._warn_if_sim_time_missing() - - # ---- 状态机 ---- - self.fsm = GaugeFsm(GaugeContext(holes_total=self.cfg.holes_total)) - self.grip: Optional[GripperClient] = None - self._coarse_ok = False - self._track_retries = 0 - self._snap_final: Dict[str, Any] = {} - self._snap_pose: Optional[np.ndarray] = None - self._gauge_was_gripped = False - self._axis_verified = False - #: E1(掉件)重放:S08 报掉件后置位,S01 走完要等人工放好并确认 - self._e1_pending = False - self._reload_ok = False - - # ---- 手外相机(S03 粗定位):stage2 只订阅腕部相机,这里自己订一份 ---- - # 只订不驱动:S03 是兜底路径,平时不读它的帧,不能因为"手外相机没插" - # 就影响主流程(所以 S00 里它只是选检)。 - self._coarse_color: Optional[Image] = None - self._coarse_depth: Optional[Image] = None - self._coarse_info: Optional[CameraInfo] = None - self._coarse_ns = self._d435_ns(site) - # 手外相机名的**唯一数据源**是 site.yaml 的 cameras 注册表(上面那行)。 - # 配置段里的 gauge_assembly.coarse_camera 是"注册表里没登记手外相机"时的 - # 兜底;两者不一致时以注册表为准,但要**出声** —— 否则改了一处没改另一处, - # 表现是"话题在发、S03 却拿到另一台相机/另一个 frame",静默错。 - if self._coarse_ns and self.cfg.coarse_camera != self._coarse_ns: - self.get_logger().warn( - f"手外相机名不一致:cameras 注册表说 {self._coarse_ns}," - f"gauge_assembly.coarse_camera 写的是 {self.cfg.coarse_camera}。" - f"以注册表为准({self._coarse_ns})。" - "site.yaml 里那处可以删掉了(留着只会误导下一个人)" - ) - # GaugeConfig 是 frozen 的:要改只能造一个新的(replace)。 - # 直接赋值会抛 FrozenInstanceError,而且是在 __init__ 里 —— - # 表现为"节点起不来",看不出跟相机名有关。 - self.cfg = dataclasses.replace(self.cfg, coarse_camera=self._coarse_ns) - #: 各相机的**收到时刻**(单调钟)。判"有没有活的数据"用它,不用 - #: header.stamp —— 两者可能不在同一个时钟域(见 `_img_age` 的注释)。 - self._t_color: Optional[float] = None - self._t_coarse_color: Optional[float] = None - self._skew_warned = False - if self._coarse_ns: - img_t, info_t = resolve_realsense_topics(self._coarse_ns, image_topic="") - # QoS 必须用 sensor data(BEST_EFFORT):RealSense 驱动发的是 - # BEST_EFFORT,而 create_subscription 的默认是 RELIABLE —— - # 不匹配时一条消息都收不到,日志里只有一条容易忽略的 - # "offering incompatible QoS" 警告,表现为"相机明明在跑却没图像"。 - self.create_subscription( - Image, img_t, self._on_coarse_color, qos_profile_sensor_data - ) - self.create_subscription( - CameraInfo, info_t, self._on_coarse_info, qos_profile_sensor_data - ) - self.create_subscription( - Image, f"/{self._coarse_ns}/aligned_depth_to_color/image_raw", - self._on_coarse_depth, qos_profile_sensor_data, - ) - - # 人工确认话题:E1 重放时,操作员放好新规后发一条 true - # ros2 topic pub -1 /gauge/reload_ok std_msgs/Bool '{data: true}' - # 用话题而不是服务:一条命令就能发(不必等回包),现场手忙脚乱时更稳。 - self.create_subscription(Bool, "/gauge/reload_ok", self._on_reload_ok, 1) - - # ---- 发布 ---- - self._result_file = str(self.get_parameter("result_file").value or "") - self._result_written = False - self._gauge_state_pub = self.create_publisher(String, "/gauge/state", 10) - self._gauge_result_pub = self.create_publisher(String, "/gauge/result", 10) - self._gauge_progress_pub = self.create_publisher(String, "/gauge/progress", 10) - self._robot_description: Optional[str] = None - self.create_subscription( - String, "/robot_description", self._on_robot_description, - QoSProfile( - depth=1, durability=DurabilityPolicy.TRANSIENT_LOCAL, - reliability=ReliabilityPolicy.RELIABLE, - ), - ) - - self.get_logger().info( - f"通止规装配 arm={self.prefix.rstrip('_')} " - f"孔数={self.cfg.holes_total} 干跑={self.cfg.dry_run} " - f"工具系={self.tool_name or '(未配置)'} 手外相机={self._coarse_ns or '(无)'}" - ) - for line in self.cfg.describe(): - self.get_logger().info(line) - - # ===================================================================== - # 小工具 - # ===================================================================== - def _warn_if_section_missing(self, site: Dict[str, Any]) -> None: - """整段缺失时明确告警:默认值只是起点,不是调好的参数。""" - if not site.get("gauge_assembly"): - self.get_logger().warn( - "site.yaml 里没有 gauge_assembly: 段 —— 全部走默认值。" - "力阈值类参数必须现场标定,见 config/site.example.yaml 的同名段" - ) - - def _robot_dict(self, site: Dict[str, Any]) -> Dict[str, Any]: - sn = str(self.get_parameter("robot_sn").value or "").strip() - for r in (site.get("robot") or {}).get("robots") or []: - if isinstance(r, dict) and str(r.get("sn") or "").strip() == sn: - return dict(r) - return {} - - def _d435_ns(self, site: Dict[str, Any]) -> str: - """手外相机的命名空间:``role: overhead*`` 且**属于当前这台臂**的那一个。 - - 规则(三级收敛)的**唯一实现**在 ``site_io.overhead_camera``——手眼标定 - 脚本也用它取相机名。这里只负责把"配置没区分开"这件事**出声**:静默取第一台 - 会让"标定用的相机"和"推理用的相机"悄悄不是同一台。 - """ - cfg, others = overhead_camera(site, self._robot_dict(site)) - if others: - names = ", ".join([str(cfg.get("name") or "?")] + others) - self.get_logger().warn( - f"有 {len(others) + 1} 台手外相机都符合当前臂({names})—— 取第一个," - "但请给 site.yaml 的 cameras.* 补上 arm 字段区分,否则选哪台看运气" - ) - return str(cfg.get("name") or "").strip("/") - - def _eye_to_hand_file(self) -> Optional[Path]: - """找手外相机的手眼文件。没有就返回 None(调用方据此给出**怎么生成**)。 - - 规则(候选顺序 + 按仓库根解析)只有一份,在 ``site_io.resolve_eye_to_hand_file``。 - 这里只负责把 launch 传入的确切路径和当前手外相机名交给它。 - """ - return resolve_eye_to_hand_file( - ros2_root(), - explicit=str(self.get_parameter("coarse_eye_to_hand_file").value or ""), - camera_name=self.cfg.coarse_camera, - ) - - def _on_robot_description(self, msg: String) -> None: - self._robot_description = str(msg.data) - - def _on_reload_ok(self, msg: Any) -> None: - if bool(msg.data): - self._reload_ok = True - - def _on_color(self, msg: Image) -> None: - # 腕部相机:父类(stage2)负责存帧,这里只补"收到时刻"并顺带查时钟域。 - super()._on_color(msg) - self._t_color = time.monotonic() - self._note_stamp_skew(msg, "腕部相机") - - def _on_coarse_color(self, msg: Image) -> None: - self._coarse_color = msg - self._t_coarse_color = time.monotonic() - self._note_stamp_skew(msg, "手外相机") - - def _on_coarse_depth(self, msg: Image) -> None: - self._coarse_depth = msg - - def _on_coarse_info(self, msg: CameraInfo) -> None: - self._coarse_info = msg - - def _hole_name(self) -> str: - """孔名 k1/k2/...。直接用状态机的,别在节点里再实现一遍(规则 M2)。""" - return self.fsm.ctx.hole_name() - - def _img_age(self, t_recv: Optional[float]) -> float: - """图像从**收到的那一刻**到现在过了多久 [s];从没收到返回 1e9。 - - 为什么不用 `header.stamp`(原来就是那么写的,出过事): - 节点时钟和消息时钟可能是**两个时钟域** —— 仿真里忘了 `use_sim_time` - 时,`/clock` 从 0 开始、节点却用系统时间,于是"按时间戳算年龄"会算出 - `1790217444.7s` 这种数,把"图像 13Hz 好好地流着"报成 - "腕部相机无数据",而人只会去怀疑相机。收到时刻用单调钟记, - 与两个时钟域都无关,判"有没有活数据"永远是对的。 - """ - if t_recv is None: - return 1e9 - return max(0.0, time.monotonic() - t_recv) - - def _stamp_skew(self, msg: Image) -> Optional[float]: - """消息时间戳与节点时钟的差 [s];取不到时间戳返回 None。""" - try: - stamp = float(msg.header.stamp.sec) + float(msg.header.stamp.nanosec) * 1e-9 - except Exception: # noqa: BLE001 - return None - return self.get_clock().now().nanoseconds * 1e-9 - stamp - - def _note_stamp_skew(self, msg: Image, where: str) -> None: - """时钟域不一致时说一次,别每帧都刷。 - - > 1 小时就认为是两个时钟域(仿真差的是整段时间基准, - > 不可能只差几十秒;真机上的时延是毫秒级)。 - """ - if self._skew_warned: - return - skew = self._stamp_skew(msg) - if skew is None or abs(skew) < 3600.0: - return - self._skew_warned = True - self.get_logger().warn( - f"{where}的时间戳与节点时钟差 {skew:.0f}s:**不是数据问题,是时钟域不同**。" - "仿真里给本节点加 use_sim_time:=true(run_gauge_assembly.sh --sim 已带)。" - "不修的话 TF 查询也会全线失败 —— 因为 TF 是按时间戳比对的。" - ) - - def _warn_if_sim_time_missing(self) -> None: - """看起来在仿真里,却没开 use_sim_time → 出声(否则症状极难定位)。 - - `/clock` 有发布者 = 有人在做仿真(真机上没有 `/clock`)。这时如果 - `use_sim_time` 还是 false,所有 header.stamp 比对、TF lookup 都会错, - 而报出来的却是"相机没数据""TF 查不到"这类**假原因**。 - """ - if bool(self.get_parameter("use_sim_time").value): - return - try: - n = self.count_publishers("/clock") - except Exception: # noqa: BLE001 - return - if n > 0: - self.get_logger().warn( - "检测到 /clock 有发布者(在仿真里),但本节点 use_sim_time=false:" - "时间戳比对与 TF 查询都会失败。请加 use_sim_time:=true" - "(scripts/run_gauge_assembly.sh --sim 会自动带)。" - ) - - def _state(self, s: str) -> None: # 覆盖:三阶段的状态话题 + 本流程的 - super()._state(s) - msg = String() - msg.data = s - self._gauge_state_pub.publish(msg) - - def _progress(self, text: str) -> None: - msg = String() - msg.data = text - self._gauge_progress_pub.publish(msg) - - def _publish_gauge_result(self, payload: Dict[str, Any]) -> None: - payload = dict(payload) - payload["fsm"] = [str(step) for step in self.fsm.history] - payload["hole_names"] = [f"k{i + 1}" for i in range(self.cfg.holes_total)] - # 先落盘再发话题:落盘是**给脚本/CI 读**的(话题在进程退出后就没了), - # 顺序反过来的话,"话题发出去了、文件还没写完就被杀掉"会让脚本读不到结论。 - self._write_result_file(payload) - msg = String() - msg.data = json.dumps(payload, ensure_ascii=False) - self._gauge_result_pub.publish(msg) - - def _write_result_file(self, payload: Mapping[str, Any]) -> None: - """把结论写到 ``result_file``(原子写:临时文件 + rename)。""" - if not self._result_file: - return - path = Path(self._result_file) - try: - path.parent.mkdir(parents=True, exist_ok=True) - tmp = path.with_suffix(path.suffix + ".tmp") - tmp.write_text(json.dumps(payload, ensure_ascii=False, indent=2), encoding="utf-8") - tmp.replace(path) - except OSError as exc: - # 写不了不要拖垮流程,但**必须**说出来(否则脚本只会看到"文件不存在") - self.get_logger().error(f"结论文件写不了({path}):{exc}") - return - self._result_written = True - - def _wait_joint_limits(self, timeout_s: float = 3.0) -> Optional[Tuple[float, float]]: - """拿关节7的限位(从 ``/robot_description``)。拿不到返回 None。""" - t0 = time.monotonic() - while self._robot_description is None and time.monotonic() - t0 < timeout_s: - self._spin(0.05) - if not self._robot_description: - self.get_logger().warn( - "拿不到 /robot_description —— S01 不做限位夹取," - "改为靠驱动器限位报错兜底(真撞上时报 JOINT_LIMIT,流程继续)" - ) - return None - limits = parse_joint_limits(self._robot_description) - got = match_limits(limits, [self.joint_names[-1]]) - if got is None: - self.get_logger().warn( - f"/robot_description 里找不到 {self.joint_names[-1]} 的限位" - f"(解析到 {len(limits)} 个关节)—— 同样不做夹取" - ) - return got - - # ===================================================================== - # S00 自检 - # ===================================================================== - def _boot_checks(self) -> List[BootCheck]: - # 状态话题随后端不同;这里先按"契约"建,S00 内部按**真实服务类型**修正 - return build_checks( - joint_action=str(self.get_parameter("action_name").value), - camera=self._wrist_cam_ns(), - tactile_topic=str( - ((self._site.get("tactile") or {}).get("topic_left")) - or "/tactile/left/status" - ), - gripper_open="/gripper/open", - gripper_close="/gripper/close", - gripper_status=CONTRACT_STATUS_TOPIC, - gripper_status_type="arm_msgs/msg/GripperStatus", - d435_camera=self._coarse_ns or None, - tool_name=self.tool_name, - weights_path=self._weights, - perception_source=self._perception_source(), - ) - - def _perception_source(self) -> str: - """感知来源(site.yaml 顶层 perception.source,按当前臂覆盖后);未知值报错。 - - 两件事在这里必须做对: - - 1. **按当前臂覆盖**:本节点读的是文件里的原始 site.yaml,机器人级 - 覆盖(``robots[].perception.source``)要自己合进来 —— 仿真那条 - ``source: truth`` 就写在 robots[`sim`] 下。忘了合的表现是 - "仿真里明明配了 truth,S00 还是去查 ultralytics"。 - 2. **只有一处读它**:launch 文件(决定起哪个感知节点)和 S00(决定查 - 不查推理依赖)必须看同一个值,否则输出会自相矛盾。 - """ - robot = self._robot_dict(self._site) - return perception_source_of( - deep_merge(self._site.get("perception") or {}, robot.get("perception") or {}) - ) - - def _wrist_cam_ns(self) -> str: - """腕部相机命名空间(``d405_left``)。以 site 的 robots[].camera.name 为准。""" - robot = self._robot_dict(self._site) - cam = deep_merge(self._site.get("camera") or {}, robot.get("camera") or {}) - return str(cam.get("name") or "d405").strip().strip("/") - - def _service_snapshot( - self, names: Iterable[str] = () - ) -> Dict[str, List[str]]: - """等服务发现稳定下来,再取服务表。 - - 为什么不能"查一次就算":`get_service_names_and_types()` 返回的是 - **当前已发现** 的那部分图。本节点是刚加入 DDS 的新参与者,起来那一瞬间 - 别人的服务很可能还没被发现 —— 于是"服务明明在"被判成"名字不在图上", - 同一份代码时好时坏。实测现场:仿真栈全绿时 S00 仍报 `/home`、 - `/set_named_pose`、`/gripper/status` 缺失,而 2 秒后手工 `ros2 service list` - 三个都在。这类"看起来像配置错"的抖动最难查,所以这里等到名字齐了再返回。 - - 等待期间必须 **spin**:发现事件要靠执行器回调处理,`time.sleep()` 只是干等。 - """ - want = {n for n in names if n} - deadline = time.monotonic() + max(0.5, min(5.0, self.cfg.boot_timeout_s)) - snap: Dict[str, List[str]] = {} - while True: - snap = dict(self.get_service_names_and_types()) - if not (want - set(snap)): - return snap - if time.monotonic() >= deadline: - return snap - self._spin(0.2) - - def _probe(self, item: BootCheck) -> Tuple[bool, str]: - """执行一项自检。返回 ``(就绪, 细节)``。""" - if item.probe == "service": - found = self._service_snapshot([item.target]).get(item.target) - if found is None: - return False, "名字不在图上" - if item.expect_type and item.expect_type not in found: - # 类型不符**不算就绪**:这正是"服务在但接不上"的现场 - return False, f"类型是 {list(found)},期望 {item.expect_type}" - return True, "" - - if item.probe == "action": - # 这套 rclpy **没有** get_action_names_and_types()(实测缺这个方法), - # 所以 action 只能"建客户端 + wait_for_server"来探。这样反而更实在: - # 名字在图上但服务端没起来(DDS 端点未匹配)也能查出来。 - return self._probe_action(item) - - if item.probe == "detector": - p = Path(item.target) - if not p.is_file(): - return False, f"文件不存在:{p}" - sidecar = p.with_suffix(".labels.yaml") - if not sidecar.is_file(): - return False, f"缺标签文件 {sidecar.name}(weights.sh doctor 可查)" - # 文件在 ≠ 能推理:缺 torch/ultralytics 时这里必须失败, - # 否则会一路跑到 S04 才以"跟踪没锁定"的形式暴露(见 gauge_boot 的注释)。 - miss = missing_modules() - if miss: - return False, dependency_advice(miss) - return True, f"{p.name} + {sidecar.name}" - - # topic / tactile / camera:**要真收到消息**才算就绪。 - # 只看 topic list 是假阳性来源(话题在、没数据),run_all.sh 里踩过。 - deadline = time.monotonic() + min(10.0, self.cfg.boot_timeout_s) - while time.monotonic() < deadline: - detail = self._peek_topic(item) - if detail is None: - return True, "" - # 必须 **spin** 而不是 sleep:订阅回调只在 executor 转起来时才被调用, - # `time.sleep()` 期间一条消息都进不来。这个坑的现场是"相机/触觉/夹爪 - # 明明都在发数据,S00 却逐项报缺失"(真机和仿真都会中招), - # 而人只会去怀疑硬件。 - self._spin(0.2) - return False, detail or "等不到消息" - - def _probe_action(self, item: BootCheck) -> Tuple[bool, str]: - """探测 action 服务端是否可连。""" - from rosidl_runtime_py.utilities import get_interface - - if not item.expect_type: - return False, "清单里没写期望的 action 类型,无法探测" - try: - cls = get_interface(item.expect_type) - except Exception as exc: # noqa: BLE001 - return False, f"接口类型 {item.expect_type} 解析失败:{exc}" - # 已经建好的 JTC 客户端优先复用(stage2 的 self._cli 就是它)。 - # 比较前两边都要规范化:清单里的目标被补成了绝对名(``/foo``),而 - # 参数默认值是相对的(``foo``)—— 直接比会不相等,于是这里再建一个 - # **同名的** action 客户端,FastRTPS 会以"同话题名不同类型"报错, - # 报出来的是 create_client 失败,看不出真正原因是漏了一次规范化。 - if abs_name(item.target) == abs_name( - str(self.get_parameter("action_name").value) - ): - ok = self._cli.wait_for_server(timeout_sec=2.0) - return (True, "") if ok else (False, "action 服务端未就绪(wait_for_server 超时)") - from rclpy.action import ActionClient - - cli = ActionClient(self, cls, item.target) - ok = cli.wait_for_server(timeout_sec=2.0) - cli.destroy() - return (True, "") if ok else (False, "action 服务端未就绪(wait_for_server 超时)") - - def _peek_topic(self, item: BootCheck) -> Optional[str]: - """看一眼该话题最近有没有**真数据**。``None`` = 就绪,否则返回原因。 - - 为什么每种都要单独判:`topic list` 里有名字 ≠ 有数据。发布者没起、 - 相机没插、驱动崩了,名字都还在。按名字判会在最需要它的时候(S07 要 - 停力、S08 要判拧紧)才发现没数据。 - """ - if item.probe == "camera": - coarse = self._coarse_ns and f"/{self._coarse_ns}/" in item.target - msg = self._coarse_color if coarse else getattr(self, "_color", None) - t_recv = self._t_coarse_color if coarse else self._t_color - if msg is None or t_recv is None: - return "还没收到图像(发布者不在?)" - # 时钟域不对时**必须说清**:否则同一现象有两种完全不同的原因, - # 而报出来的话术会把人引到错的方向(先查这个,再查数据)。 - skew = self._stamp_skew(msg) - if skew is not None and abs(skew) > 3600.0: - return ( - f"图像时间戳与节点时钟差 {skew:.0f}s:数据在流,是**时钟域**不同 —— " - "仿真里要给节点 use_sim_time:=true(不加的话 TF 也会查不到)" - ) - age = self._img_age(t_recv) - if age > 3.0: - return f"最后一帧已过期 {age:.1f}s" - return None - if item.probe == "tactile": - for tac in (getattr(self, "_tac_l", None), getattr(self, "_tac_r", None)): - if not tac: - continue - t, m = tac - if time.monotonic() - t < 0.5 and bool(getattr(m, "connected", False)): - return None - return "触觉无新鲜帧或 connected=false" - if "camera_info" in item.target: - info = self._coarse_info if (self._coarse_ns and self._coarse_ns in item.target) else getattr(self, "_info", None) - if info is None: - return "没收到内参" - return None - if "gripper" in item.target: - if self.grip is None: - return "夹爪客户端未建立" - if not self.grip.seen(): - return "没收到夹爪状态帧(服务在、反馈不在)" - return None - return None - - def _step_boot(self) -> Event: - """S00:全部必检就绪才开指令窗。""" - self._state("S00_boot") - try: - checks = self._boot_checks() - except ValueError as exc: - # 配置错(例如 perception.source 拼错)在这里拦下:继续跑下去只会在 - # S04 以"一阶段不锁定"的形式暴露,那时没人会想到是自检配置写错了。 - self.get_logger().error(f"S00 自检清单建不起来(配置有问题):{exc}") - return Event.BOOT_FAIL - src = self._perception_source() - if src != "yolo": - self.get_logger().info( - f"S00 自检:感知来源 perception.source = {src} —— 不查推理依赖" - + ("(仿真真值节点随 S04 的 visual_servo 一起起)" if src == "truth" - else "(测量由外部节点按 visual_servo/filtered_point 提供)") - + ";它只验控制与接口,不验检测算法" - ) - - # 夹爪后端:按**服务类型**选(真机 Trigger / 契约 GripperExecute)。 - # 选不出来时把这条也算成一项必检失败,而不是抛异常中断整段日志。 - backend_detail = "" - try: - # 夹爪后端按"服务实际类型"选:同样要等发现齐了(见 _service_snapshot)。 - # 两种后端都有 /gripper/open、/gripper/close,等这两个就够。 - choice = pick_backend( - self._service_snapshot(["/gripper/open", "/gripper/close"]), - self._gripper_prefer, - ) - for line in describe_backend_choice(choice): - self.get_logger().info(line) - self.grip = GripperClient(self, choice.backend, choice.status_topic) - checks = [ - c if c.key != "gripper_status" - else BootCheck( - key=c.key, label=c.label, probe=c.probe, target=choice.status_topic, - why=c.why, required=c.required, - expect_type=( - "arm_msgs/msg/GripperStatus" - if choice.backend == "contract" else "std_msgs/msg/Float32MultiArray" - ), - ) - for c in checks - ] - except GripperInterfaceError as exc: - backend_detail = str(exc) - self.get_logger().error(f"夹爪后端无法确定:{exc}") - - # 相机 / 触觉的"真收到消息"探测要先起订阅(stage2/stage3 的 __init__ 已订阅) - results: List[Tuple[BootCheck, bool, str]] = [] - for item in checks: - ok, detail = self._probe(item) - results.append((item, ok, detail)) - - if backend_detail: - # 把"选不出夹爪后端"作为一条必检失败并入报告:一条日志一次看完 - blocker = BootCheck( - key="gripper_backend", label="夹爪后端可确定", probe="service", - target="/gripper/open", why=backend_detail, - ) - results.append((blocker, False, "见上面的详细原因")) - - text, _failures = format_report(results) - for line in text.splitlines(): - self.get_logger().info(line) - counts = summary_counts(results) - self.get_logger().info( - f"S00 摘要:必检 {counts['required_ok']}/{counts['required_total']}," - f"选检 {counts['optional_ok']}/{counts['optional_total']}" - ) - for line in optional_warnings(results): - self.get_logger().warn(line) - self._boot_results = results - - blockers = blocking_failures(results) - if blockers: - for line in blockers: - self.get_logger().error(line) - if self.cfg.dry_run: - self.get_logger().warn( - "干跑模式:自检没过也继续(只为验证编排与配置,不会真的动臂)" - ) - return Event.BOOT_OK - self._publish_gauge_result({"ok": False, "state": "S00", "failures": blockers}) - return Event.BOOT_FAIL - # 记"夹住时的开口"(掉件判据的基准)。**放在这里而不是等到 S08**: - # · 此刻爪里确实夹着规(仿真上料脚本刚装好,真机是人工装好才开始跑); - # · 基准必须是**明确知道夹住**时记的 —— 本后端的 is_gripped 是全开时 - # 都会闪 True 的推断值(实测 99.29mm),拿它当基准会造出假 E1 - # (见 GripperClient.dropped)。 - if self.grip is not None: - self.grip.adopt_current_grip("S00 自检通过:爪里已装好通止规") - return Event.BOOT_OK - - # ===================================================================== - # S01 回 home + 逆时针极限角 - # ===================================================================== - def _step_home_extreme(self) -> Event: - self._state("S01_home_extreme") - if self.cfg.dry_run: - self._fsm_dry(Event.POSE_OK, "回 home + 逆时针预绕") - return Event.POSE_OK - - if not self._call_trigger("/home", timeout_s=60.0): - return Event.TIMEOUT - - # 工具系:要求 tool1 垂直向下且位姿锁定。切不过去就不继续 —— - # 后面每个动作的"工具系"含义都建立在它上面。 - if self.tool_name: - if not self._switch_tool(self.tool_name): - return Event.TIMEOUT - else: - self.get_logger().warn( - "site.yaml 里 robot.tool_name 为空 —— 未确认工具系。" - "看板要求 tool1 全程垂直向下并位姿锁定,请填上名字" - ) - - if self._e1_pending: - # E1 重放:先张开爪把残留放掉,再等人工放好新规。 - # 顺序不能反:先确认再张嘴,会把刚放好的规一起掉下去。 - if self.grip is not None and not self.grip.open(): - self.get_logger().error("E1 重放:张开爪失败,无法继续") - return Event.ABORT - if not self._wait_operator_reload(): - return Event.TIMEOUT - self._e1_pending = False - return Event.RELOADED - - q, Tee = self._wait_state(10.0) - if q is None or Tee is None: - self.get_logger().error("拿不到 joint_states/TF,S01 无法继续") - return Event.TIMEOUT - - # 垂直度:这是"工具系垂直向下"的可测版本(不是靠眼看画面) - tilt = vertical_down_error_deg(Tee[:3, :3]) - self.get_logger().info(f"S01 工具 Z 与垂直向下夹角 {tilt:.2f}(要求≈0)") - - want = self.cfg.extreme_angle_deg - if want <= 0.0: - return Event.POSE_OK - - limits = self._wait_joint_limits() - plan = prewind( - q_now_rad=float(q[-1]), want_deg=want, direction=self.cfg.extreme_direction, - limits=limits, margin_deg=self.cfg.extreme_margin_deg, - ) - if plan.clamped: - self.get_logger().info( - f"S01 预绕被限位夹取:想转 {plan.want_deg:.1f}°," - f"实际转 {plan.applied_deg:.1f}°(限位余量 {self.cfg.extreme_margin_deg:.1f}°)" - ) - return self._rotate_joint_and_verify( - plan.target_rad, tag="S01_extreme", fsm_event=Event.POSE_OK, - speed_deg_s=self.cfg.extreme_speed_deg_s, - ) - - def _wait_operator_reload(self) -> bool: - """E1 重放:等操作员放好通止规并确认。 - - 确认方式:``ros2 topic pub -1 /gauge/reload_ok std_msgs/Bool '{data: true}'`` - 超时(``gauge_assembly.reload_timeout_s``)→ False → 上层 TIMEOUT → 中止。 - 超时不是"再等等",而是"没人管" —— 臂停在 home,让人来处理比继续跑安全。 - """ - self._reload_ok = False - t0 = time.monotonic() - warn_at = self.cfg.reload_timeout_s * 0.5 - warned = False - self.get_logger().warn( - "E1 重放:请把通止规放回爪内并确认。确认命令:\n" - " ros2 topic pub -1 /gauge/reload_ok std_msgs/Bool '{data: true}'\n" - f" (最多等 {self.cfg.reload_timeout_s:.0f}s,超时按中止处理)" - ) - while time.monotonic() - t0 < self.cfg.reload_timeout_s: - self._spin(0.1) - if self._reload_ok: - self.get_logger().info("E1 重放:已确认,继续流程") - return True - if not warned and time.monotonic() - t0 > warn_at: - self.get_logger().warn("E1 重放:还在等确认(已过半程)") - warned = True - self.get_logger().error( - f"E1 重放:等了 {self.cfg.reload_timeout_s:.0f}s 没等到 /gauge/reload_ok,中止" - ) - return False - - def _call_trigger(self, name: str, timeout_s: float) -> bool: - """``std_srvs/Trigger`` 服务调用(home / 复位都用它)。""" - cli = self.create_client(Trigger, name) - if not cli.wait_for_service(timeout_sec=5.0): - self.get_logger().error(f"{name} 服务不在") - return False - fut = cli.call_async(Trigger.Request()) - t0 = time.monotonic() - while not fut.done() and time.monotonic() - t0 < timeout_s: - self._spin(0.05) - if not fut.done(): - self.get_logger().error(f"{name} 超时 {timeout_s:.0f}s") - return False - resp = fut.result() - if not bool(getattr(resp, "success", False)): - msg = str(getattr(resp, "message", "")) - if is_joint_limit_error(msg): - self.get_logger().warn(f"{name} 报关节极限(S01 视为预期):{msg}") - return True - self.get_logger().error(f"{name} 失败:{msg}") - return False - return True - - def _switch_tool(self, tool: str) -> bool: - from arm_msgs.srv import SwitchTool - - cli = self.create_client(SwitchTool, "/switch_tool") - if not cli.wait_for_service(timeout_sec=5.0): - self.get_logger().error("/switch_tool 服务不在 —— 无法确认工具系") - return False - req = SwitchTool.Request() - req.tool_name = tool - fut = cli.call_async(req) - t0 = time.monotonic() - while not fut.done() and time.monotonic() - t0 < 30.0: - self._spin(0.05) - if not fut.done(): - self.get_logger().error("切换工具系超时") - return False - resp = fut.result() - if not bool(getattr(resp, "success", False)): - self.get_logger().error(f"切换工具系失败:{getattr(resp, 'message', '')}") - return False - self.get_logger().info(f"工具系已切到 {tool}") - return True - - def _rotate_joint_and_verify( - self, target_rad: float, tag: str, fsm_event: Event, - speed_deg_s: Optional[float] = None, - ) -> Event: - """只动最后一根关节(= 绕工具 Z),**事后用 TF 量它真的转了**。 - - 为什么只动关节 7:工具轴垂直向下时,最后一根关节的轴就是工具 Z 轴, - 绕工具 Z 转 = 动这一根。好处是行程、速度、限位都是关节空间的量, - 不需要管笛卡尔姿态的插补。 - - 为什么必须量回来:如果这台臂的关节 7 轴与工具 Z 不共线(换了工具/ - 装了转接件就可能不共线),"转 180°"就变成了"绕某个斜轴转 180°", - 规会斜着磨螺纹 —— 而所有日志都显示"成功了"。 - """ - q, Tee = self._wait_state(5.0) - if q is None or Tee is None: - return Event.TIMEOUT - R_before = Tee[:3, :3].copy() - tool_z = R_before[:, 2].copy() - - delta_deg = math.degrees(target_rad - float(q[-1])) - speed = max(1.0, abs(speed_deg_s if speed_deg_s else self.cfg.extreme_speed_deg_s)) - dur = max(0.5, abs(delta_deg) / speed) - traj = JointTrajectory() - traj.joint_names = list(self.joint_names) - q_t = q.copy() - q_t[-1] = float(target_rad) - traj.points = [_joint_point(q, np.zeros(len(q)), 0.2), _joint_point(q_t, np.zeros(len(q)), dur)] - ok = self._send_action(traj, wait_s=dur + 8.0) - if not ok: - self.get_logger().warn(f"{tag}: JTC 未确认完成,按 TF 实测判断") - - time.sleep(0.3) - q2, Tee2 = self._wait_state(5.0) - if q2 is None or Tee2 is None: - return Event.TIMEOUT - got = rotation_about_axis_deg(R_before, Tee2[:3, :3], tool_z) - mis = axis_misalignment_deg(R_before, Tee2[:3, :3], tool_z) - self.get_logger().info( - f"{tag}: 目标 {delta_deg:+.1f}°,实测绕工具 Z {got:+.1f}°" - f"(转轴偏差 {mis:.1f}°,阈值 {AXIS_VERIFY_TOL_DEG:.1f}°)" - ) - verdict = rotation_verdict(delta_deg, got, mis, AXIS_VERIFY_TOL_DEG) - if verdict == ROT_LIMIT: - # 完全没动、或只走了一部分:都是**关节限位**把这段截住了 - # (2026-09-24 实测:棘轮回转每轮顶到上限 ±175°,于是下一步反向 - # 只剩 ~16° 余量)。交给调用方让余量重试(见 _ratchet_step); - # 调用方不处理时 FSM 会按未定义转移报错,不会静默走下去。 - self.get_logger().warn( - f"{tag}: 期望 {delta_deg:+.1f}°、实测 {got:+.1f}°" - f"(差 {abs(delta_deg) - abs(got):.1f}°)—— 判为**贴到关节限位**" - ) - return Event.JOINT_LIMIT - if verdict == ROT_AXIS: - self.get_logger().error( - f"{tag}: 转轴偏差 {mis:.1f}° 超过阈值 —— 关节7 轴与工具 Z 不共线," - "以『度』为单位的动作(S01/S08/S09)都不可信,中止。" - "先确认工具系是否垂直向下、有没有装转接件" - ) - return Event.ABORT - if verdict == ROT_SHORT: - self.get_logger().error( - f"{tag}: 期望 {delta_deg:+.1f}°、实测 {got:+.1f}°,偏差过大,中止" - ) - return Event.ABORT - self._axis_verified = True - return fsm_event - - def _ratchet_step( - self, target_rad: float, *, tag: str, fsm_event: Event, speed_deg_s: Optional[float], - direction: int = 0, - ) -> Event: - """棘轮的一步"转腕":行程不够时**张开爪让出余量**再转。 - - :param target_rad: 关节 7 的**目标角(绝对值)**,与 - :meth:`_rotate_joint_and_verify` 同一口径(那边算的就是 - ``target_rad - q_now``)。**不是增量。** - :param direction: 这一步的**工艺转向**:``+1`` 正转、``-1`` 反转、 - ``0`` 交给"最短路径"。棘轮的四步一律显式给:步长接近 180° 时 - "最短路径"会被 0.1° 的读数差翻方向(详见 - :func:`arm_application.gauge_fsm.ratchet_delta_rad`)。 - - ⚠️ 为什么要把口径写在这里(2026-09-24 栽过一次,S09 直接 ABORT): - 调用方(S08/S09)给的本来就是绝对值(``q[-1] ± screw_step_rad``), - 而本函数此前把它当**增量**用(``prewind(want_deg=abs(deg(target)))``、 - 让余量时又按 ``q - target`` 算新目标)。于是 S09 第一步被算成 - "要转 338.9°"(其实是目标 338.9°、增量只有 180°)⇒ 误判"行程不够" - ⇒ 让余量那一步算到限位**外面**(``158.9 − 338.9 = −180°``,比 - −175° 的限位还低 5°)⇒ 报"期望 −338.9°、实测 +26.0°,偏差过大" - ⇒ 整条流程在**最不该失败的一步** ABORT(规在爪里好好的、什么坏事都没发生)。 - 两个函数各用一种口径,编译器不会说话,日志还会把"目标"和"增量"都印成 - 一个数 —— 所以口径写进参数名和 docstring。 - - 为什么需要"让余量"这一步: - 棘轮要求"一正一反各 180°",而关节 7 的行程只有 ±175°(3.0543 rad)。 - 拧入(S08)的**回转**那一步每轮都正好顶到上限(实测 +175.1°), - 于是 S09 要做的**反方向**第一步只剩 ~16° 余量,被限位截住。 - 而这一轮其实什么坏事都没发生。 - - 为什么"让余量"是免费的: - 指间**张开**时规在打滑(这正是棘轮成立的原理),所以手腕空转既不会 - 把已经拧进去的螺纹转回去,也不会漏掉进度 —— 只是把行程重新分配。 - - 让多少:整步(不去算亏欠了多少)。反正张开状态下这一步不产生任何装配 - 效果,整步最省事也最不容易算错;重试时的那一步才是"用力"的那一步。 - - 两条路:**先算**(限位已知时,提前让余量,干净)+ **兜底**(真被限位 - 截住时再让,覆盖"限位没读到 / 轨迹自己没走完"这两种情况)。 - - 两条路**最后都汇到同一次让余量**:只有一次,避免"先算发现不够、 - 让完还不够、再让一次"这种把行程越绕越少的做法。 - """ - limits = self._wait_joint_limits() - q = None - if limits is not None: - q, _Tee = self._wait_state(3.0) - if q is None: - return Event.TIMEOUT - # 目标角可能落在限位**外面**(这正是棘轮要解决的问题),先折成"最近一圈" - # 的增量(gauge_fsm.ratchet_delta_rad,含完整说明与单测): - # 关节在 +158.9°、目标 +338.9° ⇒ 增量 +180°(而不是 +338.9°)。 - # **方向按工艺意图给**:步长贴着 180° 时"最短路径"会被读数差翻向(R2.10)。 - delta_rad = ratchet_delta_rad(target_rad, float(q[-1]), direction) - why = "" - if limits is not None and abs(math.degrees(delta_rad)) > 1e-6: - plan = prewind( - q_now_rad=float(q[-1]), want_deg=abs(math.degrees(delta_rad)), - direction=1 if delta_rad > 0 else -1, - limits=limits, margin_deg=RATCHET_LIMIT_MARGIN_DEG, - ) - if plan.clamped: - why = ( - f"行程不够(关节7 在 {math.degrees(float(q[-1])):+.1f}°," - f"这一步要转 {math.degrees(delta_rad):+.1f}°" - f"(目标 {math.degrees(float(target_rad)):+.1f}°),限位 " - f"{math.degrees(limits[0]):+.0f}~{math.degrees(limits[1]):+.0f}°)" - ) - if not why: - ev = self._rotate_joint_and_verify( - target_rad, tag=tag, fsm_event=fsm_event, speed_deg_s=speed_deg_s - ) - if ev is not Event.JOINT_LIMIT: - return ev - why = "轨迹被关节限位截住(算着够、实际没走完)" - return self._ratchet_rewind_then( - delta_rad, tag=tag, fsm_event=fsm_event, speed_deg_s=speed_deg_s, why=why, - ) - - def _ratchet_rewind_then( - self, delta_rad: float, *, tag: str, fsm_event: Event, - speed_deg_s: Optional[float], why: str, - ) -> Event: - """张开爪 → 反向让一步 → 夹紧 → 转原来那一步。 - - :param delta_rad: **要转的增量**(不是目标角,见 :meth:`_ratchet_step`)。 - 让余量时按它反着退一步,重试时再按它前进 —— 两次都以**当时的** - 关节角为基准重新算目标,所以让完余量后关节会回到原处、工具净转 - ``delta_rad``。把"目标"固定成一开始那个绝对值是错的:让完余量之后 - 那个目标已经在另一圈上了(差 360°)。 - """ - if self.grip is None: - self.get_logger().error(f"{tag}: {why},但没有夹爪客户端,无法让余量 → 中止") - return Event.ABORT - self.get_logger().info( - f"{tag}: {why} —— 张开爪让出一步(此刻规在打滑,不会动到螺纹)再转" - ) - if not self.grip.open(): - self.get_logger().error(f"{tag}: 需要张爪让余量,但开爪失败 → 中止") - return Event.ABORT - time.sleep(self.cfg.screw_release_wait_s) - q, _Tee = self._wait_state(3.0) - if q is None: - return Event.TIMEOUT - ev = self._rotate_joint_and_verify( - float(q[-1]) - delta_rad, tag=f"{tag}_rewind", - fsm_event=fsm_event, speed_deg_s=speed_deg_s, - ) - if ev is not fsm_event: - self.get_logger().error( - f"{tag}: 让余量那一步也没走开({ev})—— 关节7 的行程真用尽了,中止。\n" - f" 排查:site.yaml 的 gauge_assembly.screw_step_deg 太接近关节行程了" - f"(Rizon4 的关节7 是 ±175°),棘轮一步要 {math.degrees(abs(delta_rad)):.0f}°," - f"留给'回转'的余量本来就不够。\n" - f" 改法:把 screw_step_deg 调小(例如 120°),并保证 " - f"screw_max_cycles × screw_step_deg 仍是 **360° 的整数倍** —— " - f"累计必须转整数圈,否则规会停在螺纹中间(S09 拧出也就少转几分之一圈)。" - ) - return Event.ABORT - if not self.grip.close(): - self.get_logger().error(f"{tag}: 让完余量后夹紧失败 → 中止") - return Event.ABORT - # 重试目标**按让完余量后的位置重算**:让余量退了一步,原来那个绝对目标 - # 现在差了 360°(正好一整圈),照原样下发会让关节反向绕一圈回去。 - q2, _Tee2 = self._wait_state(3.0) - if q2 is None: - return Event.TIMEOUT - ev = self._rotate_joint_and_verify( - float(q2[-1]) + delta_rad, tag=f"{tag}_retry", - fsm_event=fsm_event, speed_deg_s=speed_deg_s, - ) - if ev is not fsm_event: - self.get_logger().error( - f"{tag}: 让完余量重试仍然没走到位({ev})—— 中止" - f"(不是限位问题,先查是不是有东西卡住/螺纹咬死)" - ) - return Event.ABORT - return fsm_event - - # ===================================================================== - # S02 夹持确认(预留) - # ===================================================================== - def _step_grip_check(self) -> Event: - self._state("S02_grip_check") - if not self.cfg.grip_check: - self.get_logger().info( - "S02 跳过夹持确认(预留:传感器方案在优化、D435 未标定)。" - "要开:site.yaml 的 gauge_assembly.grip_check: true" - ) - return Event.GRIP_SKIPPED - if self.grip is None: - return Event.GRIP_FAIL - time.sleep(self.cfg.grip_hold_s) - got = self.grip.is_gripped() - if got is None: - self.get_logger().error( - "S02 要求确认夹持,但当前夹爪后端给不出明确状态(状态字是运动中/到位)。" - "把夹爪合到咬住状态,或关掉 gauge_assembly.grip_check" - ) - return Event.GRIP_FAIL - if got: - self._gauge_was_gripped = True - self.get_logger().info("S02 确认:爪里夹着东西") - return Event.GRIP_PASS - self.get_logger().error("S02 判定爪里没有通止规 —— 请放好再跑") - return Event.GRIP_FAIL - - # ===================================================================== - # S03 手外粗定位(S04 的兜底) - # ===================================================================== - def _step_coarse(self) -> Event: - self._state("S03_coarse") - if not self.cfg.coarse_enabled: - self.get_logger().warn("S03 被配置关掉(gauge_assembly.coarse_enabled=false)") - return Event.COARSE_FAIL - ns = self.cfg.coarse_camera - he = self._eye_to_hand_file() - if he is None: - expect = str( - self.get_parameter("coarse_eye_to_hand_file").value or "" - ).strip() or f"handeye/results/{ns}_eye_to_hand.yaml" - self.get_logger().warn( - "S03 需要手外相机的 eye-to-hand 标定文件,现在没有 —— " - f"按兜底逻辑回 S04 跟踪。\n" - f" 应该生成:{expect}\n" - f" 做法:bash scripts/run_handeye.sh --mode eye_to_hand " - f"teach/merge/calibrate(标完再跑本流程)" - ) - return Event.COARSE_FAIL - if not self._wait_coarse_frame(ns): - self.get_logger().warn( - f"S03 相机 {ns} 等了 {self.cfg.coarse_timeout_s:.0f}s 没有新鲜图像" - "(相机没开?),回 S04 跟踪" - ) - return Event.COARSE_FAIL - - xy = self._coarse_workpiece_xy(ns, he) - if xy is None: - self.get_logger().warn("S03 推理没找到工件框(或深度无效),回 S04 跟踪") - return Event.COARSE_FAIL - - q, Tee = self._wait_state(5.0) - if q is None or Tee is None: - return Event.TIMEOUT - target = np.array([float(xy[0]), float(xy[1]), self.cfg.coarse_hover_m]) - self.get_logger().info( - f"S03 粗定位:工件中心 ({xy[0]:.3f},{xy[1]:.3f}) → 悬停 " - f"{self.cfg.coarse_hover_m * 1000:.0f}mm" - ) - ok, q, Tee = self._goto( - q, Tee, target, verticalize=True, tol_m=0.005, - tol_tilt=self.vert_tol_rad * 2.0, tag="coarse", - v=self.move_speed, max_hops=10, settle_s=0.25, - ) - if not ok: - self.get_logger().warn("S03 移动到粗定位点未完全到位,仍进 S05 精拍") - self._coarse_ok = True - return Event.COARSE_OK - - def _camera_alive(self, ns: str) -> bool: - return self._img_age(self._t_coarse_color) < 3.0 - - def _wait_coarse_frame(self, ns: str) -> bool: - """等手外相机的**新鲜**图像,最多 ``coarse_timeout_s`` 秒。 - - 为什么要等而不是"看一眼没有就放弃":相机节点刚起来时发现+第一帧 - 可能要一两秒,直接判失败会让 S03 在相机其实是好的情况下退回 S04。 - """ - t0 = time.monotonic() - while time.monotonic() - t0 < self.cfg.coarse_timeout_s: - if self._camera_alive(ns): - return True - self._spin(0.1) - return False - - def _coarse_workpiece_xy(self, ns: str, he: Path) -> Optional[Tuple[float, float]]: - """手外相机拍一张 → 推理工件框中心 → 反投影到基座 XY。 - - 外参从 **TF** 取(`base_link` ← `<相机>_color_optical_frame`),不再自己 - 解析一份 ``T_4x4``:标定产物已经在启动时以静态 TF 发布了,两份解析 - 必然先漂移一份(而漂移的是哪一份没人知道)。 - - 为什么先查标定文件再进来:没有 eye-to-hand 外参时,"反投影"只能靠 - 猜一个 depth 目标 —— 那会得到一个**看起来合理**的坐标(这正是最坏的 - 情形:动作做对了、位置错了)。所以宁可明确失败。 - """ - img = getattr(self, "_coarse_color", None) - depth_msg = getattr(self, "_coarse_depth", None) - intr = getattr(self, "_coarse_info", None) - if img is None or depth_msg is None or intr is None: - return None - depth = self._depth_from_msg(depth_msg) - if depth is None: - return None - intr_d = { - "fx": float(intr.k[0]), "fy": float(intr.k[4]), - "cx": float(intr.k[2]), "cy": float(intr.k[5]), - } - bgr = self._bgr_from_msg(img) - bbox = self._best_bbox(bgr, conf=self.cfg.coarse_conf) - if bbox is None: - return None - u = 0.5 * (bbox[0] + bbox[2]) - v = 0.5 * (bbox[1] + bbox[3]) - z = float(np.median(depth[int(v) - 2:int(v) + 3, int(u) - 2:int(u) + 3])) - if not math.isfinite(z) or z <= 0.05: - return None - p_cam = self._px_to_cam(u, v, z, intr_d) - T = self._lookup(f"{self.prefix}base_link", f"{ns}_color_optical_frame") - if T is None: - self.get_logger().warn( - f"S03 查不到 {ns}_color_optical_frame 到基座的 TF —— 标定文件 {he.name} " - "在,但没有发布成静态 TF(检查启动时有没有跑 handeye TF 那一步)" - ) - return None - p_base = (T @ np.array([p_cam[0], p_cam[1], p_cam[2], 1.0]))[:3] - return float(p_base[0]), float(p_base[1]) - - def _bgr_from_msg(self, msg: Any) -> np.ndarray: - """``sensor_msgs/Image`` → BGR ndarray(复用 stage2 的同一段解码)。""" - return _bgr_copy(msg) - - def _depth_from_msg(self, msg: Image) -> Optional[np.ndarray]: - """``sensor_msgs/Image``(16UC1) → 米为单位的深度图。""" - try: - arr = np.frombuffer(msg.data, dtype=np.uint16) - if msg.encoding.lower() in ("16uc1", "mono16"): - arr = arr.astype(np.float32) / 1000.0 - else: - arr = arr.astype(np.float32) - return arr.reshape((int(msg.height), int(msg.width))) - except Exception as exc: # noqa: BLE001 - self.get_logger().warn(f"深度图解码失败:{exc}") - return None - - # ===================================================================== - # S04 跟踪 - # ===================================================================== - def _step_track(self) -> Event: - self._state("S04_track") - if self.cfg.dry_run: - self._fsm_dry(Event.TRACK_LOCKED, "拉起跟踪并等锁定") - return Event.TRACK_LOCKED - if self._track_retries >= MAX_TRACK_RETRIES: - self.get_logger().error( - f"S04 已连续丢 {self._track_retries} 次(上限 {MAX_TRACK_RETRIES})," - "不再兜底重试 —— 检查工件是否在视野内、相机是否被挡、权重是否正确" - ) - return Event.ABORT - self._track_retries += 1 - code = self._run_stage1() - if code == 0: - self.get_logger().info(f"S04 跟踪锁定(第 {self._track_retries} 次尝试)") - return Event.TRACK_LOCKED - self.get_logger().warn(f"S04 跟踪未锁定(exit={code}),转 S03 兜底") - return Event.TRACK_LOST - - # ===================================================================== - # S05 稳定拍照 - # ===================================================================== - def _step_snap(self) -> Event: - self._state("S05_snap") - if self.cfg.dry_run: - self._fsm_dry(Event.SNAP_OK, "等画面稳定后精拍定位 k1/k2") - return Event.SNAP_OK - if not self._wait_pixel_stable(): - self.get_logger().warn( - f"S05 画面在 {self.cfg.snap_tol_px:.1f}px 容差内没稳定下来,继续等" - ) - return Event.SNAP_UNSTABLE - - q, Tee = self._wait_state(5.0) - if q is None or Tee is None: - return Event.TIMEOUT - code, q, Tee, final = self._run_locate(q, Tee) - if code != 0 or not final: - self.get_logger().error( - f"S05 精拍定位失败 code={code}{_LOCATE_CODE_HINT.get(code, '')}" - ) - return Event.TIMEOUT - self._snap_final = dict(final) - self._snap_pose = Tee.copy() - self.get_logger().info( - f"S05 定位完成:k1={final.get('k1_base_m')} k2={final.get('k2_base_m')} " - f"残差 {final.get('residual_mm')}mm,已记位姿 Z={Tee[2, 3]:.4f}" - ) - return Event.SNAP_OK - - def _snap_feature(self) -> str: - """S05 稳定判据用哪个特征:``bbox``(检测框像素)还是 ``motion``(法兰 mm)。 - - ``auto`` 按感知来源选:真机(yolo)用检测框 —— 保持原有行为不变; - 仿真真值/外部感知没有可用的工件检测器(合成图过不了真机训练出来的模型, - 实测最高分 0.017),用检测框只会永远"不稳定"地空转,所以改用法兰位移。 - """ - return snap_feature_of(self.cfg.snap_stable_feature, self._perception_source()) - - def _snap_sample(self, feature: str) -> Optional[Tuple[float, ...]]: - """采一帧"画面特征"(单位随 feature 变:bbox=像素,motion=毫米)。""" - if feature == "bbox": - img = getattr(self, "_color", None) - if img is None: - return None - bbox = self._best_bbox(self._bgr_from_msg(img)) - if bbox is None: - return None - return (0.5 * (bbox[0] + bbox[2]), 0.5 * (bbox[1] + bbox[3])) - # motion:法兰(= 相机)在世界系里的位置。相机装在法兰上,法兰不动, - # 画面就不会动 —— 比"检测框不动"更直接,也不依赖任何模型。 - _q, Tee = self._wait_state(0.5) - if Tee is None: - return None - return (float(Tee[0, 3]) * 1000.0, float(Tee[1, 3]) * 1000.0, float(Tee[2, 3]) * 1000.0) - - def _wait_pixel_stable(self) -> bool: - """等画面稳定:连续采 ``snap_stable_s`` 秒的特征,抖动在容差内才算稳。 - - 用"到均值的最远距离"而不是相邻帧之差 —— 跟踪抖动是零均值的, - 相邻差会让"明明在晃"的时刻被判成稳定,然后拍出一张糊图(表现为 - "孔位偶尔偏 1mm",随机且难复现)。判据实现见 gauge_fsm.pixel_stable。 - """ - feature = self._snap_feature() - tol = self.cfg.snap_tol_px if feature == "bbox" else self.cfg.snap_tol_mm - got_any = False - deadline = time.monotonic() + 20.0 - while time.monotonic() < deadline: - samples: List[Tuple[float, ...]] = [] - t0 = time.monotonic() - while time.monotonic() - t0 < self.cfg.snap_stable_s: - s = self._snap_sample(feature) - if s is not None: - samples.append(s) - got_any = True - self._spin(0.05) - if points_stable(samples, tol, self.cfg.snap_min_frames): - return True - if not got_any and feature == "bbox": - # 一条都采不到 = 检测器根本没出框。这跟"画面在晃"是**两件事**, - # 分开报才找得到人(真机上这是"权重与图像不匹配"的典型症状)。 - self.get_logger().error( - "S05 等稳定时工件检测器一直没出框(0 帧样本)——" - "不是画面在晃,是没检测到工件。查:权重是否与这台相机匹配" - "(models/yolo/README.md)、或把 gauge_assembly.snap_stable_feature " - "设成 motion 改用法兰位移判据" - ) - return False - - # ===================================================================== - # S06 正悬停 - # ===================================================================== - def _step_hover_k(self) -> Event: - hole = self._hole_name() - self._state(f"S06_hover_{hole}") - if self.cfg.dry_run: - self._fsm_dry(Event.ALIGN_OK, f"到 {hole} 正悬停") - return Event.ALIGN_OK - - xy = self._hole_xy(hole) - if xy is None: - self.get_logger().error(f"S06 没有 {hole} 的坐标(S05 没定位到?)") - return Event.TIMEOUT - q, Tee = self._wait_state(5.0) - if q is None or Tee is None: - return Event.TIMEOUT - z = float(self._snap_final.get("hover_z_m") or self.hover_z) - target = np.array([xy[0], xy[1], z]) - ok, q, Tee = self._goto( - q, Tee, target, verticalize=True, tol_m=self.cfg.align_tol_mm / 1000.0, - tol_tilt=self.vert_tol_rad * 1.5, tag=f"S06_hover_{hole}", - v=self.move_speed, max_hops=10, settle_s=0.2, - ) - # 对位残差用**实测**算,不用运动返回值:运动"到点了"和对准了是两件事 - gxy = self._gauge_xy(Tee) - residual_mm = math.hypot(gxy[0] - xy[0], gxy[1] - xy[1]) * 1000.0 - self.get_logger().info( - f"S06 {hole} 悬停:实测残差 {residual_mm:.2f}mm" - f"(容差 {self.cfg.align_tol_mm:.1f}mm)Z={Tee[2, 3]:.4f}" - ) - if residual_mm > self.cfg.align_tol_mm: - self.get_logger().warn("对位超差 → 回 S05 重拍") - return Event.ALIGN_OUT - if not ok: - self.get_logger().warn("运动未完全到位但残差在容差内,继续") - self._progress(f"{hole} 悬停完成,残差 {residual_mm:.2f}mm") - return Event.ALIGN_OK - - def _hole_xy(self, hole: str) -> Optional[Tuple[float, float]]: - key = f"{hole}_base_m" - val = self._snap_final.get(key) - if not val or len(val) < 2: - return None - return float(val[0]), float(val[1]) - - # ===================================================================== - # S07 柔顺接触 - # ===================================================================== - def _shear_axes(self) -> Tuple[float, float]: - """当前两路切向读数(取法向最大的那只手指)。 - - 两路都要,是因为切向力到底走 X 还是 Y 通道未确认:只监控一个通道, - 赌错了就是整段流程静默失效(下发正常、日志正常、就是停不住)。 - """ - best = None - best_fn = -1.0 - for tac in (getattr(self, "_tac_l", None), getattr(self, "_tac_r", None)): - if not tac: - continue - t, m = tac - if time.monotonic() - t > 0.5: - continue - fn = abs(float(getattr(m, "fnormal", 0.0))) - if fn > best_fn: - best_fn, best = fn, m - if best is None: - return (0.0, 0.0) - return (float(getattr(best, "fshearx", 0.0)), float(getattr(best, "fsheary", 0.0))) - - def _wrench_axial(self) -> Optional[float]: - """当前腕部 FT 的轴向力 [N];一帧都没收到过时返回 None。 - - 轴向 = ``force.z``。这个口径对真机与仿真**都成立**: - 真机 ``//ft_sensor_wrench`` 是法兰系,z 是法兰轴; - 仿真传感器挂在 joint7 上取 child(link7) 系,z 也是工具轴。 - 工具锁垂直向下时,两者都等于"竖直方向的力"。 - """ - return getattr(self, "_ft_fz", None) - - def _wrench_age(self) -> Optional[float]: - """腕部 FT 最近一帧的年龄 [s];一帧都没收到过时返回 None。""" - t = getattr(self, "_t_ft", None) - return None if t is None else (time.monotonic() - float(t)) - - def _step_contact(self) -> Event: - self._state("S07_contact") - if self.cfg.dry_run: - self._fsm_dry(Event.CONTACT_OK, "柔顺下臂到接触") - return Event.CONTACT_OK - q, Tee = self._wait_state(5.0) - if q is None or Tee is None: - return Event.TIMEOUT - - # 基线必须在**还没碰工件**的时候测。S06 结束时悬停在工件上方, - # 正好是测基线的时刻(带载测会把阈值抬飞)。 - ref = self._baseline(samples=8) - # 腕部 FT 的轴向基线:与触觉基线同一时刻采(这时还没碰工件)。 - # 腕部 FT 在夹持摩擦的**上游**,所以它是 S07 的首选判据;触觉只是兜底 - #(通止规靠夹持摩擦抱住,轴向力传不到指垫,见 gauge_fsm.wrench_touch)。 - ft_ref = self._wrench_axial() - ft_age = self._wrench_age() - ft_alive = wrench_live(ft_age) - self.get_logger().info( - f"S07 基线:切向 ({ref[0]:.1f}, {ref[1]:.1f})、法向 {self._fn_rest:.1f}" - f";腕部轴向 {ft_ref if ft_ref is not None else float('nan'):+.2f}N" - f"({'活' if ft_alive else '**没有数据**'},话题 {self.ft_wrench_topic})" - ) - - z0 = float(Tee[2, 3]) - step_m = self.cfg.contact_step_mm / 1000.0 - max_depth_m = self.cfg.contact_max_depth_mm / 1000.0 - # 台肩落面所需的下压量。在下面几何自检里算出来;**要留到接触判据那里用** - # (看 hole_entry_verdict:下压深度远小于它 ⇒ 规没进孔)。 - needed_m: Optional[float] = None - - # ---- 工具几何自检:预算必须是**由几何推出来的**,不能拍 ------------------ - # 判"到底了"的那一下是**台肩落到工件上表面**(不是尖端碰面)。工件上表面 - # 就是 stage2 实测的孔位 z(孔在面上);台肩在规尖上方 30mm(通端长 30)。 - # - # 这里做两件事: - # ① 把"悬停时工具尖端离面还有多高"算出来印出来。**负值说明悬停这一步 - # 就已经把工具捅进工件了**(悬停高度是按相机定的、工具比相机长就 - # 会这样,真机同参数同结果),这是个几何错误,藏得很深:现象是 - # S07 一路压到顶都判不到接触,看起来像力阈值标错了。 - # ② 如果配的预算**不够**走完"台肩落面"那一段,就地按几何**改大**并 - # 大声报出来。2026-09-24 仿真里踩过:预算 25mm 而台肩在尖端上方 - # 30mm → 永远到不了落面那一下,报出来的原因是假的("没触发接触 - # 判据"),真实原因只是预算不够。 - surface_z = float(self.cfg.workpiece_surface_z_m) - if surface_z <= 0.0: - # 没配就取 stage2 实测的孔位 z —— 孔就在工件上表面上。 - k1 = (self._snap_final or {}).get("k1_base_m") or [] - surface_z = float(k1[2]) if len(k1) >= 3 else 0.0 - if surface_z > 0.0: - clear_m = tool_clearance_m( - z0, # 悬停时的法兰高度 = 当前 Tee 的 z(S06 刚把法兰锁到悬停高) - self.cfg.tool_tip_below_flange_m, - surface_z, - ) - needed_m = descend_needed_m( - z0, self.cfg.tool_tip_below_flange_m, surface_z, - GAUGE_SHOULDER_ABOVE_TIP_M, - ) - self.get_logger().info( - f"S07 工具几何:悬停法兰 z={z0:.4f}、工具尖端在法兰下方 " - f"{self.cfg.tool_tip_below_flange_m * 1000:.1f}mm → 尖端 z=" - f"{z0 - self.cfg.tool_tip_below_flange_m:.4f},工件上表面 z={surface_z:.4f}\n" - f" 悬停时尖端离面 {clear_m * 1000:+.1f}mm" - f"{'(**已经插进工件了**)' if clear_m < 0 else ''};" - f"台肩落面还需下压 {needed_m * 1000:+.1f}mm" - ) - if needed_m > max_depth_m: - new_depth_m = descend_budget_m(needed_m) - self.get_logger().warn( - f"S07 下探预算不足:配的是 {max_depth_m * 1000:.1f}mm," - f"但「台肩落面」这一段就要 {needed_m * 1000:.1f}mm" - f"(台肩在尖端上方 {GAUGE_SHOULDER_ABOVE_TIP_M * 1000:.0f}mm)。\n" - f" 按几何自动改大为 {new_depth_m * 1000:.1f}mm。" - f"要固定这个值,改 site.yaml 的 " - f"gauge_assembly.contact_max_depth_mm(建议 ≥ " - f"{new_depth_m * 1000:.0f})" - ) - max_depth_m = new_depth_m - - # 这一步的到位容差**必须小于步长**(见 gauge_fsm.descend_tol_m 的说明: - # 容差≥步长时 _goto 判"已在容差内"直接返回,一步都不走 → 静默自旋)。 - tol_step_m = descend_tol_m(step_m) - budget = descend_iter_budget(max_depth_m, step_m) - self.get_logger().info( - f"S07 步进下压:步长 {step_m * 1000:.2f}mm、到位容差 {tol_step_m * 1000:.3f}mm、" - f"最多 {max_depth_m * 1000:.1f}mm / {budget} 步" - ) - steps = 0 - stalls = 0 - z_prev = z0 - while float(Tee[2, 3]) - z0 > -max_depth_m: - if steps >= budget: - self.get_logger().error( - f"S07 下压步数用尽({budget} 步 ≈ {max_depth_m * 1000:.1f}mm)仍未触发接触判据。\n" - " 这不是正常路径:正常应该是「接触→CONTACT_OK」或「到底→超深失败」。\n" - " 走到这里通常意味着臂**没在动**(控制器死区/被夹住/孔位偏得擦不到面)。" - ) - self._retract(q, Tee, dz_m=0.01) - return Event.TIMEOUT - steps += 1 - target = np.array([float(Tee[0, 3]), float(Tee[1, 3]), float(Tee[2, 3]) - step_m]) - # 不用 _step_to:它把速度写死成 search_speed,而这**一步**必须慢 - # (接触判据要在"碰到"的瞬间停住,快了就是一个冲击)。速度取 - # gauge_assembly.contact_speed_m_s,其余参数与 _step_to 对齐。 - ok, q, Tee = self._goto( - q, Tee, target, verticalize=True, tol_m=tol_step_m, - tol_tilt=self.vert_tol_rad * 2.5, tag="S07_step", - v=self.cfg.contact_speed_m_s, max_hops=2, - settle_s=max(0.06, self.settle3 * 0.3), min_dur=0.16, - ) - if not ok: - self.get_logger().warn("S07 单步未完全到位,继续按实测高度判断") - # 实测位移 = 唯一的推进证据。指令发出去不等于臂动了(R5.1 静默失效)。 - z_now = float(Tee[2, 3]) - if descend_progress(z_prev, z_now, step_m): - stalls = 0 - else: - stalls += 1 - self.get_logger().warn( - f"S07 第 {steps} 步实测只走了 {(z_prev - z_now) * 1000:+.3f}mm" - f"(要求 ≈{step_m * 1000:.2f}mm),连续 {stalls}/{DESCEND_STALL_STEPS} 步没动" - ) - if stalls >= DESCEND_STALL_STEPS: - self.get_logger().error( - f"S07 连续 {stalls} 步**实测零位移**,臂根本没往下走。\n" - " 常见原因:① 这一步的容差 ≥ 步长(_goto 判「已在容差内」直接返回);\n" - " ② 控制器死区/增益太小,0.x mm 的微步被吃掉;\n" - " ③ 工件/夹具把臂顶住了(此时应报接触,却没达到切向阈值);\n" - " ④ 孔位偏了,规擦着孔壁下去但没接触面。" - ) - self._retract(q, Tee, dz_m=0.01) - return Event.TIMEOUT - z_prev = z_now - if steps % 5 == 0: - now_dbg = self._shear_axes() - ax_dbg = self._wrench_axial() - self.get_logger().info( - f"S07 已下压 {abs(z_now - z0) * 1000:.2f}mm" - f"({steps}/{budget} 步)切向 ({now_dbg[0]:.1f}, {now_dbg[1]:.1f})" - f" 腕部轴向 " - f"{ax_dbg - ft_ref if ax_dbg is not None else float('nan'):+.1f}N" - ) - - # ---- 判据一(首选):腕部 FT 轴向突变 -------------------------- - # 腕部 FT 在夹持摩擦的**上游**(工件→规→夹爪→法兰→腕部关节), - # 所以工具在爪里打不打滑都测得准。触觉做不到这点: - # 轴向力要传过"指垫↔规"的摩擦面,上限只有 µ·N≈23N,而台肩落面 - # 一步就产生 25N —— 必然打滑,读数停在 0(而它是对的)。 - # 完整因果链见 gauge_fsm.wrench_touch 与 docs/GAUGE_ASSEMBLY.md §6。 - ft_now = self._wrench_axial() - if ft_alive and ft_now is not None and ft_ref is not None: - if wrench_touch(ft_now, ft_ref, self.cfg.contact_axial_delta_n): - self.get_logger().info( - f"S07 接触(腕部 FT):轴向 {ft_now:+.2f}N 相对基线 " - f"{ft_ref:+.2f}N 超过 +{self.cfg.contact_axial_delta_n:.1f}N" - f"(下压 {abs(float(Tee[2, 3]) - z0) * 1000:.2f}mm)" - ) - # 下压这么浅就"接触" ⇒ 尖端顶在工件上表面,没进孔。必须在这里 - # 拦下:放它进 S08 只会干转几轮、憋住,最后报一句"转轴偏差" - # 把所有人引去查工具系。见 hole_entry_verdict 的说明。 - if self._hole_lost_guard(z0, Tee, needed_m, q, "腕部 FT"): - return Event.HOLE_LOST - # 必须先卸载再交给 S08 —— 判到接触的这一刻臂上顶着的是**出力上限** - # 那个量级的力(实测 200N+,与阈值无关),而规的轴向传力上限 - # 只有 µ·N≈73N。见 _relieve_after_contact 的完整说明。 - self._relieve_after_contact(q, Tee, "腕部 FT", ft_ref) - return Event.CONTACT_OK - elif steps == 1: - # 只报一次,别每步刷屏。降级到触觉兜底时阈值口径要按现场重新标定。 - self.get_logger().warn( - f"S07 腕部 FT 没有数据(话题 {self.ft_wrench_topic}," - f"年龄 {ft_age if ft_age is not None else float('nan'):.1f}s)——" - "降级为只看触觉切向突变。\n" - " ⚠️ 触觉是**靠夹持摩擦**传力的,轴向力上限只有 µ·N(≈23N 量级)," - "台肩落面那一下可能传不过去、读数停在 0。\n" - " 真机上查:真机 bringup 无条件起 flexiv_robot_states_broadcaster," - "话题是 //ft_sensor_wrench;收不到就是话题名/网络的问题。\n" - " 仿真上查:devices/sim/gazebo/config/wrist_ft.yaml 的 topic 与" - " arm.sim.sensors.xacro 的 wrist_ft_topic 必须一致(都是 " - "/sim/ft_sensor_wrench)。" - ) - - try: - fn, _fn_max, _shear, _contact = self._tac_fresh(self.tac_timeout) - except Exception as exc: # noqa: BLE001 - # 腕部 FT 活着时,触觉断流不影响判接触(两个来源互相独立)。 - # 只有两个来源都没了才真的判不了。 - if not ft_alive: - self.get_logger().error( - f"S07 腕部 FT 与触觉**都没有**数据,无法判断接触:{exc}\n" - " 这不是阈值问题,是数据源问题:先让其中一个活过来。" - ) - self._retract(q, Tee, dz_m=0.01) - return Event.TIMEOUT - self.get_logger().warn( - f"S07 触觉断流({exc}),但腕部 FT 活着,继续下压" - ) - fn, _fn_max, _shear, _contact = 0.0, 0.0, (0.0, 0.0), False - - # ---- 判据二(兜底):触觉切向突变 ------------------------------ - now = self._shear_axes() - if tangential_jump(now, ref, self.cfg.contact_tangential_delta): - self.get_logger().info( - f"S07 接触(触觉切向):切向 {now[0]:.1f}/{now[1]:.1f} 相对基线 " - f"{ref[0]:.1f}/{ref[1]:.1f} 超过 +{self.cfg.contact_tangential_delta:.0f}" - f"(法向 {fn:.1f},下压 {abs(float(Tee[2, 3]) - z0) * 1000:.2f}mm)" - ) - # 与腕部 FT 那条同规矩:判到接触时臂上顶着的力远大于阈值,必须先卸载。 - # 同样先过"是不是根本没进孔"这道闸(见 hole_entry_verdict)。 - if self._hole_lost_guard(z0, Tee, needed_m, q, "触觉切向"): - return Event.HOLE_LOST - self._relieve_after_contact(q, Tee, "触觉切向", ft_ref) - return Event.CONTACT_OK - if fn - self._fn_rest > self.cfg.contact_safe_delta: - self.get_logger().error( - f"S07 法向力超安全上限:{fn:.1f} - 基线 {self._fn_rest:.1f} > " - f"+{self.cfg.contact_safe_delta:.0f},抬起并中止" - ) - self._retract(q, Tee, dz_m=0.01) - return Event.FORCE_OVER_LIMIT - # 腕部 FT 的独立安全上限:它测的是**真实轴向力**,所以这里能给出 - # 一个物理量级的兜底(触觉那个 contact_safe_delta 是 au,量纲都对不上)。 - # 取触觉安全上限的同样口径:一旦超过就说明"压得太狠了",与"接触了没" - # 无关 —— 接触判据应该早就返回了,能走到这里说明判据失灵。 - if ft_alive and ft_now is not None and ft_ref is not None: - if abs(ft_now - ft_ref) > self.cfg.contact_safe_delta: - self.get_logger().error( - f"S07 腕部轴向力超安全上限:{ft_now:+.2f}N - 基线 {ft_ref:+.2f}N " - f"= {abs(ft_now - ft_ref):.1f}N > +{self.cfg.contact_safe_delta:.0f}N," - "抬起并中止。\n" - " 能走到这里说明接触判据没生效(那么大的力早该判到接触)——" - "先查 contact_axial_delta_n 是不是被调得太大了。" - ) - self._retract(q, Tee, dz_m=0.01) - return Event.FORCE_OVER_LIMIT - self.get_logger().error( - f"S07 下探 {max_depth_m * 1000:.1f}mm 都没触发接触判据。\n" - " 排查顺序(按物理可信度,别从阈值开始调):\n" - " ① **先看上面每 5 步打印的「腕部轴向」**:它一直≈0 → 是数据源/几何问题,\n" - " 不是阈值问题(传感器没数据、悬停几何错、孔位偏了没碰到面);\n" - " ② 腕部轴向有涨但没到阈值 → 才轮到调 contact_axial_delta_n;\n" - " ③ 只有触觉兜底时:轴向力要经夹持摩擦传递,上限 µ·N≈23N,\n" - " 台肩落面那一下可能传不过来 —— 这时调阈值是白费,要修的是夹持。" - ) - self._retract(q, Tee, dz_m=0.01) - return Event.TIMEOUT - - def _hole_lost_guard( - self, - z0: float, - Tee: np.ndarray, - needed_m: Optional[float], - q: np.ndarray, - why: str, - ) -> bool: - """S07 判到接触时:下压深度是不是**远小于**几何预期(= 规没进孔)。 - - 返回 True 表示"确实没进孔",调用方要抬臂并返回 ``Event.HOLE_LOST``。 - - 完整来龙去脉在 ``gauge_fsm.hole_entry_verdict`` 的 docstring 里,这里只 - 留现场要看的那几句:工件在 S08/S09/S10 会被工具推走,而 k2 的孔位是 - S05 一次性定的 ⇒ 工件一动孔位就失效 ⇒ 规落在孔旁边的平面上。 - 不拦的话会干转 5 轮,最后报一句"转轴偏差…先确认工具系有没有装转接件", - 把所有人引去查工具系(实测 2026-09-28)。 - """ - if needed_m is None: - # 没算出几何预期(工件上表面 z 没标定且 S05 也没给)—— 没有判据就别猜。 - return False - descended_m = abs(float(Tee[2, 3]) - z0) - if hole_entry_verdict(descended_m, needed_m) != ENTRY_HIGH: - return False - self.get_logger().error( - f"S07 接触({why})发生在下压 {descended_m * 1000:.2f}mm 处," - f"而按几何「台肩落面」需要 {needed_m * 1000:.1f}mm —— 只走了 " - f"{descended_m / needed_m * 100.0:.0f}%。\n" - " **规没有进孔,尖端顶在工件上表面**(正常入孔要压到台肩落面那一下)。\n" - " 最可能的原因:工件被工具推走了,而本孔的坐标是 **S05 一次性定下**的 ——\n" - " 工件一动,那个坐标就失效(S06 的「实测残差」发现不了:它比的是\n" - " 「命令位置 vs 实际位置」,不是「规尖 vs 真实孔位」)。\n" - " 所以**不要**去查工具系/转接件/力阈值(那几个都是好的)。\n" - " 正确处置:把臂退开、确认工件的实际位置;能复位就复位工件,然后\n" - " 从 S05 重新拍照定位(重跑流程即会重新定位)。\n" - " 若要治根:换孔前复核工件没动(当前只有 S05 阶段有 drag 看门狗)。\n" - " 抬起并中止,不带着失效的孔位进 S08。" - ) - self._retract(q, Tee, dz_m=0.01) - return True - - def _relieve_after_contact( - self, - q: np.ndarray, - Tee: np.ndarray, - why: str, - axial_ref: Optional[float] = None, - ) -> None: - """判到接触之后的**卸载回退**:把下压量放掉,再交给 S08。 - - 为什么必须有这一步(2026-09-24 用一整轮排查换来的,值得完整读): - - 位置控制的臂撞上硬面时,**不会**在"刚碰到"的地方停住 —— 它会一直顶到 - 自己的出力上限。仿真实测:指令 0.5mm 的一步压在工件上,腕部 FT 直接跳到 - **+244N**,而臂这一步只走了 0.09mm(日志里那句"S07 单步未完全到位")。 - 也就是说"判到接触"的那一刻,臂上是顶着一个**大得多的力**的, - 这个力跟 contact_axial_delta_n 没关系(阈值只决定"什么时候承认接触")。 - - 而通止规是**靠夹持摩擦**抱住的:轴向上能传的力上限 = µ·N,两指合计 - 约 73N(µ=0.8、握力 46N)。244N 远超它 ⇒ 规被轴向力直接顶出爪外。 - 本次就是这样:S07 判到接触 → 进 S08 一转 → 规掉到地上 → 报 E1, - 而 E1 的日志只说"通止规掉了",看不到"是顶着 244N 进去的"。 - - 所以这里回退 contact_relief_mm,把力放回基线附近;S08 只带着"规自身的 - 重量 + 一点点残余"进孔 —— 那才是螺纹/棘轮真正需要的预压。 - - 回退量刻意**不做闭环**(不"退到力小了为止"):判据闭环会在"接触刚度很大" - 时来回震荡,而这里要的只是"把下压量放掉"。放不干净就报出来(见下), - 让现场去改夹持(那是机械问题,不是参数问题)。 - """ - dz = float(self.cfg.contact_relief_mm) / 1000.0 - ft_before = self._wrench_axial() - if dz <= 0.0: - self.get_logger().warn( - f"S07 判到接触({why})但 contact_relief_mm=0 —— **不卸载**。\n" - " 位置控制的臂此刻顶着的力可能远大于判据阈值(实测 200N+)," - "而规靠夹持摩擦抱住、轴向上限只有 µ·N(≈73N)。" - "S08 一转就可能掉件(E1),且日志里看不到真因。" - ) - return - target = np.array([float(Tee[0, 3]), float(Tee[1, 3]), float(Tee[2, 3]) + dz]) - # ⚠️ 到位容差**必须远小于回退量**,不能写死一个与它同量级的常数。 - # 实测(2026-09-24):回退 0.50mm 而 tol_m 也写 0.0005 ⇒ 目标 z 是 - # `Tee[2,3] + 0.0005`,浮点回减后 dist 会比 0.0005 略小 ⇒ `_goto` 的 - # 入口判据 `dist < tol_m` 当场成立、**一步没走就 return True**。 - # 于是"卸载"变成一次空操作,而下面的残余力判据比的是"回退前 vs 回退后" - # 两个一模一样的读数 ⇒ 报"残余 0.0N,已放干净"(**假通过**)。 - # 后果:S08 带着 70N 的轴向力去转 → 掉件(E1),日志里只有"规掉了"。 - # 规则本身抽成 gauge_fsm.relief_tol_m 并有单测钉住(tol 必须 < 回退量)。 - tol = relief_tol_m(dz) - ok = self._goto( - q, Tee, target, verticalize=True, tol_m=tol, - tol_tilt=self.vert_tol_rad * 2.5, tag="S07_relief", - v=min(0.02, self.cfg.contact_speed_m_s), max_hops=3, - settle_s=max(0.1, self.settle3 * 0.5), min_dur=0.3, - )[0] - time.sleep(0.2) - ft_after = self._wrench_axial() - msg = ( - f"S07 接触后卸载:回退 {dz * 1000:.2f}mm,腕部轴向 " - f"{ft_before if ft_before is not None else float('nan'):+.1f}N → " - f"{ft_after if ft_after is not None else float('nan'):+.1f}N" - ) - if not ok: - self.get_logger().warn( - msg + "\n ⚠ 卸载回退**没走到位**(上面有 _goto 的告警)。" - "残余力判据因此不可信 —— 这一路压进去的力仍留在规上。" - ) - if ft_after is not None and ft_before is not None: - # 残余按**基线**(还没碰工件时的轴向力)算,不能按"回退前后之差"算: - # 回退本身要是没生效,前后读数相同 ⇒ 差值 0 ⇒ 假报"放干净"。 - # 基线是"完全没有接触"的状态,这才是"卸载干不干净"的参照。 - residual = ( - abs(float(ft_after) - float(axial_ref)) - if axial_ref is not None - else abs(float(ft_after) - float(ft_before)) - ) - ref_txt = ( - f"基线 {float(axial_ref):+.1f}N" if axial_ref is not None else "无基线" - ) - if residual > float(self.cfg.contact_hold_n): - self.get_logger().warn( - msg + f"(残余 {residual:.1f}N(相对{ref_txt})" - f" > {self.cfg.contact_hold_n:.1f}N)\n" - " ⚠ 卸载没放干净:这一路压进去的力**超过了夹持摩擦能承受的量**" - "(上限 µ·N,两指合计 ≈73N)。\n" - " 接着 S08 一转,规会从爪里被推出去(现象是「通止规掉了」E1," - "看不到真因)。\n" - " 两条真修法:① 降峰值 —— 调小 contact_step_mm(步长越小峰值越小)" - "或加大 contact_relief_mm;② 加握力 —— 改夹爪合拢力度/指垫摩擦。\n" - " **不要**去调 contact_axial_delta_n:它只管「什么时候承认接触」," - "管不了「判到的时候已经顶了多大」。" - ) - else: - self.get_logger().info( - msg + f"(残余 {residual:.1f}N(相对{ref_txt}),已放干净)" - ) - else: - self.get_logger().info(msg + "(腕部 FT 没数据,无法确认卸载效果)") - - def _baseline(self, samples: int) -> Tuple[float, float]: - """静止基线的两路切向均值(顺手把法向基线记到 ``self._fn_rest``)。 - - 单侧可用即可:另一只指没插时,同一侧的阈值仍然自洽(相对量)。 - 拿不到任何读数时按 0 处理并**明确告警** —— 阈值会偏保守, - 结果可能是"碰上了没停",而不是静默地继续跑。 - """ - acc: List[Tuple[float, float]] = [] - fns: List[float] = [] - t0 = time.monotonic() - while len(acc) < samples and time.monotonic() - t0 < 3.0: - sx, sy = self._shear_axes() - if sx != 0.0 or sy != 0.0: - acc.append((sx, sy)) - for tac in (getattr(self, "_tac_l", None), getattr(self, "_tac_r", None)): - if not tac: - continue - tt, mm = tac - if time.monotonic() - tt < 0.5: - fns.append(abs(float(getattr(mm, "fnormal", 0.0)))) - self._spin(0.05) - self._fn_rest = (sum(fns) / len(fns)) if fns else 0.0 - if not acc: - self.get_logger().warn( - "S07 拿不到切向读数,基线按 0 处理(阈值会偏保守:可能碰上了不停)" - ) - return (0.0, 0.0) - return ( - sum(a[0] for a in acc) / len(acc), - sum(a[1] for a in acc) / len(acc), - ) - - # ===================================================================== - # S08 旋转装配循环(棘轮) - # ===================================================================== - def _log_regrip(self, tag: str) -> None: - """把"这一轮夹紧后的开口"打出来(含相对夹住时的塌陷量)。 - - 为什么每轮都要打(2026-09-24 实测): - S08/S09 每轮都是"慢转 → 松爪 → 回转 → 夹紧",而 `close` 在仿真里 - 是"位置控制走到全合 0mm" —— **真机走到力上限就停,仿真会一路挤进规里**。 - 只报一句"通止规掉了(E1)"时,人分不出"真掉了"和"被挤小了"。 - 把开口与塌陷量打出来一眼就能分辨: - · 塌陷量逐轮变大、开口还在十几毫米 → 是**被挤**(规还在指间) - · 开口塌到接近 0(两指合到底) → 是**真掉了** - """ - if self.grip is None: - return - ap = self.grip.settle(settle_s=1.0) # 服务返回时动作还没做完,等它停 - if ap is None: - return - gp = self.grip.grip_aperture() - col = self.grip.collapse_mm() - detail = "" - if gp is not None and col is not None: - detail = f"(夹住时 {gp:.2f}mm,塌陷 {col:+.2f}mm)" - self.get_logger().info(f"{tag}:开口 {ap:.2f}mm{detail}") - - def _step_screw_in(self) -> Event: - hole = self._hole_name() - self._state(f"S08_screw_in_{hole}") - if self.cfg.dry_run: - self._fsm_dry(Event.SCREW_DONE, f"棘轮拧入 {hole}") - return Event.SCREW_DONE - - steps = ratchet_cycles( - self.cfg.screw_max_cycles * self.cfg.screw_step_deg, self.cfg.screw_step_deg - ) - self.get_logger().info( - f"S08 开始:最多 {steps} 轮 × {self.cfg.screw_step_deg:.0f}°" - f"(上限 {self.cfg.screw_max_cycles * self.cfg.screw_step_deg:.0f}°)," - f"停止判据「切向 >+{self.cfg.screw_shear_delta:.0f} " - f"且法向 >+{self.cfg.screw_normal_delta:.0f}」" - ) - # 步长 vs 关节行程:**在这里算一次**,不要等第 3 轮贴限位再炸。 - # 2026-09-24 实测:180° 的步长配 ±175° 的关节 7,第 3 轮 ABORT, - # 日志是一长串"贴限位 → 让余量 → 还是贴限位",真因(配置)藏在最后。 - travel = ratchet_travel_ok( - self.cfg.screw_step_deg, self._wait_joint_limits(), RATCHET_LIMIT_MARGIN_DEG - ) - self.get_logger().info( - f"S08 行程核算:一步棘轮要 {travel.need_deg:.0f}°," - f"关节7 行程 {travel.travel_deg:.0f}°" - f"(最大可用步长 {travel.max_step_deg:.0f}°)—— {'放得下' if travel.ok else '放不下'}" - ) - if not travel.ok: - self.get_logger().error(f"S08 配置自检不通过(先改配置,别硬跑):{travel.why}") - return Event.ABORT - for cycle in range(self.cfg.screw_max_cycles): - q, Tee = self._wait_state(5.0) - if q is None or Tee is None: - return Event.TIMEOUT - try: - fn_before, _fn_max, _shear, _c = self._tac_fresh(self.tac_timeout) - except Exception as exc: # noqa: BLE001 - self.get_logger().error(f"S08 触觉断流,无法判断拧紧:{exc}") - return Event.ABORT - shear_before = self._shear_axes() - - # --- 四步原子动作,顺序固定(慢转 → 松爪 → 快回转 → 夹紧)--- - # 慢转是**顺时针**:与 S01 的逆时针预绕相反,这样预绕行程就是 - # 这一整段拧入的回转空间(S01 不预绕,转两圈就贴限位)。 - ev = self._ratchet_step( - float(q[-1]) - self.cfg.screw_step_rad, tag=f"S08_slow_{cycle}", - fsm_event=Event.SCREW_DONE, speed_deg_s=self.cfg.screw_speed_deg_s, - direction=-1, # 顺时针拧入(与 S01 的预绕相反) - ) - if ev is not Event.SCREW_DONE: - return ev - # 松爪 → 快回转 → 夹紧 - if self.grip is not None: - if not self.grip.open(): - self.get_logger().error("S08 松爪失败 —— 继续转会把规拧回去") - return Event.ABORT - time.sleep(self.cfg.screw_release_wait_s) - q, Tee = self._wait_state(3.0) - if q is None: - return Event.TIMEOUT - ev = self._ratchet_step( - float(q[-1]) + self.cfg.screw_step_rad, tag=f"S08_back_{cycle}", - fsm_event=Event.SCREW_DONE, speed_deg_s=self.cfg.screw_back_speed_deg_s, - direction=+1, # 回转:与慢转正好相反 - ) - if ev is not Event.SCREW_DONE: - return ev - if not self.grip.close(): - self.get_logger().error("S08 夹紧失败 —— 下一轮慢转会打滑磨螺纹") - return Event.ABORT - self._log_regrip(f"S08 第 {cycle + 1} 轮夹紧后") - else: - self.get_logger().error("S08 没有夹爪客户端,无法松爪/夹紧,中止") - return Event.ABORT - - # --- 停止判据:切向 >阈值 **且** 法向突增 --- - try: - fn_after, _fn_max2, _shear_now, _c2 = self._tac_fresh(self.tac_timeout) - except Exception as exc: # noqa: BLE001 - self.get_logger().error(f"S08 触觉断流,无法判断拧紧:{exc}") - return Event.ABORT - sx, sy = self._shear_axes() - shear_delta = max( - abs(sx - shear_before[0]), abs(sy - shear_before[1]), - ) - normal_delta = fn_after - fn_before - self.get_logger().info( - f"S08 第 {cycle + 1}/{self.cfg.screw_max_cycles} 轮:" - f"切向增量 {shear_delta:.1f}(阈值 {self.cfg.screw_shear_delta:.0f})" - f" 法向增量 {normal_delta:+.1f}(阈值 {self.cfg.screw_normal_delta:.0f})" - ) - if screw_stop( - normal_delta, shear_delta, - self.cfg.screw_normal_delta, self.cfg.screw_shear_delta, - ): - self.get_logger().info(f"S08 判据满足,{hole} 拧到位(第 {cycle + 1} 轮)") - self._progress(f"{hole} 拧入到位({cycle + 1} 轮)") - return Event.SCREW_STOP - if self.grip is not None and self.grip.dropped(): - ap = self.grip.aperture() - gp = self.grip.grip_aperture() - self.get_logger().error( - "S08 通止规掉了(E1)—— 回 S01 流程:张开爪、提示人工放好," - "确认后继续(按看板:该孔记为完成,换下一个孔)\n" - f" 开口:夹住时 {gp if gp is None else f'{gp:.2f}mm'}" - f" → 现在 {ap if ap is None else f'{ap:.2f}mm'}" - f"(判据:塌陷 ≥ {GripperClient.DROP_COLLAPSE_MM:.1f}mm)\n" - " 分辨真掉还是被挤:开口塌到接近 0 = 两指合到底(真掉);\n" - " 开口还有十几毫米、只是比夹住时小了几毫米 = 被**挤**" - "(仿真位置控制的「全合」不知道「挡住就停」,见 GripperClient.dropped)" - ) - self._e1_pending = True - return Event.GAUGE_DROPPED - self.get_logger().info(f"S08 达到 {self.cfg.screw_max_cycles} 轮上限,进入拧出") - return Event.SCREW_DONE - - # ===================================================================== - # S09 反向拧出 - # ===================================================================== - def _step_unscrew(self) -> Event: - hole = self._hole_name() - self._state(f"S09_unscrew_{hole}") - if self.cfg.dry_run: - self._fsm_dry(Event.UNSCREW_DONE, f"反向拧出 {hole}") - return Event.UNSCREW_DONE - cycles = ratchet_cycles( - (self.cfg.screw_max_cycles + self.cfg.unscrew_extra_cycles) - * self.cfg.screw_step_deg, - self.cfg.screw_step_deg, - ) - self.get_logger().info( - f"S09 拧出 {hole}:{cycles} 轮 × {self.cfg.screw_step_deg:.0f}°" - f"(= 拧入上限 {self.cfg.screw_max_cycles} 轮 + 额外 " - f"{self.cfg.unscrew_extra_cycles} 轮,确保螺纹脱开)" - ) - for cycle in range(cycles): - q, Tee = self._wait_state(5.0) - if q is None: - return Event.TIMEOUT - # 反向:慢转是逆时针(与 S08 相反),空手回转是顺时针 - ev = self._ratchet_step( - float(q[-1]) + self.cfg.screw_step_rad, tag=f"S09_slow_{cycle}", - fsm_event=Event.UNSCREW_DONE, speed_deg_s=self.cfg.screw_speed_deg_s, - direction=+1, # 逆时针拧出 - ) - if ev is not Event.UNSCREW_DONE: - return ev - if self.grip is None: - return Event.ABORT - if not self.grip.open(): - return Event.ABORT - time.sleep(self.cfg.screw_release_wait_s) - q, Tee = self._wait_state(3.0) - if q is None: - return Event.TIMEOUT - ev = self._ratchet_step( - float(q[-1]) - self.cfg.screw_step_rad, tag=f"S09_back_{cycle}", - fsm_event=Event.UNSCREW_DONE, speed_deg_s=self.cfg.screw_back_speed_deg_s, - direction=-1, # 回转:与慢转相反 - ) - if ev is not Event.UNSCREW_DONE: - return ev - if not self.grip.close(): - return Event.ABORT - self._log_regrip(f"S09 第 {cycle + 1} 轮夹紧后") - self._lift_clear_of_hole(hole) - self._progress(f"{hole} 已拧出") - return Event.UNSCREW_DONE - - def _lift_clear_of_hole(self, hole: str) -> None: - """拧出后**先竖直把规提出孔**,之后才允许任何横向动作。 - - **为什么必须有这一步**(2026-09-24 仿真实测,两次栽在同一个地方): - 1. 仿真里**没有螺纹几何**:S09 的"拧出"只是让规在孔里转,规**仍然插在 - 孔里**(真机会沿螺纹退出来几个毫米,也没退出多少)。 - 2. 于是紧跟着的横向动作(S10 换孔 / S11 回 home)会把规从孔里**拽** - 出来 —— 实测抓取锁被拽断、规掉在台面上,而下游只表现为 - "下一孔 S07 下探 35mm 判不到接触"(工具上已经没规了), - 日志完全指不到真因。 - 3. 真机也怕这个动作:螺纹刚脱开时横向别住最容易啃伤螺纹。标准做法就是 - **先竖直退出来,再走 XY**。 - - 高度提到**跟踪高**(``_track_z()`` = 孔悬停高 + 50mm)而不是写死毫米数: - 跟踪高是这条流程里"工具已离开工件"的既有定义(``_ensure_clearance`` - 也用它),拿它当判据不用再维护第二套口径。实测:不提出时规尖比工件面 - **低 30mm**,而 S10 的斜线只往上抬了 29mm —— 差 1mm 就是"拽出孔"和 - "干净退出"的分界,所以必须是**先后有序**的两个动作,不能靠斜线一起走。 - - 失败只告警(不失败):这一刻孔里已经没有规要保护了,硬失败会把一次成功 - 的装配变成失败;后面的 S10/S11 仍会走到安全位。 - """ - try: - q, Tee = self._wait_state(3.0) - if q is None or Tee is None: - return - tz = self._track_z() - z = float(Tee[2, 3]) - if z >= tz - 0.008: - return - self.get_logger().info( - f"S09 {hole} 拧出后竖直提出:Z {z:.3f} → {tz:.3f}m" - "(先离开孔口,再做横向动作)" - ) - _, q2, _Tee2 = self._goto( - q, Tee, - np.array([float(Tee[0, 3]), float(Tee[1, 3]), tz]), - verticalize=True, tol_m=0.003, tol_tilt=self.vert_tol_rad * 2.0, - tag=f"S09_exit_{hole}", v=self.move_speed, max_hops=8, - hold_xy=True, settle_s=0.25, - ) - except Exception as exc: # noqa: BLE001 - self.get_logger().warn(f"S09 {hole} 提出孔口失败(继续走 S10/S11):{exc}") - - # ===================================================================== - # S10 换孔 / S11 复位 - # ===================================================================== - def _step_next_hole(self) -> Event: - hole = self._hole_name() # 进入 S10 时序号已推进 - self._state(f"S10_to_{hole}") - if self.cfg.dry_run: - self._fsm_dry(Event.POSE_OK, f"换到 {hole}") - return Event.POSE_OK - q, Tee = self._wait_state(5.0) - if q is None or Tee is None: - return Event.TIMEOUT - xy = self._hole_xy(hole) - if xy is None: - self.get_logger().error(f"S10 没有 {hole} 的坐标 —— S05 那次没定位到它") - return Event.TIMEOUT - z = float(self._snap_final.get("hover_z_m") or self.hover_z) - target = np.array([xy[0], xy[1], z]) - self.get_logger().info(f"S10 回 S05 记录的位姿:{hole} ({xy[0]:.4f},{xy[1]:.4f}) Z={z:.4f}") - ok, q, Tee = self._goto( - q, Tee, target, verticalize=True, tol_m=0.002, - tol_tilt=self.vert_tol_rad * 1.5, tag=f"S10_to_{hole}", - v=self.move_speed, max_hops=10, settle_s=0.2, - ) - if not ok: - self.get_logger().warn(f"S10 到 {hole} 未完全到位,S06 会再核残差") - return Event.POSE_OK - - def _step_reset(self) -> Event: - self._state("S11_reset") - if self.cfg.dry_run: - self._fsm_dry(Event.POSE_OK, "复位退出") - return Event.POSE_OK - try: - if self.grip is not None: - self.grip.open() - self._call_trigger("/home", timeout_s=60.0) - except Exception as exc: # noqa: BLE001 - self.get_logger().warn(f"S11 复位过程中出错(不再拦住退出):{exc}") - return Event.POSE_OK - - # ===================================================================== - # 驱动循环 - # ===================================================================== - def _fsm_dry(self, event: Event, what: str) -> None: - self.get_logger().info(f"[干跑] {self.fsm.state}:{what} → {event.value}") - - def run(self) -> int: - """按状态机把 S00–S11 走完。返回进程退出码(0 = 正常)。""" - self._state("start") - self.get_logger().info( - f"通止规装配开始:{len(self._STEPS)} 个阶段," - f"{self.cfg.holes_total} 个孔,终点 {State.DONE};" - "状态话题 /gauge/state,结果 /gauge/result" - ) - if not self._cli.wait_for_server(timeout_sec=5.0) and not self.cfg.dry_run: - self.get_logger().error("JTC action 不在 —— 先起机械臂(run_real.sh / run_sim_gz.sh)") - return 2 - - while not self.fsm.is_terminal: - handler_name = self._STEPS.get(self.fsm.state) - if handler_name is None: - self.get_logger().error(f"状态 {self.fsm.state} 没有处理方法(看 _STEPS)") - return 2 - try: - event = getattr(self, handler_name)() - except GaugeAbort as exc: - self.get_logger().error(f"{self.fsm.state} 中止:{exc}") - self._safe_retract() - return exc.code - except FsmError: - raise - except Exception as exc: # noqa: BLE001 - self.get_logger().error( - f"{self.fsm.state} 抛异常:{type(exc).__name__}: {exc}" - ) - self._safe_retract() - return 2 - - try: - nxt = self.fsm.handle(event) - except FsmError as exc: - self.get_logger().error(str(exc)) - return 2 - self.get_logger().info( - f"[fsm] {self.fsm.history[-1]}({self._hole_name()})" - ) - if nxt is State.DONE: - break - - if self.fsm.state is State.ABORT and not self.cfg.dry_run: - # E2(中止)落点统一是"退到安全高度":无论从哪个阶段中止,都不能 - # 把规留在孔里/工件上 —— 下次启动(或人来处理)都假设起点在工件上方。 - self.get_logger().warn("E2 中止:退到安全高度") - self._safe_retract() - - ok = self.fsm.ok - # 两个孔数要分清:`hole_index` 是**0 基的当前孔号**(调试用), - # `holes_done` 才是"装完了几个"(给人/脚本看)。混用会把"两个孔都装完了" - # 显示成"已装 1/2",让人以为少装了一个。 - holes_done = ( - self.cfg.holes_total - if self.fsm.state is State.DONE - else max(0, self.fsm.ctx.hole_index) - ) - payload = { - "ok": ok, - "state": str(self.fsm.state), - "holes_total": self.cfg.holes_total, - "holes_done": holes_done, - "hole_index": self.fsm.ctx.hole_index, - "relocations": self.fsm.ctx.relocations, - "notes": self.fsm.ctx.notes, - "dry_run": self.cfg.dry_run, - "snap": self._snap_final, - } - self._publish_gauge_result(payload) - done = min(self.fsm.ctx.hole_index + (1 if ok else 0), self.cfg.holes_total) - self.get_logger().info( - f"通止规装配结束:state={self.fsm.state} ok={ok} 已装 {done}/{self.cfg.holes_total} 孔" - + ("(干跑,未动作)" if self.cfg.dry_run else "") - ) - return 0 if ok else 1 - - def _safe_retract(self) -> None: - """任何失败路径都先退到安全高度:不要让臂停在孔里/工件上。 - - 失败时"不动"看起来更安全,实际最危险:下一次调用(或人来处理)都会 - 从"规插在孔里"这个状态开始,而所有逻辑都假设起点在工件上方。 - """ - try: - q, Tee = self._wait_state(3.0) - if q is None or Tee is None: - return - self._retract(q, Tee, dz_m=0.02) - except Exception as exc: # noqa: BLE001 - self.get_logger().warn(f"退到安全高度失败(继续退出):{exc}") - - -def main(args: Optional[Sequence[str]] = None) -> None: - rclpy.init(args=None if args is None else list(args)) - code = 2 - node: Optional[GaugeAssembly] = None - try: - node = GaugeAssembly() - code = node.run() - except GaugeAbort as exc: - print(f"[gauge_assembly] 无法开始:{exc}") - code = exc.code - except Exception: # noqa: BLE001 - # 必须**显式**打印:下面的 finally 里有 os._exit()(为了避开 rclpy 关不掉 - # 的僵尸线程),它会把正在传播的异常连栈一起吞掉 —— 现场表现就是 - # "ROS 说进程退出码 2,屏幕上什么都没有",完全没法查。 - import traceback - - traceback.print_exc() - code = 2 - except KeyboardInterrupt: - if node is not None: - node.get_logger().warn("用户中断 —— 按安全高度退出") - code = 130 - finally: - if node is not None: - if not node._result_written: - # 走到这里说明**结论还没发布**(构造失败 / JTC 不在 / 抛异常 / 用户中断)。 - # 补一份,内容是"没跑完",这样脚本不会把"没结论"误当成"没跑"。 - node._write_result_file({ - "ok": False, - "state": str(getattr(node.fsm, "state", "?")), - "exit_code": code, - "reason": "节点在发布结论前就退出了(原因见日志)", - }) - if node is not None: - try: - node._stop_stage1() - except Exception: # noqa: BLE001 - pass - try: - node._safe_retract() - node._shutdown_tf() - except Exception: # noqa: BLE001 - pass - try: - node.destroy_node() - except Exception: # noqa: BLE001 - pass - try: - if rclpy.ok(): - rclpy.shutdown() - except Exception: # noqa: BLE001 - pass - os._exit(code) - - -if __name__ == "__main__": - main() diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/gauge_boot.py b/install/arm_application/lib/python3.11/site-packages/arm_application/gauge_boot.py deleted file mode 100644 index 59bd620..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/gauge_boot.py +++ /dev/null @@ -1,405 +0,0 @@ -"""S00 开机自检:把"能不能跑"这件事变成一张**可打印的清单**(纯逻辑部分)。 - -为什么要有这一阶段 ------------------- -看板 S00 的要求是"各服务就绪后才开指令窗,任一不就绪即中止并报告"。它挡的是 -这个仓库最常见的一类事故:**流程跑起来了,只是没接上硬件**。例如: - -* 触觉没起 → 三阶段的力阈值全是 0 → 搜孔"一直没找到"(实际是没数据); -* 相机没起 → 精拍拿不到图 → 报"精拍未拿到图像"(离真正原因差三层); -* 夹爪没起 → S08 松爪/夹紧静默失败 → 棘轮循环空转,看起来像"拧不动"。 - -放纯逻辑里的原因 ----------------- -"要检查哪些东西"是**事实**,会随现场(两台臂、两种夹爪后端、D435 有没有标定) -变化;"怎么检查"是 ROS 机制。前者做成纯函数,就能被测试钉住: - -* 少一项检查 → 测试红(比如"忘了查触觉"); -* 检查项的顺序无关紧要,但**必检项**和**选检项**的划分必须明确 —— - 把核心判据依赖的触觉标成选检,就会在没传感器时一路跑到力判据才失败。 -""" - -from __future__ import annotations - -from dataclasses import dataclass -from typing import Dict, Iterable, List, Mapping, Optional, Sequence, Tuple - -#: 探针类型 —— 决定节点用哪种方式确认"就绪"。 -#: -#: ``service`` 服务在线且类型匹配 -#: ``action`` action server 在线 -#: ``topic`` 话题在,且**真的收到过消息**(只看 topic list 会假阳性) -#: ``tactile`` 触觉状态话题在发,且 ``connected=true`` -#: ``camera`` 图像话题在发(收到首帧) -#: ``detector`` 算法权重能加载(推理预热) -PROBES = ("service", "action", "topic", "tactile", "camera", "detector") - -#: ``detector`` 自检除了"权重文件在",还要求这些 Python 模块能 import。 -#: 为什么必须查:权重文件在 ≠ 能推理。实测现场 —— 仿真环境(ros_gz_sim)里 -#: 没有 torch/ultralytics,S00 的"检测算法预热"照样报 OK,然后 S04 空转 150s -#: 才报"没锁定",看起来像算法或标定问题(真正的错在很远的另一处)。 -#: ``ultralytics`` 会连带把 torch 拉进来,查它就够;真要细分再看 yolo_detector。 -DETECTOR_MODULES = ("ultralytics",) - -#: 感知来源(``site.yaml`` 顶层 ``perception.source``)—— 谁产生"视觉测量"。 -#: -#: ``yolo`` 本体 perception_node(要 torch/ultralytics) -#: ``truth`` 仿真真值:按场景里已知的物体位姿直接算目标点,不跑推理 -#: ``external`` 外部节点按同一话题(``visual_servo/filtered_point``)提供 -#: -#: ⚠️ 别和 ``yolo.backend`` 混:那个是"**怎么**推理"(tensorrt/onnx)。 -PERCEPTION_SOURCES = ("yolo", "truth", "external") - - -def perception_source_of(perception_cfg: Optional[Mapping] = None) -> str: - """读 ``perception.source`` 并校验。**未知值直接报错,不默默当 yolo**。 - - 默默退回 yolo 的后果:仿真里 perception_node 起不来,S00 又去查 - "推理依赖",报出来的错跟真正的原因(source 拼错)隔着两层。 - """ - src = str(((perception_cfg or {}) or {}).get("source") or "yolo").strip().lower() - if src not in PERCEPTION_SOURCES: - raise ValueError( - f"site.yaml 的 perception.source = {src!r} 不认识。" - f"只支持 {' / '.join(PERCEPTION_SOURCES)}" - "(yolo=本体推理,truth=仿真真值,external=外部节点提供)。" - ) - return src - - -def missing_modules(modules: Sequence[str] = DETECTOR_MODULES) -> List[str]: - """哪些模块当前解释器里 import 不到(纯逻辑,可离线测试)。""" - import importlib.util - - out: List[str] = [] - for m in modules: - try: - if importlib.util.find_spec(m) is None: - out.append(m) - except (ImportError, ValueError): - # find_spec 对"父包不存在/名字非法"会抛,这同样等于"用不了" - out.append(m) - return out - - -def dependency_advice(missing: Sequence[str]) -> str: - """缺依赖时给**两条**出路:装它、或换掉这个后端。 - - 只写"请安装 X"是不够的:仿真环境常常是离线的(这台机器实测 pip 直接 - SSL 失败),那样的话现场需要的是"换一条不依赖它的路",而不是反复重试安装。 - """ - mods = ", ".join(missing) - return ( - f"缺推理依赖 {mods} —— 权重文件在也没用,导入不了就跑不了推理。两条路:\n" - f" 1) 装上:pip install {' '.join(missing)}(需要联网;本机仿真环境离线时做不到)\n" - " 2) 换后端:仿真里可以不用 YOLO —— 由外部按同一话题/同一类型提供感知结果\n" - " (见 devices/sim/gazebo/README.md 的「仿真里哪些模块用真值替代」一节)" - ) - - -@dataclass(frozen=True) -class BootCheck: - """一项自检。""" - - key: str - """稳定标识(日志/结果 JSON 里用它,改名要同步文档)。""" - - label: str - """人读的名字。""" - - probe: str - """见 :data:`PROBES`。""" - - target: str - """要探测的对象:服务名 / action 名 / 话题名 / 权重路径。""" - - why: str - """**缺了会怎样**。自检失败的提示必须写这个 —— 只报"未就绪"没人知道该不该急。""" - - required: bool = True - """必检 / 选检。选检失败只告警,不拦流程。""" - - expect_type: Optional[str] = None - """期望的消息/服务类型(有值时类型不符即算失败)。""" - - -#: 需要"绝对名字"的探针:相对名字会按节点命名空间解析, -#: 节点被放进 namespace 之后 ``home`` 会变成 ``/ns/home`` —— 自检就会去探一个 -#: 不存在的名字,报"未就绪"。统一补前导斜杠,把这件事变成不可能发生。 -_ABSOLUTE_PROBES = frozenset({"service", "action", "topic", "tactile", "camera"}) - - -def abs_name(name: str) -> str: - """把 ROS 名字规范成绝对名(``home`` → ``/home``)。 - - 对外公开:调用方(节点)也要用同一套规范化去比较名字,否则会出现 - "清单里是 /foo、参数里是 foo,比较不相等"这类只在运行时暴露的错。 - """ - n = (name or "").strip() - if not n: - return n - return n if n.startswith("/") else "/" + n - - -def _topic(prefix: str, suffix: str) -> str: - """拼话题名,容忍 ``prefix`` 带不带前导斜杠。""" - p = "/" + prefix.strip("/") if prefix else "" - return f"{p}/{suffix.strip('/')}" - - -def build_checks( - *, - joint_action: str, - camera: str, - tactile_topic: str, - gripper_open: str, - gripper_close: str, - gripper_status: str, - gripper_status_type: str, - d435_camera: Optional[str] = None, - tool_name: str = "", - weights_path: str = "", - perception_source: str = "yolo", -) -> List[BootCheck]: - """按现场情况生成检查清单。 - - :param joint_action: JTC action 名(``rizon_arm_controller/follow_joint_trajectory``)。 - :param camera: 腕部相机命名空间(``d405_left``)。 - :param tactile_topic: 触觉状态话题(``/tactile/left/status``)。 - :param gripper_status: 夹爪状态话题,随后端不同(``/gripper/status`` 或 ``/gripper/states``)。 - :param d435_camera: 手外相机命名空间。给 None 表示这台臂没有手外相机 → - 不生成 S03 相关的检查项(**不生成**比"生成了一个必然失败的项"更诚实: - 后者会让每次启动都报一条无关的错,很快所有人都不看自检输出了)。 - :param tool_name: ``site.yaml`` 的 ``robot.tool_name``。空 = 没指定工具系, - 则 S01 的"工具系垂直向下锁定"无法确认 → 单独列为选检告警。 - :param weights_path: 检测权重路径。空 = 不检查推理预热。 - :param perception_source: ``site.yaml`` 的 ``perception.source``。**只有 - ``yolo`` 才查推理预热**:truth/external 根本不跑推理,查了必然是 - 假阴性("缺 ultralytics"),而那是预期之内的。这里刻意**不生成** - 这一项,而不是生成一个永远 OK 的项 —— 后者会让人以为"感知也验过了"。 - - 清单的顺序 = 打印顺序 = 排障顺序:先臂、再夹爪、再相机、再触觉、最后算法。 - """ - checks: List[BootCheck] = [ - BootCheck( - key="arm_jtc", - label="机械臂关节轨迹控制器", - probe="action", - target=joint_action, - why="没有它,S01/S06/S07/S10 的所有运动都发不出去", - # 类型必须是 **control_msgs**:本流程(和 stage2/stage3/pipeline 一样) - # 直接把轨迹发给 ros2_control 的 JTC 服务端,不经过 arm_control 的 - # 轨迹适配器(那个用的是 arm_msgs/action/FollowJointTrajectory)。 - # 写成 arm_msgs 的会得到一个"永远探不到服务端"的自检 —— 假阴性, - # 而且看起来像控制器没起来。 - expect_type="control_msgs/action/FollowJointTrajectory", - ), - BootCheck( - key="arm_home", - label="回零服务", - probe="service", - target="/home", - why="S01 回 home、S11 复位都靠它", - expect_type="std_srvs/srv/Trigger", - ), - BootCheck( - key="arm_named_pose", - label="命名位姿服务", - probe="service", - target="/set_named_pose", - why="/home 内部转发给它;它不在时回零会超时", - expect_type="arm_msgs/srv/SetNamedPose", - ), - BootCheck( - key="arm_compliant", - label="柔顺下压 action", - probe="action", - target="/compliant_descent", - # 选检:S07 现在走节点内的"步进 + 力突变停"(与这个 action 内部 - # 同一套做法),不依赖它;有它时驱动侧原语更顺,属于加分项。 - # 标成必检会让仿真(arm_driver_flexiv 不参与)永远过不了自检。 - why="有它时 S07 用驱动侧柔顺原语;没有则用节点内步进(不影响正确性)", - required=False, - expect_type="arm_msgs/action/CompliantDescent", - ), - BootCheck( - key="gripper_open", - label="夹爪张开服务", - probe="service", - target=gripper_open, - why="S08 棘轮的『松爪』一步靠它;失败会让回转把规拧回去", - ), - BootCheck( - key="gripper_close", - label="夹爪夹紧服务", - probe="service", - target=gripper_close, - why="S08 的『夹紧』一步靠它;失败会让慢转时规打滑(磨螺纹)", - ), - BootCheck( - key="camera_color", - label="腕部相机彩图", - probe="camera", - target=_topic(camera, "color/image_raw"), - why="S05 精拍定位 k1/k2 靠它;缺了只能靠 S03 粗定位(精度不够)", - expect_type="sensor_msgs/msg/Image", - ), - BootCheck( - key="camera_info", - label="腕部相机内参", - probe="topic", - target=_topic(camera, "color/camera_info"), - why="没有内参就无法把像素反投影成基座坐标(会退化成 60° 默认视场)", - expect_type="sensor_msgs/msg/CameraInfo", - ), - BootCheck( - key="tactile_status", - label="触觉三向力", - probe="tactile", - target=tactile_topic, - why="S07 切向力突变停、S08 拧紧判据、E1 掉件都依赖它;" - "缺了这几个判据全部失效(流程能走完但结果不可信)", - expect_type="arm_msgs/msg/TactileStatus", - ), - BootCheck( - key="gripper_status", - label="夹爪状态反馈", - probe="topic", - target=gripper_status, - why="E1 掉件检测靠它;缺了掉件只能靠人看", - expect_type=gripper_status_type, - ), - ] - - if d435_camera: - checks.append( - BootCheck( - key="coarse_camera", - label="手外粗定位相机", - probe="camera", - target=_topic(d435_camera, "color/image_raw"), - why="S03 兜底粗定位用;缺了只能在 S04 跟踪上多试几次", - required=False, - expect_type="sensor_msgs/msg/Image", - ) - ) - if tool_name: - checks.append( - BootCheck( - key="tool_frame", - label="工具坐标系已指定", - probe="service", # 具体内容由节点按 tool_name 复核(只查服务在不在) - target="/switch_tool", - why=f"要求 tool1(垂直向下、位姿锁定),site.yaml 里配的是 {tool_name!r}", - required=False, - expect_type="arm_msgs/srv/SwitchTool", - ) - ) - # 配了工具系就必须能切:S01 切不过去会直接 TIMEOUT 中止, - # 所以在自检里按**必检**拦下(早报比跑到 S01 再报少一次上电动作)。 - checks.append( - BootCheck( - key="arm_switch_tool", - label="工具系切换服务", - probe="service", - target="/switch_tool", - why=f"site.yaml 指定了工具 {tool_name!r},切不过去后面全是歪的", - expect_type="arm_msgs/srv/SwitchTool", - ) - ) - else: - # 没配工具系:S01 只会告警不会切,所以这条只算选检 —— - # 真机没配工具系是**配置问题**(看板要求 tool1),但仿真里根本没有 - # 工具系切换服务,标必检会让仿真永远过不去。 - checks.append( - BootCheck( - key="arm_switch_tool", - label="工具系切换服务", - probe="service", - target="/switch_tool", - why="本机没配 robot.tool_name:真机应配 tool1 并确认这个服务在;仿真不需要", - required=False, - expect_type="arm_msgs/srv/SwitchTool", - ) - ) - if weights_path and perception_source == "yolo": - checks.append( - BootCheck( - key="detector", - label="检测算法预热", - probe="detector", - target=weights_path, - why="S04 跟踪、S03 粗定位都要它;预热失败会在第一次跟踪时才炸", - ) - ) - - # 网络端点统一成绝对名(见 _ABSOLUTE_PROBES 的说明)。 - # detector 的 target 是文件路径,不参与规范化。 - return [ - c if c.probe not in _ABSOLUTE_PROBES - else BootCheck( - key=c.key, label=c.label, probe=c.probe, target=abs_name(c.target), - why=c.why, required=c.required, expect_type=c.expect_type, - ) - for c in checks - ] - - -def format_report(results: Sequence[Tuple[BootCheck, bool, str]]) -> Tuple[str, List[str]]: - """把逐项结果排成一张表,返回 ``(表文本, 失败项描述)``。 - - ``results`` 每项是 ``(检查项, 是否就绪, 细节)``。 - - 两张输出分开是为了让调用方能按"必检失败"决定是否中止:表用来给人看, - 失败项描述用来进日志/结果 JSON。 - """ - lines: List[str] = ["S00 自检:"] - failures: List[str] = [] - for item, ok, detail in results: - mark = "OK " if ok else ("缺失" if item.required else "告警") - tag = "" if item.required else "(选检)" - lines.append(f" [{mark}] {item.label}{tag} {item.target}") - if detail: - lines.append(f" {detail}") - if not ok: - prefix = "必检项未就绪" if item.required else "选检项未就绪" - failures.append(f"{prefix}:{item.label}({item.target})—— {item.why}") - if failures: - lines.append(f" 共 {len(failures)} 项未就绪") - else: - lines.append(" 全部就绪,开指令窗") - return "\n".join(lines), failures - - -def blocking_failures(results: Iterable[Tuple[BootCheck, bool, str]]) -> List[str]: - """只挑出**必检且未就绪**的项 —— 决定要不要中止的就是它们。 - - 和 :func:`format_report` 的 ``failures`` 的区别:那里两项都收(含选检), - 这里只收必检。合成一个函数的话,调用方一不留神就会拿选检失败去中止流程, - 于是"D435 没接"变成"装配跑不起来"。 - """ - return [ - f"必检项未就绪:{item.label}({item.target})—— {item.why}" - for item, ok, _detail in results - if (not ok) and item.required - ] - - -def optional_warnings(results: Iterable[Tuple[BootCheck, bool, str]]) -> List[str]: - """选检未就绪的告警(不拦流程,但必须打出来)。""" - return [ - f"选检项未就绪:{item.label}({item.target})—— {item.why}" - for item, ok, _detail in results - if (not ok) and not item.required - ] - - -def summary_counts(results: Sequence[Tuple[BootCheck, bool, str]]) -> Dict[str, int]: - """统计``必检/选检``各自通过多少,给启动日志一行摘要。""" - out = {"required_ok": 0, "required_total": 0, "optional_ok": 0, "optional_total": 0} - for item, ok, _detail in results: - slot = "required" if item.required else "optional" - out[f"{slot}_total"] += 1 - if ok: - out[f"{slot}_ok"] += 1 - return out diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/gauge_config.py b/install/arm_application/lib/python3.11/site-packages/arm_application/gauge_config.py deleted file mode 100644 index 5bc0bea..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/gauge_config.py +++ /dev/null @@ -1,591 +0,0 @@ -"""通止规装配的配置:从 ``site.yaml`` 的 ``gauge_assembly:`` 段解析 + 校验。 - -为什么单独一个模块 ------------------- -这一段的键**全是会动的量**(力阈值、角度、悬高、超时),也是现场最常改的地方。 -散在节点里读的话会有三个已知坑(都被这个仓库踩过): - -1. **名字与单位不一致** —— ``hover`` 填了毫米、代码按米用(规则 M3); -2. **键没接线** —— YAML 里写着 ``screw_step_deg``,代码读的是 ``screw_steps``, - 于是改了没效果,而报错也没有(``config_guard`` 模块的头注释就是这件事); -3. **拼错键名** —— YAML 静默接受,行为退回默认值,现场"改了参数没反应"。 - -所以:所有键在一张表里声明(含单位),解析时**逐条校验**,多出来的键直接 -报错并给出最相近的候选名,缺的键按 required/default 明确处理。 -``describe()`` 把**派生**结果(比如"逆时针最多能转 147°")打出来,让现场 -看到的是"实际生效的值",而不是"我填的值"。 -""" - -from __future__ import annotations - -import difflib -from dataclasses import dataclass, fields -from typing import Any, Dict, Iterable, List, Mapping, Optional, Tuple - -from arm_application.gauge_fsm import descend_tol_m - -#: S05 稳定判据可用的特征来源。``auto`` 按 ``perception.source`` 自动选。 -#: -#: 为什么需要有"motion"这一路:判据原本是**工件检测框中心**的抖动(像素), -#: 那要求检测器真的出框。仿真里合成图过不了真机训练出来的模型(实测最高分 -#: 0.017),于是 S05 会永远"不稳定"地空转 —— 而真正该等的是"相机不再动"。 -#: 用法兰位移(mm)当特征既直接又不依赖模型,且判据本身(到均值的最远距离)不变。 -SNAP_STABLE_FEATURES = ("auto", "bbox", "motion") - -def snap_feature_of(want: str, perception_source: str) -> str: - """把 ``snap_stable_feature``(可能是 ``auto``)+ 感知来源 → 实际用哪个特征。 - - 抽成纯函数是为了能脱离 ROS 节点测:这个选择错了,S05 会在真机上"永远不稳定" - 或者在仿真里空转到超时,而两种表现都像是"机械臂在晃",很难往配置上想。 - """ - want = str(want or "auto") - if want != "auto": - return want - return "bbox" if perception_source == "yolo" else "motion" - - -#: 合法的单位后缀。键名必须以 ``_<单位>`` 结尾(``au`` = Orisys 任意单位增量)。 -_UNIT_SUFFIX: Dict[str, str] = { - "s": "_s", - "deg": "_deg", - "mm": "_mm", - "m": "_m", - "px": "_px", - "pct": "_pct", - "au": "_delta", - # 腕部 FT 的**真牛顿**。与 au 分开一个后缀是刻意的:两个口径混用不会报错, - # 只会"判据不触发"或"一碰就炸",看起来像算法问题(见 site.yaml 的注释)。 - "N": "_n", -} - -#: 显式无量纲的键(布尔、计数、比例、枚举)。**必须在这里列出来** —— -#: 没有单位又不登记的键,会让"单位自检"变成一句空话(规则 M1)。 -_UNITLESS = frozenset( - { - "extreme_direction", - "grip_check", - "coarse_enabled", - "coarse_camera", - "coarse_conf", - "snap_min_frames", - "snap_stable_feature", - "screw_max_cycles", - "unscrew_extra_cycles", - "holes_total", - "dry_run", - } -) - -#: 每个键的**类型**(用于类型校验,不做隐式转换:``"20"`` 不当 20 用)。 -_TYPES: Dict[str, type] = { - "boot_timeout_s": float, - "extreme_angle_deg": float, - "extreme_speed_deg_s": float, - "extreme_direction": int, - "extreme_margin_deg": float, - "grip_check": bool, - "grip_hold_s": float, - "coarse_enabled": bool, - "coarse_camera": str, - "coarse_hover_m": float, - "coarse_conf": float, - "coarse_timeout_s": float, - "snap_stable_s": float, - "snap_tol_px": float, - "snap_tol_mm": float, - "snap_min_frames": int, - "snap_stable_feature": str, - "align_tol_mm": float, - "contact_speed_m_s": float, - "contact_step_mm": float, - "contact_max_depth_mm": float, - "tool_tip_below_flange_m": float, - "workpiece_surface_z_m": float, - "contact_tangential_delta": float, - "contact_axial_delta_n": float, - "contact_relief_mm": float, - "contact_hold_n": float, - "contact_safe_delta": float, - "screw_step_deg": float, - "screw_speed_deg_s": float, - "screw_back_speed_deg_s": float, - "screw_max_cycles": int, - "screw_normal_delta": float, - "screw_shear_delta": float, - "screw_grip_force_pct": float, - "screw_grip_speed_pct": float, - "screw_release_wait_s": float, - "unscrew_extra_cycles": int, - "holes_total": int, - "dry_run": bool, - "reload_timeout_s": float, -} - -#: 每个键的单位。``""`` 表示无量纲(须同时登记在 :data:`_UNITLESS`)。 -_UNITS: Dict[str, str] = { - "boot_timeout_s": "s", - "extreme_angle_deg": "deg", - "extreme_speed_deg_s": "deg/s", - "extreme_direction": "", - "extreme_margin_deg": "deg", - "grip_check": "", - "grip_hold_s": "s", - "coarse_enabled": "", - "coarse_camera": "", - "coarse_hover_m": "m", - "coarse_conf": "", - "coarse_timeout_s": "s", - "snap_stable_s": "s", - "snap_tol_px": "px", - "snap_tol_mm": "mm", - "snap_min_frames": "", - "snap_stable_feature": "", - "align_tol_mm": "mm", - "contact_speed_m_s": "m/s", - "contact_step_mm": "mm", - "contact_max_depth_mm": "mm", - # 这两个是**长度**不是"毫米量":用 m 口径,与 hover_z 同一把尺 - "tool_tip_below_flange_m": "m", - "workpiece_surface_z_m": "m", - "contact_tangential_delta": "au", - # 腕部 FT 是**真牛顿**(与触觉的 au 不是一个口径,所以键名也不带 taut 前缀) - "contact_axial_delta_n": "N", - # 卸载回退是**长度**(与 step_mm 同一把尺) - "contact_relief_mm": "mm", - # 残余轴向力是**牛顿**(腕部 FT 口径,不是触觉的 au) - "contact_hold_n": "N", - "contact_safe_delta": "au", - "screw_step_deg": "deg", - "screw_speed_deg_s": "deg/s", - "screw_back_speed_deg_s": "deg/s", - "screw_max_cycles": "", - "screw_normal_delta": "au", - "screw_shear_delta": "au", - "screw_grip_force_pct": "pct", - "screw_grip_speed_pct": "pct", - "screw_release_wait_s": "s", - "unscrew_extra_cycles": "", - "holes_total": "", - "dry_run": "", - "reload_timeout_s": "s", -} - -#: 键名后缀与单位必须一致(防"填毫米当米用")。``contact_speed_m_s`` 这类 -#: 复合单位只检查主单位段。 -_SUFFIX_OVERRIDE: Dict[str, str] = { - # 复合单位:后缀取"最后一个单位段",键名里写全 - "contact_speed_m_s": "_m_s", - "extreme_speed_deg_s": "_deg_s", - "screw_speed_deg_s": "_deg_s", - "screw_back_speed_deg_s": "_deg_s", -} - - -class GaugeConfigError(ValueError): - """``gauge_assembly:`` 段配置错误。消息里必须给出**改哪里**。""" - - -# ============================================================================= -# 默认值 -# ============================================================================= -#: 缺省值。**只有真的有现场依据的才写默认值**:力阈值这类必须现场标定的, -#: 默认值只是"能跑起来的起点",必须在 ``describe()`` 里标出来让现场知道要改。 -DEFAULTS: Dict[str, Any] = { - "boot_timeout_s": 30.0, - # S01:逆时针预绕。符号靠 extreme_direction 定,不靠改代码里的负号。 - "extreme_angle_deg": 150.0, - "extreme_speed_deg_s": 20.0, - "extreme_direction": 1, - "extreme_margin_deg": 3.0, - # S02(预留) - "grip_check": False, - "grip_hold_s": 0.5, - # S03 - "coarse_enabled": True, - "coarse_camera": "d435", - "coarse_hover_m": 0.25, - "coarse_conf": 0.35, - "coarse_timeout_s": 20.0, - # S05 - "snap_stable_s": 1.0, - "snap_tol_px": 2.0, - "snap_tol_mm": 0.4, - "snap_min_frames": 6, - "snap_stable_feature": "auto", - # S06 - "align_tol_mm": 1.0, - # S07 - "contact_speed_m_s": 0.02, - "contact_step_mm": 0.5, - "contact_max_depth_mm": 35.0, - "tool_tip_below_flange_m": 0.243, - "workpiece_surface_z_m": 0.0, # 0 = 未知,运行期用 stage2 实测孔位兜底 - "contact_tangential_delta": 300.0, - # 腕部 FT 的轴向力阈值 [N]。**这是 S07 的首选判据**,触觉只是兜底。 - # - # 为什么默认是 8N 这么小:这是"接触了没有"的判据,不是"压到位了没有"。 - # 台肩一落面,接触刚度 5e4 N/m 意味着过压 0.1mm 就有 5N、0.2mm 有 10N —— - # 所以 8N 对应约 0.16mm 的过压,**在打滑之前**就能判到(打滑上限由 - # µ·N 决定:µ=0.25、N≈46N → 两指合计 ~23N ≈ 0.46mm)。留了 3 倍余量。 - # 现场标定法:空载慢慢压到台肩落面,看日志里"腕部轴向"从基线涨到多少, - # 取那个值的 1/3 作为阈值(要能区分"擦到孔壁"和"台肩落面")。 - "contact_axial_delta_n": 8.0, - # 接触到之后的**卸载回退** [mm]。 - # - # 为什么必须有这一步(2026-09-24 一整轮排查换来的): - # 位置控制的臂在"撞上硬面"时会把力顶到自己的**出力上限**才停住 —— - # 仿真实测:一步 0.5mm 的指令压在工件上,腕部 FT 读数直接跳到 **+244N**, - # 而臂这一步根本没走完("实测只走了 +0.09mm")。这不是仿真特有的: - # 接触刚度越高、步长越大,峰值力就越大,而位置环**不限制**它。 - # - # 规是**靠夹持摩擦**抱住的,轴向能传的力上限是 µ·N(两指合计 ~73N@µ=0.8)。 - # 244N 远超这个上限 ⇒ 规被轴向力**顶出爪外**(本次就是:S08 一转, - # 规直接掉到地上,报 E1)。所以"判到接触"之后不能就那样顶着, - # 必须先把下压量放掉,再交给 S08 拧入。 - # - # 0.5mm 的来历:判到接触时的**真实**过压量通常只有 0.0x mm(刚度 5e4 N/m - # 时,10N 对应 0.2mm),回退 0.5mm 足够把力放干净,而规尖仍在孔里 - # (通端穿板 18mm),不会脱出。 - "contact_relief_mm": 0.5, - # 卸载后允许的残余轴向力 [N]。 - # 超了不失败(可能只是回退量不够),但要**大声报**:它说明"夹持摩擦力不够 - # 承受这次接触",接着 S08 一转就会掉件。调法只有两条 —— 降峰值(调小 - # contact_step_mm / contact_relief_mm)或加握力(改夹爪合拢力度/指垫)。 - "contact_hold_n": 5.0, - "contact_safe_delta": 2000.0, - # S08 - # 步长必须满足 2×step + 2×余量 ≤ 关节7 行程(Rizon4/10 ±175° ⇒ step ≤ 167°): - # 180° 会必然贴限位(棘轮一个来回要 360° > 350°),实测第 3 轮 ABORT。 - "screw_step_deg": 120.0, - "screw_speed_deg_s": 30.0, - "screw_back_speed_deg_s": 120.0, - "screw_max_cycles": 12, - "screw_normal_delta": 400.0, - "screw_shear_delta": 600.0, - "screw_grip_force_pct": 50.0, - "screw_grip_speed_pct": 50.0, - "screw_release_wait_s": 0.3, - # S09 - "unscrew_extra_cycles": 1, - # 全局 - "holes_total": 2, - "dry_run": False, - # E1(掉件)重放:等操作员放好并确认 /gauge/reload_ok 的最长时间。 - # 超时 = 中止(臂在 home,人不在旁边时"继续等"比"停"更危险)。 - "reload_timeout_s": 180.0, -} - - -@dataclass(frozen=True) -class GaugeConfig: - """通止规装配的全部可调量(解析并校验之后)。""" - - boot_timeout_s: float - extreme_angle_deg: float - extreme_speed_deg_s: float - extreme_direction: int - extreme_margin_deg: float - grip_check: bool - grip_hold_s: float - coarse_enabled: bool - coarse_camera: str - coarse_hover_m: float - coarse_conf: float - coarse_timeout_s: float - snap_stable_s: float - snap_tol_px: float - snap_tol_mm: float - snap_min_frames: int - snap_stable_feature: str - align_tol_mm: float - contact_speed_m_s: float - contact_step_mm: float - contact_max_depth_mm: float - tool_tip_below_flange_m: float - workpiece_surface_z_m: float - contact_tangential_delta: float - contact_axial_delta_n: float - contact_relief_mm: float - contact_hold_n: float - contact_safe_delta: float - screw_step_deg: float - screw_speed_deg_s: float - screw_back_speed_deg_s: float - screw_max_cycles: int - screw_normal_delta: float - screw_shear_delta: float - screw_grip_force_pct: float - screw_grip_speed_pct: float - screw_release_wait_s: float - unscrew_extra_cycles: int - holes_total: int - dry_run: bool - reload_timeout_s: float - - # -- 派生量(不占 YAML 键,免得两处各写一份,规则 M2)------------------- - @property - def screw_step_rad(self) -> float: - import math - - return math.radians(self.screw_step_deg) - - @property - def total_screw_deg(self) -> float: - """一根规要拧进去的总角度 = 单次转角 × 循环数。""" - return self.screw_step_deg * self.screw_max_cycles - - @property - def unscrew_cycles(self) -> int: - """拧出要多转几轮:多留 ``unscrew_extra_cycles`` 轮,确保螺纹完全脱开。""" - return self.screw_max_cycles + max(0, self.unscrew_extra_cycles) - - def describe(self) -> List[str]: - """启动时打印的行:**实际生效的**值与派生结论。 - - 特别是 S01 的"能转多少度"和 S08 的"要拧多少轮"—— 这两个数是现场 - 判断"参数是否真的生效"最直接的依据,比打印"我读了 site.yaml"有用。 - """ - return [ - f"通止规装配:每孔孔数 {self.holes_total},干跑={self.dry_run}", - f" S01 预绕 {self.extreme_angle_deg:.1f}°(方向={'逆时针' if self.extreme_direction > 0 else '顺时针'}," - f"限位余量 {self.extreme_margin_deg:.1f}°,关节速度 {self.extreme_speed_deg_s:.1f}°/s)", - f" S03 粗定位={'开' if self.coarse_enabled else '关'} 相机={self.coarse_camera} " - f"悬高 {self.coarse_hover_m * 1000:.0f}mm 置信度≥{self.coarse_conf:.2f}", - f" S05 稳定 {self.snap_stable_s:.1f}s / 至少 {self.snap_min_frames} 帧 / " - f"特征={self.snap_stable_feature}" - f"(检测框 ≤{self.snap_tol_px:.1f}px、法兰位移 ≤{self.snap_tol_mm:.2f}mm)" - "(稳定判据用「到均值的最远距离」,不是相邻帧之差)", - # 悬停高度**不在这里**:它取自 servo.hole_hover_z_m(stage2 那一层), - # 这里只印本段的容差 —— 一段配置里出现"另一个段的键"会让人改错地方。 - f" S06 对位容差 {self.align_tol_mm:.1f}mm(悬停高取自 servo.hole_hover_z_m)", - f" S07 腕部轴向突变阈值 +{self.contact_axial_delta_n:.0f}N(**首选判据**," - "腕部 FT 在夹持摩擦的上游,工具打滑也测得准)," - f"切向突变阈值 +{self.contact_tangential_delta:.0f}au(触觉兜底,两通道任一,现场标定)," - f"安全上限 +{self.contact_safe_delta:.0f},最多下探 {self.contact_max_depth_mm:.0f}mm", - f" S07 接触后卸载:回退 {self.contact_relief_mm:.2f}mm," - f"残余轴向力要求 ≤{self.contact_hold_n:.1f}N" - "(位置控制的臂撞上硬面会把力顶到出力上限再停住,实测能到 200N+;" - "规靠夹持摩擦抱住,轴向上限只有 µ·N≈73N,顶着不放 S08 一转就掉件)", - f" S07 工具几何:尖端在法兰下方 {self.tool_tip_below_flange_m * 1000:.1f}mm," - f"工件上表面 z={self.workpiece_surface_z_m:.3f}m" - "(启动时会按这两个值 + servo.hole_hover_z_m 算「悬停时工具到底入没入工件」," - "入了会**明确报错**——见 gauge_fsm.tool_clearance_m)", - f" S07 步进 {self.contact_step_mm:.2f}mm @ {self.contact_speed_m_s * 1000:.0f}mm/s," - f"到位容差 {descend_tol_m(self.contact_step_mm / 1000.0) * 1000:.3f}mm" - "(=步长的 40%,**推导出来的、不是可调项**:容差 ≥ 步长会让每一步都被判成" - "「已在容差内」,臂一步都不走)", - f" S08 棘轮 {self.screw_step_deg:.0f}°×{self.screw_max_cycles} 轮 = 累计 " - f"{self.total_screw_deg:.0f}°;停止判据「切向 >+{self.screw_shear_delta:.0f} 且 " - f"法向 >+{self.screw_normal_delta:.0f}」", - f" S09 拧出 {self.unscrew_cycles} 轮(比拧入多 {self.unscrew_extra_cycles} 轮)", - ] - - -def _resolve_one(key: str, raw: Mapping[str, Any]) -> Tuple[Any, bool]: - """取一个键的值,返回 ``(值, 是否来自 site.yaml)``。""" - if key in raw: - value = raw[key] - elif key in DEFAULTS: - return DEFAULTS[key], False - else: - raise GaugeConfigError( - f"gauge_assembly.{key} 既没在 site.yaml 里给,也没有默认值。" - f"请在 config/site.yaml 的 gauge_assembly: 段补上" - f"(改完跑一次 bash scripts/show_site_config.sh 确认解析)" - ) - - want = _TYPES[key] - if want is bool and not isinstance(value, bool): - raise GaugeConfigError(_type_msg(key, value, "布尔 true/false")) - if want is int and (isinstance(value, bool) or not isinstance(value, int)): - raise GaugeConfigError(_type_msg(key, value, "整数")) - if want is float and (isinstance(value, bool) or not isinstance(value, (int, float))): - raise GaugeConfigError(_type_msg(key, value, "数字(可带小数)")) - if want is str and not isinstance(value, str): - raise GaugeConfigError(_type_msg(key, value, "字符串")) - return (float(value) if want is float else value), True - - -def _type_msg(key: str, value: Any, human: str) -> str: - unit = _UNITS[key] - hint = f",单位 {unit}" if unit else "" - return ( - f"gauge_assembly.{key} 的类型不对:期望 {human}{hint}," - f"实际读到 {value!r}({type(value).__name__})。" - "本模块不做隐式转换 —— \"20\" 不会被当成 20 用," - "因为那正是「填了字符串、跑起来是默认值」这类静默失效的入口" - ) - - -def from_site(site: Mapping[str, Any], *, overrides: Optional[Mapping[str, Any]] = None) -> GaugeConfig: - """解析并校验 ``site.yaml`` 的 ``gauge_assembly:`` 段。 - - :param site: ``site.yaml`` 解析后的整份字典。 - :param overrides: CLI/launch 覆盖(只允许覆盖已知键,未知键报错)。 - :raises GaugeConfigError: 缺键、类型错、未知键、单位与键名不符。 - - 整段缺失**不报错**(全部走默认值),但会在 :meth:`GaugeConfig.describe` - 之外由调用方打一条告警;理由是"默认值能不能用"取决于现场, - 由节点决定要不要拒绝启动,配置模块只负责如实解析。 - """ - raw_any = site.get("gauge_assembly") or {} - if not isinstance(raw_any, Mapping): - raise GaugeConfigError( - "site.yaml 的 gauge_assembly: 应该是一段映射(键值对)," - f"实际是 {type(raw_any).__name__}" - ) - raw: Dict[str, Any] = dict(raw_any) - - if overrides: - bad = [k for k in overrides if k not in _TYPES] - if bad: - raise GaugeConfigError( - f"未知的覆盖参数: {', '.join(sorted(bad))}。" - f"可在 gauge_assembly 段覆盖的键见 gauge_config._TYPES" - ) - raw.update({k: v for k, v in overrides.items() if v is not None}) - - _reject_unknown(raw) - values = {key: _resolve_one(key, raw)[0] for key in _TYPES} - cfg = GaugeConfig(**values) - _sanity(cfg) - return cfg - - -def _reject_unknown(raw: Mapping[str, Any]) -> None: - """多余的键直接报错,并给出最相近的候选名。 - - 静默忽略多余键的代价是:现场写 ``screw_step_degs``,改参数没反应, - 而日志里一切正常。报错里带候选名,是因为拼错比写错新键常见得多。 - """ - unknown = sorted(set(raw) - set(_TYPES)) - if not unknown: - return - lines: List[str] = [] - for key in unknown: - close = difflib.get_close_matches(key, list(_TYPES), n=1, cutoff=0.6) - hint = f",是不是想写 {close[0]}?" if close else "" - lines.append(f" - {key}{hint}") - raise GaugeConfigError( - "site.yaml 的 gauge_assembly: 段里有本框架不认识的键:\n" - + "\n".join(lines) - + "\n多余的键不会被忽略,因为「写了没生效」比「写错报错」难查得多。" - "确认要新增配置项时,先在 gauge_config._TYPES / _UNITS 里登记" - ) - - -def _sanity(cfg: GaugeConfig) -> None: - """跨键的合理性检查:单键合法、组合起来没意义的,在这里挡住。""" - if cfg.holes_total < 1: - raise GaugeConfigError(f"gauge_assembly.holes_total 至少为 1,收到 {cfg.holes_total}") - if cfg.extreme_direction not in (-1, 1): - raise GaugeConfigError( - f"gauge_assembly.extreme_direction 只能是 +1(逆时针)或 -1(顺时针)," - f"收到 {cfg.extreme_direction}" - ) - if cfg.screw_step_deg <= 0.0: - raise GaugeConfigError( - f"gauge_assembly.screw_step_deg 必须为正,收到 {cfg.screw_step_deg}" - ) - if cfg.screw_max_cycles < 1: - raise GaugeConfigError( - f"gauge_assembly.screw_max_cycles 至少为 1,收到 {cfg.screw_max_cycles}" - ) - if cfg.extreme_angle_deg <= 0.0: - raise GaugeConfigError( - f"gauge_assembly.extreme_angle_deg 必须为正(方向由 extreme_direction 决定," - f"不要用负角度表方向),收到 {cfg.extreme_angle_deg}" - ) - if cfg.contact_safe_delta <= cfg.contact_tangential_delta: - raise GaugeConfigError( - f"contact_safe_delta({cfg.contact_safe_delta}) 必须大于 " - f"contact_tangential_delta({cfg.contact_tangential_delta}):" - "前者是「立刻抬臂」的安全上限,后者只是「停止下压」。" - "两者相等的话,接触一开始就会触发安全上限" - ) - if cfg.tool_tip_below_flange_m <= 0.0: - raise GaugeConfigError( - f"tool_tip_below_flange_m 必须为正(工具尖端在法兰**下方**多少米)," - f"收到 {cfg.tool_tip_below_flange_m}。" - "填 0 会让「悬停时工具会不会已经插进工件」这个判断失效" - ) - if cfg.snap_tol_px <= 0.0: - raise GaugeConfigError(f"gauge_assembly.snap_tol_px 必须为正,收到 {cfg.snap_tol_px}") - if cfg.contact_relief_mm < 0.0: - raise GaugeConfigError( - f"gauge_assembly.contact_relief_mm 不能为负(0 = 接触到之后不卸载)," - f"收到 {cfg.contact_relief_mm}。\n" - " 它为什么值得一条检查:位置控制的臂撞上硬面会把轴向下压顶到**出力上限**" - "才停住(实测 200N+),而规靠夹持摩擦抱住、轴向上限只有 µ·N(≈73N)。" - "卸载这一步省掉,S08 一转就掉件(报 E1)—— 而那时的日志只会说" - "「通止规掉了」,看不到真因。" - ) - if cfg.contact_hold_n <= 0.0: - raise GaugeConfigError( - f"gauge_assembly.contact_hold_n 必须为正(卸载后的残余轴向力上限 [N])," - f"收到 {cfg.contact_hold_n}。0 会让「卸载干不干净」永远判不过。" - ) - if cfg.snap_tol_mm <= 0.0: - raise GaugeConfigError(f"gauge_assembly.snap_tol_mm 必须为正,收到 {cfg.snap_tol_mm}") - if cfg.snap_stable_feature not in SNAP_STABLE_FEATURES: - raise GaugeConfigError( - f"gauge_assembly.snap_stable_feature={cfg.snap_stable_feature!r} 不认识," - f"只支持 {sorted(SNAP_STABLE_FEATURES)}。\n" - f" auto = 按 perception.source 自动选(真机 yolo→bbox、仿真/外部→motion)\n" - f" bbox = 用工件检测框中心(像素),需要检测器真的出框\n" - f" motion = 用法兰位移(mm),不依赖检测器" - ) - - -# ============================================================================= -# 自检:键名必须体现单位(防"填了毫米按米用") -# ============================================================================= -def unit_violations(keys: Optional[Iterable[str]] = None) -> List[str]: - """返回"键名与单位不符"的清单(空 = 全部合规)。 - - 规则:单位非空的键,**键名必须以对应的单位后缀结尾**(见 :data:`_UNIT_SUFFIX`)。 - 例外只有 :data:`_SUFFIX_OVERRIDE` 里显式登记的复合单位。 - - 为什么值得一条专门的检查:``hover`` 填毫米、代码按米用,会给出一个 - "看起来完全合理"的运动(悬停 5 变成悬停 5 米或 5 毫米), - 而 :mod:`arm_interfaces.config_guard` 的头注释记录的正是这类事故。 - """ - bad: List[str] = [] - for key in keys if keys is not None else _UNITS: - unit = _UNITS[key] - if not unit: - if key not in _UNITLESS: - bad.append(f"{key}: 无量纲但未登记在 _UNITLESS") - continue - suffix = _SUFFIX_OVERRIDE.get(key) - if suffix is None: - base = unit.split("/")[0] - suffix = _UNIT_SUFFIX.get(base) - if suffix is None: - bad.append(f"{key}: 单位 {unit} 没有登记后缀(补 _UNIT_SUFFIX 或 _SUFFIX_OVERRIDE)") - continue - if not key.endswith(suffix): - bad.append(f"{key}: 单位是 {unit},键名应以 {suffix} 结尾") - return bad - - -def missing_entries() -> List[str]: - """三张表(类型/单位/默认值)是否互相覆盖完整。""" - problems: List[str] = [] - for key in _TYPES: - if key not in _UNITS: - problems.append(f"{key}: 缺 _UNITS 登记") - if key not in DEFAULTS: - problems.append(f"{key}: 缺 DEFAULTS(required 的键也应写一个起点值并在文档里标注必标定)") - for key in _UNITS: - if key not in _TYPES: - problems.append(f"{key}: 在 _UNITS 里但不在 _TYPES 里") - for key in DEFAULTS: - if key not in _TYPES: - problems.append(f"{key}: 在 DEFAULTS 里但不在 _TYPES 里") - return problems - - -def dataclass_keys() -> List[str]: - """:class:`GaugeConfig` 的字段名 —— 与配置表比对,防"解析了但没存进对象"。""" - return [f.name for f in fields(GaugeConfig)] diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/gauge_fsm.py b/install/arm_application/lib/python3.11/site-packages/arm_application/gauge_fsm.py deleted file mode 100644 index 55ebdca..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/gauge_fsm.py +++ /dev/null @@ -1,1060 +0,0 @@ -"""通止规装配的状态机 —— **纯逻辑**,不 import rclpy,可离线单测。 - -为什么单独一个文件 ------------------- -状态机的价值全在"顺序"和"边界"上:S07 的力判据有没有在 S08 之前生效、 -E1 掉件之后到底回到哪一步、k2 是"回到 S05 记录的位姿"还是"重新拍照"。 -这些错**不会在运行时暴露成异常**,只会表现成"流程走得下去但结果不对", -和力轴向映射反了一样属于静默失效(规则 R5.1)。所以转移表写成**数据**, -由测试逐条钉住,而不是散在节点的一堆 if/else 里。 - -设计口径 --------- -- 状态编号与看板《五、通止规定位装配:状态机设计》一致(S00–S11), - E1/E2 两条异常分支也在这里,**改名要同步改看板与文档**(规则 R6.1)。 -- 转移表只回答"给这个事件、从当前状态去哪";**做不做得了**由节点判断 - (比如 S03 需要 D435 手眼,没标定就报 COARSE_FAIL 走 S04 兜底)。 - 状态机不掺硬件条件,否则没法离线测。 -- 上下文里的两个字段(`hole_index` / `holes_total`)只影响 S09 的出口: - 最后一个孔拧出后去 S11 复位,否则去 S10 换到下一个孔。 -""" - -from __future__ import annotations - -import math -from dataclasses import dataclass, field -from enum import Enum -from typing import Dict, List, Optional, Sequence, Tuple - - -# ============================================================================= -# 状态与事件 -# ============================================================================= -class State(str, Enum): - """S00–S11 全部状态 + 两个终态。""" - - BOOT = "S00" # 各服务自检(伺服/相机/夹爪/触觉图传/推理预热) - HOME_EXTREME = "S01" # 回 home + 按 tool 系逆时针转到极限角 - GRIP_CHECK = "S02" # 夹持确认(预留,当前跳过) - COARSE = "S03" # 手外 D435 粗定位 - TRACK = "S04" # 腕部 D405 跟踪 k0 - SNAP = "S05" # 像素稳定后拍照定位 k1/k2 + 记位姿 - HOVER_K = "S06" # 到当前孔正悬停 - CONTACT = "S07" # 柔顺接触(切向力突变停) - SCREW_IN = "S08" # 旋转装配循环 - UNSCREW = "S09" # 反向拧出 - NEXT_HOLE = "S10" # 换到下一个孔(回到 S05 记录的位姿) - RESET = "S11" # 复位退出 - DONE = "DONE" # 正常结束 - ABORT = "ABORT" # 中止(已按安全顺序退出到安全高度) - - def __str__(self) -> str: # 日志里直接印 S07 而不是 State.CONTACT - return self.value - - -class Event(str, Enum): - """驱动状态机的事件。命名规则:``动作_结果``。""" - - BOOT_OK = "boot_ok" - BOOT_FAIL = "boot_fail" - - POSE_OK = "pose_ok" - JOINT_LIMIT = "joint_limit" # S01 转不动 = 已经贴着关节极限 - - GRIP_PASS = "grip_pass" - GRIP_FAIL = "grip_fail" - GRIP_SKIPPED = "grip_skipped" # S02 预留:没装/没标定,明确跳过 - - COARSE_OK = "coarse_ok" - COARSE_FAIL = "coarse_fail" - - TRACK_LOCKED = "track_locked" - TRACK_LOST = "track_lost" # 丢失超时 → 回 S03 兜底 - - SNAP_OK = "snap_ok" - SNAP_UNSTABLE = "snap_unstable" # 画面还在动,继续等 - - ALIGN_OK = "align_ok" - ALIGN_OUT = "align_out" # 对位超差 → 回 S05 重拍 - - CONTACT_OK = "contact_ok" - FORCE_OVER_LIMIT = "force_over_limit" # 力超安全上限 → 抬起 - #: S07 判到接触、但**下压深度远小于几何预期** ⇒ 规没进孔,顶在工件上表面。 - #: 单列一个事件是为了让结论与日志都是实话:复用 FORCE_OVER_LIMIT 会把这种 - #: 情况报成"力超安全上限",而它的力根本没超限 —— 又是一句误导。 - HOLE_LOST = "hole_lost" - - SCREW_DONE = "screw_done" - SCREW_STOP = "screw_stop" # 力判据满足:切向力>阈值 且 法向力突增 - GAUGE_DROPPED = "gauge_dropped" # E1:夹持丢了 - - UNSCREW_DONE = "unscrew_done" - - RELOADED = "reloaded" # E1:人工放好按 R 之后 - TIMEOUT = "timeout" # E2:任意阶段超时 - ABORT = "abort" # 用户 ^C / 外部中止 - - -#: 终态:到这里状态机不再接受事件。 -TERMINAL = frozenset({State.DONE, State.ABORT}) - - -# ============================================================================= -# 上下文:只放"影响去哪"的可变数据,不放硬件句柄 -# ============================================================================= -@dataclass -class GaugeContext: - """状态机运行上下文。 - - :param holes_total: 一次任务要装的孔数(k1/k2 两个就是 2)。 - :param hole_index: 当前孔序号,0 基。S10 会 +1。 - :param relocations: E1 掉件后人工重放计数,用于日志与上限保护。 - :param max_relocations: 允许的掉件重试次数,超了直接 ABORT, - 避免"掉件 → 重放 → 又掉"无限循环。 - """ - - holes_total: int = 2 - hole_index: int = 0 - relocations: int = 0 - max_relocations: int = 3 - notes: List[str] = field(default_factory=list) - - @property - def is_last_hole(self) -> bool: - return self.hole_index >= self.holes_total - 1 - - def hole_name(self) -> str: - """给日志用的人读孔名:k1 / k2。""" - return f"k{self.hole_index + 1}" - - -# ============================================================================= -# 转移表 -# ============================================================================= -#: ``(状态, 事件) -> 下一状态``。**没有列出的组合就是非法转移**, -#: 会抛 :class:`FsmError` —— 宁可当场炸,也不要"悄悄停在原地"。 -TRANSITIONS: Dict[Tuple[State, Event], State] = { - # --- S00 自检 --- - (State.BOOT, Event.BOOT_OK): State.HOME_EXTREME, - (State.BOOT, Event.BOOT_FAIL): State.ABORT, - # --- S01 home + 极限角 --- - (State.HOME_EXTREME, Event.POSE_OK): State.GRIP_CHECK, - # 转不动不是失败:已经贴着极限,就按当前角继续(提示即可) - (State.HOME_EXTREME, Event.JOINT_LIMIT): State.GRIP_CHECK, - # E1 掉件后半段:S01 流程走完 → 提示人工放置 → 按 R → 回记录位姿继续 - (State.HOME_EXTREME, Event.RELOADED): State.NEXT_HOLE, - # --- S02 夹持确认(预留)--- - (State.GRIP_CHECK, Event.GRIP_SKIPPED): State.TRACK, - (State.GRIP_CHECK, Event.GRIP_PASS): State.TRACK, - (State.GRIP_CHECK, Event.GRIP_FAIL): State.ABORT, - # --- S03 手外粗定位(S04 的兜底,不是必经)--- - (State.COARSE, Event.COARSE_OK): State.SNAP, - (State.COARSE, Event.COARSE_FAIL): State.TRACK, - # --- S04 跟踪 --- - (State.TRACK, Event.TRACK_LOCKED): State.SNAP, - (State.TRACK, Event.TRACK_LOST): State.COARSE, - # --- S05 稳定拍照 --- - (State.SNAP, Event.SNAP_OK): State.HOVER_K, - (State.SNAP, Event.SNAP_UNSTABLE): State.SNAP, # 自环:继续等稳定 - # --- S06 正悬停 --- - (State.HOVER_K, Event.ALIGN_OK): State.CONTACT, - (State.HOVER_K, Event.ALIGN_OUT): State.SNAP, # 对位超差 → 回 S05 重拍 - # --- S07 柔顺接触 --- - (State.CONTACT, Event.CONTACT_OK): State.SCREW_IN, - (State.CONTACT, Event.FORCE_OVER_LIMIT): State.ABORT, - (State.CONTACT, Event.HOLE_LOST): State.ABORT, - # --- S08 旋转装配循环 --- - (State.SCREW_IN, Event.SCREW_DONE): State.UNSCREW, - (State.SCREW_IN, Event.SCREW_STOP): State.UNSCREW, - (State.SCREW_IN, Event.GAUGE_DROPPED): State.HOME_EXTREME, # E1 前半段 - # --- S09 反向拧出的出口与"是不是最后一个孔"有关,见 resolve_next() --- - # --- S10 换到下一个孔(= 回到 S05 记录的位姿),到了就重复 S06–S09 --- - (State.NEXT_HOLE, Event.POSE_OK): State.HOVER_K, - # --- S11 复位退出 --- - (State.RESET, Event.POSE_OK): State.DONE, -} - -#: 兜底:任意非终态收到 ABORT / TIMEOUT 都去对应终态。 -#: 单列出来是因为"每个状态各自列一遍"最容易漏,而漏的那个状态恰恰会在 -#: 真机上表现为"按了急停但流程还在跑"。 -GLOBAL: Dict[Event, State] = { - Event.ABORT: State.ABORT, - Event.TIMEOUT: State.ABORT, -} - - -def resolve_next(state: State, event: Event, ctx: GaugeContext) -> State: - """算出下一状态。 - - 绝大多数组合直接查 :data:`TRANSITIONS`;只有一处要结合上下文: - - * ``S09 + UNSCREW_DONE``:最后一个孔 → S11 复位;否则 → S10 换到下一个孔。 - - 其余"看起来需要上下文"的分支都用了**显式事件**,而不是让 resolve_next - 去猜(比如 E1 重放用 ``RELOADED`` 而不是"看 relocations 是否大于 0")。 - 猜出来的分支在测试里只能靠改内部计数复现,读代码的人也得跟着一起猜。 - """ - # 全局兜底优先:谁都得能被中止 - if event in GLOBAL: - return GLOBAL[event] - - if state is State.UNSCREW and event is Event.UNSCREW_DONE: - return State.RESET if ctx.is_last_hole else State.NEXT_HOLE - - try: - return TRANSITIONS[(state, event)] - except KeyError: - raise FsmError(state, event, ctx) from None - - -class FsmError(RuntimeError): - """非法转移。附带当前状态与事件,方便直接定位是哪一步没接上。""" - - def __init__(self, state: State, event: Event, ctx: Optional[GaugeContext] = None) -> None: - self.state = state - self.event = event - ctx = ctx or GaugeContext() - super().__init__( - f"通止规装配状态机:状态 {state}({STATE_DOC.get(state, '?')})" - f"不接受事件 {event.value}。当前孔 {ctx.hole_name()}," - f"已重放 {ctx.relocations} 次。" - "若是新增流程,先在 gauge_fsm.TRANSITIONS 里登记这条转移。" - ) - - -# ============================================================================= -# 状态机本体 -# ============================================================================= -@dataclass -class Step: - """一次转移的记录,用于日志与事后复盘。""" - - index: int - prev: State - event: Event - next: State - - def __str__(self) -> str: - return f"#{self.index} {self.prev} --{self.event.value}--> {self.next}" - - -class GaugeFsm: - """通止规装配状态机。 - - 用法:: - - fsm = GaugeFsm(GaugeContext(holes_total=2)) - fsm.handle(Event.BOOT_OK) # S00 -> S01 - print(fsm.state) # S01 - fsm.handle(Event.ABORT) # 任何状态都能中止 - """ - - def __init__(self, ctx: Optional[GaugeContext] = None, start: State = State.BOOT) -> None: - self.ctx = ctx or GaugeContext() - self.state = start - self.history: List[Step] = [] - - # -- 查询 --------------------------------------------------------------- - @property - def is_terminal(self) -> bool: - return self.state in TERMINAL - - @property - def ok(self) -> bool: - return self.state is State.DONE - - def can(self, event: Event) -> bool: - """这个事件在当前状态下合法吗(不改状态,给"要不要试"用)。""" - if event in GLOBAL: - return not self.is_terminal - try: - resolve_next(self.state, event, self.ctx) - except FsmError: - return False - return True - - # -- 推进 --------------------------------------------------------------- - def handle(self, event: Event) -> State: - """吃一个事件,返回新状态。非法转移抛 :class:`FsmError`。""" - if self.is_terminal: - raise FsmError(self.state, event, self.ctx) - prev = self.state - # 先算转移(非法转移在这里就抛,**不留副作用**)—— - # 顺序反过来的话,一次手误的 GAUGE_DROPPED 会白白吃掉一次重放预算, - # 报错信息还说"状态不对",而现场已经少了一次重试机会。 - nxt = resolve_next(prev, event, self.ctx) - - if event is Event.GAUGE_DROPPED: - self.ctx.relocations += 1 - if self.ctx.relocations > self.ctx.max_relocations: - # **超过上限不抛异常**:掉件 4 次不是"程序非法状态",是现场问题。 - # 报错文案要指出现场(夹持/螺纹),而不是指着转移表说这条边不存在。 - self.note( - f"通止规已掉 {self.ctx.relocations} 次(上限 " - f"{self.ctx.max_relocations}),不再自动重放,请检查夹持与螺纹" - ) - nxt = State.ABORT - - if nxt is State.NEXT_HOLE and prev is not State.NEXT_HOLE: - # 换孔动作:序号在**进入** S10 时推进;S10 完成就是新孔的 S06。 - self.ctx.hole_index = min(self.ctx.hole_index + 1, max(0, self.ctx.holes_total - 1)) - - self.state = nxt - self.history.append(Step(len(self.history) + 1, prev, event, nxt)) - return nxt - - def note(self, text: str) -> None: - """挂一条人工说明(比如"跳过 S03:D435 未标定"),随结果一起输出。""" - self.ctx.notes.append(text) - - -# ============================================================================= -# 判据(纯函数,被节点与测试共用) -# ============================================================================= -def points_stable(samples: List[Sequence[float]], tol: float, min_frames: int) -> bool: - """稳定判据(任意维):样本够多、且所有点到均值距离都 ≤ ``tol``。 - - 与 :func:`pixel_stable` 是同一套判据,只是不限定二维。为什么需要: - S05 的"画面稳了再拍"在仿真里用不了检测框(合成图过不了真机训练出来的 - 工件模型),于是改用**法兰位移**(mm)当特征 —— 判据本身一模一样, - 只是量纲从像素变成毫米,所以抽出来共用,而不是各写一份。 - """ - if len(samples) < max(2, int(min_frames)): - return False - dim = len(samples[0]) - means = [sum(float(s[i]) for s in samples) / len(samples) for i in range(dim)] - if any(len(s) != dim for s in samples): - return False - for s in samples: - if math.sqrt(sum((float(s[i]) - means[i]) ** 2 for i in range(dim))) > tol: - return False - return True - - -def pixel_stable(samples: List[Tuple[float, float]], tol_px: float, min_frames: int) -> bool: - """S05:像素稳定判据。 - - :param samples: 最近若干帧的 ``(u, v)`` 像素坐标。 - :param tol_px: 允许的抖动半径(像素)。 - :param min_frames: 至少要看多少帧才敢说"稳定"。 - :returns: 样本够多、且所有点到它们的均值的距离都 ≤ ``tol_px``。 - - 为什么不用"两帧之差":跟踪输出的抖动是**零均值**的,相邻两帧可能恰好 - 很近,于是"稳定"判据会在画面明明在晃的时候早早触发,接着拍出一张糊的 - 定位图 —— 表现为"孔位偶尔偏 1mm",随机且难复现。用"到均值的最远距离" - 才对得上"画面不动"这个物理事实。 - """ - return points_stable(samples, tol_px, min_frames) - - -def tangential_jump( - shear_now: Tuple[float, float], shear_ref: Tuple[float, float], delta: float -) -> bool: - """S07:切向力突变判据 —— **两个通道都看,任一超阈值即算**。 - - 用户明确过:切向力到底走 X 还是 Y 通道未确认。只监控一个通道的话, - 赌错了就是整段流程静默失效(下发正常、日志正常、就是停不住)。 - 两个都监控的代价只是可能更早停一点点,这个方向的错是安全的。 - - :param shear_now: 当前两路切向读数。 - :param shear_ref: 静止基线的两路切向读数。 - :param delta: 触发阈值(相对基线的增量)。 - """ - return any(abs(n - r) >= delta for n, r in zip(shear_now, shear_ref)) - - -def wrench_touch( - axial_now: float, axial_ref: float, delta: float -) -> bool: - """S07(**首选判据**):腕部 FT 的轴向力相对基线突变 → 判为接触到工件。 - - 为什么这是首选、而不是手指触觉(2026-09-24 用一整轮排查换来的结论): - - 通止规是**靠夹持摩擦抱住**的工具。轴向力要传到手指,必须过"指垫↔规"的 - 摩擦面,而摩擦能传的上限是 µ·N: - 夹持段 µ=0.25、实测握力 N≈46N → 单指 ~11.5N、两指 ~23N - 可台肩落面那一下,接触刚度 5e4 N/m 意味着**过压 0.5mm 就是 25N** —— - 一步的步进量就足以让规在爪里打滑。**于是手指触觉物理上读不到那个力** - (读数停在 0,而它是对的),阈值怎么调都不对:调小被噪声骗,调大永远 - 达不到。当时确实是照"阈值调高了"去改的,白费一轮。 - - 腕部 FT 在这条力路的**上游**:工件→规→夹爪→法兰→腕部关节。 - 工具打不打滑都要经过它,所以它测得到真实的轴向力。 - - 判据用**绝对增量**而不是带符号压入量,理由与 ``tangential_jump`` 相同: - 传感器坐标系的正负号方向取决于安装,赌错了就是"整段流程静默失效" - (下发正常、日志正常、就是停不住)。取绝对值只会更早停一点点, - 这个方向的错是安全的 —— 与 ``stage2_locate_node._contact_detected`` - 的既有口径也一致(那里也是 ``abs(fz - baseline)``)。 - - :param axial_now: 当前轴向力读数 [N]。 - :param axial_ref: 静止(还没碰工件)时的轴向基线 [N]。 - :param delta: 触发阈值(相对基线的增量)[N]。 - """ - return abs(float(axial_now) - float(axial_ref)) >= float(delta) - - -#: S07 腕部 FT 判据需要多"新"的数据才算活着 [s]。 -#: 真机 broadcaster 与仿真传感器都是 100Hz,0.5s 相当于容许掉 50 帧 —— -#: 只用来排除"根本没在发",不是用来做实时性判据的。 -WRENCH_MAX_AGE_S: float = 0.5 - - -def wrench_live(age_s: Optional[float]) -> bool: - """腕部 FT 是否有活的数据(够新)。 - - ``age_s`` 为 None 表示**一帧都没收到过**(话题名写错、传感器没起来)。 - 注意"收到过但数值为 0"**是活的** —— 静止时轴向力本来就接近 0。 - 这个区别很关键:拿数值大小判活,会让"安静的传感器"被误判成掉线, - 而那正是 2026-09-24 在触觉上踩过的同一个坑(见 stage3 的 ``live_tactile``)。 - """ - return age_s is not None and float(age_s) <= WRENCH_MAX_AGE_S - - -#: 判定"六个分量全为 0"用的容差 [N]/[Nm]。真机 FT 的噪声量级是 1e-2~1e-1, -#: 所以 1e-6 足够区分"真的是 0(数据没出来)"与"很小但活的读数"。 -WRENCH_ZERO_EPS: float = 1.0e-6 - - -def wrench_all_zero( - fx: float, - fy: float, - fz: float, - tx: float, - ty: float, - tz: float, - eps: float = WRENCH_ZERO_EPS, -) -> bool: - """六个分量**同时**为 0(容差 ``eps``)⇒ 这是"数据没出来"的指纹,不是"安静"。 - - 与 :func:`wrench_live` 的分工(两个都要有,缺一不可): - - * ``wrench_live`` 只看"够不够新",**故意不看数值** —— 静止时轴向力本来就接近 0, - 拿数值判活会把"安静的传感器"误判成掉线(2026-09-24 触觉上踩过)。 - * 但一个**带着负载**的腕部 FT 不可能六个分量**同时**恰好为 0:重力、装配预紧、 - 传感器零漂至少让某个分量不为 0。所以"全零"是另一种失效 —— **数据源没出数** - (话题名对、但内容是空的;或 RDK 侧没启用该传感)。 - - 2026-10-08 真机实测:应用在用的 ``//ft_sensor_wrench`` 就是恒 (0,0,0), - 于是"``abs(fz−基线)>2.5N`` 判接触"的兜底**永远触发不了** —— 而日志里一切正常 - (话题收得到、回调在跑、``wrench_live`` 报"活"),属于最危险的静默失效。 - 改用 ``//external_wrench_in_tcp`` 后有数(≈负载 54N)即可恢复兜底。 - - 所以:``wrench_live`` 通过 **且** ``wrench_all_zero`` 为真 ⇒ 判为"数据源是空的"。 - """ - return all(abs(float(v)) <= eps for v in (fx, fy, fz, tx, ty, tz)) - - -#: S07 单步下压给 ``_goto`` 的到位容差 = 步长的这个比例。 -#: **必须 < 1,而且只能小不能大**:``_goto`` 的语义是"已经落在容差里就直接返回、 -#: 一点都不动"。容差 ≥ 步长时,每一次"往下走 0.5mm"的请求都被判成"已在容差内" -#: → 臂原地不动、循环条件永远成立 → **静默自旋**(日志停在基线那行、CPU 跑满、 -#: 既不报错也不前进)。2026-09-24 在仿真里踩到过一次,真机同参数同结果。 -DESCEND_TOL_FRAC: float = 0.4 -#: 容差下限 [m]:再小就追不动了(伺服死区/噪声会让臂永远"差一点点")。 -DESCEND_TOL_FLOOR_M: float = 2.0e-5 -#: 判定"这一步真的往下走了"的位移下限,占步长的比例。 -DESCEND_PROGRESS_FRAC: float = 0.2 -#: 卸载回退的到位容差占**回退量**的比例(见 :func:`relief_tol_m`)。 -RELIEF_TOL_FRAC: float = 0.2 -#: 允许连续多少步毫无位移后中止(防"没接触也一直转"的静默自旋)。 -DESCEND_STALL_STEPS: int = 5 - - -def relief_tol_m(dz_m: float) -> float: - """S07 判到接触后**卸载回退**该给 ``_goto`` 的到位容差 [m]。 - - 为什么单独立一条(2026-09-24 实测踩到,代价是一轮假通过): - - 回退量 0.50mm,而 ``_goto`` 的容差被写死成 0.0005 m(**同量级**)。 - 目标 z 是 ``Tee[2,3] + 0.0005``,浮点回减后 ``dist`` 会比 0.0005 略小 - ⇒ ``_goto`` 的入口判据 ``dist < tol_m`` 当场成立 ⇒ **一步没走就返回 True**。 - 于是"卸载"变成空操作,而残余力判据比的是"回退前 vs 回退后"两个**相同**的 - 读数 ⇒ 报"残余 0.0N,已放干净"(假通过)。 - 接着 S08 带着 ~70N 的轴向力去转(夹持摩擦上限 µ·N 两指合计 ≈73N) - → 掉件(E1),而 E1 的日志只说"规掉了"。 - - 返回 ``回退量的 20%``,再夹到 ``[DESCEND_TOL_FLOOR_M, 回退量的一半]`` —— - 后者保证**容差永远严格小于回退量**,`_goto` 不可能在入口就判"已到位"。 - """ - dz = float(dz_m) - if dz <= 0.0: - raise ValueError(f"卸载回退量必须为正,收到 {dz_m}") - return min(max(DESCEND_TOL_FLOOR_M, dz * RELIEF_TOL_FRAC), dz * 0.5) - - -def descend_tol_m(step_m: float) -> float: - """S07 单步下压该给 ``_goto`` 的到位容差 [m]。 - - 取步长的 40%,但不超过步长的一半、不低于 ``DESCEND_TOL_FLOOR_M``。 - 这样"走满这一步"才是循环推进的**唯一**出口 —— 容差比步长小,`_goto` - 就不可能因为"已经在容差内"而空转(那正是上面注释里那个静默自旋)。 - """ - if step_m <= 0.0: - raise ValueError(f"下压步长必须为正,收到 {step_m}") - return max(step_m * DESCEND_TOL_FRAC, min(DESCEND_TOL_FLOOR_M, step_m * 0.5)) - - -def descend_iter_budget(max_depth_m: float, step_m: float, slack: int = 8) -> int: - """S07 下压循环的**硬**迭代上限:够走完整个下探深度,再多给几步余量。 - - 为什么要有硬上限:循环条件写的是"实测高度还没到最深",一旦臂因为死区、 - 被夹住、孔位偏了而**实际没动**,这个条件就恒真。上限不是用来"早点失败" - 的(那是 ``contact_max_depth_mm`` 的活),而是**兜住静默自旋**: - 宁可报"S07 没走完也没接触",也不能让节点无声无息地空转到天亮。 - """ - if step_m <= 0.0: - raise ValueError(f"下压步长必须为正,收到 {step_m}") - if max_depth_m <= 0.0: - return 0 - return int(math.ceil(max_depth_m / step_m)) + max(1, int(slack)) - - -def descend_progress(z_prev: float, z_now: float, step_m: float) -> bool: - """这一步是否真的往下走了(法兰 z 向下为负)。 - - 判据是**实测**位移,不是"指令发出去了":``_goto`` 因为容差而空转、 - 或步长被控制器死区吞掉时,实测位移≈0 而指令日志一切正常。 - """ - return (float(z_prev) - float(z_now)) >= step_m * DESCEND_PROGRESS_FRAC - - -#: 通止规**台肩**(COLLAR)在规尖上方的距离 [m]。 -#: 取自 devices/sim/gazebo/models/gauge/model.sdf:通端 φ6×30mm,台肩在 30~33mm。 -#: 判"到底了"的那一下就是台肩落到工件上表面 —— 所以它决定了 S07 至少要下压 -#: 多少(见 descend_needed_m)。改规的模型时必须一起改这里,否则预算会算错。 -GAUGE_SHOULDER_ABOVE_TIP_M: float = 0.030 - - -def tool_clearance_m( - flange_z_m: float, - tool_tip_below_flange_m: float, - surface_z_m: float, -) -> float: - """工具尖端离工件上表面还有多高 [m]。**负 = 已经插进去了。** - - 为什么需要这个:流程里"悬停高度"是按**相机**定的,不是按**工具**定的。 - 腕部相机要看清楚孔,就得离工件面 ~0.17m;而工具(装在法兰下面)可能比 - 相机长得多。两者一冲突,就会出现下面这种极难查的局面: - - 悬停高度 0.632(法兰)− 工具长 0.243 = 0.389 - 工件上表面 0.412 - → 工具尖端已经插进工件 23mm - - 此时"悬停"这一步本身已经把工具捅进孔里了,S07 再往下压就一路压到顶、 - 等不到"台肩落面"那一下,最后报"下探 N mm 都没触发接触判据"然后 ABORT。 - 现象看起来像力阈值标错了,实际是**几何**错了。 - - 真机同参数同结果(不是仿真特有的):只要悬停高度是按相机定的、而工具 - 比相机长,就会这样。所以这个值要在**启动时**算出来并报出来。 - """ - tip_z = float(flange_z_m) - float(tool_tip_below_flange_m) - return tip_z - float(surface_z_m) - - -def hover_z_for_tool_clearance( - surface_z_m: float, - tool_tip_below_flange_m: float, - clearance_m: float, -) -> float: - """让工具尖端停在工件面上方 ``clearance_m`` 所需的**法兰**高度 [m]。 - - 就是 ``tool_clearance_m`` 的逆运算 —— 写成一个函数是为了让"该用多高"这个 - 结论只有一个来源(下面 ``hover_z_guard`` 与调用方都用它,不各推一遍)。 - """ - return float(surface_z_m) + float(tool_tip_below_flange_m) + float(clearance_m) - - -def hover_z_guard( - hover_z_m: float, - surface_z_m: float, - tool_tip_below_flange_m: float, - want_clearance_m: float, -) -> Tuple[float, str]: - """二阶段悬停高度的自检 → ``(该用的悬停高度, 说明; 不用改时说明是空串)``。 - - **为什么必须有这条**(2026-09-24 实测栽在这上面): - - 悬停高度是**按相机**定的(腕部相机要离工件面 ~0.17m 才看得清孔), - 而工具(夹爪 + 通止规)可能比相机长得多 —— 仿真里实测 - ``tool_tip_below_flange_m=0.245``,而悬停算的是 - ``0.412 + 0.17 + 0.05 = 0.632`` ⇒ 工具尖端在工件上表面**下面 25mm**。 - - 后果不在 S07(S07 有自己的几何自检),而在**更早的 S05**: - "悬停"这一步本身就把工具捅进工件里了,于是 S05 的横向对准等于 - 拿规尖去拨工件 —— 实测把工件从 x=0.520 拖到 0.4284(**92mm**)。 - 而真值孔位是按工件的**实测**位姿算的(``sim_live_pose``,这是对的), - 工件一走,孔位就跟着工具走 ⇒ 残差恒定在 13mm、迭代 9 次永不收敛 - (日志:``[fine 3..8] 残差=13.25/13.19/…/11.79mm``)。 - 现象看起来像"手眼标定坏了 / 检测不认孔"。 - - 真机同参数同结果:这不是仿真专有,只要"悬停按相机定、工具比相机长"就会这样。 - - 判据取"明显低于目标间隙"而不是"一毫米都不许低":配置的悬停与实测的 - 工件面 z 都有几毫米的不确定度,拿 0 当界会把正常配置判成错的。 - """ - clear_m = tool_clearance_m(hover_z_m, tool_tip_below_flange_m, surface_z_m) - if clear_m >= float(want_clearance_m) - 0.001: - return float(hover_z_m), "" - need_z = hover_z_for_tool_clearance(surface_z_m, tool_tip_below_flange_m, want_clearance_m) - why = ( - f"悬停高度会让工具尖端钻进工件:法兰 {float(hover_z_m):.4f} − 工具长 " - f"{float(tool_tip_below_flange_m) * 1000:.1f}mm = 尖端 " - f"{float(hover_z_m) - float(tool_tip_below_flange_m):.4f},工件上表面 " - f"{float(surface_z_m):.4f} → 尖端在面{'下' if clear_m < 0 else '上仅'} " - f"{abs(clear_m) * 1000:.1f}mm(要求 ≥ {float(want_clearance_m) * 1000:.1f}mm)。\n" - f" 悬停高度通常是按**相机**视距定的,而工具比相机长 —— 两者冲突时必须" - f"先保证不碰工件。\n" - f" 已按几何抬到 {need_z:.4f}(= {float(surface_z_m):.3f} 上表面 + " - f"{float(tool_tip_below_flange_m) * 1000:.0f}mm 工具 + " - f"{float(want_clearance_m) * 1000:.1f}mm 间隙)。\n" - f" 要固定这个值:改 site.yaml 的 robots[].servo.hole_hover_z_m = " - f"{need_z:.3f}(以及同组件的 ee_z_m ≥ 它 +0.05)。" - ) - return need_z, why - - -def resolve_hover_z( - hover_z_m: float, - surface_z_m: float, - tool_tip_below_flange_m: float, - want_clearance_m: float, - user_set: bool, -) -> Tuple[float, str]: - """返回 ``(要用的法兰悬停高, 拒绝原因)``。 - - 启动参数写了高度:不安全就拒绝,原因非空,高度原样返回,调用方不许改成别的数。 - 没写(用 site):沿用 :func:`hover_z_guard` 的几何抬高,拒绝原因留空。 - """ - fixed, why = hover_z_guard( - hover_z_m, surface_z_m, tool_tip_below_flange_m, want_clearance_m - ) - if not why: - return float(hover_z_m), "" - if not user_set: - return float(fixed), "" - clear_m = tool_clearance_m(hover_z_m, tool_tip_below_flange_m, surface_z_m) - return float(hover_z_m), ( - f"悬停高度会让工具尖端进入工件:法兰 {float(hover_z_m):.4f} − 工具长 " - f"{float(tool_tip_below_flange_m) * 1000:.1f}mm,工件面 {float(surface_z_m):.4f}," - f"间隙 {clear_m * 1000:.1f}mm,要求 ≥ {float(want_clearance_m) * 1000:.1f}mm。" - "这个值是启动参数指定的,不会改成别的高度。" - ) - - -#: S05 精对位时判"工件被工具推走"的两级阈值 [m]。 -# -# 为什么需要这条判据(2026-09-24 又栽了一次,见下面 drag_verdict 的说明): -# S05 的对准是"看着孔走"的闭环,而孔位是**工件上**的。工具一旦碰到工件, -# 闭环追的就不再是孔,而是"自己推着走的工件" —— 残差恒定(本轮 11mm)、 -# 迭代用满,日志报的是"检查手眼/相机安装",与真因(工具比相机长、 -# 悬停时已经插进工件)差着十万八千里。 -# 取 3mm:工件是刚体,两拍之间它整体挪动 >3mm 只可能是被推/被撞(正常加工 -# 过程里它一动不动)。同一对孔的两拍测量噪声在 0.2mm 量级,离阈值很远。 -SNAP_DRAG_TOL_M: float = 0.003 -#: 单拍就这么大 ⇒ 不必等第二拍确认(刚体不会自己"挪回去")。 -SNAP_DRAG_HARD_M: float = 0.006 - - -#: "已经到位"的容差:避免 ±1e-9 的浮点噪声变成"再转一整圈"。 -_RATCHET_FULL_TURN_EPS: float = 1e-9 - - -def ratchet_delta_rad(target_rad: float, q_now_rad: float, direction: int = 0) -> float: - """"目标角 − 当前角",折成**一次**能转到的增量 [rad]。 - - **为什么要有这个函数**(2026-09-24 实测:棘轮把整条流程 ABORT 在 S09 第一步): - - S08/S09 给棘轮的是**关节 7 的目标角(绝对值)**(``q[-1] ± step``), - 而棘轮此前把它当**增量**用。于是"关节在 +158.9°、目标 +338.9°"被算成 - "要转 338.9°"(实际增量只有 180°)⇒ 误判行程不够 ⇒ 让余量那一步算到 - 限位外面(``158.9 − 338.9 = −180°``,比 −175° 还低)⇒ 报 - "期望 −338.9°、实测 +26.0°,偏差过大" ⇒ ABORT。现场什么坏事都没发生。 - - 差值必须折一圈:目标常常**故意**超出限位(这正是要"让余量"的原因), - ``+338.9°`` 与 ``−21.1°`` 是同一个关节位置。 - - **为什么还要 direction**(2026-09-24 又一次实测:S08 第 3 轮 ABORT): - - 不给方向时这里取"最短的那条路",而名义步长**正好是 180°** 时, - 哪条路更短取决于 0.1° 级的读数差:调用方按自己读到的 ``q`` 算出目标 - ``−18.0°``,棘轮再用**稍晚一点**读到的 ``q=+162.1°`` 去算差值, - ``−180.1°`` 折一圈就成了 ``+179.9°`` —— 方向**翻了个个儿**。 - 于是棘轮朝螺纹的反方向走,接着贴限位、让余量、重试,净位移 0 ⇒ ABORT。 - - 棘轮的转向是**工艺意图**(S08 顺时针拧入、S09 逆时针拧出),不能交给 - "谁更短"这种数值巧合决定,所以由调用方明确给出 ``direction``。 - - 注:``direction=0``(默认)保留旧的"最短路径"语义,给"目标本来就明确 - 在某一侧"的调用方用;棘轮的四个原子步一律显式给方向。 - - :param target_rad: 目标角(绝对值,可以是限位外的角度)。 - :param q_now_rad: 当前关节角。 - :param direction: 想要的转向:``+1`` 正转、``-1`` 反转、``0`` 取最短路径。 - :returns: 增量 [rad]。``direction=0`` 时落在 ``(−π, π]``;给了方向时落在 - ``[0, 2π)``(正转)或 ``(−2π, 0]``(反转)——**一定**沿指定方向, - 且是能落到目标角的最小那一步。**同一个目标、同一个当前位置**只会有一个 - 增量 —— 棘轮的"让余量"与"重试"都按它算,两次不会互相矛盾。 - """ - base = float(target_rad) - float(q_now_rad) - two_pi = 2.0 * math.pi - if direction == 0: - return math.remainder(base, two_pi) - # 先折到 [0, 2π),再按想要的转向取那一侧(与目标角差正好一整圈,是同一个位置)。 - pos = math.fmod(base, two_pi) - if pos < 0.0: - pos += two_pi - if pos >= two_pi - _RATCHET_FULL_TURN_EPS: - pos = 0.0 # 已经(几乎)在目标上:不要为了凑方向白转一整圈 - if direction > 0: - return pos - return pos - two_pi if pos > 0.0 else 0.0 - - - -def drag_verdict( - mid_now: Tuple[float, float], - mid_prev: Optional[Tuple[float, float]], - mid_prev2: Optional[Tuple[float, float]] = None, - *, - tol_m: float = SNAP_DRAG_TOL_M, - hard_m: float = SNAP_DRAG_HARD_M, -) -> Tuple[bool, float]: - """两孔中点是否在两拍之间"整体挪动" → ``(是否判定为被推走, 本拍位移 m)``。 - - **为什么看"中点"而不是看目标孔**:目标孔是**追**的对象,工具一动它就该动 - (对准本意如此),看它分不出"正常对准"和"推着工件走"。而两孔**中点**在 - 对准过程中不该动 —— 它只有工件整体平移时才会动。所以中点位移干净地对应 - "工件被搬动了"。 - - **为什么看"两孔中点"而不是单孔**:单孔在相机里会因分辨率/遮挡抖动,且 - 目标孔本来就在被逼近;中点是两者的平均,噪声更小、语义更明确。 - - :param mid_now: 本拍两孔中点 (x, y)[m](基座系)。 - :param mid_prev: 上一拍中点;``None`` = 还没有上一拍(第一拍不判)。 - :param mid_prev2: 上上拍中点。用来确认"位移是持续的"(单拍可能是误检)。 - :returns: ``(判定, 本拍位移 m)``。 - """ - if mid_prev is None: - return False, 0.0 - dx = float(mid_now[0]) - float(mid_prev[0]) - dy = float(mid_now[1]) - float(mid_prev[1]) - d1 = math.hypot(dx, dy) - if d1 >= float(hard_m): - return True, d1 - if d1 < float(tol_m) or mid_prev2 is None: - return False, d1 - px = float(mid_prev[0]) - float(mid_prev2[0]) - py = float(mid_prev[1]) - float(mid_prev2[1]) - d2 = math.hypot(px, py) - # 第二拍确认:上一拍也挪了(≥ 阈值的一半),且方向一致(点积 > 0)。 - # 为什么允许方向只"大致一致":工件被推着走时前后两拍的推动量本来就不同 - # (工件一让开,工具就少推一点),拿夹角严格相等会漏判。 - if d2 >= float(tol_m) * 0.5 and (dx * px + dy * py) > 0.0: - return True, d1 - return False, d1 - - -def descend_needed_m( - flange_z_m: float, - tool_tip_below_flange_m: float, - surface_z_m: float, - tool_shoulder_above_tip_m: float, -) -> float: - """S07 要判"台肩落面",从当前法兰高度起还需要下压多少 [m]。 - - 判"到底了"的那一下不是工具尖端碰面,而是**台肩落到工件上表面**; - 台肩在工具尖端上方 ``tool_shoulder_above_tip_m``(规是通端长 30mm)。 - 所以需要的下压量 = 台肩到面的距离,而不是尖端到面的距离。 - - 返回值可能是负的(台肩已经在面以下)—— 那说明几何配错了,调用方应当 - 报错而不是"往下走一个负距离"。 - """ - shoulder_z = ( - float(flange_z_m) - - float(tool_tip_below_flange_m) - + float(tool_shoulder_above_tip_m) - ) - return shoulder_z - float(surface_z_m) - - -#: S07 下探预算相对"实际需要下压量"的余量系数。 -#: 预算是**兜底**用的(不是用来判成败的):真正让循环停下的是接触判据。 -#: 给 1.5 倍余量是为了容纳对位残差、板厚公差、台肩倒角还没完全落面等。 -DESCEND_BUDGET_FRAC: float = 1.5 -#: 下探预算的绝对下限 [m]:几何算出来很小(比如台肩已快贴面)时也要留够, -#: 否则一旦对位有点偏,"预算用完"会先于"判到接触"触发,报出来的原因是假的。 -DESCEND_BUDGET_FLOOR_M: float = 0.008 - - -def descend_budget_m(needed_m: float) -> float: - """由"实际需要下压多少"推出 S07 的下探预算 [m]。 - - 不要手工填这个数:填小了会在台肩落面**之前**就用完预算(报"下探 N mm - 都没触发接触判据",而真实原因只是预算不够);填大了会在判据失灵时压得 - 更深(更危险)。由几何推出来,两个毛病都没有。 - """ - return max(float(needed_m) * DESCEND_BUDGET_FRAC, DESCEND_BUDGET_FLOOR_M) - - -#: ``hole_entry_verdict`` 的结论。 -ENTRY_OK = "ok" # 接触深度与几何预期相符 ⇒ 规是从孔里下去的、台肩落面 -ENTRY_HIGH = "high" # 早早就接触 ⇒ 尖端顶在工件**上表面**上,根本没进孔 - -#: 判"没进孔"的下压深度比例阈值。 -#: 实测两个锚点(2026-09-28,仿真): -#: · 正常入孔:下压 28.6mm / 需要 31.9mm ⇒ 0.90 -#: · 顶在平面上:下压 0.90mm / 需要 31.9mm ⇒ 0.03 -#: 两者差着一个台肩高度(30mm),取 0.5 时两侧余量都很大(正常那侧要掉到 -#: 一半才会误判)。**不要**为了"更灵敏"把它往 0.9 推 —— 台肩倒角没完全落面、 -#: 板厚公差都会让正常值在 0.85~0.95 之间晃。 -HOLE_ENTRY_MIN_RATIO: float = 0.5 - - -def hole_entry_verdict( - descended_m: float, - needed_m: float, - *, - min_ratio: float = HOLE_ENTRY_MIN_RATIO, -) -> str: - """S07 判到接触的那一刻:规是**进了孔**、还是**顶在工件上表面**。 - - 为什么需要它(2026-09-28 实测,同一命令三跑里坏一跑:DONE / ABORT / DONE): - 工件在 S08/S09/S10 阶段会被工具推走(仿真里实测被推 20~52mm)。而 k2 的 - 孔位是 **S05 一次性定下**的(``_step_hover_k`` 取 ``_hole_xy``),工件一动 - 它就失效。于是规落在孔**旁边的平面**上,只下压「悬停间隙」那么点就判到接触。 - - 不拦的代价,实测完整发生过一次: - S08 干转 5 轮(切向增量 0.0、法向增量 ±0.0,**一点没进给**)→ 第 6 轮憋住 → - 报出来的是「转轴偏差 7.6° 超过阈值 —— 关节7 轴与工具 Z 不共线, - 先确认工具系是否垂直向下、有没有装转接件」。 - - **那句话会把所有人引到错误方向**:真因既不是工具系也不是转接件,是孔位失效。 - 而且为这句误导,白烧了 5 轮无效拧入(≈30 秒)和一次憋劲(有把规顶掉的风险)。 - - 为什么比 ``needed_m`` 而不是比"尖端离面高度":正常入孔时接触发生在**台肩落面** - 那一刻 ≈ ``needed_m``;顶在平面上时接触发生在**尖端刚碰到面**那一刻,而台肩还在 - 尖端上方 30mm。两者差着一个台肩高度,所以用比例判最稳(见上面两个实测锚点)。 - - 纯函数(R5.1):判错两个方向都贵 —— 把正常的判成"没进孔"会白扔一整个孔; - 把"没进孔"判成正常,就是上面那 30 秒 + 一次误导。 - - ``needed_m <= 0`` 时**不判**(几何本身已经错了,上面那条自检会报), - 返回 ``ENTRY_OK`` 不在这里抢着报第二个错。 - """ - if needed_m <= 0.0: - return ENTRY_OK - if float(descended_m) < float(needed_m) * float(min_ratio): - return ENTRY_HIGH - return ENTRY_OK - - -def screw_stop(normal_delta: float, shear_max: float, normal_th: float, shear_th: float) -> bool: - """S08:旋转装配的停止判据 —— **切向力>阈值 且 法向力突增**。 - - 注意是"且":只看切向力,规刚接触螺纹时会误停;只看法向力,规顶到孔底 - 时会误停。两者同时出现才说明"螺纹咬住了",这是拧入到位的特征。 - """ - return shear_max > shear_th and normal_delta > normal_th - - -#: S08 的四个原子步,顺序即执行顺序。 -#: **故意不封装成一个"拧螺丝"复合动作**:中途掉件(E1)时,只有每一步都能 -#: 单独调用、单独判断,才可能从任意一步精确恢复,而不是从头再来。 -RATCHET_STEPS: Tuple[str, ...] = ( - "rotate_slow", # 工具系顺时针慢转 step_deg(拧入,带着规一起转) - "release", # 松爪(规留在孔里) - "rotate_back", # 快回转 step_deg(空手回来) - "regrip", # 夹紧 -) - - -def ratchet_cycles(total_deg: float, step_deg: float) -> int: - """要拧 ``total_deg`` 需要多少轮棘轮。向上取整,``step_deg<=0`` 报错。""" - if step_deg <= 0.0: - raise ValueError(f"单次转角必须为正,收到 {step_deg}") - if total_deg <= 0.0: - return 0 - return int(math.ceil(total_deg / step_deg)) - - -@dataclass(frozen=True) -class RatchetTravel: - """棘轮步长与关节行程的**可用性核算**(S08 开头自检,别等到第 3 轮才炸)。""" - - ok: bool - step_deg: float # 配置的一步转角 - travel_deg: float # 关节行程(上限 − 下限) - need_deg: float # 一步棘轮真正需要的行程 - max_step_deg: float # 行程允许的最大步长 - why: str # 不 ok 时给人看的说明(ok 时为空串) - - -def ratchet_travel_ok( - step_deg: float, limits_rad: Optional[Tuple[float, float]], margin_deg: float -) -> RatchetTravel: - """一步棘轮 ``step_deg`` 放得进关节行程吗? - - **为什么需要**:2026-09-24 实测,``screw_step_deg=180`` 配 Rizon4 的 - 关节 7(±175°,行程 350°)在第 3 轮 ABORT —— 慢转那一步要转 180°、 - 回转那一步还要 180°,两次加起来 360° > 350°,关节**必然**有一头贴限位; - 更糟的是"让余量"也腾不出地方(要腾就得往反向再让一整步,还是 360°)。 - 日志里那一长串"贴限位 → 让余量 → 还是贴限位"就是这么来的。 - - 判据取 ``2×step + 2×margin ≤ 行程``: - - 2×step:棘轮一个来回(慢转 + 回转)要的行程; - - 2×margin:两头都要留余量 —— 贴死限位再让余量时**一点空间都没有**, - 而实测每轮回转还会比指令少走 4~5°(速度/加减速限制), - 这点亏欠要靠余量吃,否则 7~8 轮后累计偏出限位、再也转不回来。 - - :param limits_rad: ``(lower, upper)`` [rad];``None`` = 拿不到限位,放行 - (返回 ``ok=True``,理由写清楚:真机靠驱动器报 JOINT_LIMIT 兜底)。 - """ - need = 2.0 * float(step_deg) + 2.0 * float(margin_deg) - if limits_rad is None: - return RatchetTravel( - ok=True, step_deg=float(step_deg), travel_deg=float("inf"), - need_deg=need, max_step_deg=float("inf"), - why="", - ) - travel = math.degrees(float(limits_rad[1]) - float(limits_rad[0])) - max_step = 0.5 * (travel - 2.0 * float(margin_deg)) - if need <= travel: - return RatchetTravel( - ok=True, step_deg=float(step_deg), travel_deg=travel, - need_deg=need, max_step_deg=max_step, why="", - ) - # 给个能直接照着改的步长:往整十度取整(现场习惯填 120/150/180), - # 但不许把步长压到 30° 以下 —— 那样拧进/拧出的轮数会多到失控。 - suggest = max(30.0, math.floor(max_step / 10.0) * 10.0) - why = ( - f"棘轮一步 {step_deg:.0f}° 放不进关节 7 的行程:一步棘轮要 " - f"2×{step_deg:.0f}° + 2×{margin_deg:.0f}°(余量) = {need:.0f}°," - f"而行程只有 {travel:.0f}°(上限 {math.degrees(limits_rad[1]):.0f}° − " - f"下限 {math.degrees(limits_rad[0]):.0f}°)。\n" - f" 改法:site.yaml 的 gauge_assembly.screw_step_deg 改到 " - f"{max_step:.0f}° 以内(例如 {suggest:.0f}°),并保证 " - f"screw_max_cycles × screw_step_deg 仍是 **360° 的整数倍**(" - f"累计必须转整数圈,否则规停在螺纹中间、S09 也就少拧出几分之一圈)。" - ) - return RatchetTravel( - ok=False, step_deg=float(step_deg), travel_deg=travel, - need_deg=need, max_step_deg=max_step, why=why, - ) - - -#: ``rotation_verdict`` 的结论。 -ROT_OK = "ok" -ROT_LIMIT = "limit" # 转了一部分、方向对、但没走完 ⇒ 最可能是贴到关节限位 -ROT_AXIS = "axis" # 转轴与工具 Z 不共线 ⇒ 以「度」为单位的一切动作都不成立 -ROT_SHORT = "short" # 其它偏差(方向不对/过冲)⇒ 真有问题,该停 - - -def rotation_verdict( - delta_deg: float, - got_deg: float, - mis_deg: float, - tol_deg: float, -) -> str: - """绕工具 Z 转 ``delta_deg``、实测转 ``got_deg`` 的验收判据。 - - **纯函数**:这条判据 2026-09-24 把整条 S09 判死过一次 - ("期望 +180.0°、实测 +16.4°,偏差过大" → ABORT),而真因只是 - **关节7 的行程被前面的棘轮回转顶到了上限**(±175°,而棘轮一步就要 180°)。 - 判错两个方向都贵: - * 把"贴限位"判成"short" ⇒ 白扔一整轮(还可能把规撞歪); - * 把"真有问题"判成"limit" ⇒ 该停的没停,继续拧。 - - 还有一条**曾经漏判**的:只比绝对值时,"让它 +180、它 -170"会算成 - 10° 误差、落在 10% 容差里 ⇒ 判成功,而实际上一个孔都没拧。所以方向必须比。 - 所以它必须能脱离节点被钉住。 - """ - if abs(got_deg) < 3.0 and abs(delta_deg) > 10.0: - return ROT_LIMIT # 几乎没动:与下面的"只走了一部分"同因不同余量 - if mis_deg > tol_deg: - return ROT_AXIS - if abs(got_deg) >= 3.0 and abs(delta_deg) >= 3.0 and got_deg * delta_deg < 0: - # 方向反了。这条以前**漏判**:老判据只比绝对值 - # (``abs(abs(got) - abs(delta))``),所以"让它 +180、它 -170"会算 10° 误差 - # 落在 10% 容差里 → 判成功,而实际上一个孔都没拧。 - return ROT_SHORT - slack = max(tol_deg, 0.1 * abs(delta_deg)) - short = abs(delta_deg) - abs(got_deg) - if short > slack: - return ROT_LIMIT # 方向对、只是没走完 ⇒ 被硬止点截住 - if short < -slack: - return ROT_SHORT # 过冲:转多了,同样不该当成到位 - return ROT_OK - - -def is_joint_limit_error(text: str) -> bool: - """S01:把驱动/规划报的字符串认成"撞到关节极限"。 - - 认得出的理由:这一条在真机上不是异常而是**预期结果**(用户要求"转到不 - 触发关节极限的极限角",那就一定会在某个角度贴住)。贴住时报 JOINT_LIMIT - 继续流程;认不出来时按普通失败处理(更保守),但要把原文打印出来, - 否则下次还得猜。 - """ - low = (text or "").lower() - return any( - key in low - for key in ( - "joint limit", - "joint_limit", - "超出关节", - "关节极限", - "限位", - "out of range", - "position limit", - "exceed", - ) - ) - - -# ============================================================================= -# 给人看的说明(文档 / 日志共用,避免两处各写一份,规则 M2) -# ============================================================================= -STATE_DOC: Dict[State, str] = { - State.BOOT: "各服务自检(伺服/相机/夹爪/触觉图传/推理预热)", - State.HOME_EXTREME: "回 home + 按工具系逆时针转到极限角", - State.GRIP_CHECK: "夹持确认(预留,当前跳过)", - State.COARSE: "手外 D435 粗定位(S04 的兜底)", - State.TRACK: "腕部 D405 跟踪 k0", - State.SNAP: "像素稳定后拍照定位 k1/k2 并记位姿", - State.HOVER_K: "到当前孔正悬停", - State.CONTACT: "柔顺接触(切向力突变即停)", - State.SCREW_IN: "旋转装配循环(棘轮式拧入)", - State.UNSCREW: "反向拧出", - State.NEXT_HOLE: "换到下一个孔(回 S05 记录的位姿)", - State.RESET: "复位退出", - State.DONE: "正常结束", - State.ABORT: "中止(已退到安全高度)", -} - -EVENT_DOC: Dict[Event, str] = { - Event.BOOT_OK: "全部服务就绪", - Event.BOOT_FAIL: "有服务不就绪", - Event.POSE_OK: "位姿就绪", - Event.JOINT_LIMIT: "已贴住关节极限", - Event.GRIP_PASS: "确认夹着通止规", - Event.GRIP_FAIL: "没夹住/判定不可信", - Event.GRIP_SKIPPED: "跳过夹持确认", - Event.COARSE_OK: "粗定位出坐标", - Event.COARSE_FAIL: "粗定位失败(回跟踪兜底)", - Event.TRACK_LOCKED: "跟踪锁定 k0", - Event.TRACK_LOST: "跟踪丢失超时", - Event.SNAP_OK: "定位到 k1/k2", - Event.SNAP_UNSTABLE: "画面还在动", - Event.ALIGN_OK: "对位在容差内", - Event.ALIGN_OUT: "对位超差", - Event.CONTACT_OK: "已接触工件面", - Event.FORCE_OVER_LIMIT: "力超安全上限", - Event.HOLE_LOST: "孔位失效(规没进孔)", - Event.SCREW_DONE: "达到目标圈数", - Event.SCREW_STOP: "力判据满足(咬住螺纹)", - Event.GAUGE_DROPPED: "通止规掉了", - Event.UNSCREW_DONE: "已拧出", - Event.RELOADED: "人工放好并按 R", - Event.TIMEOUT: "阶段超时", - Event.ABORT: "中止", -} diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/gauge_gripper.py b/install/arm_application/lib/python3.11/site-packages/arm_application/gauge_gripper.py deleted file mode 100644 index 116875c..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/gauge_gripper.py +++ /dev/null @@ -1,228 +0,0 @@ -"""夹爪客户端:把"真机今天的接口"和"框架契约里的接口"收敛到一个出入口。 - -为什么要这一层(这不是多余抽象) --------------------------------- -现场查证(2026-09-24)发现**同一个服务名后面挂着两种类型**: - -=============== ========================== ================================ -服务 A:真机今天跑的 B:框架契约 / 仿真 -=============== ========================== ================================ -``/gripper/open`` ``std_srvs/Trigger`` ``arm_msgs/srv/GripperExecute`` -``/gripper/close`` ``std_srvs/Trigger`` ``arm_msgs/srv/GripperExecute`` -状态 ``/gripper/states`` ``/gripper/status`` - (Float32MultiArray,5 元) (arm_msgs/GripperStatus) -=============== ========================== ================================ - -A 来自 ``arm_application/dh_pgea_node.py``(真机在跑的那个节点,grip_state 直接 -带"咬住/掉落");B 来自 ``devices/grippers/dh_pgea/manifest.yaml`` 声明的 -``arm_driver_dh_gripper`` —— **那个包还不存在**(``src/`` 下没有),目前只有 -仿真适配器实现了它。 - -于是有两个错法,都得避免: - -* 只按契约(B)写:真机上服务类型对不上,装配流程一步都走不了, - 而且报错会像是"服务没起"(实际起了,只是类型不同); -* 只按真机(A)写:仿真跑不了,而且把"临时接口"固化成事实(规则 M2)。 - -所以:**运行时看服务类型自己选**(:func:`pick_backend`),装配节点只依赖 -:class:`GripperClient` 的 ``open/close/wait/is_gripped`` 四个方法。 -等 ``arm_driver_dh_gripper`` 落地后,把 ``gauge_assembly.gripper_backend`` -改回 ``auto`` 即可自动切过去,应用层不用改一行。 -""" - -from __future__ import annotations - -from dataclasses import dataclass -from typing import Dict, List, Mapping, Optional, Sequence - -#: 契约后端用到的服务名(``arm_msgs/srv/GripperExecute``)。 -CONTRACT_TYPE = "arm_msgs/srv/GripperExecute" -#: 真机今天用的后端(``std_srvs/srv/Trigger``)。 -LEGACY_TYPE = "std_srvs/srv/Trigger" - -CONTRACT_OPEN = "/gripper/open" -CONTRACT_CLOSE = "/gripper/close" -CONTRACT_STATUS_TOPIC = "/gripper/status" -LEGACY_STATUS_TOPIC = "/gripper/states" - -#: DH 状态字(与 ``arm_msgs/GripperStatus.msg`` 里的注释一致)。 -GRIP_STATE_MOVING = 0 -GRIP_STATE_REACHED = 1 -GRIP_STATE_CAUGHT = 2 -GRIP_STATE_DROPPED = 3 -GRIP_STATE_NAME = { - GRIP_STATE_MOVING: "运动中", - GRIP_STATE_REACHED: "到位", - GRIP_STATE_CAUGHT: "咬住物体", - GRIP_STATE_DROPPED: "物体掉落", -} - -BACKENDS = ("contract", "legacy") - - -class GripperInterfaceError(RuntimeError): - """夹爪接口无法确定。消息里必须写清"现在是什么状态、怎么修"。""" - - -@dataclass(frozen=True) -class BackendChoice: - """选择结果。""" - - backend: str - """``contract`` 或 ``legacy``。""" - - reason: str - """为什么这么选 —— 要能直接打进启动日志。""" - - status_topic: str - """该后端下状态从哪个话题读。""" - - -def pick_backend( - services: Mapping[str, Sequence[str]], prefer: str = "auto" -) -> BackendChoice: - """按**实际服务类型**决定用哪种夹爪接口。 - - :param services: ``{服务名: [类型, ...]}``,直接来自 - ``Node.get_service_names_and_types()``。 - :param prefer: ``auto`` / ``contract`` / ``legacy``。 - 非 auto 时若实际类型与之不符,**不静默降级**,而是报错 —— - 现场明确指定了后端却跑在另一个上,是最难查的一类"改了没生效"。 - :raises GripperInterfaceError: 认不出来、两种都有、或指定的后端对不上。 - - 用类型而不是名字判断,是因为两种后端的**服务名完全一样**(都是 - ``/gripper/open``):只看名字必然选不出来,而"随便选一个"的后果是 - 调用一个类型不匹配的服务,报出来的错与真实原因无关(规则 M1)。 - """ - if prefer not in ("auto",) + BACKENDS: - raise GripperInterfaceError( - f"gripper_backend 只能是 auto / {' / '.join(BACKENDS)},收到 {prefer!r}" - ) - - open_types = list(services.get(CONTRACT_OPEN, ())) - close_types = list(services.get(CONTRACT_CLOSE, ())) - has_contract = CONTRACT_TYPE in open_types and CONTRACT_TYPE in close_types - has_legacy = LEGACY_TYPE in open_types and LEGACY_TYPE in close_types - - if prefer == "contract" and not has_contract: - raise GripperInterfaceError( - f"配置要求 contract 后端,但 {CONTRACT_OPEN} 的类型是 " - f"{open_types or '(服务不存在)'},不是 {CONTRACT_TYPE}。\n" - " 怎么修:① 起仿真(它有契约服务)或等 arm_driver_dh_gripper 落地;" - "② 改用 gauge_assembly.gripper_backend: legacy(真机今天的接口);" - "③ 改回 auto 让本函数自己选" - ) - if prefer == "legacy" and not has_legacy: - raise GripperInterfaceError( - f"配置要求 legacy 后端,但 {CONTRACT_OPEN} 的类型是 " - f"{open_types or '(服务不存在)'},不是 {LEGACY_TYPE}。\n" - " 怎么修:确认真机侧起的是 arm_application 的 dh_pgea 节点" - "(bash scripts/run_gripper.sh --arm 89)" - ) - - if has_contract and has_legacy: - # 同名服务两种类型同时在线:ROS 2 允许,但调用方只能撞运气。 - raise GripperInterfaceError( - f"{CONTRACT_OPEN} 同时存在两种类型:{open_types}。" - "是仿真适配器和真机节点同时起着(或旧的没停干净)。\n" - " 怎么修:只留一个 —— 仿真用 scripts/stop_sim_gz.sh 停干净," - "真机 pkill -f dh_pgea" - ) - - if prefer == "auto": - if has_contract: - return BackendChoice("contract", f"{CONTRACT_OPEN} 是 {CONTRACT_TYPE}", CONTRACT_STATUS_TOPIC) - if has_legacy: - return BackendChoice( - "legacy", - f"{CONTRACT_OPEN} 是 {LEGACY_TYPE}(真机 dh_pgea 节点;" - "契约驱动 arm_driver_dh_gripper 还没落地)", - LEGACY_STATUS_TOPIC, - ) - raise GripperInterfaceError(_unrecognised_msg(services, open_types)) - - if prefer == "contract": - return BackendChoice("contract", "配置指定 contract", CONTRACT_STATUS_TOPIC) - return BackendChoice("legacy", "配置指定 legacy", LEGACY_STATUS_TOPIC) - - -def _unrecognised_msg( - services: Mapping[str, Sequence[str]], open_types: Sequence[str] -) -> str: - """认不出来时,把"服务不在"和"服务在但类型不对"分开说。 - - 两者都报成"服务没起"是这个仓库反复踩过的坑:现场明明起了夹爪节点, - 却被提示"去起夹爪节点",然后开始怀疑人生(规则 M1、R5.4)。 - """ - missing = [n for n in (CONTRACT_OPEN, CONTRACT_CLOSE) if n not in services] - if missing: - return ( - f"{' / '.join(missing)} 不在,夹爪节点没起来。\n" - " 怎么修:真机 bash scripts/run_gripper.sh --arm 89;" - "仿真 bash scripts/run_sim_gz.sh(仿真自带契约服务)" - ) - return ( - f"{CONTRACT_OPEN} 在,但类型是 {list(open_types)}," - f"既不认识 {CONTRACT_TYPE}(契约)也不认识 {LEGACY_TYPE}(真机 dh_pgea)。\n" - " 常见原因:这个服务名被别的节点占用了。查是谁:\n" - " ros2 service list -t | grep gripper\n" - " 怎么修:停掉那个节点,或改 gauge_assembly.gripper_backend 明确指定后端" - ) - - -# ============================================================================= -# 状态解读(纯函数) -# ============================================================================= -def is_gripped_from_state(grip_state: int) -> Optional[bool]: - """DH 状态字 → "爪里有没有东西"。 - - ``2`` 咬住 / ``3`` 掉落 是明确的;``0`` 运动中、``1`` 到位(空爪)都要 - 小心:**"到位"不等于"夹住了"** —— 空爪闭合也会到位。所以只有 2/3 给 - 明确答案,其余返回 None("不知道"),由调用方决定要不要等。 - - 返回 None 而不是 False 很重要:把"不知道"当成"没夹住"会让 E1 掉件检测 - 在任何一次开合过程中误报。 - """ - if grip_state == GRIP_STATE_CAUGHT: - return True - if grip_state == GRIP_STATE_DROPPED: - return False - return None - - -def is_dropped_from_state(grip_state: int, was_gripped: bool) -> bool: - """E1 掉件判据:**曾经夹住过**,现在状态字变成"掉落"才是掉件。 - - 为什么要 ``was_gripped``:装配前爪里本来就是空的,那时 ``grip_state`` - 可能是 3(掉落/无物),直接判成掉件会让流程一开始就报 E1。 - """ - return was_gripped and grip_state == GRIP_STATE_DROPPED - - -def legacy_states_to_fields(data: Sequence[float]) -> Dict[str, float]: - """``/gripper/states`` 的 5 元素数组 → 具名字段。 - - 超出长度或为空时返回空字典(而不是抛异常):这是**状态话题**, - 收到畸形数据时应该让上层走"不知道"分支,而不是让整个节点崩掉。 - """ - if not data or len(data) < 5: - return {} - return { - "initialized": float(data[0]), - "grip_state": float(data[1]), - "position": float(data[2]), - "target_position": float(data[3]), - "target_force": float(data[4]), - } - - -def describe_backend_choice(choice: BackendChoice) -> List[str]: - """给启动日志用的多行说明(含"契约驱动还没落地"这类现场事实)。""" - lines = [f"夹爪后端 = {choice.backend}({choice.reason})"] - if choice.backend == "legacy": - lines.append( - " 注意:legacy 后端下 /gripper/open|close 是 std_srvs/Trigger," - "开口是 1000‰ 的百分比语义,不是毫米;装配流程只用它开合," - "不靠它量开口" - ) - return lines diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/gauge_kin.py b/install/arm_application/lib/python3.11/site-packages/arm_application/gauge_kin.py deleted file mode 100644 index d7b7855..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/gauge_kin.py +++ /dev/null @@ -1,244 +0,0 @@ -"""通止规装配用的小几何/解析工具 —— **纯函数**,可离线单测。 - -放这里的都是"算错了不会抛异常、只会让动作做错"的东西(规则 M3、R5.1): - -* ``parse_joint_limits``:从 URDF 文本里抠关节限位,给 S01 的"转到极限角" - 做软夹取。为什么不用 ``urdf_parser_py``:本机没装,多一个依赖就多一个 - "在真机上 import 失败"的机会;限位信息在 URDF 里是极规整的一行 - ````,用标准库解析足够,而且**可控**。 -* ``prewind``:算"逆时针转到不触发关节极限的极限角"到底能转多少度。 -* ``rotation_about_axis_deg``:事后验证那个动作**真的**是绕工具 Z 转的。 - 这条是 S01 的验收判据:不验证的话,"绕错轴"会表现成"转是转了,孔位 - 偏了",而且要到几个阶段之后才看出来。 -""" - -from __future__ import annotations - -import math -import re -import xml.etree.ElementTree as ET -from dataclasses import dataclass -from typing import Dict, Iterable, Optional, Sequence, Tuple - -import numpy as np - -#: 限位夹取时留的余量(度)。贴到限位上再下发,驱动器会因为"位置超出限位" -#: 直接拒绝整条轨迹 —— 那不是我们要的"极限角",是报错。 -DEFAULT_LIMIT_MARGIN_DEG = 3.0 - -_JOINT_RE = re.compile(r" Dict[str, Tuple[float, float]]: - """逐行兜底解析:记住最近一个 ````,紧跟的 ```` 归它。 - - 为什么要"记住"而不是"要求同一行":正常格式化的 URDF 里关节名和 limit - **不在同一行**,只认可同一行的兜底等于永远不生效(一个不会触发的兜底, - 和没有兜底是一样的)。属性顺序也按出现顺序读,不假设 lower 在 upper 前。 - """ - out: Dict[str, Tuple[float, float]] = {} - current: Optional[str] = None - for line in text.splitlines(): - m = _JOINT_RE.search(line) - if m: - current = m.group(1) - if current is None or " Dict[str, Tuple[float, float]]: - """从 URDF 文本里解析 ``关节名 -> (lower, upper)``(弧度)。 - - 关节名**原样保留**(含 ``Rizon4-063989_`` 前缀),调用方自己决定怎么匹配; - 这里不做"去前缀"之类的猜测 —— 猜测会在换臂时静默失配,然后限位夹取 - 悄悄失效(所有关节都"查不到限位",于是不夹取,于是贴着限位下发)。 - - 解析失败的关节直接不进结果集:``continuous`` 关节本来就没有限位, - 不该被当成"解析失败"。调用方用"查不到 = 不夹取"来处理。 - """ - out: Dict[str, Tuple[float, float]] = {} - if not urdf_xml or " Optional[Tuple[float, float]]: - """按名字给一串关节名找限位,**要求全部找到**才返回。 - - 只有一部分找到时返回 None 而不是"把找到的那部分用上":半套限位会让 - "能不能转到极限角"的结论变得不可解释(有些关节夹了、有些没夹), - 与其给出一个说不清的边界,不如明确地说"这次没有限位依据"。 - """ - found = [limits.get(n) for n in joint_names] - if any(v is None for v in found): - return None - return found[-1] # 最后一个 = 我们要绕的那根轴(调用方传的顺序有意义) - - -def prewind( - q_now_rad: float, - want_deg: float, - direction: int, - limits: Optional[Tuple[float, float]] = None, - margin_deg: float = DEFAULT_LIMIT_MARGIN_DEG, -) -> PrewindResult: - """算 S01 的预绕目标角。 - - :param q_now_rad: 当前关节角 [rad]。 - :param want_deg: 想转的角度(**正值**)[deg]。 - :param direction: ``+1`` = 绕 +Z 逆时针(右手定则);``-1`` = 顺时针。 - 符号到底对应现场的哪个方向,用真机确认一次后改 ``site.yaml`` 即可, - 不要靠"改代码里的负号"—— 那种改动没人 review 得到(规则 M2)。 - :param limits: ``(lower, upper)`` [rad]。给 None 时不做夹取。 - :param margin_deg: 距离限位保留的余量 [deg]。 - - :returns: :class:`PrewindResult`。**无论有没有限位,都返回目标角**, - 因为"贴到限位再继续转"在现场是预期行为(用户要求转到极限角), - 驱动器真拒绝时会由 :func:`arm_application.gauge_fsm.is_joint_limit_error` - 认成 JOINT_LIMIT 事件继续流程。 - - 为什么要在这里夹取(而不是直接下发、等驱动器报错): - 驱动器拒绝一条轨迹时,整个 action 失败,连带把已经转过的那部分**也** - 变成"没转过"的语义(角度实际到位了,但流程认为失败)。夹取到 - "限位 − 余量"能拿到一个明确成功、且确实接近极限的姿态度。 - """ - if want_deg <= 0.0: - raise ValueError(f"预绕角度必须为正,收到 {want_deg}") - if direction not in (-1, 1): - raise ValueError(f"方向只能是 +1 / -1,收到 {direction}") - - signed = direction * abs(want_deg) - target = q_now_rad + math.radians(signed) - has_limits = limits is not None - clamped = False - if limits is not None: - lo = limits[0] + math.radians(margin_deg) - up = limits[1] - math.radians(margin_deg) - if lo > up: # 限位本身比余量还窄(不该发生,但别让它变成静默走偏) - lo = up = 0.5 * (limits[0] + limits[1]) - if target > up: - target, clamped = up, True - elif target < lo: - target, clamped = lo, True - applied = math.degrees(target - q_now_rad) - return PrewindResult( - target_rad=target, - applied_deg=applied, - want_deg=abs(want_deg), - clamped=clamped, - has_limits=has_limits, - ) - - -def rotation_about_axis_deg(R_before: np.ndarray, R_after: np.ndarray, axis: np.ndarray) -> float: - """从两个旋转矩阵算出"绕 ``axis`` 转了多少度"(带符号)。 - - S01 的验收判据就靠它:绕工具 Z 转 Δ 之后,如果实际绕的是别的轴, - 这个函数给出的角度会与 Δ 明显不符(或者 axis 分量不占优)。 - 做法是把相对旋转投影到 ``axis`` 上: - - ``θ = atan2( axis·(R_b·R_a⁻¹ 的反对称部分) , (trace-1)/2 )`` - - :param axis: **单位**轴(工具 Z 在世界系下的方向 = ``R[:, 2]``)。 - """ - a = np.asarray(axis, dtype=float) - n = float(np.linalg.norm(a)) - if n < 1e-9: - raise ValueError("轴向量长度为 0,无法判定旋转") - a = a / n - - Rb = np.asarray(R_before, dtype=float)[:3, :3] - Ra = np.asarray(R_after, dtype=float)[:3, :3] - Rrel = Ra @ Rb.T - # 反对称部分:sin(θ)·[axis]_× - v = np.array([Rrel[2, 1] - Rrel[1, 2], Rrel[0, 2] - Rrel[2, 0], Rrel[1, 0] - Rrel[0, 1]]) - sin_t = 0.5 * float(np.dot(v, a)) - cos_t = 0.5 * (float(np.trace(Rrel)) - 1.0) - return math.degrees(math.atan2(sin_t, cos_t)) - - -def axis_misalignment_deg(R_before: np.ndarray, R_after: np.ndarray, axis: np.ndarray) -> float: - """相对旋转的转轴与 ``axis`` 的夹角 [deg]。 - - 纯绕轴旋转时这个值≈0;转错轴时它会接近 90°。用作 S01 的判错依据: - 只看"转了多少度"是不够的 —— 绕正确的轴转 90° 和绕错误的轴转 90° - 给出的角度读数一样。 - """ - Rb = np.asarray(R_before, dtype=float)[:3, :3] - Ra = np.asarray(R_after, dtype=float)[:3, :3] - Rrel = Ra @ Rb.T - # 旋转轴 = 反对称部分对应的向量(sinθ 因子不影响方向) - v = np.array([Rrel[2, 1] - Rrel[1, 2], Rrel[0, 2] - Rrel[2, 0], Rrel[1, 0] - Rrel[0, 1]]) - nv = float(np.linalg.norm(v)) - if nv < 1e-9: - return 0.0 # 几乎没转,谈不上"转错轴" - a = np.asarray(axis, dtype=float) - a = a / float(np.linalg.norm(a)) - cos = abs(float(np.dot(v / nv, a))) # 取绝对值:轴线的两个方向等价 - return math.degrees(math.acos(max(-1.0, min(1.0, cos)))) - - -def unit_tool_z(R: np.ndarray) -> np.ndarray: - """工具坐标系的 Z 轴在世界系下的方向(旋转矩阵的第三列)。""" - return np.asarray(R, dtype=float)[:3, 2] - - -def vertical_down_error_deg(R: np.ndarray, world_down: Iterable[float] = (0.0, 0.0, -1.0)) -> float: - """工具 Z 与"垂直向下"的夹角 [deg]。0 = 完全垂直向下。 - - 看板里"工具系全程垂直向下、位姿全局锁定"这句话,只有能算出这个数才算 - 真的在执行 —— 否则每个阶段都得靠人眼看画面判断臂歪没歪。 - """ - z = unit_tool_z(R) - d = np.asarray(list(world_down), dtype=float) - d = d / float(np.linalg.norm(d)) - cos = float(np.dot(z / max(1e-12, float(np.linalg.norm(z))), d)) - return math.degrees(math.acos(max(-1.0, min(1.0, cos)))) diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/geom_ik.py b/install/arm_application/lib/python3.11/site-packages/arm_application/geom_ik.py deleted file mode 100644 index 8a226be..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/geom_ik.py +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env python3 -"""向后兼容 shim —— 实现已移到 :mod:`arm_kinematics.geom_ik`。 - -为什么搬走 ----------- -这套几何雅可比 + DLS 逆解同时被应用层(视觉伺服、搜孔装配)和驱动层 -(``arm_driver_flexiv`` 的柔顺下压)需要。留在 ``arm_application`` 里会让驱动层 -反过来依赖应用层,属于层次倒置。搬到不依赖 ROS 的 ``arm_kinematics`` 后, -两边都依赖一个底层包。 - -为什么保留这个文件 ------------------- -``stage2_locate_node`` / ``stage3_search_node`` / ``servo_node`` 等现有代码都在 -``from arm_application.geom_ik import ...``。保留 shim 就不用改动这些已经在跑的 -文件 —— 重构不应牵连能工作的代码。 - -新代码请直接 ``from arm_kinematics import dls_twist``。 -""" - -from arm_kinematics.geom_ik import ( # noqa: F401 - RIZON_LINK_AXES, - dls_position_step, - dls_translate_hold_ori, - dls_twist, - geometric_jacobian, - load_handeye_T, - position_jacobian, - quat_xyzw_to_R, -) - -__all__ = [ - "RIZON_LINK_AXES", - "quat_xyzw_to_R", - "geometric_jacobian", - "position_jacobian", - "dls_position_step", - "dls_twist", - "dls_translate_hold_ori", - "load_handeye_T", -] diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/goto_ee_plane.py b/install/arm_application/lib/python3.11/site-packages/arm_application/goto_ee_plane.py deleted file mode 100644 index c2e1b8c..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/goto_ee_plane.py +++ /dev/null @@ -1,457 +0,0 @@ -#!/usr/bin/env python3 -"""感知/伺服启动前的开机回初始位流程。 - -流程: - [A] 若法兰低于 ``servo.safe_z_m``,先让它竖直上升(闭环 Z 小步跳), - 以免回 home 时扫到墙面/工装; - [B] 调用 ``/set_named_pose``(Flexiv 命名位姿,默认 "home")—— 由 Flexiv - 自己的规划器把机械臂送回 Flexiv 初始位姿; - [C] 保持(pin)住,让伺服从一个干净、静止的位姿接手。 -""" - -from __future__ import annotations - -import sys -import time -from pathlib import Path -from typing import List, Optional, Tuple - -import numpy as np -import rclpy -from arm_msgs.srv import SetNamedPose -from control_msgs.action import FollowJointTrajectory -from rclpy.action import ActionClient -from rclpy.node import Node -from sensor_msgs.msg import JointState -from tf2_ros import Buffer, TransformListener -from trajectory_msgs.msg import JointTrajectory, JointTrajectoryPoint - -from arm_application.geom_ik import ( - RIZON_LINK_AXES, - dls_translate_hold_ori, - dls_twist, - geometric_jacobian, - quat_xyzw_to_R, -) -from arm_application.site_io import ( - base_frame_default, - ee_frame_default, - joint_prefix_default, -) - -from arm_application.ros_node import TolerantNode - - - -def _load_ee_cfg() -> dict: - root = Path(__file__).resolve().parents[3] - sys.path.insert(0, str(root / "scripts" / "lib")) - from export_site_env import load_site, resolve_robot # type: ignore - - data = load_site() - servo = (data.get("servo") or {}) - robot = resolve_robot(data) - ee_z = float(servo.get("ee_z_m") or 0.24) - return { - "prefix": str(robot.get("joint_prefix") or joint_prefix_default()), - "base": str(robot.get("base_frame") or base_frame_default()), - "ee": str(robot.get("ee_frame") or ee_frame_default()), - "z": ee_z, - # 回 home 前先竖直升到这个 Z(避免撞到墙面/工装); - # 然后再回到 Flexiv 的命名初始位姿。 - "safe_z": float(servo.get("safe_z_m") or max(0.40, ee_z + 0.10)), - "home_pose": str(servo.get("home_pose_name") or "home"), - "home_speed": float(servo.get("home_pose_speed") or 0.30), - "v_z": float(servo.get("v_max_z") or 0.04), - # 仅用于(目前未使用的)verticalize 规划路径 - "kp": float(servo.get("ee_hold_kp") or 2.0), - "w_max": float(servo.get("ee_w_max") or 0.50), - } - - -def _pt(q: np.ndarray, qdot: np.ndarray, t_sec: float) -> JointTrajectoryPoint: - pt = JointTrajectoryPoint() - pt.positions = [float(v) for v in q.tolist()] - pt.velocities = [float(v) for v in qdot.tolist()] - pt.accelerations = [0.0] * int(q.size) - ns = int(round(max(0.0, float(t_sec)) * 1e9)) - pt.time_from_start.sec = ns // 1_000_000_000 - pt.time_from_start.nanosec = ns % 1_000_000_000 - return pt - - -class GotoEePlane(TolerantNode): - def __init__(self, cfg: dict) -> None: - super().__init__("goto_ee_plane") - self.cfg = cfg - prefix = cfg["prefix"] - self.joint_names = [f"{prefix}joint{i}" for i in range(1, 8)] - self.link_frames = [f"{prefix}link{i}" for i in range(1, 8)] - self._js: Optional[JointState] = None - self.create_subscription(JointState, "joint_states", self._on_js, 10) - self._tf = Buffer() - TransformListener(self._tf, self, spin_thread=True) - self._cli = ActionClient( - self, FollowJointTrajectory, "rizon_arm_controller/follow_joint_trajectory" - ) - - def _on_js(self, msg: JointState) -> None: - self._js = msg - - def _spin(self, dt: float = 0.05) -> None: - rclpy.spin_once(self, timeout_sec=dt) - - def _lookup(self, parent: str, child: str) -> Optional[np.ndarray]: - try: - tf = self._tf.lookup_transform( - parent, child, rclpy.time.Time(), - timeout=rclpy.duration.Duration(nanoseconds=80_000_000), - ) - except Exception: - return None - t = tf.transform.translation - o = tf.transform.rotation - T = np.eye(4) - T[:3, :3] = quat_xyzw_to_R([o.x, o.y, o.z, o.w]) - T[:3, 3] = [t.x, t.y, t.z] - return T - - def _q(self) -> Optional[np.ndarray]: - if self._js is None: - return None - m = {n: p for n, p in zip(self._js.name, self._js.position)} - try: - return np.array([float(m[n]) for n in self.joint_names], dtype=float) - except KeyError: - return None - - def _jacobian(self, p_ee: np.ndarray) -> Optional[np.ndarray]: - link_R: List[np.ndarray] = [] - link_p: List[np.ndarray] = [] - for fr in self.link_frames: - Tl = self._lookup(self.cfg["base"], fr) - if Tl is None: - return None - link_R.append(Tl[:3, :3]) - link_p.append(Tl[:3, 3]) - return geometric_jacobian(link_R, link_p, p_ee, RIZON_LINK_AXES) - - def _w_down(self, R: np.ndarray) -> Tuple[np.ndarray, float]: - z_now = R[:, 2] - z_des = np.array([0.0, 0.0, -1.0]) - c = float(np.clip(np.dot(z_now, z_des), -1.0, 1.0)) - ang = float(np.arccos(c)) - if ang < 0.02: - return np.zeros(3), ang - axis = np.cross(z_now, z_des) - n = float(np.linalg.norm(axis)) - axis = axis / n if n > 1e-9 else np.array([1.0, 0.0, 0.0]) - mag = float(np.clip(self.cfg["kp"] * ang, -self.cfg["w_max"], self.cfg["w_max"])) - return axis * mag, ang - - def _target_err( - self, p: np.ndarray, R: np.ndarray, target: np.ndarray, verticalize: bool - ) -> Tuple[np.ndarray, float, float]: - dp = np.asarray(target, dtype=float).reshape(3) - np.asarray(p, dtype=float).reshape(3) - _, ang = (self._w_down(R) if verticalize else (np.zeros(3), 0.0)) - xy = float(np.hypot(dp[0], dp[1])) - return dp, ang, xy - - def _wait_state(self, timeout_s: float) -> Tuple[Optional[np.ndarray], Optional[np.ndarray]]: - t0 = time.monotonic() - q = None - Tee = None - while time.monotonic() - t0 < timeout_s: - self._spin(0.05) - q = self._q() - Tee = self._lookup(self.cfg["base"], self.cfg["ee"]) - if q is not None and Tee is not None and self._jacobian(Tee[:3, 3]) is not None: - return q, Tee - return q, Tee - - def _send_action(self, traj: JointTrajectory, wait_s: float) -> bool: - goal = FollowJointTrajectory.Goal() - goal.trajectory = traj - fut = self._cli.send_goal_async(goal) - t0 = time.monotonic() - while not fut.done() and time.monotonic() - t0 < 4.0: - self._spin(0.05) - handle = fut.result() if fut.done() else None - if handle is None or not handle.accepted: - print(" 错误:JTC 拒绝了抬升轨迹", flush=True) - return False - res = handle.get_result_async() - t0 = time.monotonic() - last = 0.0 - while not res.done() and time.monotonic() - t0 < wait_s: - self._spin(0.05) - now = time.monotonic() - if now - last > 0.4: - Tee = self._lookup(self.cfg["base"], self.cfg["ee"]) - if Tee is not None: - p = Tee[:3, 3] - print( - f" 运动中 ee=({p[0]:.3f},{p[1]:.3f},{p[2]:.3f}) " - f"z_err={(self.cfg['z'] - p[2]) * 1000:+.0f}mm", - flush=True, - ) - last = now - if not res.done(): - print(" 警告:JTC 结果超时 —— 仍然继续检查 TF", flush=True) - return False - return True - - def _plan_and_send( - self, - q0: np.ndarray, - Tee: np.ndarray, - target: np.ndarray, - verticalize: bool, - tag: str = "", - max_seg: float = 0.08, - v: float = 0.05, - ) -> bool: - """规划并执行一段朝向 target 的短笛卡尔位移(≤ max_seg)。 - 长距离移动由调用方以闭环小步跳的方式完成,因为雅可比是在当前位姿 - 处冻结的 —— 超过 10 cm 后线性化误差会让一次性规划严重偏离目标。""" - p = Tee[:3, 3].copy() - R = Tee[:3, :3] - dp, ang, _ = self._target_err(p, R, target, verticalize) - dist = float(np.linalg.norm(dp)) - if dist > max_seg: # 限制本次小步跳的长度;调用方会用最新的 TF 循环执行 - dp = dp * (max_seg / dist) - dist = max_seg - print( - f" 规划 {tag} Δxyz=({dp[0]*1000:+.0f},{dp[1]*1000:+.0f},{dp[2]*1000:+.0f})mm " - f"倾角={ang * 180 / np.pi:.1f}deg", - flush=True, - ) - J = self._jacobian(p) - if J is None: - print("错误:缺少用于雅可比的 link TF", flush=True) - return False - - q = q0.copy() - waypoints = [q.copy()] - remain = dp.copy() - w_step, _ = (self._w_down(R) if verticalize else (np.zeros(3), 0.0)) - n_max = int(np.ceil(dist / 0.012)) + 4 - for _ in range(n_max): - if float(np.linalg.norm(remain)) < 0.0015 and ( - (not verticalize) or ang < 0.03 - ): - break - nseg = max(1, int(np.ceil(float(np.linalg.norm(remain)) / 0.012))) - step = remain / nseg - if verticalize and ang > 0.03: - qdot = dls_twist( - J, step / 0.12, w_base=w_step, damping=0.08, max_qdot=0.45 - ) - dq = np.clip(qdot * 0.12, -0.06, 0.06) - else: - dq = dls_translate_hold_ori(J, step, damping=0.08, max_dq=0.06) - if float(np.max(np.abs(dq))) < 1e-5: - break - q = q + dq - waypoints.append(q.copy()) - remain = remain - (J[:3, :] @ dq) - ang = max(0.0, ang - 0.05) - - planned = dist - float(np.linalg.norm(remain)) - if len(waypoints) < 2 or planned < 0.4 * dist: - print( - f" 警告 {tag}:规划器停滞 " - f"(已规划 {planned*1000:.0f}/{dist*1000:.0f}mm)—— 跳过本次小步跳", - flush=True, - ) - return False - # 关节偏移量的合理性闸门:拒绝过于夸张的规划 - if float(np.max(np.abs(waypoints[-1] - q0))) > 1.0: - print(f" 错误 {tag}:关节偏移 >1 rad —— 放弃本次小步跳", flush=True) - return False - - duration = max(1.6, dist / max(min(v, 0.06), 1e-3)) - n = len(waypoints) - 1 - traj = JointTrajectory() - traj.header.stamp.sec = 0 - traj.header.stamp.nanosec = 0 - traj.joint_names = list(self.joint_names) - traj.points.append(_pt(waypoints[0], np.zeros(7), 0.08)) - zeros = np.zeros(7) - for i, qi in enumerate(waypoints[1:], start=1): - t = 0.08 + duration * (i / n) - qdot = zeros if i == n else (waypoints[min(i + 1, n)] - qi) / max( - duration / n, 0.05 - ) - qdot = np.clip(qdot, -0.40, 0.40) - traj.points.append(_pt(qi, qdot, t)) - # 强制最后一个点的速度为零 - traj.points[-1].velocities = [0.0] * 7 - print( - f" 发送 JTC action {tag},{n} 步 T={duration:.1f}s", - flush=True, - ) - return self._send_action(traj, wait_s=duration + 6.0) - - def _goto( - self, - q: np.ndarray, - Tee: np.ndarray, - target: np.ndarray, - verticalize: bool, - tol_m: float, - tol_tilt: float, - tag: str, - v: float, - max_hops: int = 8, - ) -> Tuple[bool, np.ndarray, np.ndarray]: - """闭环点到点:规划 ≤8 cm 的小步跳 → 执行 → 重新测量 TF → 重复, - 直到落在容差内。这样对长距离下的雅可比线性化误差更鲁棒。""" - for hop in range(max_hops): - p = Tee[:3, 3] - dp, ang, _ = self._target_err(p, Tee[:3, :3], target, verticalize) - dist = float(np.linalg.norm(dp)) - if dist < tol_m and ((not verticalize) or ang < tol_tilt): - return True, q, Tee - print( - f" {tag} 第 {hop + 1} 跳 remain={dist*1000:.0f}mm " - f"倾角={ang * 180 / np.pi:.1f}deg", - flush=True, - ) - if not self._plan_and_send(q, Tee, target, verticalize, tag, v=v): - return False, q, Tee - t_end = time.monotonic() + 0.5 - while time.monotonic() < t_end: - self._spin(0.05) - q2, Tee2 = self._wait_state(2.0) - if q2 is None or Tee2 is None: - print("错误:移动过程中丢失状态", flush=True) - return False, q, Tee - q, Tee = q2, Tee2 - p = Tee[:3, 3] - dp, ang, _ = self._target_err(p, Tee[:3, :3], target, verticalize) - ok = float(np.linalg.norm(dp)) < (tol_m * 2.0) and ( - (not verticalize) or ang < (tol_tilt * 2.0) - ) - return ok, q, Tee - - def _pin(self, q: np.ndarray) -> None: - if not self._cli.wait_for_server(timeout_sec=3.0): - return - traj = JointTrajectory() - traj.header.stamp.sec = 0 - traj.header.stamp.nanosec = 0 - traj.joint_names = list(self.joint_names) - traj.points = [_pt(q, np.zeros(7), 0.08), _pt(q, np.zeros(7), 0.45)] - self._send_action(traj, wait_s=3.0) - - def _named_pose(self, name: str, speed: float) -> bool: - """调用 Flexiv 的 ``/set_named_pose``,并等待机械臂静止。""" - cli = self.create_client(SetNamedPose, "/set_named_pose") - if not cli.wait_for_server(timeout_sec=8.0): - print("错误:``/set_named_pose`` 不可用 —— 请启动 run_real.sh", flush=True) - return False - req = SetNamedPose.Request() - req.pose_name = name - req.velocity_scale = float(min(max(speed, 0.05), 1.0)) - req.acceleration_scale = 0.0 - print(f" [B] set_named_pose '{name}' speed={req.velocity_scale:.2f}", flush=True) - fut = cli.call_async(req) - t0 = time.monotonic() - while not fut.done() and time.monotonic() - t0 < 90.0: - self._spin(0.1) - if not fut.done(): - print("错误:set_named_pose 超时", flush=True) - return False - resp = fut.result() - print( - f" [B] 响应 success={resp.success} msg={resp.message}", - flush=True, - ) - if not resp.success: - return False - # 等待法兰停止运动(约 0.8 s 内 Δp < 1 mm) - last = None - still = 0.0 - t0 = time.monotonic() - while time.monotonic() - t0 < 30.0: - self._spin(0.2) - Tee = self._lookup(self.cfg["base"], self.cfg["ee"]) - if Tee is not None: - p = Tee[:3, 3] - if last is not None and float(np.linalg.norm(p - last)) < 0.001: - still += 0.2 - if still >= 0.8: - return True - else: - still = 0.0 - last = p.copy() - print(" 警告:等待静止超时 —— 仍然继续", flush=True) - return True - - def run(self, timeout_s: float = 25.0) -> int: - cfg = self.cfg - q, Tee = self._wait_state(4.0) - if q is None or Tee is None: - print("错误:没有 joint_states / TF —— 请启动 run_real.sh", flush=True) - return 2 - if not self._cli.wait_for_server(timeout_sec=8.0): - print("错误:JTC action 不可用 —— 请启动 run_real.sh", flush=True) - return 3 - - p = Tee[:3, 3] - safe_z = float(cfg["safe_z"]) - print( - f"=== 回到 Flexiv 初始位姿 '{cfg['home_pose']}' " - f"safe_z={safe_z*1000:.0f}mm ===", - flush=True, - ) - print( - f" 当前 ee=({p[0]:.3f},{p[1]:.3f},{p[2]:.3f})", - flush=True, - ) - - # --- 阶段 A:回 home 前先沿纯 Z 方向升到安全高度 --- - if p[2] < safe_z - 0.01: - lift_tgt = np.array([p[0], p[1], safe_z], dtype=float) - print(f" [A] 抬升 Z {p[2]*1000:.0f} → {safe_z*1000:.0f}mm", flush=True) - ok, q, Tee = self._goto( - q, Tee, lift_tgt, False, 0.010, 0.0, "[A]lift", v=0.05 - ) - if not ok: - print("错误:抬升阶段失败 —— 就地 pin 住", flush=True) - self._pin(q) - return 4 - - # --- 阶段 B:Flexiv 命名位姿 → 真正的初始位姿,姿态良好 --- - if not self._named_pose(cfg["home_pose"], cfg["home_speed"]): - print("错误:回命名位姿失败 —— 就地 pin 住", flush=True) - self._pin(q) - return 4 - - # --- 阶段 C:保持住,让伺服从一个静止位姿接手 --- - q, Tee = self._wait_state(2.0) - if q is not None: - self._pin(q) - if Tee is not None: - p = Tee[:3, 3] - print( - f" 已到初始位姿 ee=({p[0]:.3f},{p[1]:.3f},{p[2]:.3f})", - flush=True, - ) - return 0 - -def main() -> int: - cfg = _load_ee_cfg() - rclpy.init() - node = GotoEePlane(cfg) - try: - return node.run() - finally: - node.destroy_node() - if rclpy.ok(): - rclpy.shutdown() - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/handeye_calibrate.py b/install/arm_application/lib/python3.11/site-packages/arm_application/handeye_calibrate.py deleted file mode 100644 index e7e827d..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/handeye_calibrate.py +++ /dev/null @@ -1,769 +0,0 @@ -#!/usr/bin/env python3 -"""完整手眼标定流水线:移动 → 棋盘稳定判定 → 采集 → 求解 → 清理。 - -支持 eye_in_hand / eye_to_hand。 - -相机内参优先级: - 1) ROS 的 CameraInfo 话题(若正在发布) - 2) 通过 pyrealsense2 读取 RealSense D405/D435 的 EEPROM(camera_source) - 3) YAML 中手写的 camera_fx/fy/cx/cy - -棋盘尺寸(board_cols / board_rows / square_size_m)可由用户配置。 -""" - -from __future__ import annotations - -import json -import shutil -import time -from datetime import datetime, timezone -from pathlib import Path -from typing import List, Optional, Tuple - -import numpy as np -import rclpy -from geometry_msgs.msg import PoseStamped -from rclpy.action import ActionClient -from rclpy.node import Node -from rclpy.qos import qos_profile_sensor_data -from sensor_msgs.msg import CameraInfo, Image, JointState -from std_msgs.msg import String - -from arm_application.handeye_lib import ( - BoardConfig, - CameraIntrinsics, - ChessboardStabilizer, - T_from_flexiv_tcp, - calibrate_hand_eye, - cam_to_flange_via_tool, - detect_chessboard, - format_matrix_yaml, - format_transform_yaml, - is_pose_filled, - pose_to_Rt, - solve_board_pose, -) -from arm_application.handeye_realsense import ( - is_realsense_source, - query_realsense_color_intrinsics, - resolve_realsense_topics, -) -from arm_application.site_io import joint_prefix_default - -from arm_msgs.action import FollowJointTrajectory -from arm_msgs.srv import GetArmState - -from arm_application.ros_node import TolerantNode - -DEFAULT_JOINTS = [ - 'joint1', 'joint2', 'joint3', 'joint4', 'joint5', 'joint6', 'joint7', -] - - -def _image_to_bgr(msg: Image) -> np.ndarray: - h, w = int(msg.height), int(msg.width) - enc = (msg.encoding or '').lower() - data = np.frombuffer(msg.data, dtype=np.uint8) - - if enc in ('bgr8', 'rgb8'): - img = data.reshape(h, w, 3) - return img[:, :, ::-1].copy() if enc == 'rgb8' else img - if enc in ('mono8', '8uc1'): - gray = data.reshape(h, w) - return np.stack([gray, gray, gray], axis=-1) - if enc in ('bgra8', 'rgba8'): - img = data.reshape(h, w, 4) - bgr = img[:, :, :3] - return bgr[:, :, ::-1].copy() if enc == 'rgba8' else bgr - raise RuntimeError(f'不支持的图像编码:{msg.encoding!r}') - - -def _camera_info_to_intrinsics(msg: CameraInfo) -> CameraIntrinsics: - K = np.array(msg.k, dtype=float).reshape(3, 3) - dist = np.array(msg.d, dtype=float).reshape(-1, 1) if msg.d else np.zeros((5, 1)) - return CameraIntrinsics(K=K, dist=dist) - - -class HandeyeCalibrate(TolerantNode): - def __init__(self) -> None: - super().__init__('handeye_calibrate') - - self.declare_parameter('mode', 'eye_in_hand') # eye_in_hand | eye_to_hand - self.declare_parameter('joint_prefix', joint_prefix_default()) - self.declare_parameter('joint_names', DEFAULT_JOINTS) - self.declare_parameter('velocity_scale', 0.10) - self.declare_parameter('action_name', 'follow_joint_trajectory') - self.declare_parameter('move_time_sec', 4.0) - self.declare_parameter('start_index', 0) - - self.declare_parameter('num_poses', 12) - self.declare_parameter('waypoint_positions', [0.0] * (12 * 7)) - self.declare_parameter('min_poses', 5) - - # 相机来源:manual | d405 | d435 - self.declare_parameter('camera_source', 'manual') - self.declare_parameter('camera_serial', '') - self.declare_parameter('camera_namespace', '') - self.declare_parameter('realsense_width', 1280) - self.declare_parameter('realsense_height', 720) - self.declare_parameter('image_topic', '') - self.declare_parameter('camera_info_topic', '') - self.declare_parameter('camera_fx', 0.0) - self.declare_parameter('camera_fy', 0.0) - self.declare_parameter('camera_cx', 0.0) - self.declare_parameter('camera_cy', 0.0) - self.declare_parameter('camera_dist', [0.0, 0.0, 0.0, 0.0, 0.0]) - - # 棋盘(可自定义) - # 默认值必须与 site.yaml 的 handeye.board_* 及结果文件头里的实际板子一致。 - # 真实使用的板:A5 内角点 11x8,方格 15mm(site.yaml handeye.boards.eye_in_hand)。 - # 这里原先写的是 9x6 / 0.025,后来是 8x11;漏配就会静默用错尺寸。 - self.declare_parameter('board_cols', 11) # 内角点 - self.declare_parameter('board_rows', 8) - self.declare_parameter('square_size_m', 0.015) - - self.declare_parameter('stable_window', 8) - self.declare_parameter('stable_pixel_std', 0.45) - self.declare_parameter('stable_timeout_sec', 25.0) - self.declare_parameter('settle_sec', 0.4) - # 到位后的"真的停住了"判据 —— 直接看关节速度,比固定 sleep 可靠。 - # 这几个参数原先 site.yaml 和 run_handeye.sh 一直在传,但本节点从未声明, - # ROS 2 会静默忽略未声明的覆盖参数,于是"等静止再拍照"这件事其实没实现, - # 实际只靠一次固定 settle_sec。现在补上。 - self.declare_parameter('settle_qd_max', 0.015) # |qd|_max [rad/s] 低于此值算静 - self.declare_parameter('settle_stable_sec', 0.6) # 需要连续静多久 - self.declare_parameter('settle_timeout_sec', 8.0) # 等静止的总超时 - self.declare_parameter('pin_holds', 2) # 静止后再保持几拍 - self.declare_parameter('pin_hold_sec', 0.45) # 每拍多长 - self.declare_parameter('skip_unstable_poses', True) - - self.declare_parameter('output_dir', '/home/cc/ros2/handeye/tmp') - self.declare_parameter('result_file', '') - self.declare_parameter('cleanup_images', True) - # 眼在手上:AX=XB 的 gripper 用 Studio 工具 TCP,再折成 cam→法兰写 T_4x4。 - # 空 = 旧口径(ee_pose 当 gripper,T_4x4 原样写出)。配了就必须带 TCP。 - self.declare_parameter('gripper_tool', '') - self.declare_parameter('gripper_tcp_xyz', [0.0, 0.0, 0.0]) - self.declare_parameter('gripper_tcp_qwxyz', [1.0, 0.0, 0.0, 0.0]) - - prefix = str(self.get_parameter('joint_prefix').value or '') - base = list( - self.get_parameter('joint_names').get_parameter_value().string_array_value - or DEFAULT_JOINTS - ) - self.joint_names = [f'{prefix}{n}' for n in base] - self.mode = str(self.get_parameter('mode').value).strip().lower() - self.velocity_scale = float(self.get_parameter('velocity_scale').value) - self.action_name = str(self.get_parameter('action_name').value) - self.move_time_sec = float(self.get_parameter('move_time_sec').value) - self.start_index = max(0, int(self.get_parameter('start_index').value)) - self.min_poses = int(self.get_parameter('min_poses').value) - self.cleanup_images = bool(self.get_parameter('cleanup_images').value) - self.gripper_tool = str(self.get_parameter('gripper_tool').value or '').strip() - tcp_xyz = list( - self.get_parameter('gripper_tcp_xyz').get_parameter_value().double_array_value - or [0.0, 0.0, 0.0] - ) - tcp_q = list( - self.get_parameter('gripper_tcp_qwxyz').get_parameter_value().double_array_value - or [1.0, 0.0, 0.0, 0.0] - ) - self.T_flange_to_tool = T_from_flexiv_tcp(tcp_xyz[:3], tcp_q[:4]) - if self.gripper_tool and float(np.linalg.norm(self.T_flange_to_tool[:3, 3])) < 1e-4: - raise RuntimeError( - f'gripper_tool={self.gripper_tool!r} 但 gripper_tcp_xyz 几乎是零:' - '等于没把 Studio TCP 传进来。不许按法兰口径假装在用工具系。' - ) - - self.camera_source = str(self.get_parameter('camera_source').value).strip().lower() - self.camera_serial = str(self.get_parameter('camera_serial').value or '').strip() - self.camera_namespace = str( - self.get_parameter('camera_namespace').value or '' - ).strip() - self.rs_width = int(self.get_parameter('realsense_width').value) - self.rs_height = int(self.get_parameter('realsense_height').value) - - self.board = BoardConfig( - cols=int(self.get_parameter('board_cols').value), - rows=int(self.get_parameter('board_rows').value), - square_size=float(self.get_parameter('square_size_m').value), - ) - self.stabilizer = ChessboardStabilizer( - window=int(self.get_parameter('stable_window').value), - max_pixel_std=float(self.get_parameter('stable_pixel_std').value), - ) - self.stable_timeout = float(self.get_parameter('stable_timeout_sec').value) - self.settle_sec = float(self.get_parameter('settle_sec').value) - self.settle_qd_max = float(self.get_parameter('settle_qd_max').value) - self.settle_stable_sec = float(self.get_parameter('settle_stable_sec').value) - self.settle_timeout = float(self.get_parameter('settle_timeout_sec').value) - self.pin_holds = max(0, int(self.get_parameter('pin_holds').value)) - self.pin_hold_sec = max(0.0, float(self.get_parameter('pin_hold_sec').value)) - self.skip_unstable = bool(self.get_parameter('skip_unstable_poses').value) - - out = Path(str(self.get_parameter('output_dir').value)).expanduser() - self.output_dir = out - self.images_dir = out / 'images' - rf = str(self.get_parameter('result_file').value or '').strip() - self.result_file = Path(rf).expanduser() if rf else (out / 'handeye_result.yaml') - - self._client = ActionClient(self, FollowJointTrajectory, self.action_name) - self._get_state = self.create_client(GetArmState, 'get_arm_state') - self._capture_pub = self.create_publisher(String, 'handeye/capture', 10) - - self._latest_image: Optional[Image] = None - self._latest_info: Optional[CameraInfo] = None - self._latest_js: Optional[JointState] = None - self._intrinsics: Optional[CameraIntrinsics] = None - - img_topic = str(self.get_parameter('image_topic').value or '').strip() - info_topic = str(self.get_parameter('camera_info_topic').value or '').strip() - if is_realsense_source(self.camera_source): - img_topic, info_topic = resolve_realsense_topics( - self.camera_source, - camera_namespace=self.camera_namespace, - image_topic=img_topic, - camera_info_topic=info_topic, - ) - self._info_topic = info_topic - - self.create_subscription(JointState, '/joint_states', self._on_js, 10) - - if not img_topic: - self.get_logger().error( - 'image_topic 为空。请设置 camera_source:=d405|d435,或填写 image_topic。' - ) - else: - self.create_subscription( - Image, img_topic, self._on_image, qos_profile_sensor_data - ) - self.get_logger().info(f'已订阅图像:{img_topic}(BEST_EFFORT)') - if info_topic: - self.create_subscription( - CameraInfo, info_topic, self._on_info, qos_profile_sensor_data - ) - self.get_logger().info(f'已订阅 camera_info:{info_topic}(BEST_EFFORT)') - - def _on_js(self, msg: JointState) -> None: - self._latest_js = msg - - def _on_image(self, msg: Image) -> None: - self._latest_image = msg - - def _on_info(self, msg: CameraInfo) -> None: - self._latest_info = msg - - def run(self) -> int: - if self.mode not in ('eye_in_hand', 'eye_to_hand'): - self.get_logger().error( - f'未知的 mode={self.mode!r};请使用 eye_in_hand 或 eye_to_hand' - ) - return 1 - - poses = self._load_poses() - if len(poses) < self.min_poses: - self.get_logger().error( - f'只有 {len(poses)} 个已填写位姿(需要 >= {self.min_poses})。' - '示教命令:bash ~/ros2/scripts/run_handeye.sh teach && merge。' - ) - return 1 - if self.start_index >= len(poses): - self.get_logger().error( - f'start_index {self.start_index} >= 已填写位姿数 {len(poses)}' - ) - return 1 - - if not self._resolve_intrinsics(): - return 1 - - if not self._client.wait_for_server(timeout_sec=15.0): - self.get_logger().error( - f'Action [{self.action_name}] 不可用。' - '请启动:bash ~/ros2/scripts/run_real.sh' - ) - return 2 - - self.output_dir.mkdir(parents=True, exist_ok=True) - self.images_dir.mkdir(parents=True, exist_ok=True) - - eye_to_hand = self.mode == 'eye_to_hand' - grip = self.gripper_tool or '(ee_pose 原样,无工具折算)' - self.get_logger().info( - f'手眼标定 [{self.mode}] camera_source={self.camera_source}:' - f'{len(poses)} 个位姿,棋盘={self.board.cols}x{self.board.rows} ' - f'方格={self.board.square_size}m,v={self.velocity_scale} ' - f'gripper_tool={grip}' - ) - self.get_logger().warn('清理工作空间;确认急停就绪。Ctrl+C 可中止。') - - Rg: List[np.ndarray] = [] - tg: List[np.ndarray] = [] - Rc: List[np.ndarray] = [] - tc: List[np.ndarray] = [] - meta = [] - - try: - for i in range(self.start_index, len(poses)): - q = poses[i] - self._log_progress(i, len(poses), '移动中...') - code = self._move_one(q, self.move_time_sec) - if code != 0: - return code - - if not self._verify_joints(q, tol=0.08): - self.get_logger().error( - f'[{i + 1}] 机械臂未到达目标关节位置 ' - '(控制器报告成功,但关节没有变化)。' - '请重启 run_real.sh;示教器切 AUTO Remote;清除故障。' - '不要相信这次标定结果。' - ) - return 10 - - end = time.monotonic() + max(0.0, self.settle_sec) - while rclpy.ok() and time.monotonic() < end: - rclpy.spin_once(self, timeout_sec=0.05) - - # 固定 settle_sec 之后再看关节速度:真停了才算数,然后 pin 一拍。 - self._wait_settled() - self._pin_hold() - - ok, std, corners, pattern, bgr = self._wait_stable() - if not ok or corners is None or bgr is None: - msg = f'[{i + 1}] 棋盘不稳定(std={std:.3f})' - if self.skip_unstable: - self.get_logger().warn(f'{msg} —— 跳过') - continue - self.get_logger().error(f'{msg}。中止。') - return 7 - - ee = self._read_ee_pose() - if ee is None: - self.get_logger().error('读取 ee_pose 失败') - return 8 - - assert self._intrinsics is not None - R_t2c, t_t2c = solve_board_pose( - corners, self.board, self._intrinsics, pattern=pattern - ) - xyz = [ee.pose.position.x, ee.pose.position.y, ee.pose.position.z] - quat = [ - ee.pose.orientation.x, - ee.pose.orientation.y, - ee.pose.orientation.z, - ee.pose.orientation.w, - ] - R_g2b, t_g2b = pose_to_Rt(xyz, quat) - - stamp = datetime.now(timezone.utc).strftime('%Y%m%d_%H%M%S') - img_path = self.images_dir / f'pose_{i:02d}_{stamp}.png' - self._save_png(bgr, img_path) - - msg = String() - msg.data = f'capture:{i}:{len(poses)}' - self._capture_pub.publish(msg) - - Rg.append(R_g2b) - tg.append(t_g2b) - Rc.append(R_t2c) - tc.append(t_t2c) - meta.append( - { - 'index': i, - 'joints': list(q), - 'ee_xyz': xyz, - 'ee_quat_xyzw': quat, - 'image': str(img_path), - 'corner_std_px': std, - } - ) - self.get_logger().info( - f'[{i + 1}/{len(poses)}] 已采集 ' - f'(corner_std={std:.3f}px) -> {img_path.name}' - ) - except KeyboardInterrupt: - self.get_logger().info('已中断') - return 0 - - if len(Rg) < self.min_poses: - self.get_logger().error( - f'只采集到 {len(Rg)} 次;求解至少需要 {self.min_poses} 次' - ) - return 9 - - self.get_logger().info(f'用 {len(Rg)} 个视角求解手眼标定...') - R, t = calibrate_hand_eye(Rg, tg, Rc, tc, eye_to_hand=eye_to_hand) - extra = '' - if eye_to_hand: - name = 'T_cam_to_base (eye_to_hand)' - yaml_txt = format_transform_yaml(R, t, name) - if self.gripper_tool: - extra = ( - f'gripper_tool: {self.gripper_tool}\n' - + format_matrix_yaml(self.T_flange_to_tool, 'T_flange_to_tool') - ) - self.get_logger().info( - f'gripper={self.gripper_tool}:AX=XB 的手是 TCP;' - f'T_4x4 是 cam→基座,不折 t={t.reshape(3)*1000} mm' - ) - elif self.gripper_tool: - T_cam_tool = np.eye(4) - T_cam_tool[:3, :3] = R - T_cam_tool[:3, 3] = t.reshape(3) - T_cam_flange = cam_to_flange_via_tool(T_cam_tool, self.T_flange_to_tool) - delta = float(np.linalg.norm(T_cam_flange[:3, 3] - T_cam_tool[:3, 3])) - tool_len = float(np.linalg.norm(self.T_flange_to_tool[:3, 3])) - if tool_len > 0.05 and delta < 1e-4: - self.get_logger().error( - 'T_cam_to_flange 与 T_cam_to_tool 平移几乎相同,' - '折算没生效。结果作废。' - ) - return 11 - # 腕部相机在法兰前方(法兰 +Z)。乘反了 Z 会落到 −200 mm 一带。 - if ( - self.T_flange_to_tool[2, 3] > 0.05 - and float(T_cam_flange[2, 3]) < 0.0 - ): - self.get_logger().error( - f'T_cam_to_flange tz={float(T_cam_flange[2, 3])*1000:.1f} mm ' - '在法兰后方,乘序反了。结果作废。' - ) - return 12 - R, t = T_cam_flange[:3, :3], T_cam_flange[:3, 3].reshape(3, 1) - name = 'T_cam_to_flange (eye_in_hand,由工具 TCP 折算)' - yaml_txt = format_transform_yaml(R, t, name) - extra = ( - f'gripper_tool: {self.gripper_tool}\n' - + format_matrix_yaml(self.T_flange_to_tool, 'T_flange_to_tool') - + format_matrix_yaml(T_cam_tool, 'T_cam_to_tool') - ) - self.get_logger().info( - f'gripper={self.gripper_tool}:' - f'T_cam_to_tool t={T_cam_tool[:3, 3]*1000} mm → ' - f'T_cam_to_flange t={T_cam_flange[:3, 3]*1000} mm' - ) - else: - name = 'T_cam_to_gripper (eye_in_hand)' - yaml_txt = format_transform_yaml(R, t, name) - header = ( - f'# 手眼标定结果\n' - f'# mode: {self.mode}\n' - f'# camera_source: {self.camera_source}\n' - f'# views: {len(Rg)}\n' - f'# utc: {datetime.now(timezone.utc).isoformat()}\n' - f'# board: {self.board.cols}x{self.board.rows} ' - f'square_m={self.board.square_size}\n' - ) - if self.gripper_tool and eye_to_hand: - header += ( - f'# gripper_tool: {self.gripper_tool}\n' - f'# T_4x4 = cam→基座(AX=XB 的手是 TCP,不折到法兰)\n' - f'# 旧结果备份在 results/backup/\n' - ) - elif self.gripper_tool: - header += ( - f'# gripper_tool: {self.gripper_tool}\n' - f'# T_4x4 = cam→法兰(AX=XB 在 TCP 上解,再左乘 T_flange_to_tool)\n' - f'# T_cam_to_tool 是原始求解;旧的法兰/tool1 备份在 results/backup/\n' - ) - self.result_file.parent.mkdir(parents=True, exist_ok=True) - self.result_file.write_text(header + extra + yaml_txt, encoding='utf-8') - (self.output_dir / 'captures.json').write_text( - json.dumps(meta, indent=2), encoding='utf-8' - ) - - self.get_logger().info('======== 手眼标定结果 ========') - for line in (header + yaml_txt).strip().splitlines(): - self.get_logger().info(line) - self.get_logger().info(f'已保存 -> {self.result_file}') - - if self.cleanup_images: - if self.images_dir.exists(): - shutil.rmtree(self.images_dir, ignore_errors=True) - self.get_logger().info('标定图像已删除') - else: - self.get_logger().info(f'图像保留在 {self.images_dir}') - return 0 - - def _load_poses(self) -> List[List[float]]: - flat = list(self.get_parameter('waypoint_positions').value) - n_j = len(self.joint_names) - n_cfg = int(self.get_parameter('num_poses').value) - if n_cfg < 1: - return [] - need = n_cfg * n_j - if len(flat) < need: - self.get_logger().warn( - f'waypoint_positions 长度 {len(flat)} < num_poses*{n_j}={need};' - '用零补齐' - ) - flat = flat + [0.0] * (need - len(flat)) - poses: List[List[float]] = [] - for i in range(n_cfg): - q = [float(v) for v in flat[i * n_j : (i + 1) * n_j]] - if is_pose_filled(q): - poses.append(q) - else: - self.get_logger().warn(f'位姿槽 {i} 为空(全零)—— 已跳过') - return poses - - def _resolve_intrinsics(self) -> bool: - # 1) CameraInfo - deadline = time.monotonic() + 3.0 - while rclpy.ok() and self._latest_info is None and time.monotonic() < deadline: - rclpy.spin_once(self, timeout_sec=0.1) - - if self._latest_info is not None: - self._intrinsics = _camera_info_to_intrinsics(self._latest_info) - K = self._intrinsics.K - self.get_logger().info( - f'内参来自 CameraInfo({self._info_topic}):' - f'fx={K[0, 0]:.2f} fy={K[1, 1]:.2f} cx={K[0, 2]:.2f} cy={K[1, 2]:.2f}' - ) - return True - - # 2) RealSense EEPROM - if is_realsense_source(self.camera_source): - try: - intr = query_realsense_color_intrinsics( - self.camera_source, - serial=self.camera_serial, - width=self.rs_width, - height=self.rs_height, - ) - except Exception as exc: # noqa: BLE001 - self.get_logger().error(f'RealSense 内参查询失败:{exc}') - else: - self._intrinsics = CameraIntrinsics(K=intr.as_K(), dist=intr.as_dist()) - self.get_logger().info( - f'内参来自 RealSense {intr.model.upper()} ' - f'serial={intr.serial} {intr.width}x{intr.height}:' - f'fx={intr.fx:.2f} fy={intr.fy:.2f} ' - f'cx={intr.cx:.2f} cy={intr.cy:.2f}' - ) - if (intr.width, intr.height) != (self.rs_width, self.rs_height): - self.get_logger().warn( - f'请求 {self.rs_width}x{self.rs_height},' - f'实际得到 {intr.width}x{intr.height}(最接近的 profile)' - ) - return True - - # 3) Manual YAML - fx = float(self.get_parameter('camera_fx').value) - fy = float(self.get_parameter('camera_fy').value) - cx = float(self.get_parameter('camera_cx').value) - cy = float(self.get_parameter('camera_cy').value) - if fx <= 0 or fy <= 0: - self.get_logger().error( - '没有内参。请设置 camera_source:=d405|d435,' - '或提供 camera_info_topic,或填写 camera_fx/fy/cx/cy。' - ) - return False - dist = np.array( - list(self.get_parameter('camera_dist').value), dtype=float - ).reshape(-1, 1) - K = np.array([[fx, 0.0, cx], [0.0, fy, cy], [0.0, 0.0, 1.0]], dtype=float) - self._intrinsics = CameraIntrinsics(K=K, dist=dist) - self.get_logger().info( - f'内参来自 YAML:fx={fx:.2f} fy={fy:.2f} cx={cx:.2f} cy={cy:.2f}' - ) - return True - - def _log_progress(self, i: int, total: int, suffix: str = '') -> None: - """带进度条的日志。 - - 自动标定是无人值守的长流程(十几个点位 × 移动+稳定+拍照), - 单看 `[3/12]` 很难有"还要多久"的直觉,加一条可视化进度条。 - """ - frac = (i + 1) / max(1, total) - width = 24 - filled = int(round(frac * width)) - bar = '█' * filled + '░' * (width - filled) - self.get_logger().info( - f'[{i + 1}/{total}] [{bar}] {frac * 100:5.1f}% {suffix}' - ) - - def _wait_settled(self) -> bool: - """等机械臂真的停下来,再进入拍照。 - - 判据是关节速度 |qd|_max 连续 ``settle_stable_sec`` 低于 ``settle_qd_max``。 - 为什么不用固定 sleep:`settle_sec` 是拍脑袋的时长,臂负载/姿态不同, - 刹车距离差别很大 —— 等太短会在臂还在动时拍照(棋盘虚 → 角点抖动), - 等太长则整轮标定被无谓拉长。直接看速度更准。 - - 超时不算致命:记一条警告后继续,让后面的棋盘稳定性检查去把关。 - """ - if self.settle_qd_max <= 0.0: - return True - deadline = time.monotonic() + self.settle_timeout - stable_since: Optional[float] = None - while rclpy.ok() and time.monotonic() < deadline: - rclpy.spin_once(self, timeout_sec=0.05) - js = self._latest_js - if js is None or not list(js.velocity): - continue - try: - vmax = float(np.max(np.abs(np.asarray(js.velocity, dtype=float)))) - except Exception: # noqa: BLE001 - continue - now = time.monotonic() - if vmax <= self.settle_qd_max: - if stable_since is None: - stable_since = now - elif now - stable_since >= self.settle_stable_sec: - return True - else: - stable_since = None # 又动了,重新计时 - self.get_logger().warn( - f'wait_settled 超时 ({self.settle_timeout:.1f}s),臂可能仍在微动;' - '交给棋盘稳定性检查兜底' - ) - return False - - def _pin_hold(self) -> None: - """静止后再保持几拍,抑制到位后的微小回弹/漂移。 - - 语义取自 site.yaml 的注释"零速 pin 后再拍照":不是重新规划轨迹, - 而是纯粹等一段时间让机械臂自己稳下来(控制器在到位后仍会做少量补偿)。 - """ - total = self.pin_holds * self.pin_hold_sec - end = time.monotonic() + total - while rclpy.ok() and time.monotonic() < end: - rclpy.spin_once(self, timeout_sec=0.05) - - def _wait_stable( - self, - ) -> Tuple[bool, float, Optional[np.ndarray], Optional[np.ndarray]]: - self.stabilizer.reset() - deadline = time.monotonic() + self.stable_timeout - last_std = float('inf') - last_corners = None - last_pattern = None - last_bgr = None - last_log = 0.0 - while rclpy.ok() and time.monotonic() < deadline: - rclpy.spin_once(self, timeout_sec=0.05) - if self._latest_image is None: - continue - try: - bgr = _image_to_bgr(self._latest_image) - except Exception as exc: # noqa: BLE001 - self.get_logger().error(f'图像转换失败:{exc}') - return False, last_std, None, None, None - detected = detect_chessboard(bgr, self.board) - corners = detected[0] if detected is not None else None - pattern = detected[1] if detected is not None else None - ok, std = self.stabilizer.push(corners) - last_std = std - if corners is not None: - last_corners = corners - last_pattern = pattern - last_bgr = bgr - now = time.monotonic() - if now - last_log > 1.0: - seen = '有' if corners is not None else '无' - self.get_logger().info( - f' 棋盘={seen} 角点标准差=' - f'{std if std < 1e8 else float("nan"):.3f}px' - ) - last_log = now - if ok: - return True, std, last_corners, last_pattern, last_bgr - return False, last_std, last_corners, last_pattern, last_bgr - - - def _verify_joints(self, target: List[float], tol: float = 0.08) -> bool: - """确认 ``joint_states`` 真的走到了目标位置。 - - 用来识破"假的成功":有些执行接口会立刻返回成功,但关节其实没动 - (或只动了一半)。这里在 2 秒内轮询关节角,逐轴比对容差 ``tol``(弧度), - 只有全部落在容差内才算真到位。 - """ - deadline = time.monotonic() + 2.0 - while rclpy.ok() and time.monotonic() < deadline: - rclpy.spin_once(self, timeout_sec=0.05) - if self._latest_js is None: - continue - name_to_q = dict(zip(list(self._latest_js.name), list(self._latest_js.position))) - actual = [] - for n in self.joint_names: - if n not in name_to_q: - break - actual.append(float(name_to_q[n])) - if len(actual) != len(target): - continue - err = float(np.sqrt(np.mean([(a - b) ** 2 for a, b in zip(actual, target)]))) - self.get_logger().info( - f' 关节相对目标的 RMSE:{err:.4f} rad(tol={tol})' - ) - return err <= tol - self.get_logger().error('校验运动时没有 joint_states') - return False - - def _move_one(self, positions: List[float], duration: float) -> int: - goal = FollowJointTrajectory.Goal() - goal.joint_names = self.joint_names - goal.num_points = 1 - goal.velocity_scale = self.velocity_scale - goal.positions = list(positions) - goal.time_from_start = [float(duration)] - - send = self._client.send_goal_async(goal) - if not self._wait_future(send, 10.0, '发送目标'): - return 3 - handle = send.result() - if handle is None or not handle.accepted: - self.get_logger().error('目标被拒绝') - return 4 - res_fut = handle.get_result_async() - if not self._wait_future(res_fut, max(60.0, duration * 3.0), '结果'): - return 5 - result = res_fut.result().result - if not result.success: - self.get_logger().error(f'移动失败:{result.message}') - return 6 - return 0 - - def _wait_future(self, fut, timeout: float, label: str) -> bool: - deadline = time.monotonic() + timeout - while rclpy.ok() and not fut.done(): - rclpy.spin_once(self, timeout_sec=0.05) - if time.monotonic() > deadline: - self.get_logger().error(f'等待 {label} 超时') - return False - return fut.done() - - def _read_ee_pose(self) -> Optional[PoseStamped]: - if not self._get_state.wait_for_service(timeout_sec=2.0): - return None - fut = self._get_state.call_async(GetArmState.Request()) - if not self._wait_future(fut, 2.0, 'get_arm_state'): - return None - res = fut.result() - if res is None or not res.success: - return None - return res.ee_pose - - def _save_png(self, bgr: np.ndarray, path: Path) -> None: - import cv2 - - if not cv2.imwrite(str(path), bgr): - raise RuntimeError(f'cv2.imwrite 失败:{path}') - - -def main(args=None) -> None: - rclpy.init(args=args) - node = HandeyeCalibrate() - code = 1 - try: - code = node.run() - except KeyboardInterrupt: - code = 0 - finally: - node.destroy_node() - if rclpy.ok(): - rclpy.shutdown() - raise SystemExit(code) - - -if __name__ == '__main__': - main() diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/handeye_lib.py b/install/arm_application/lib/python3.11/site-packages/arm_application/handeye_lib.py deleted file mode 100644 index 048b358..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/handeye_lib.py +++ /dev/null @@ -1,404 +0,0 @@ -#!/usr/bin/env python3 -"""手眼标定辅助工具:棋盘稳定判定 + AX=XB 求解。 - -有 ``cv2.calibrateHandEye`` 时用它,否则用 Tsai-Lenz(NumPy 实现)。 -棋盘检测始终依赖 OpenCV。 -""" - -from __future__ import annotations - -import math -from collections import deque -from dataclasses import dataclass -from pathlib import Path -from typing import Deque, List, Optional, Sequence, Tuple - -import numpy as np - -try: - import cv2 -except Exception: # noqa: BLE001 - cv2 = None # type: ignore - - -@dataclass -class BoardConfig: - cols: int # 内角点数(宽) - rows: int # 内角点数(高) - square_size: float # 米 - - -@dataclass -class CameraIntrinsics: - K: np.ndarray - dist: np.ndarray - - -def R_to_quat_xyzw(R: np.ndarray) -> Tuple[float, float, float, float]: - """3×3 旋转 → ``(x, y, z, w)`` 四元数(Shepperd 法,按最大分量选分支)。 - - 为什么放在库里而不是各个 launch 里:这段换算**已经在两份 launch 里各抄了 - 一遍**,而且抄错过(对角分支的公式被写歪,症状是手眼 TF 差了 30°, - 定位看起来"总能到附近"但永远差一点)。换算只有一份才可能被测试: - ``test_handeye_lib_roundtrip.py`` 拿真实标定文件验证 - ``quat_xyzw_to_R(R_to_quat_xyzw(R)) == R``。 - """ - R = np.asarray(R, dtype=float).reshape(3, 3) - tr = float(R[0, 0] + R[1, 1] + R[2, 2]) - if tr > 0.0: - s = math.sqrt(tr + 1.0) * 2.0 - w = 0.25 * s - x = (R[2, 1] - R[1, 2]) / s - y = (R[0, 2] - R[2, 0]) / s - z = (R[1, 0] - R[0, 1]) / s - elif R[0, 0] > R[1, 1] and R[0, 0] > R[2, 2]: - s = math.sqrt(1.0 + R[0, 0] - R[1, 1] - R[2, 2]) * 2.0 - w = (R[2, 1] - R[1, 2]) / s - x = 0.25 * s - y = (R[0, 1] + R[1, 0]) / s - z = (R[0, 2] + R[2, 0]) / s - elif R[1, 1] > R[2, 2]: - s = math.sqrt(1.0 + R[1, 1] - R[0, 0] - R[2, 2]) * 2.0 - w = (R[0, 2] - R[2, 0]) / s - x = (R[0, 1] + R[1, 0]) / s - y = 0.25 * s - z = (R[1, 2] + R[2, 1]) / s - else: - s = math.sqrt(1.0 + R[2, 2] - R[0, 0] - R[1, 1]) * 2.0 - w = (R[1, 0] - R[0, 1]) / s - x = (R[0, 2] + R[2, 0]) / s - y = (R[1, 2] + R[2, 1]) / s - z = 0.25 * s - n = math.sqrt(x * x + y * y + z * z + w * w) - if n <= 0.0: - raise ValueError("旋转矩阵无法转成四元数(矩阵为零?)") - return x / n, y / n, z / n, w / n - - -def read_transform_yaml(path: str | Path) -> Tuple[np.ndarray, Tuple[float, float, float, float]]: - """读手眼标定产物 → ``(xyz_m, quat_xyzw)``。 - - 文件格式见 :func:`format_transform_yaml`:``T_4x4`` 是 4 行 4 列的列表。 - 读取时**必须校验形状**:手眼文件是现场人手拷来拷去的,形状不对时 - 直接报错,比"取到一堆 nan 然后发了个全零 TF"好得多(后者会让定位 - 永远差一个常量,而且看起来像相机标定不准)。 - """ - import yaml # 局部导入:本模块其它函数不需要 yaml(标定计算本身不依赖) - - with open(path, "r", encoding="utf-8") as f: - data = yaml.safe_load(f) or {} - T = data.get("T_4x4") - if T is None: - raise ValueError(f"{path}: 缺少 T_4x4 字段") - arr = np.asarray(T, dtype=float) - if arr.shape != (4, 4): - raise ValueError(f"{path}: T_4x4 应为 4x4,实际 {arr.shape}") - xyz = np.array([arr[0, 3], arr[1, 3], arr[2, 3]], dtype=float) - return xyz, R_to_quat_xyzw(arr[:3, :3]) - - -def quat_xyzw_to_R(q: Sequence[float]) -> np.ndarray: - x, y, z, w = [float(v) for v in q] - n = np.sqrt(x * x + y * y + z * z + w * w) + 1e-12 - x, y, z, w = x / n, y / n, z / n, w / n - return np.array( - [ - [1 - 2 * (y * y + z * z), 2 * (x * y - z * w), 2 * (x * z + y * w)], - [2 * (x * y + z * w), 1 - 2 * (x * x + z * z), 2 * (y * z - x * w)], - [2 * (x * z - y * w), 2 * (y * z + x * w), 1 - 2 * (x * x + y * y)], - ], - dtype=float, - ) - - -def pose_to_Rt( - xyz: Sequence[float], quat_xyzw: Sequence[float] -) -> Tuple[np.ndarray, np.ndarray]: - R = quat_xyzw_to_R(quat_xyzw) - t = np.array([[float(xyz[0])], [float(xyz[1])], [float(xyz[2])]], dtype=float) - return R, t - - -def Rt_to_T(R: np.ndarray, t: np.ndarray) -> np.ndarray: - T = np.eye(4) - T[:3, :3] = R - T[:3, 3] = t.reshape(3) - return T - - -def cam_to_base_T( - T_handeye: np.ndarray, T_ee: np.ndarray, mode: str -) -> np.ndarray: - """相机系 → 基座系的 4×4。 - - * ``eye_in_hand``:``T_handeye`` 是 cam→法兰,再左乘 ``T_ee``(base→法兰)。 - * ``eye_to_hand``:``T_handeye`` **已经是** cam→基座。再乘 ``T_ee`` 会把 - 固定相机错挂到法兰上 —— 定位总能到附近、永远差一截,看起来像标定不准。 - """ - T_he = np.asarray(T_handeye, dtype=float).reshape(4, 4) - tag = str(mode or "").strip().lower() - if tag == "eye_to_hand": - return T_he - if tag != "eye_in_hand": - raise ValueError( - f"手眼模式只能是 eye_in_hand 或 eye_to_hand,收到 {mode!r}" - ) - return np.asarray(T_ee, dtype=float).reshape(4, 4) @ T_he - - -def cam_point_to_base( - p_cam: np.ndarray, - T_handeye: np.ndarray, - T_ee: np.ndarray, - mode: str, -) -> np.ndarray: - """工件三维点(相机系)→ 基座系 XYZ。""" - T_bc = cam_to_base_T(T_handeye, T_ee, mode) - xyz = np.asarray(p_cam, dtype=float).reshape(3) - ph = np.array([float(xyz[0]), float(xyz[1]), float(xyz[2]), 1.0], dtype=float) - return (T_bc @ ph)[:3] - - -def invert_Rt(R: np.ndarray, t: np.ndarray) -> Tuple[np.ndarray, np.ndarray]: - Ri = R.T - ti = -Ri @ t.reshape(3, 1) - return Ri, ti - - -def board_object_points(cfg: BoardConfig) -> np.ndarray: - obj = np.zeros((cfg.rows * cfg.cols, 3), np.float32) - xs, ys = np.meshgrid(np.arange(cfg.cols), np.arange(cfg.rows)) - obj[:, 0] = xs.reshape(-1) * cfg.square_size - obj[:, 1] = ys.reshape(-1) * cfg.square_size - return obj - - -def detect_chessboard( - image_bgr: np.ndarray, cfg: BoardConfig -) -> Optional[Tuple[np.ndarray, Tuple[int, int]]]: - """返回 (角点, pattern_size) 或 None。pattern 为实际使用的 (cols, rows)。""" - if cv2 is None: - raise RuntimeError('棋盘检测需要 OpenCV(cv2)') - gray = cv2.cvtColor(image_bgr, cv2.COLOR_BGR2GRAY) - pattern = (int(cfg.cols), int(cfg.rows)) - flags = cv2.CALIB_CB_ADAPTIVE_THRESH | cv2.CALIB_CB_NORMALIZE_IMAGE - ok, corners = cv2.findChessboardCorners(gray, pattern, flags) - used = pattern - if not ok: - ok, corners = cv2.findChessboardCorners( - gray, (pattern[1], pattern[0]), flags - ) - used = (pattern[1], pattern[0]) - if not ok or corners is None: - return None - criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 40, 1e-3) - corners = cv2.cornerSubPix(gray, corners, (11, 11), (-1, -1), criteria) - return np.asarray(corners, dtype=np.float32), used - - -def solve_board_pose( - corners: np.ndarray, - cfg: BoardConfig, - cam: CameraIntrinsics, - pattern: Optional[Tuple[int, int]] = None, -) -> Tuple[np.ndarray, np.ndarray]: - if cv2 is None: - raise RuntimeError('solvePnP 需要 OpenCV(cv2)') - if pattern is None: - pattern = (cfg.cols, cfg.rows) - board = BoardConfig(pattern[0], pattern[1], cfg.square_size) - obj = board_object_points(board) - ok, rvec, tvec = cv2.solvePnP( - obj, corners, cam.K, cam.dist, flags=cv2.SOLVEPNP_ITERATIVE - ) - if not ok: - raise RuntimeError('solvePnP 失败') - R, _ = cv2.Rodrigues(rvec) - return R.astype(float), np.asarray(tvec, dtype=float).reshape(3, 1) - - -class ChessboardStabilizer: - def __init__(self, window: int = 8, max_pixel_std: float = 0.45) -> None: - self.window = int(window) - self.max_pixel_std = float(max_pixel_std) - self._buf: Deque[np.ndarray] = deque(maxlen=self.window) - - def reset(self) -> None: - self._buf.clear() - - def push(self, corners: Optional[np.ndarray]) -> Tuple[bool, float]: - if corners is None: - self._buf.clear() - return False, float('inf') - self._buf.append(corners.reshape(-1, 2).astype(float)) - if len(self._buf) < self.window: - return False, float('inf') - stack = np.stack(list(self._buf), axis=0) - std = float(np.mean(np.std(stack, axis=0))) - return std <= self.max_pixel_std, std - - -def _skew(v: np.ndarray) -> np.ndarray: - x, y, z = v.reshape(3) - return np.array([[0.0, -z, y], [z, 0.0, -x], [-y, x, 0.0]]) - - -def _mat_log(R: np.ndarray) -> np.ndarray: - c = float(np.clip((np.trace(R) - 1.0) * 0.5, -1.0, 1.0)) - theta = float(np.arccos(c)) - if theta < 1e-8: - return np.zeros(3) - w = np.array( - [R[2, 1] - R[1, 2], R[0, 2] - R[2, 0], R[1, 0] - R[0, 1]], dtype=float - ) - return w * (theta / (2.0 * np.sin(theta))) - - -def _rodrigues(rvec: np.ndarray) -> np.ndarray: - r = rvec.reshape(3) - theta = float(np.linalg.norm(r)) - if theta < 1e-12: - return np.eye(3) - k = r / theta - K = _skew(k) - return np.eye(3) + np.sin(theta) * K + (1.0 - np.cos(theta)) * (K @ K) - - -def calibrate_hand_eye_tsai( - R_gripper2base: List[np.ndarray], - t_gripper2base: List[np.ndarray], - R_target2cam: List[np.ndarray], - t_target2cam: List[np.ndarray], -) -> Tuple[np.ndarray, np.ndarray]: - """Tsai-Lenz 方法。返回 R_cam2gripper、t_cam2gripper。""" - n = len(R_gripper2base) - if n < 3: - raise ValueError('至少需要 3 个位姿') - - Hg = [Rt_to_T(R, t) for R, t in zip(R_gripper2base, t_gripper2base)] - Hc = [Rt_to_T(R, t) for R, t in zip(R_target2cam, t_target2cam)] - - A_rows: List[np.ndarray] = [] - b_rows: List[np.ndarray] = [] - for i in range(n - 1): - A = np.linalg.inv(Hg[i + 1]) @ Hg[i] - B = Hc[i + 1] @ np.linalg.inv(Hc[i]) - ra = _mat_log(A[:3, :3]) - rb = _mat_log(B[:3, :3]) - A_rows.append(_skew(ra + rb)) - b_rows.append(rb - ra) - A_mat = np.vstack(A_rows) - b_vec = np.concatenate(b_rows) - p, _, _, _ = np.linalg.lstsq(A_mat, b_vec, rcond=None) - denom = np.sqrt(1.0 + float(p @ p)) - P = 2.0 * p / denom - Rx = _rodrigues(P) - - C_rows: List[np.ndarray] = [] - d_rows: List[np.ndarray] = [] - for i in range(n - 1): - A = np.linalg.inv(Hg[i + 1]) @ Hg[i] - B = Hc[i + 1] @ np.linalg.inv(Hc[i]) - Ra, ta = A[:3, :3], A[:3, 3:4] - _Rb, tb = B[:3, :3], B[:3, 3:4] - C_rows.append(Ra - np.eye(3)) - d_rows.append(Rx @ tb - ta) - C = np.vstack(C_rows) - d = np.vstack(d_rows) - tx, _, _, _ = np.linalg.lstsq(C, d, rcond=None) - return Rx.astype(float), tx.reshape(3, 1).astype(float) - - -def calibrate_hand_eye( - R_gripper2base: List[np.ndarray], - t_gripper2base: List[np.ndarray], - R_target2cam: List[np.ndarray], - t_target2cam: List[np.ndarray], - *, - eye_to_hand: bool = False, -) -> Tuple[np.ndarray, np.ndarray]: - """ - eye_in_hand -> X = cam -> gripper(相机装在法兰上) - eye_to_hand -> X = cam -> base(相机固定安装) - """ - Rg = list(R_gripper2base) - tg = list(t_gripper2base) - if eye_to_hand: - Rg = [] - tg = [] - for R, t in zip(R_gripper2base, t_gripper2base): - Ri, ti = invert_Rt(R, t) - Rg.append(Ri) - tg.append(ti) - - if cv2 is not None and hasattr(cv2, 'calibrateHandEye'): - try: - R, t = cv2.calibrateHandEye( - Rg, tg, R_target2cam, t_target2cam, method=cv2.CALIB_HAND_EYE_TSAI - ) - return np.asarray(R, float), np.asarray(t, float).reshape(3, 1) - except Exception: - pass # 退回 NumPy 版 Tsai - return calibrate_hand_eye_tsai(Rg, tg, R_target2cam, t_target2cam) - - -def T_from_flexiv_tcp(xyz_m, qwxyz) -> np.ndarray: - """Studio ``tcp_location`` → 法兰→工具 4×4。 - - Flexiv 顺序是 ``[x, y, z, q_w, q_x, q_y, q_z]``,四元数是 wxyz, - 和本仓库其余地方的 xyzw 不一样。只在这里换一次。 - """ - xyz = np.asarray(xyz_m, dtype=float).reshape(3) - q = np.asarray(qwxyz, dtype=float).reshape(7) if np.asarray(qwxyz).size == 7 else np.asarray(qwxyz, dtype=float).reshape(4) - if q.size == 7: - qw, qx, qy, qz = (float(q[3]), float(q[4]), float(q[5]), float(q[6])) - else: - qw, qx, qy, qz = (float(q[0]), float(q[1]), float(q[2]), float(q[3])) - R = quat_xyzw_to_R((qx, qy, qz, qw)) - return Rt_to_T(R, xyz.reshape(3, 1)) - - -def cam_to_flange_via_tool(T_cam_to_tool: np.ndarray, T_flange_to_tool: np.ndarray) -> np.ndarray: - """AX=XB 在工具 TCP 上解出 cam→工具后,再折成 cam→法兰。 - - ``T_flange_to_tool`` 是 Studio TCP:``p_法兰 = T_flange_to_tool · p_工具``。 - OpenCV 的 ``T_cam_to_tool`` 是 ``p_工具 = T_cam_to_tool · p_相机``。 - 所以 ``T_cam_to_flange = T_flange_to_tool · T_cam_to_tool``。 - - 乘反了(``T_cam_to_tool · inv(T_ft)``)旋转看着还像,平移会把相机 - 扔到法兰后方约 30 cm。忘了乘则 ``T_4x4`` 停在 TCP 上,沿工具偏 ~225 mm。 - 两种都不报错。 - """ - T_ct = np.asarray(T_cam_to_tool, dtype=float).reshape(4, 4) - T_ft = np.asarray(T_flange_to_tool, dtype=float).reshape(4, 4) - return T_ft @ T_ct - - -def format_transform_yaml(R: np.ndarray, t: np.ndarray, name: str) -> str: - T = Rt_to_T(R, t) - lines = [ - f'# {name}', - f'translation_m: [{t[0, 0]:.8f}, {t[1, 0]:.8f}, {t[2, 0]:.8f}]', - 'T_4x4:', - ] - for row in T: - lines.append(' - [' + ', '.join(f'{v:.8f}' for v in row) + ']') - return '\n'.join(lines) + '\n' - - -def format_matrix_yaml(T: np.ndarray, key: str) -> str: - arr = np.asarray(T, dtype=float).reshape(4, 4) - lines = [f'{key}:'] - for row in arr: - lines.append(' - [' + ', '.join(f'{v:.8f}' for v in row) + ']') - return '\n'.join(lines) + '\n' - - -def is_pose_filled(joints: Sequence[float]) -> bool: - """若全为零 / NaN 占位则返回 False。""" - arr = np.asarray(joints, dtype=float) - if arr.size != 7: - return False - if np.any(np.isnan(arr)): - return False - return float(np.linalg.norm(arr)) > 1e-6 diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/handeye_realsense.py b/install/arm_application/lib/python3.11/site-packages/arm_application/handeye_realsense.py deleted file mode 100644 index 3d072e0..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/handeye_realsense.py +++ /dev/null @@ -1,251 +0,0 @@ -#!/usr/bin/env python3 -"""通过 pyrealsense2 查询 RealSense(D405 / D435)的出厂彩色内参。""" - -from __future__ import annotations - -from dataclasses import dataclass -from typing import List, Tuple - -import numpy as np - - -@dataclass -class RealsenseIntrinsics: - model: str - serial: str - width: int - height: int - fx: float - fy: float - cx: float - cy: float - dist: List[float] # OpenCV 顺序,长度 5 - - def as_K(self) -> np.ndarray: - return np.array( - [[self.fx, 0.0, self.cx], [0.0, self.fy, self.cy], [0.0, 0.0, 1.0]], - dtype=float, - ) - - def as_dist(self) -> np.ndarray: - d = list(self.dist) + [0.0] * 5 - return np.array(d[:5], dtype=float).reshape(-1, 1) - - -# camera_source 为 d405/d435 时的默认 ROS 话题命名空间。 -REALSENSE_TOPIC_DEFAULTS = { - 'd405': { - 'image_topic': '/d405/color/image_raw', - 'camera_info_topic': '/d405/color/camera_info', - }, - 'd435': { - 'image_topic': '/d435/color/image_raw', - 'camera_info_topic': '/d435/color/camera_info', - }, -} - - -def _norm_model(model: str) -> str: - m = model.strip().lower().replace(' ', '').replace('-', '') - if m.startswith('d405') or m in ('realsensed405', 'intelrealsensed405'): - return 'd405' - if m.startswith('d435') or m in ('realsensed435', 'intelrealsensed435'): - return 'd435' - return m - - -def list_realsense_devices() -> List[Tuple[str, str]]: - """返回 [(name, serial), ...]。""" - try: - import pyrealsense2 as rs - except Exception as exc: # noqa: BLE001 - raise RuntimeError( - '未安装 pyrealsense2。' - '请在 ros_flexiv 环境中安装:pip/conda install pyrealsense2' - ) from exc - out: List[Tuple[str, str]] = [] - for d in rs.context().devices: - name = d.get_info(rs.camera_info.name) - serial = d.get_info(rs.camera_info.serial_number) - out.append((name, serial)) - return out - - -def query_realsense_color_intrinsics( - model: str, - *, - serial: str = '', - width: int = 1280, - height: int = 720, -) -> RealsenseIntrinsics: - """ - 在给定分辨率下读取 D405/D435 设备上的彩色内参。 - - 不会启动流管道(只读取 profile 元数据)。 - """ - try: - import pyrealsense2 as rs - except Exception as exc: # noqa: BLE001 - raise RuntimeError( - '未安装 pyrealsense2。' - '请在 ros_flexiv 环境中安装:pip/conda install pyrealsense2' - ) from exc - - want = _norm_model(model) - if want not in ('d405', 'd435'): - raise ValueError(f'不支持的型号 {model!r};请使用 d405 或 d435') - - hint = want.upper() # D405 / D435 - serial = (serial or '').strip() - devices = list(rs.context().devices) - if not devices: - raise RuntimeError('未连接任何 RealSense 设备') - - chosen = None - for d in devices: - name = d.get_info(rs.camera_info.name) - sn = d.get_info(rs.camera_info.serial_number) - if serial and sn != serial: - continue - name_u = name.upper().replace(' ', '') - if hint in name_u or hint in name.upper(): - chosen = d - break - - if chosen is None: - avail = ', '.join( - f'{d.get_info(rs.camera_info.name)}' - f'({d.get_info(rs.camera_info.serial_number)})' - for d in devices - ) - raise RuntimeError( - f'没有匹配 model={want!r} serial={serial!r} 的 RealSense。' - f'已连接的设备:{avail or "无"}' - ) - - name = chosen.get_info(rs.camera_info.name) - sn = chosen.get_info(rs.camera_info.serial_number) - - best = None # (评分, width, height, fx, fy, cx, cy, 畸变系数) - for s in chosen.sensors: - for p in s.profiles: - if p.stream_type() != rs.stream.color: - continue - vp = p.as_video_stream_profile() - try: - intr = vp.get_intrinsics() - except Exception: # noqa: BLE001 - continue - w, h = int(intr.width), int(intr.height) - if w == int(width) and h == int(height): - score = 0 - else: - score = abs(w * h - int(width) * int(height)) + 1 - cand = ( - score, - w, - h, - float(intr.fx), - float(intr.fy), - float(intr.ppx), - float(intr.ppy), - [float(c) for c in list(intr.coeffs)[:5]], - ) - if best is None or cand[0] < best[0]: - best = cand - - if best is None: - raise RuntimeError(f'{name} ({sn}) 上没有彩色流 profile') - - _, w, h, fx, fy, cx, cy, coeffs = best - while len(coeffs) < 5: - coeffs.append(0.0) - return RealsenseIntrinsics( - model=want, - serial=sn, - width=w, - height=h, - fx=fx, - fy=fy, - cx=cx, - cy=cy, - dist=coeffs[:5], - ) - - -def is_realsense_source(name: str) -> bool: - """对 d405 / d435 及带命名空间的别名(d405_left、d405_right)返回 True。""" - return _norm_model(name or "") in ("d405", "d435") - - -def resolve_realsense_topics( - model: str, - *, - camera_namespace: str = '', - image_topic: str = '', - camera_info_topic: str = '', -) -> Tuple[str, str]: - """为空时,为 d405/d435 填充默认的 image/camera_info 话题。 - - ``model`` 可以是 ``d405_left`` / ``d405_right`` 这类话题命名空间。 - """ - ns = (camera_namespace or model or 'd405').strip().strip('/') - img = (image_topic or '').strip() - info = (camera_info_topic or '').strip() - if not img and ns: - img = f'/{ns}/color/image_raw' - if not info and ns: - info = f'/{ns}/color/camera_info' - return img, info - - -def apply_realsense_exposure( - device, - *, - auto_exposure: bool = True, - ae_limit_us: float = 3000.0, - emitter_enabled: bool = False, - laser_power: float = 0.0, - exposure_us: float | None = None, - gain: float | None = None, - log=None, -) -> list[str]: - """限制自动曝光 / 关闭投影器。腕部 D405 过曝通常是自动曝光过长 + 发射器导致。""" - import pyrealsense2 as rs - - notes: list[str] = [] - - def _set(sensor, opt, val) -> bool: - try: - if sensor.supports(opt): - sensor.set_option(opt, float(val)) - return True - except Exception: - return False - return False - - for sensor in device.query_sensors(): - if _set(sensor, rs.option.emitter_enabled, 1.0 if emitter_enabled else 0.0): - notes.append(f"emitter={int(bool(emitter_enabled))}") - laser_opt = getattr(rs.option, "laser_power", None) - if laser_opt is not None and not emitter_enabled: - _set(sensor, laser_opt, float(laser_power)) - # 必须在写曝光*之前*关闭自动曝光;D405 固件在自动曝光开启时会忽略曝光设置。 - if _set(sensor, rs.option.enable_auto_exposure, 1.0 if auto_exposure else 0.0): - notes.append(f"ae={int(bool(auto_exposure))}") - pri = getattr(rs.option, "auto_exposure_priority", None) - # priority 0 = 保帧压暗;无上限时不要设,让自动曝光自己变亮 - if pri is not None and ae_limit_us and auto_exposure: - _set(sensor, pri, 0.0) - limit = getattr(rs.option, "auto_exposure_limit", None) - if auto_exposure and limit is not None and ae_limit_us and ae_limit_us > 0: - if _set(sensor, limit, float(ae_limit_us)): - notes.append(f"ae_limit={int(ae_limit_us)}us") - if not auto_exposure: - if exposure_us is not None and _set(sensor, rs.option.exposure, float(exposure_us)): - notes.append(f"exposure={int(exposure_us)}us") - if gain is not None and _set(sensor, rs.option.gain, float(gain)): - notes.append(f"gain={gain}") - if log and notes: - log("RealSense 曝光设置:" + ", ".join(dict.fromkeys(notes))) - return notes diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/handeye_teach.py b/install/arm_application/lib/python3.11/site-packages/arm_application/handeye_teach.py deleted file mode 100644 index a78b0fc..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/handeye_teach.py +++ /dev/null @@ -1,668 +0,0 @@ -#!/usr/bin/env python3 -"""手眼示教:实时预览 + Free Drive + 按 Enter 拍照/记录关节。 - -两种后端 ------------- -ros(默认,整套栈正在运行): - - 关节来自 ``/get_arm_state`` - - 拖拽:示教器 Free Drive + 按住使能键 - 需保持:bash ~/ros2/scripts/run_real.sh - -rdk(软件 Free Drive): - - 先停掉 run_real.sh(RDK 独占) - - 按 'd' 通过 RDK 启用 FloatingJoint 拖拽 - - 关节来自 RDK 的 robot.states - - source ~/ros2/scripts/env.sh - ros2 run arm_application handeye_teach --ros-args -p backend:=rdk - -界面按键(预览窗口) - Enter / Space 拍照 + 记录关节 - d 启用 Free Drive(rdk)/ 显示示教器提示(ros) - s 停止 Free Drive(rdk)/ 保持 - q / Esc 结束 -""" - -from __future__ import annotations - -import os -import threading -import time -from datetime import datetime, timezone -from pathlib import Path -from typing import List, Optional - -import numpy as np -import rclpy -from rcl_interfaces.msg import ParameterDescriptor -from rclpy.node import Node - -from arm_application.ros_node import TolerantNode, param_as_str - -HELP = """ -================================================ - 手眼示教 TEACH:预览 -> 拖拽 -> 拍照+位姿 -================================================ - 窗口按键: - Enter / Space = 拍照 + 保存关节 - d = 开启 Free Drive - s = 关闭 Free Drive / 保持 - q / Esc = 结束 - 提示:让棋盘清晰,并占到画面的约 30-70% - 建议采 8-12 个角度有变化的位姿 -================================================ -""" - - -def _setup_matplotlib_font(): - """避免中文乱码:优先选用存在的中日韩(CJK)字体。""" - import matplotlib - - matplotlib.use('QtAgg') - from matplotlib import font_manager, rcParams - - candidates = [ - 'Noto Sans CJK SC', - 'Noto Sans CJK JP', - 'Noto Serif CJK SC', - 'AR PL UMing CN', - 'AR PL UKai CN', - 'WenQuanYi Micro Hei', - 'Source Han Sans CN', - 'DejaVu Sans', - ] - available = {f.name for f in font_manager.fontManager.ttflist} - chosen = None - for name in candidates: - if name in available: - chosen = name - break - if chosen is None: - # 按文件路径再试一次 - for path in ( - '/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc', - '/usr/share/fonts/opentype/noto/NotoSansCJK-Medium.ttc', - '/usr/share/fonts/opentype/noto/NotoSansCJK-DemiLight.ttc', - '/usr/share/fonts/truetype/arphic/uming.ttc', - ): - if os.path.isfile(path): - font_manager.fontManager.addfont(path) - prop = font_manager.FontProperties(fname=path) - chosen = prop.get_name() - break - if chosen: - rcParams['font.family'] = chosen - rcParams['axes.unicode_minus'] = False - return chosen - - -class RdkBridge: - """通过 rdk_py310 子进程(Python 3.10 ABI)与 Flexiv RDK 通信。""" - - def __init__(self, robot_sn: str, logger=None) -> None: - import json - import subprocess - - self._json = json - self._logger = logger - self.robot_sn = robot_sn - self._last_q: Optional[List[float]] = None - self._io = threading.Lock() - py = os.environ.get('RDK_PYTHON', '/home/cc/rdk_py310/bin/python') - bridge = Path.home() / 'ros2' / 'scripts' / 'rdk_drag_bridge.py' - if not bridge.is_file(): - bridge = Path('/home/cc/ros2/scripts/rdk_drag_bridge.py') - if not bridge.is_file(): - raise FileNotFoundError(f'找不到 rdk_drag_bridge.py:{bridge}') - - # 只保留 Flexiv 的库 —— 不要继承 conda 的 LD_LIBRARY_PATH(会让 RDK 卡死)。 - flexiv_lib = os.path.expanduser('~/flexiv_install/lib') - env = { - 'HOME': os.environ.get('HOME', ''), - 'PATH': f'{Path(py).parent}:/usr/bin:/bin', - 'LD_LIBRARY_PATH': flexiv_lib, - 'LANG': 'C.UTF-8', - 'SITE_PC_IP': os.environ.get('SITE_PC_IP', ''), - 'SITE_NET_IFACE': os.environ.get('SITE_NET_IFACE', ''), - } - # 不要继承 conda 的 PYTHONPATH。 - # 重要:stderr 不能用 PIPE —— RDK 日志会填满管道并让桥接进程死锁 - # (stdout 永远不返回)。改成写入日志文件。 - log_path = Path('/tmp/rdk_drag_bridge.log') - self._err_file = open(log_path, 'w', encoding='utf-8') - self._proc = subprocess.Popen( - [py, str(bridge)], - stdin=subprocess.PIPE, - stdout=subprocess.PIPE, - stderr=self._err_file, - text=True, - bufsize=1, - env=env, - ) - if logger: - logger.info(f'RDK 桥接已启动;日志 → {log_path}') - pong = self._ask({'cmd': 'ping'}, timeout=8.0) - if not pong.get('ok'): - raise RuntimeError( - f'RDK 桥接 ping 失败:{pong}。参见 {log_path}' - ) - if logger: - logger.info('RDK 桥接 ping 正常,正在连接机器人...') - conn = self._ask( - { - 'cmd': 'connect', - 'sn': robot_sn, - 'iface': os.environ.get('SITE_NET_IFACE', ''), - }, - timeout=45.0, - ) - if not conn.get('ok'): - raise RuntimeError( - f'RDK 连接失败:{conn.get("error")}。' - f'请先停掉 run_real.sh;切 AUTO Remote 并清除故障。参见 {log_path}' - ) - if logger: - logger.info(f'RDK 桥接就绪(py={pong.get("py")})sn={robot_sn}') - q0 = conn.get('q') or [] - if len(q0) >= 7: - self._last_q = [float(v) for v in q0[:7]] - - def _ask(self, msg: dict, timeout: float = 10.0) -> dict: - import select - - # 同一时刻只允许一条在途命令:相机/GUI 绝不能共用这个管道。 - if not self._io.acquire(timeout=max(timeout, 0.2)): - return {'ok': False, 'error': '桥接忙'} - try: - assert self._proc.stdin and self._proc.stdout - self._proc.stdin.write(self._json.dumps(msg) + '\n') - self._proc.stdin.flush() - end = time.monotonic() + timeout - while time.monotonic() < end: - if self._proc.poll() is not None: - tip = '/tmp/rdk_drag_bridge.log' - return { - 'ok': False, - 'error': f'桥接已退出 rc={self._proc.returncode};参见 {tip}', - } - ready, _, _ = select.select([self._proc.stdout], [], [], 0.05) - if not ready: - continue - line = self._proc.stdout.readline() - if not line: - continue - line = line.strip() - if not line.startswith('{'): - continue - try: - return self._json.loads(line) - except Exception as exc: # noqa: BLE001 - return {'ok': False, 'error': f'应答异常:{exc} {line!r}'} - return {'ok': False, 'error': '桥接超时'} - finally: - self._io.release() - - def drag_on(self, primitive: str = 'FloatingJoint', mode: str = 'soft') -> dict: - return self._ask( - {'cmd': 'drag_on', 'primitive': primitive, 'mode': mode}, - timeout=20.0, - ) - - def drag_off(self) -> dict: - return self._ask({'cmd': 'drag_off'}, timeout=6.0) - - def joints(self) -> Optional[List[float]]: - res = self._ask({'cmd': 'joints'}, timeout=2.0) - if res.get('ok'): - q = res.get('q') or [] - if len(q) >= 7: - self._last_q = [float(v) for v in q[:7]] - return self._last_q - return self._last_q - - def close(self) -> None: - try: - self._ask({'cmd': 'quit'}, timeout=3.0) - except Exception: - pass - try: - self._proc.terminate() - except Exception: - pass - try: - if getattr(self, '_err_file', None) is not None: - self._err_file.close() - except Exception: - pass - - -class HandeyeTeach(TolerantNode): - def __init__(self) -> None: - super().__init__('handeye_teach') - self.declare_parameter('output_dir', '/home/cc/ros2/handeye/tmp') - self.declare_parameter('width', 1280) - self.declare_parameter('height', 720) - self.declare_parameter('fps', 15) - self.declare_parameter('backend', 'ros') # ros | rdk - self.declare_parameter('robot_sn', os.environ.get('SITE_ROBOT_SN', '').strip()) - self.declare_parameter('drag_primitive', 'FloatingJoint') # or FloatingCartesian - self._serial = param_as_str(self, 'camera_serial', '') - self.declare_parameter('auto_exposure', True) - self.declare_parameter('ae_limit_us', 1800.0) - self.declare_parameter('emitter_enabled', False) - self.declare_parameter('exposure_us', 0.0) - self.declare_parameter('gain', 0.0) - # 目标采集点数。0 = 不限(按 q 结束)。 - # 设了就只是个"提醒":采够时提示可以收工,不强制关窗 —— - # 常常采到一半发现某个角度还没覆盖,强制退出反而要重开。 - self.declare_parameter('target_points', 0) - # 必须和 run_handeye.sh 的 TAUGHT 是同一个文件。只写 taught_poses.txt、 - # 脚本去读 taught_poses_<模式>.txt,merge 就会「文件在、内容空」。 - self.declare_parameter('poses_file', '') - - self.backend = str(self.get_parameter('backend').value).strip().lower() - self.robot_sn = str(self.get_parameter('robot_sn').value) - self.drag_primitive = str(self.get_parameter('drag_primitive').value).strip() - - self.output_dir = Path(str(self.get_parameter('output_dir').value)).expanduser() - self.images_dir = self.output_dir / 'images' - _pf = str(self.get_parameter('poses_file').value).strip() - self.poses_file = ( - Path(_pf).expanduser() if _pf else self.output_dir / 'taught_poses.txt' - ) - self.yaml_file = self.output_dir / 'taught_waypoint_positions.yaml' - self._last_capture_t = 0.0 - self.images_dir.mkdir(parents=True, exist_ok=True) - - self._captures: List[dict] = [] - self._latest_bgr: Optional[np.ndarray] = None - self._frame_lock = threading.Lock() - self._quit = False - self._busy = False - self._cmd_pending = False - self._drag_on = False - self._robot = None - self._rdk = None - self._get_state = None - self._cam_thread: Optional[threading.Thread] = None - self._pipe = None - self._fps = 15 - - if self.backend == 'rdk': - self._init_rdk() - else: - self._init_ros_state() - - self._start_camera() - font = _setup_matplotlib_font() - self._start_gui() - print(HELP) - if self.backend == 'rdk': - print('[backend=rdk] 按 d = 软拖拽(在 AUTO Remote 下可用,无需 Floating 许可)') - print(' run_real.sh 必须已停止。') - print(' 拖着就能按 Enter 拍照,不必先按 s') - else: - print('[backend=ros] 用示教器 Free Drive + 按住使能键来拖拽。') - print(' 或停掉 run_real.sh 后改用:-p backend:=rdk') - if font: - self.get_logger().info(f'界面字体:{font}') - self.create_timer(1.0 / max(1, self._fps), self._tick) - - def _init_ros_state(self) -> None: - from arm_msgs.srv import GetArmState - - self._get_state = self.create_client(GetArmState, 'get_arm_state') - if not self._get_state.wait_for_service(timeout_sec=10.0): - raise RuntimeError( - 'get_arm_state 不可用。请启动 run_real.sh,' - '或改用:-p backend:=rdk(需先停掉整套栈)' - ) - - def _init_rdk(self) -> None: - self.get_logger().info(f'正在把 RDK 桥接连到 {self.robot_sn} ...') - self._rdk = RdkBridge(self.robot_sn, logger=self.get_logger()) - self._robot = True # 标记:RDK 后端已就绪 - self.get_logger().info('RDK 已连接。按 d 启用 Free Drive。') - - def _start_camera(self) -> None: - import pyrealsense2 as rs - - w = int(self.get_parameter('width').value) - h = int(self.get_parameter('height').value) - fps = int(self.get_parameter('fps').value) - pipe = rs.pipeline() - profile = None - last_err = None - for ww, hh, ff in [ - (w, h, fps), (w, h, 15), (w, h, 10), - (640, 480, 30), (640, 480, 15), - ]: - try: - cfg = rs.config() - if self._serial: - cfg.enable_device(self._serial) - cfg.enable_stream(rs.stream.color, ww, hh, rs.format.bgr8, ff) - profile = pipe.start(cfg) - self._fps = ff - self.get_logger().info(f'相机 {ww}x{hh}@{ff}Hz') - break - except Exception as exc: # noqa: BLE001 - last_err = exc - try: - pipe.stop() - except Exception: # noqa: BLE001 - pass - pipe = rs.pipeline() - if profile is None: - raise RuntimeError( - f'无法打开 D405 —— 请先停掉 realsense_color_pub。({last_err})' - ) - self._pipe = pipe - try: - from arm_application.handeye_realsense import apply_realsense_exposure - - apply_realsense_exposure( - profile.get_device(), - auto_exposure=bool(self.get_parameter('auto_exposure').value), - ae_limit_us=float(self.get_parameter('ae_limit_us').value), - emitter_enabled=bool(self.get_parameter('emitter_enabled').value), - exposure_us=( - float(self.get_parameter('exposure_us').value) or None - ), - gain=(float(self.get_parameter('gain').value) or None), - log=self.get_logger().info, - ) - except Exception as exc: # noqa: BLE001 - self.get_logger().warn(f'曝光设置应用失败:{exc}') - self._cam_thread = threading.Thread(target=self._cam_loop, name='d405', daemon=True) - self._cam_thread.start() - - def _cam_loop(self) -> None: - while not self._quit: - try: - frames = self._pipe.wait_for_frames(timeout_ms=400) - color = frames.get_color_frame() - except Exception: # noqa: BLE001 - time.sleep(0.02) - continue - if not color: - continue - bgr = np.asanyarray(color.get_data()).copy() - with self._frame_lock: - self._latest_bgr = bgr - - def _start_gui(self) -> None: - import matplotlib.pyplot as plt - - self._plt = plt - self._fig, self._ax = plt.subplots(1, 1, figsize=(11, 7)) - self._fig.canvas.manager.set_window_title( - 'handeye_teach | Enter=拍照 d=拖拽 s=停止 q=退出' - ) - self._im = None - self._status = self._ax.text( - 0.02, - 0.98, - self._status_text(), - transform=self._ax.transAxes, - color='lime', - fontsize=13, - va='top', - fontweight='bold', - bbox=dict(boxstyle='round', facecolor='black', alpha=0.6), - ) - self._ax.axis('off') - self._fig.canvas.mpl_connect('key_press_event', self._on_key) - plt.ion() - plt.show(block=False) - - def _status_text(self) -> str: - drag = '拖拽开启' if self._drag_on else '拖拽关闭' - if self.backend == 'rdk': - tip = 'd=软拖拽 s=保持' - else: - tip = '示教器 FreeDrive+使能' - return ( - f'已采集:{len(self._captures)} [{drag}] ' - f'{tip} | Enter=拍照 q=退出' - ) - - def _on_key(self, event) -> None: - key = (event.key or '').lower() - if key in ('q', 'escape'): - self._quit = True - self.get_logger().info('收到退出请求') - return - if self._cmd_pending: - return - if key in ('enter', ' ', 'space', 'd', 's'): - self._cmd_pending = True - threading.Thread(target=self._run_key, args=(key,), daemon=True).start() - - def _run_key(self, key: str) -> None: - try: - if key in ('enter', ' ', 'space'): - self._capture_once() - elif key == 'd': - self._enable_drag() - elif key == 's': - self._disable_drag() - except Exception as exc: # noqa: BLE001 - self.get_logger().error(f'按键 {key}:{exc}') - finally: - self._cmd_pending = False - - def _enable_drag(self) -> None: - if self.backend != 'rdk': - self._drag_on = True - self.get_logger().warn( - 'ROS 后端:请用示教器的 Free Drive + 按住使能键。' - '想用软件拖拽:先停掉 run_real.sh,然后执行 ' - 'ros2 run arm_application handeye_teach --ros-args -p backend:=rdk' - ) - self._status.set_text(self._status_text()) - return - self.get_logger().info('正在启动软拖拽(预览保持实时刷新)...') - # soft = AUTO Remote 模式下的关节阻抗拖拽(不需要 Floating 许可) - res = self._rdk.drag_on(self.drag_primitive, mode='soft') - if res.get('ok'): - self._drag_on = True - self.get_logger().info( - f'拖拽已开启 mode={res.get("mode")} —— 推着机械臂走,Enter=拍照(s=保持,可选)' - ) - if res.get('hint'): - self.get_logger().info(str(res.get('hint'))) - else: - self._drag_on = False - self.get_logger().error(f'拖拽失败:{res.get("error")}') - # 状态文字由 GUI 线程里的 _tick 刷新 - - def _disable_drag(self) -> None: - if self.backend == 'rdk' and getattr(self, '_rdk', None) is not None: - res = self._rdk.drag_off() - if not res.get('ok'): - self.get_logger().warn(f'停止拖拽:{res.get("error")}') - self._drag_on = False - self.get_logger().info('Free Drive 已关闭 / 保持') - - def _tick(self) -> None: - if self._quit: - return - with self._frame_lock: - bgr = None if self._latest_bgr is None else self._latest_bgr.copy() - if bgr is None: - try: - self._fig.canvas.flush_events() - except Exception: # noqa: BLE001 - pass - return - rgb = bgr[:, :, ::-1] - if self._im is None: - self._im = self._ax.imshow(rgb) - else: - self._im.set_data(rgb) - try: - self._status.set_text(self._status_text()) - self._fig.canvas.draw_idle() - self._fig.canvas.flush_events() - except Exception: # noqa: BLE001 - pass - - def _read_joints(self) -> Optional[List[float]]: - if self.backend == 'rdk' and getattr(self, '_rdk', None) is not None: - q = self._rdk.joints() - if q is None: - self.get_logger().error('读取 RDK 关节失败') - return q - from arm_msgs.srv import GetArmState - - fut = self._get_state.call_async(GetArmState.Request()) - end = time.monotonic() + 2.0 - while rclpy.ok() and not fut.done() and time.monotonic() < end: - rclpy.spin_once(self, timeout_sec=0.02) - res = fut.result() if fut.done() else None - if res is None or not res.success: - return None - q = list(res.joint_positions) - return [float(v) for v in q[:7]] if len(q) >= 7 else None - - def _capture_once(self) -> None: - if self._busy: - return - self._busy = True - try: - with self._frame_lock: - bgr = None if self._latest_bgr is None else self._latest_bgr.copy() - if bgr is None: - self.get_logger().warn('还没有相机帧') - return - q = self._read_joints() - if q is None: - self.get_logger().error('读取关节失败') - return - now = time.monotonic() - if now - self._last_capture_t < 0.8: - self.get_logger().warn('按太快,忽略(防 Enter 连发)') - return - if self._captures: - last = self._captures[-1]['joints'] - delta = max(abs(a - b) for a, b in zip(q, last)) - if delta < 0.015: - self.get_logger().warn( - f'关节几乎没动(Δ={delta:.4f} rad),忽略这次拍照。' - '先拖到另一个姿态再按 Enter。' - ) - return - self._last_capture_t = now - - idx = len(self._captures) - stamp = datetime.now(timezone.utc).strftime('%Y%m%d_%H%M%S') - img_path = self.images_dir / f'teach_{idx:02d}_{stamp}.png' - try: - import cv2 - - cv2.imwrite(str(img_path), bgr) - except Exception: # noqa: BLE001 - from PIL import Image as PILImage - - PILImage.fromarray(bgr[:, :, ::-1]).save(str(img_path)) - - line = ', '.join(f'{v:.6f}' for v in q) + ',' - self._captures.append( - {'index': idx, 'joints': q, 'image': str(img_path), 'line': line} - ) - with self.poses_file.open('a', encoding='utf-8') as f: - f.write(f'# pose {idx} {stamp}\n') - f.write(line + '\n') - f.write(f'# image {img_path}\n') - print(f'\n# pose {idx} {img_path.name}') - print(line) - n = idx + 1 - try: - target = int(self.get_parameter('target_points').value) - except Exception: # noqa: BLE001 - target = 0 - if target > 0: - if n < target: - self.get_logger().info( - f'[{n}/{target}] 已保存照片+关节 —— 还差 {target - n} 个点' - ) - elif n == target: - self.get_logger().info( - f'[{n}/{target}] 已采够 {target} 个点。' - ' 建议按 q 结束,然后跑 merge + calibrate;' - ' 想多采几个点也可以继续按 Enter。' - ) - else: - self.get_logger().info( - f'[{n}/{target}] 已保存照片+关节 —— 已超出目标 ' - f'{n - target} 个点(会用全部点求解)' - ) - else: - self.get_logger().info(f'[{n}] 已保存照片+关节') - self._write_yaml_snippet() - finally: - self._busy = False - - def _write_yaml_snippet(self) -> None: - lines = [ - '# 粘贴到 handeye_calibrate.yaml -> waypoint_positions', - f'# num_poses: {len(self._captures)}', - 'waypoint_positions: [', - ] - for c in self._captures: - lines.append(f' # pose {c["index"]}') - lines.append(f' {c["line"]}') - lines.append(']') - self.yaml_file.write_text('\n'.join(lines) + '\n', encoding='utf-8') - - def finish(self) -> None: - self._quit = True - if self._cam_thread is not None: - self._cam_thread.join(timeout=1.5) - if self._drag_on: - self._disable_drag() - if getattr(self, '_rdk', None) is not None: - try: - self._rdk.close() - except Exception: - pass - n = len(self._captures) - print('\n========== 示教完成 ==========') - print(f'位姿: {n}') - print(f'关节: {self.poses_file}') - print(f'yaml: {self.yaml_file}') - print(f'图像: {self.images_dir}') - if n >= 1: - print('\n--- 粘贴到 handeye_calibrate.yaml ---\n') - print(self.yaml_file.read_text(encoding='utf-8')) - print('同时设置 num_poses:', n) - if n < 5: - self.get_logger().warn(f'只有 {n} 个位姿;至少需要 5 个(建议 8-12 个)。') - - -def main(args=None) -> None: - rclpy.init(args=args) - node = None - try: - node = HandeyeTeach() - while rclpy.ok() and not node._quit: - rclpy.spin_once(node, timeout_sec=0.05) - except SystemExit: - pass - except KeyboardInterrupt: - pass - finally: - if node is not None: - node.finish() - try: - node._pipe.stop() - except Exception: # noqa: BLE001 - pass - node.destroy_node() - if rclpy.ok(): - rclpy.shutdown() - - -if __name__ == '__main__': - main() diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/handeye_waypoints.py b/install/arm_application/lib/python3.11/site-packages/arm_application/handeye_waypoints.py deleted file mode 100644 index e03d069..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/handeye_waypoints.py +++ /dev/null @@ -1,525 +0,0 @@ -#!/usr/bin/env python3 -"""手眼标定路点执行器。 - -逐个移动到每个关节路点,等到位后停留一段时间, -让相机(或操作者)采集一张标定图像。 - -capture_mode: - auto — 停留 dwell_sec 后进入下一个位姿 - keypress — 在终端按 Enter 继续 - preview — OpenCV 实时相机 + Enter/Space 确认(示教时推荐) - -处于 ``preview`` 模式时,可在预览窗口打开期间用示教器的 **Free Drive** -拖拽微调(ros2_control 保持 AUTO Remote;拖拽经由示教器,而非 RDK)。 -""" - -from __future__ import annotations - -import csv -import array -import sys -import threading -import time -from datetime import datetime, timezone -from pathlib import Path -from typing import List, Optional - -import numpy as np -import rclpy -from rclpy.action import ActionClient -from rclpy.node import Node -from rclpy.qos import qos_profile_sensor_data -from sensor_msgs.msg import Image -from std_msgs.msg import String - -from arm_application.handeye_realsense import ( - is_realsense_source, - resolve_realsense_topics, -) -from arm_application.site_io import joint_prefix_default - -from arm_msgs.action import FollowJointTrajectory -from arm_msgs.srv import GetArmState - -from arm_application.ros_node import TolerantNode - -try: - import cv2 -except Exception: # noqa: BLE001 - cv2 = None # type: ignore - -DEFAULT_JOINTS = [ - 'joint1', 'joint2', 'joint3', 'joint4', 'joint5', 'joint6', 'joint7', -] - -DEFAULT_TIMES = [4.0] * 12 -DEFAULT_POSITIONS = [ - 0.00, -0.70, 0.00, 1.57, 0.00, 0.70, 0.00, - 0.35, -0.70, 0.00, 1.57, 0.00, 0.70, 0.00, - -0.35, -0.70, 0.00, 1.57, 0.00, 0.70, 0.00, - 0.00, -0.90, 0.00, 1.70, 0.00, 0.85, 0.00, - 0.00, -0.50, 0.00, 1.40, 0.00, 0.55, 0.00, - 0.20, -0.70, 0.15, 1.57, 0.40, 0.70, 0.30, - -0.20, -0.70, -0.15, 1.57, -0.40, 0.70, -0.30, - 0.25, -0.80, 0.10, 1.65, 0.25, 0.90, -0.40, - -0.25, -0.80, -0.10, 1.65, -0.25, 0.90, 0.40, - 0.15, -0.60, 0.20, 1.50, -0.35, 0.60, 0.50, - -0.15, -0.60, -0.20, 1.50, 0.35, 0.60, -0.50, - 0.00, -0.70, 0.00, 1.57, 0.00, 0.70, 0.00, -] - -PREVIEW_HELP_GUI = """ -=== 位姿预览 / 拖拽调整(OpenCV 窗口)=== -1. 示教器:Free Drive + 按住使能键拖拽微调 -2. 预览窗口:确认棋盘在画面内且清晰 -3. 键盘:Enter / Space = 下一个位姿;q / Esc = 退出 -""" - -PREVIEW_HELP_HEADLESS = """ -=== 位姿预览 / 拖拽调整(无 OpenCV 窗口)=== -1. 另开终端查看画面: - ros2 run rqt_image_view rqt_image_view /handeye/preview_image -2. 示教器:Free Drive + 按住使能键拖拽微调 -3. 本终端:Enter = 确认下一个位姿;输入 q 回车 = 退出 -""" - - -def _cv_gui_available() -> bool: - if cv2 is None: - return False - try: - cv2.namedWindow('_handeye_gui_probe', cv2.WINDOW_NORMAL) - cv2.destroyWindow('_handeye_gui_probe') - return True - except Exception: # noqa: BLE001 - return False - - -def _image_to_bgr(msg: Image) -> np.ndarray: - h, w = int(msg.height), int(msg.width) - enc = (msg.encoding or '').lower() - data = np.frombuffer(msg.data, dtype=np.uint8) - if enc in ('bgr8', 'rgb8'): - img = data.reshape(h, w, 3) - return img[:, :, ::-1].copy() if enc == 'rgb8' else img - if enc in ('mono8', '8uc1'): - gray = data.reshape(h, w) - return np.stack([gray, gray, gray], axis=-1) - if enc in ('bgra8', 'rgba8'): - img = data.reshape(h, w, 4) - bgr = img[:, :, :3] - return bgr[:, :, ::-1].copy() if enc == 'rgba8' else bgr - raise RuntimeError(f'不支持的图像编码:{msg.encoding!r}') - - -class HandeyeWaypoints(TolerantNode): - def __init__(self) -> None: - super().__init__('handeye_waypoints') - self.declare_parameter('joint_prefix', joint_prefix_default()) - self.declare_parameter('joint_names', DEFAULT_JOINTS) - self.declare_parameter('velocity_scale', 0.12) - self.declare_parameter('action_name', 'follow_joint_trajectory') - self.declare_parameter('waypoint_times', DEFAULT_TIMES) - self.declare_parameter('waypoint_positions', DEFAULT_POSITIONS) - self.declare_parameter('dwell_sec', 2.5) - # auto | keypress | preview - self.declare_parameter('capture_mode', 'auto') - self.declare_parameter('start_index', 0) - self.declare_parameter('log_csv', '') - self.declare_parameter('capture_topic', 'handeye/capture') - self.declare_parameter('camera_source', 'd405') - self.declare_parameter('camera_namespace', '') - self.declare_parameter('image_topic', '') - self.declare_parameter('preview_window', True) - self.declare_parameter('append_poses_file', '/tmp/handeye_taught_poses.txt') - - prefix = str(self.get_parameter('joint_prefix').value or '') - base = list( - self.get_parameter('joint_names').get_parameter_value().string_array_value - or DEFAULT_JOINTS - ) - self.joint_names = [f'{prefix}{n}' for n in base] - self.velocity_scale = float(self.get_parameter('velocity_scale').value) - self.action_name = str(self.get_parameter('action_name').value) - self.dwell_sec = float(self.get_parameter('dwell_sec').value) - self.capture_mode = str(self.get_parameter('capture_mode').value).strip().lower() - self.start_index = max(0, int(self.get_parameter('start_index').value)) - self.log_csv = str(self.get_parameter('log_csv').value or '').strip() - topic = str(self.get_parameter('capture_topic').value) - self.preview_window = bool(self.get_parameter('preview_window').value) - self.append_poses_file = str( - self.get_parameter('append_poses_file').value or '' - ).strip() - - cam_src = str(self.get_parameter('camera_source').value).strip().lower() - img_topic = str(self.get_parameter('image_topic').value or '').strip() - ns = str(self.get_parameter('camera_namespace').value or '').strip() - if is_realsense_source(cam_src) and not img_topic: - img_topic, _ = resolve_realsense_topics( - cam_src, camera_namespace=ns, image_topic='', camera_info_topic='' - ) - self.image_topic = img_topic - - self._client = ActionClient(self, FollowJointTrajectory, self.action_name) - self._get_state = self.create_client(GetArmState, 'get_arm_state') - self._capture_pub = self.create_publisher(String, topic, 10) - self._preview_pub = self.create_publisher(Image, 'handeye/preview_image', 10) - self._latest_bgr: Optional[np.ndarray] = None - self._cv_gui = _cv_gui_available() and self.preview_window - if self.capture_mode == 'preview' and not self._cv_gui: - self.get_logger().warn( - 'OpenCV 没有 GUI(无头环境)。请在 /handeye/preview_image 上预览,' - '在本终端按 Enter 确认。' - ) - if self.image_topic and self.capture_mode == 'preview': - self.create_subscription( - Image, self.image_topic, self._on_image, qos_profile_sensor_data - ) - self.get_logger().info(f'预览图像:{self.image_topic}') - - def _on_image(self, msg: Image) -> None: - try: - self._latest_bgr = _image_to_bgr(msg) - except Exception: # noqa: BLE001 - pass - - def run(self) -> int: - if self.capture_mode == 'preview': - if cv2 is None: - self.get_logger().error('preview 模式需要 OpenCV(cv2)') - return 1 - if not self.image_topic: - self.get_logger().error('preview 模式需要 image_topic 或 camera_source') - return 1 - - times = list(self.get_parameter('waypoint_times').value) - positions = list(self.get_parameter('waypoint_positions').value) - n_j = len(self.joint_names) - n_pts = len(times) - if n_pts < 1: - self.get_logger().error('waypoint_times 为空') - return 1 - if len(positions) != n_pts * n_j: - self.get_logger().error( - f'waypoint_positions 长度 {len(positions)} != {n_pts}*{n_j}' - ) - return 1 - if self.start_index >= n_pts: - self.get_logger().error( - f'start_index {self.start_index} >= 路点总数 {n_pts}' - ) - return 1 - - if not self._client.wait_for_server(timeout_sec=15.0): - self.get_logger().error( - f'Action [{self.action_name}] 不可用。' - '请先启动整套栈:bash scripts/run_real.sh' - ) - return 2 - - csv_file = None - csv_writer: Optional[csv.writer] = None - if self.log_csv: - path = Path(self.log_csv).expanduser() - path.parent.mkdir(parents=True, exist_ok=True) - csv_file = path.open('w', newline='', encoding='utf-8') - csv_writer = csv.writer(csv_file) - csv_writer.writerow( - ['index', 'utc_iso', 'move_duration_s'] - + [f'target_{n}' for n in self.joint_names] - + [f'measured_{n}' for n in self.joint_names] - ) - self.get_logger().info(f'正在记录采集数据 → {path}') - - if self.capture_mode == 'preview': - print(PREVIEW_HELP_GUI if self._cv_gui else PREVIEW_HELP_HEADLESS) - - self.get_logger().info( - f'手眼标定:{n_pts} 个位姿,start={self.start_index},' - f'v_scale={self.velocity_scale},dwell={self.dwell_sec}s,' - f'mode={self.capture_mode}' - ) - self.get_logger().warn( - '清理工作空间;让棋盘保持在视野内。Ctrl+C 可中止。' - ) - - win = 'handeye_preview' - try: - for i in range(self.start_index, n_pts): - q = positions[i * n_j : (i + 1) * n_j] - move_t = max(1.0, float(times[i])) - self.get_logger().info( - f'[{i + 1}/{n_pts}] 移动中(约 {move_t:.1f}s)...' - ) - code = self._move_one(q, move_t) - if code != 0: - return code - - measured = self._read_joints() - self._announce_capture(i, n_pts, q, measured) - - if csv_writer is not None and csv_file is not None: - csv_writer.writerow( - [i, datetime.now(timezone.utc).isoformat(), move_t] - + list(q) - + list(measured if measured else [float('nan')] * n_j) - ) - csv_file.flush() - - if not self._wait_capture(i, n_pts): - self.get_logger().info('用户已中止') - return 0 - - # 在 preview 模式下确认后,保存示教关节 - if self.capture_mode == 'preview': - taught = self._read_joints() - if taught: - self._save_taught_pose(i, taught) - finally: - if csv_file is not None: - csv_file.close() - if cv2 is not None: - try: - cv2.destroyWindow(win) - except Exception: # noqa: BLE001 - pass - - self.get_logger().info('手眼标定路点序列执行完毕') - if self.append_poses_file and self.capture_mode == 'preview': - self.get_logger().info( - f'示教位姿已保存 → {self.append_poses_file}' - ) - return 0 - - def _save_taught_pose(self, index: int, joints: List[float]) -> None: - line = ', '.join(f'{v:.6f}' for v in joints[:7]) + ',' - print(f'# pose {index}') - print(line) - if not self.append_poses_file: - return - path = Path(self.append_poses_file).expanduser() - path.parent.mkdir(parents=True, exist_ok=True) - with path.open('a', encoding='utf-8') as f: - f.write(f'# pose {index}\n') - f.write(line + '\n') - self.get_logger().info(f'已保存位姿 {index} → {path}') - - def _move_one(self, positions: List[float], duration: float) -> int: - goal = FollowJointTrajectory.Goal() - goal.joint_names = self.joint_names - goal.num_points = 1 - goal.velocity_scale = self.velocity_scale - goal.positions = list(positions) - goal.time_from_start = [float(duration)] - - send = self._client.send_goal_async(goal) - if not self._wait_future(send, 10.0, '发送目标'): - return 3 - handle = send.result() - if handle is None or not handle.accepted: - self.get_logger().error('目标被拒绝') - return 4 - - res_fut = handle.get_result_async() - if not self._wait_future(res_fut, max(60.0, duration * 3.0), '结果'): - return 5 - result = res_fut.result().result - if not result.success: - self.get_logger().error(f'移动失败:{result.message}') - return 6 - return 0 - - def _wait_future(self, fut, timeout: float, label: str) -> bool: - deadline = time.monotonic() + timeout - while rclpy.ok() and not fut.done(): - rclpy.spin_once(self, timeout_sec=0.05) - if time.monotonic() > deadline: - self.get_logger().error(f'等待 {label} 超时') - return False - return fut.done() - - def _read_joints(self) -> Optional[List[float]]: - if not self._get_state.wait_for_service(timeout_sec=0.5): - return None - fut = self._get_state.call_async(GetArmState.Request()) - if not self._wait_future(fut, 2.0, 'get_arm_state'): - return None - res = fut.result() - if res is None or not res.success: - return None - return list(res.joint_positions) - - def _announce_capture( - self, - index: int, - n_pts: int, - target: List[float], - measured: Optional[List[float]], - ) -> None: - msg = String() - msg.data = f'capture:{index}:{n_pts}' - self._capture_pub.publish(msg) - q_str = ', '.join(f'{v:.4f}' for v in (measured or target)) - if self.capture_mode == 'preview': - self.get_logger().info( - f'[{index + 1}/{n_pts}] 已到位 —— 用 Free Drive 调整,然后按 Enter/Space' - ) - else: - self.get_logger().info( - f'[{index + 1}/{n_pts}] 已到位 —— 现在采集 q=[{q_str}]' - ) - - def _wait_capture(self, index: int, n_pts: int) -> bool: - if self.capture_mode == 'preview': - return self._wait_preview(index, n_pts) - - if self.capture_mode in ('key', 'keypress', 'manual'): - self.get_logger().info( - '采集完成后按 Enter(q+Enter 退出)...' - ) - for _ in range(5): - rclpy.spin_once(self, timeout_sec=0.05) - line = sys.stdin.readline() - if not line or line.strip().lower() in ('q', 'quit', 'exit'): - return False - return True - - end = time.monotonic() + max(0.0, self.dwell_sec) - while rclpy.ok() and time.monotonic() < end: - rclpy.spin_once(self, timeout_sec=0.05) - return rclpy.ok() - - def _annotate_preview( - self, bgr: np.ndarray, index: int, n_pts: int - ) -> np.ndarray: - vis = bgr.copy() - if cv2 is None: - return vis - cv2.putText( - vis, - f'位姿 {index + 1}/{n_pts}', - (12, 28), - cv2.FONT_HERSHEY_SIMPLEX, - 0.7, - (0, 255, 0), - 2, - ) - cv2.putText( - vis, - 'Free Drive 拖拽 | Enter=下一个 q=退出', - (12, 56), - cv2.FONT_HERSHEY_SIMPLEX, - 0.6, - (0, 255, 255), - 2, - ) - return vis - - def _publish_preview(self, bgr: np.ndarray) -> None: - msg = Image() - msg.header.stamp = self.get_clock().now().to_msg() - msg.header.frame_id = 'camera' - msg.height, msg.width = bgr.shape[0], bgr.shape[1] - msg.encoding = 'bgr8' - msg.is_bigendian = 0 - msg.step = msg.width * 3 - msg.data = array.array('B', bgr.tobytes()) # 快速路径;用 bytes 会多花约 40 ms - self._preview_pub.publish(msg) - - def _wait_preview(self, index: int, n_pts: int) -> bool: - if self._cv_gui: - return self._wait_preview_opencv(index, n_pts) - return self._wait_preview_terminal(index, n_pts) - - def _wait_preview_terminal(self, index: int, n_pts: int) -> bool: - confirmed = threading.Event() - quit_req = threading.Event() - - def _stdin_reader() -> None: - try: - line = sys.stdin.readline() - except Exception: # noqa: BLE001 - quit_req.set() - return - if not line or line.strip().lower() in ('q', 'quit', 'exit'): - quit_req.set() - else: - confirmed.set() - - self.get_logger().info( - f'[{index + 1}/{n_pts}] 用 Free Drive 调整,然后按 Enter ' - '(q+Enter 退出)' - ) - reader = threading.Thread(target=_stdin_reader, daemon=True) - reader.start() - - no_frame_warn = False - while rclpy.ok(): - rclpy.spin_once(self, timeout_sec=0.05) - if confirmed.is_set(): - return True - if quit_req.is_set(): - return False - if not reader.is_alive() and not confirmed.is_set() and not quit_req.is_set(): - return False - - bgr = self._latest_bgr - if bgr is None: - if not no_frame_warn: - self.get_logger().warn( - f'正在等待 {self.image_topic} ...', - throttle_duration_sec=3.0, - ) - no_frame_warn = True - continue - vis = self._annotate_preview(bgr, index, n_pts) - self._publish_preview(vis) - return False - - def _wait_preview_opencv(self, index: int, n_pts: int) -> bool: - assert cv2 is not None - win = 'handeye_preview' - cv2.namedWindow(win, cv2.WINDOW_NORMAL) - - no_frame_warn = False - while rclpy.ok(): - rclpy.spin_once(self, timeout_sec=0.02) - bgr = self._latest_bgr - if bgr is None: - if not no_frame_warn: - self.get_logger().warn( - f'正在等待 {self.image_topic} ...', - throttle_duration_sec=3.0, - ) - no_frame_warn = True - key = cv2.waitKey(30) & 0xFF - else: - vis = self._annotate_preview(bgr, index, n_pts) - self._publish_preview(vis) - cv2.imshow(win, vis) - key = cv2.waitKey(30) & 0xFF - - if key in (13, 10, 32): - return True - if key in (27, ord('q'), ord('Q')): - return False - return False - - -def main(args=None) -> None: - rclpy.init(args=args) - node = HandeyeWaypoints() - code = 1 - try: - code = node.run() - except KeyboardInterrupt: - code = 0 - finally: - node.destroy_node() - if rclpy.ok(): - rclpy.shutdown() - raise SystemExit(code) - - -if __name__ == '__main__': - main() diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/hole_detect_hough.py b/install/arm_application/lib/python3.11/site-packages/arm_application/hole_detect_hough.py deleted file mode 100644 index e99a025..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/hole_detect_hough.py +++ /dev/null @@ -1,844 +0,0 @@ -"""工件二阶段检测:YOLO 定位工件 + HoughCircles 检测左右螺纹孔中心。""" - -from __future__ import annotations - -import logging - -from pathlib import Path -from typing import Any - -import cv2 -import numpy as np -import yaml - -_PKG_CONFIG = Path(__file__).resolve().parents[1] / "config" / "hole_detect.yaml" -_WS_CONFIG = Path.home() / "ros2" / "src" / "arm_application" / "config" / "hole_detect.yaml" -DEFAULT_CONFIG = _PKG_CONFIG if _PKG_CONFIG.is_file() else _WS_CONFIG - - -def load_config(path: str | Path | None = None) -> dict[str, Any]: - cfg_path = Path(path) if path else DEFAULT_CONFIG - with open(cfg_path, encoding="utf-8") as f: - data = yaml.safe_load(f) or {} - if not isinstance(data, dict): - raise ValueError(f"配置格式错误: {cfg_path}") - return data - - -logger = logging.getLogger(__name__) - - -def _fail( - msg: str, - draw_img: np.ndarray, - bbox: tuple[int, int, int, int] | None = None, - gate_block: bool = False, -) -> dict[str, Any]: - return { - "status": False, - "msg": msg, - "hole_points": [], - "hole_radii": [], - "bbox": list(bbox) if bbox is not None else None, - "gate_block": gate_block, - "draw_img": draw_img, - } - - -def _draw_bbox( - img: np.ndarray, - bbox: tuple[int, int, int, int], - color=(0, 255, 0), - label: str = "", -) -> None: - """画工件框。``label`` 是模型给出的类别名(由标签文件决定)。 - - 这里刻意**不写死类名**:以前写死了 "gongjian",但实际模型的类别是 - "workpiece",图上的字和模型的类名对不上,排查时会被误导。 - 现在用 ``Detection.cls_name``,也就是 ``weights.sh labels`` 里能读到的那份。 - """ - x1, y1, x2, y2 = bbox - cv2.rectangle(img, (x1, y1), (x2, y2), color, 2) - text = (label or "").strip() - if text: - cv2.putText(img, text, (x1, max(20, y1 - 8)), cv2.FONT_HERSHEY_SIMPLEX, 0.7, color, 2) - - -def _best_label(dets) -> str: - """取置信度最高那个检测的类名(由标签文件决定)。没有则返回空串。""" - if not dets: - return "" - try: - best = max(dets, key=lambda d: float(d.conf)) - except Exception: # noqa: BLE001 - return "" - return str(getattr(best, "cls_name", "") or "").strip() - - -def _draw_center_gate(img: np.ndarray, max_dx: float, max_dy: float, ok: bool) -> None: - h, w = img.shape[:2] - cx, cy = w * 0.5, h * 0.5 - x1 = int(round(cx - max_dx)) - y1 = int(round(cy - max_dy)) - x2 = int(round(cx + max_dx)) - y2 = int(round(cy + max_dy)) - color = (0, 255, 0) if ok else (0, 165, 255) - cv2.rectangle(img, (x1, y1), (x2, y2), color, 1) - cv2.drawMarker(img, (int(cx), int(cy)), color, markerType=cv2.MARKER_CROSS, markerSize=18, thickness=1) - - -def _bbox_center_ok( - bbox: tuple[int, int, int, int], - img_w: int, - img_h: int, - cfg: dict[str, Any], -) -> tuple[bool, float, float, float, float]: - """返回 (是否居中, bbox_cx, bbox_cy, max_dx, max_dy)。""" - x1, y1, x2, y2 = bbox - bx = 0.5 * (x1 + x2) - by = 0.5 * (y1 + y2) - max_dx = float(cfg.get("center_max_offset_ratio_x", 0.12)) * img_w - max_dy = float(cfg.get("center_max_offset_ratio_y", 0.12)) * img_h - ok = abs(bx - img_w * 0.5) <= max_dx and abs(by - img_h * 0.5) <= max_dy - return ok, bx, by, max_dx, max_dy - - -def _draw_holes( - img: np.ndarray, - points: list[list[float]], - radii: list[float] | None = None, -) -> None: - """画孔轮廓圆 + 中心点(十字+实心点)+ 坐标。""" - for i, (cx, cy) in enumerate(points): - px, py = int(round(cx)), int(round(cy)) - r = 12.0 if radii is None or i >= len(radii) else float(radii[i]) - rr = max(4, int(round(r))) - # 轮廓 - cv2.circle(img, (px, py), rr, (0, 0, 255), 2) - # 中心十字 + 黄点 - cv2.drawMarker(img, (px, py), (0, 0, 255), markerType=cv2.MARKER_CROSS, markerSize=16, thickness=2) - cv2.circle(img, (px, py), 3, (0, 255, 255), -1) - label = f"P{i + 1}({px},{py}) r={rr}" - cv2.putText(img, label, (px + 12, py - 8), cv2.FONT_HERSHEY_SIMPLEX, 0.55, (0, 0, 255), 2) - - -def _parse_best_bbox(dets, conf_thr: float) -> tuple[int, int, int, int] | None: - """最多取 1 个工件:取置信度最高且 >= conf 的框。""" - if not dets: - return None - ordered = sorted(dets, key=lambda d: d.conf, reverse=True) - for det in ordered: - if float(det.conf) < conf_thr: - continue - return tuple(int(v) for v in det.xyxy) # type: ignore[return-value] - return None - - -def _keypoint_holes( - dets, - *, - conf_thr: float, - min_kconf: float, - radius_px: float, - min_dist_px: float, -): - """pose 模型直接给出的 k1/k2 关键点当孔位。 - - 现场约定(见 ``pose_detector``):k0 跟踪、k1/k2 对孔。 - 返回 ``((k1x,k1y),(k2x,k2y),r,r)``,拿不到可信关键点时返回 None - (不是 pose 模型 / 关键点置信度不够 / 两点几乎重合),调用方回落到找圆。 - - 为什么值得优先用关键点:Hough / 亮环那套是在**孔本身的图像特征**上找圆, - 光照、反光、通止规尖伸进视野都会把圆心拉偏;而关键点是模型在训练分布里 - 直接回归出来的,对这几类干扰天然更稳。 - """ - if not dets: - return None - for det in sorted(dets, key=lambda d: d.conf, reverse=True): - if float(det.conf) < conf_thr: - continue - kpts = getattr(det, "kpts", None) - if kpts is None: - continue - kpts = np.asarray(kpts, dtype=float) - if kpts.ndim != 2 or kpts.shape[0] < 3 or kpts.shape[1] < 3: - continue - k1, k2 = kpts[1].copy(), kpts[2].copy() - if not (np.isfinite(k1[:2]).all() and np.isfinite(k2[:2]).all()): - continue - if float(k1[2]) < min_kconf or float(k2[2]) < min_kconf: - logger.info( - "k1/k2 关键点置信度不足(%.2f / %.2f < %.2f)—— 回落到找圆", - float(k1[2]), - float(k2[2]), - min_kconf, - ) - continue - dist = float(np.hypot(k1[0] - k2[0], k1[1] - k2[1])) - if dist < float(min_dist_px): - logger.info( - "k1/k2 两关键点只差 %.1fpx(< %.1fpx)—— 视为不可信,回落到找圆", - dist, - min_dist_px, - ) - continue - r = float(radius_px) - # **刻意不按图像 x 交换左右**。 - # Hough 路径的 k1/k2 是"画面左孔 / 右孔"(位置定义),但 pose 模型学出来的 - # k1/k2 是**固定语义**(训练时标注的那个物理孔)。工件只要转个角度, - # 位置就会翻面;按 x 强制交换会让 `target_hole=k1` 时左时右地指向两个不同 - # 的物理孔 —— 那是最难查的一类现场问题。 - # 下游怎么认这两个点由 `stage2.k1_label` 决定: - # hole_points[0] = 模型的 k1,hole_points[1] = 模型的 k2, - # 所以 k1_label="left" ↔ k1 就是模型的 k1(见 stage2_locate_node._snap)。 - return (float(k1[0]), float(k1[1])), (float(k2[0]), float(k2[1])), r, r - return None - - -def _refine_circle_center( - gray: np.ndarray, - cx: float, - cy: float, - r: float, -) -> tuple[float, float]: - """Hough 整数圆心 → 暗孔连通域一阶矩(亚像素)。失败则退回原圆心。""" - h, w = gray.shape[:2] - rad = max(5.0, float(r)) - half = int(round(2.2 * rad)) - x0 = max(0, int(round(cx)) - half) - y0 = max(0, int(round(cy)) - half) - x1 = min(w, int(round(cx)) + half) - y1 = min(h, int(round(cy)) + half) - if x1 - x0 < 8 or y1 - y0 < 8: - return cx, cy - roi = gray[y0:y1, x0:x1] - blur = cv2.GaussianBlur(roi, (5, 5), 1.0) - _, bw = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU) - n, labels, stats, cents = cv2.connectedComponentsWithStats(bw, 8) - if n <= 1: - return cx, cy - ex, ey = cx - x0, cy - y0 - min_area = np.pi * (0.35 * rad) ** 2 - max_area = np.pi * (1.8 * rad) ** 2 - best_i = 0 - best_d = 1e18 - for i in range(1, n): - area = float(stats[i, cv2.CC_STAT_AREA]) - if area < min_area or area > max_area: - continue - d = (float(cents[i][0]) - ex) ** 2 + (float(cents[i][1]) - ey) ** 2 - if d < best_d: - best_d = d - best_i = i - if best_i <= 0 or best_d > (1.2 * rad) ** 2: - return cx, cy - mask = np.uint8(labels == best_i) - M = cv2.moments(mask) - if M["m00"] < 1.0: - return cx, cy - return x0 + M["m10"] / M["m00"], y0 + M["m01"] / M["m00"] - - -# ==================== 螺纹嵌件对检测(亮环签名 + 关于中心孔对称)==================== -# 目标件是圆形法兰:中心一个大螺纹孔,两个目标螺纹嵌件在中心孔两侧、关于中心对称。 -# 旧 Hough"间距最大的一对"在这类多孔板上会锁到普通安装孔且逐帧跳变。 -# 新路径:金属嵌件有"暗孔芯 + 亮金属环 + 暗法兰背景"的明确签名; -# 两个目标嵌件关于中心孔对称(中点≈中心孔、半径相近)——据此唯一锁定,抗干扰抗跳变。 - - -def _disc_kernel(r: float) -> np.ndarray: - R = int(np.ceil(r)) - y, x = np.mgrid[-R:R + 1, -R:R + 1] - k = (x * x + y * y <= r * r).astype(np.float32) - return k / max(1.0, float(k.sum())) - - -def _ring_kernel(a: float, b: float) -> np.ndarray: - R = int(np.ceil(b)) - y, x = np.mgrid[-R:R + 1, -R:R + 1] - d = x * x + y * y - k = ((d >= a * a) & (d <= b * b)).astype(np.float32) - return k / max(1.0, float(k.sum())) - - -def _insert_score_map(gray: np.ndarray, scales) -> np.ndarray: - """亮环签名评分(多尺度取 max):环越亮、芯越暗、外背景越暗,分越高。""" - g = gray.astype(np.float32) - best = None - for ri, rr, ro in scales: - inner = cv2.filter2D(g, -1, _disc_kernel(ri)) - ringm = cv2.filter2D(g, -1, _ring_kernel(ri + 1, rr)) - outer = cv2.filter2D(g, -1, _ring_kernel(rr + 2, ro)) - s = ringm - 0.5 * (inner + outer) - best = s if best is None else np.maximum(best, s) - return best - - -def _refine_dark_bore(gray: np.ndarray, cx: float, cy: float, half: int = 26): - """暗孔连通域一阶矩 → 亚像素孔心 + 等效半径。失败退回原心。""" - h, w = gray.shape - x0 = max(0, int(round(cx)) - half) - y0 = max(0, int(round(cy)) - half) - x1 = min(w, int(round(cx)) + half) - y1 = min(h, int(round(cy)) + half) - if x1 - x0 < 12 or y1 - y0 < 12: - return float(cx), float(cy), 12.0 - roi = gray[y0:y1, x0:x1].astype(np.float32) - blur = cv2.GaussianBlur(roi, (5, 5), 1.0) - thr = float(np.percentile(blur, 20)) - mask = (blur < thr).astype(np.uint8) * 255 - n, _lab, st, ce = cv2.connectedComponentsWithStats(mask, 8) - best_i, best_d = 0, 1e18 - ex, ey = cx - x0, cy - y0 - for i in range(1, n): - a = float(st[i, cv2.CC_STAT_AREA]) - if a < 15: - continue - d = (float(ce[i][0]) - ex) ** 2 + (float(ce[i][1]) - ey) ** 2 - if d < best_d: - best_d, best_i = d, i - if best_i <= 0: - return float(cx), float(cy), 12.0 - area = float(st[best_i, cv2.CC_STAT_AREA]) - r_eq = float(np.sqrt(area / np.pi)) - return x0 + float(ce[best_i][0]), y0 + float(ce[best_i][1]), max(6.0, r_eq) - - -def _detect_insert_pair(gray: np.ndarray, bbox, cfg, depth_m=None, intr=None): - """找"关于工件中心对称的一对螺纹嵌件"。返回 ((k1x,k1y),(k2x,k2y),r1,r2) 或 None。 - - 尺度自适应:用深度把物理螺栓圆半径(~29mm,两孔间距~58mm)换算成像素半径, - 在中心 C 周围的圆环上搜候选,再选"中点≈C、都在环上、间距≈直径"的对称对。 - 不依赖 YOLO 框是否盖住嵌件(框只用来定中心 C)。k1=左孔(x 小),k2=右孔(x 大)。 - """ - h, w = gray.shape - x1, y1, x2, y2 = [int(v) for v in bbox] - C = np.array([0.5 * (x1 + x2), 0.5 * (y1 + y2)], dtype=float) - # ---- 螺栓圆像素半径 bolt_px ---- - bolt_mm = float(cfg.get("insert_bolt_radius_mm", 29.0)) - bolt_px = 0.0 - if depth_m is not None and intr is not None: - # 工件表面深度:C 附近小邻域的浅分位(孔底更深,表面偏浅) - r_s = max(6, int(round(0.25 * min(x2 - x1, y2 - y1)))) - cxi, cyi = int(round(C[0])), int(round(C[1])) - sx1, sx2 = max(0, cxi - r_s), min(w, cxi + r_s) - sy1, sy2 = max(0, cyi - r_s), min(h, cyi + r_s) - zreg = depth_m[sy1:sy2, sx1:sx2] - zreg = zreg[np.isfinite(zreg) & (zreg > 0.05)] - if zreg.size >= 20: - z_plate = float(np.percentile(zreg, 30)) - z_surf = max(0.05, z_plate - float(cfg.get("plate_thickness_m", 0.004))) - bolt_px = bolt_mm / 1000.0 * float(intr["fx"]) / z_surf - if bolt_px <= 0: - # 无深度时退化为按框尺寸粗估(嵌件约在 0.7×框半宽处) - bolt_px = 0.70 * 0.5 * max(x2 - x1, y2 - y1) - bolt_px = float(np.clip(bolt_px, 24.0, 0.42 * min(h, w))) - # ---- 亮环分数图 ---- - scales = cfg.get("insert_scales") or [ - (3, 6, 10), (5, 9, 14), (7, 12, 18), (10, 16, 23), (14, 21, 30), - ] - score = _insert_score_map(gray, scales) - # ---- 圆环掩码:嵌件在 [0.45, 1.55]×bolt_px 的环上 ---- - yy, xx = np.mgrid[0:h, 0:w] - dist = np.hypot(xx - C[0], yy - C[1]) - ring = ((dist > 0.45 * bolt_px) & (dist < 1.55 * bolt_px)).astype(np.float32) - scm = score * ring - pos = scm[scm > 0] - if pos.size < 20: - return None - thr = float(np.percentile(pos, float(cfg.get("insert_percentile", 96)))) - pk = (scm > thr).astype(np.uint8) * 255 - n, _lab, st, ce = cv2.connectedComponentsWithStats(pk, 8) - cands = [] # (pos, score) - for i in range(1, n): - if st[i, cv2.CC_STAT_AREA] < 8: - continue - cx_i, cy_i = float(ce[i][0]), float(ce[i][1]) - cands.append((np.array([cx_i, cy_i], dtype=float), - float(scm[int(round(cy_i)), int(round(cx_i))]))) - if len(cands) < 2: - return None - # ---- 对称对:两孔都在环上、间距≈直径、中点大致≈C(对称门)。 - # 在几何合格的对里选"亮环总分最高"的——真嵌件亮环最强,稳定选中真孔对, - # 不被"更对称但更弱"的假对带偏(C 与真中心有几像素偏差时仍稳健,消除双稳态跳变)。 - best = None - best_score = -1.0 - sym_gate = float(cfg.get("insert_sym_gate_ratio", 0.40)) * bolt_px - for i in range(len(cands)): - for j in range(i + 1, len(cands)): - pi, si = cands[i] - pj, sj = cands[j] - di = float(np.linalg.norm(pi - C)) - dj = float(np.linalg.norm(pj - C)) - if not (0.40 * bolt_px < di < 1.65 * bolt_px): - continue - if not (0.40 * bolt_px < dj < 1.65 * bolt_px): - continue - sep = float(np.linalg.norm(pi - pj)) - if not (1.2 * bolt_px < sep < 2.9 * bolt_px): - continue - mid = 0.5 * (pi + pj) - if float(np.linalg.norm(mid - C)) > sym_gate: - continue - tot = si + sj - if tot > best_score: - best_score = tot - best = (pi, pj) - if best is None: - return None - p, q = best - # 稳定分配 k1/k2:沿主方向,避免竖直对时"x 小者"被噪声翻转。 - # 竖直对(|dy|>=|dx|) → k1=上(y 小)、k2=下;水平对 → k1=左(x 小)、k2=右。 - if abs(p[1] - q[1]) >= abs(p[0] - q[0]): - k1raw, k2raw = (p, q) if p[1] < q[1] else (q, p) - else: - k1raw, k2raw = (p, q) if p[0] < q[0] else (q, p) - k1x, k1y, r1 = _refine_dark_bore(gray, k1raw[0], k1raw[1]) - k2x, k2y, r2 = _refine_dark_bore(gray, k2raw[0], k2raw[1]) - return (k1x, k1y), (k2x, k2y), r1, r2 - - -def _pad_roi( - img_w: int, - img_h: int, - bbox: tuple[int, int, int, int], - padding: int, -) -> tuple[int, int, int, int, int, int]: - """返回 x1,y1,x2,y2,offset_x,offset_y(裁剪左上角在原图坐标)。""" - x1, y1, x2, y2 = bbox - px1 = max(0, x1 - padding) - py1 = max(0, y1 - padding) - px2 = min(img_w, x2 + padding) - py2 = min(img_h, y2 + padding) - if px2 <= px1 or py2 <= py1: - raise ValueError("ROI 无效(宽或高为 0)") - return px1, py1, px2, py2, px1, py1 - - -def _render_success( - image: np.ndarray, - bbox: tuple[int, int, int, int], - hole_points: list[list[float]], - hole_radii: list[float], - dist: float, - gate: tuple[float, float] | None = None, - label: str = "", -) -> np.ndarray: - draw_img = image.copy() - if gate is not None: - _draw_center_gate(draw_img, gate[0], gate[1], True) - _draw_bbox(draw_img, bbox, label=label) - _draw_holes(draw_img, hole_points, hole_radii) - cv2.putText( - draw_img, - f"OK dist={dist:.1f}px", - (16, 36), - cv2.FONT_HERSHEY_SIMPLEX, - 0.8, - (0, 255, 0), - 2, - ) - return draw_img - - -def detect_holes( - image: np.ndarray, - detector, - config: dict[str, Any] | None = None, - device: str | int = 0, - skip_center_gate: bool = False, - depth_m: np.ndarray | None = None, - intr: dict | None = None, - allow_full_frame_roi: bool = False, -) -> dict[str, Any]: - """ - 二阶段检测螺纹孔中心。 - - detector: 需提供 detect(image_bgr, conf=..., iou=..., imgsz=...) -> list[Detection] - (YOLODetector / FasterRCNNDetector / ONNX 均可) - - :param allow_full_frame_roi: 检测器**没给出工件框**时,是否退回"整幅画面当 ROI"。 - 默认 False(保持原行为:没有框就不做,报「未检测到工件」)。 - 置 True 的场景是**调用方明确要试一把**:知道检测器可能漏检,但孔本身 - 在画面里已经看得见(例如工件检测模型与当前相机/画面不匹配、或工件贴着 - 画面中心)。此时 ROI 的约束由孔自身的判据接手 —— 环半径、两孔间距、 - 居中门控都还在,所以不会凭空多出"随便一个圆"。 - - 返回: - status, msg, hole_points [[cx,cy],...], hole_radii [r1,r2], bbox, draw_img(BGR) - """ - try: - if image is None or not isinstance(image, np.ndarray) or image.size == 0: - return _fail("输入图像无效", np.zeros((480, 640, 3), dtype=np.uint8)) - - cfg = config if config is not None else load_config() - draw_img = image.copy() - h, w = image.shape[:2] - - conf = float(cfg.get("conf", 0.25)) - iou = float(cfg.get("iou", 0.7)) - imgsz = int(cfg.get("imgsz", 640)) - padding = int(cfg.get("bbox_padding", 25)) - ksize = int(cfg.get("gaussian_ksize", 5)) - if ksize % 2 == 0: - ksize += 1 - sigma = float(cfg.get("gaussian_sigma", 1.5)) - - # 1) 检测器定位工件 bbox(最多 1 个)— 兼容 YOLO / Faster R-CNN - dets = detector.detect(image, conf=conf, iou=iou, imgsz=imgsz) - bbox = _parse_best_bbox(dets, conf) - if bbox is None and allow_full_frame_roi: - # 退回整幅画面:ROI 从"检测器给的框"换成"整幅",孔自身的判据 - #(环半径区间、两孔间距、居中门控)继续把关。 - bbox = (0, 0, int(w - 1), int(h - 1)) - logger.info( - "工件检测器没给框,按调用方要求用整幅画面当 ROI 继续找孔" - "(允许的原因见 allow_full_frame_roi 的说明)" - ) - if bbox is None: - return _fail("未检测到工件", draw_img) - - # 类别名来自标签文件(见 model_labels / weights.sh labels),不再写死。 - label = _best_label(dets) - _draw_bbox(draw_img, bbox, label=label) - - # 1.5) 居中门控:bbox 中心接近画面中心才进入二阶检测。 - # 精对准 k1/k2 时工件会离开画面中心,调用方应 skip_center_gate=True。 - center_enable = bool(cfg.get("center_gate_enable", True)) and not skip_center_gate - centered, bx, by, max_dx, max_dy = _bbox_center_ok(bbox, w, h, cfg) - if bool(cfg.get("center_gate_draw", True)): - _draw_center_gate(draw_img, max_dx, max_dy, centered if center_enable else True) - if center_enable and not centered: - dx = abs(bx - w * 0.5) - dy = abs(by - h * 0.5) - cv2.putText( - draw_img, - "MOVE TO CENTER", - (16, 36), - cv2.FONT_HERSHEY_SIMPLEX, - 0.8, - (0, 165, 255), - 2, - ) - return _fail( - f"工件未居中:offset=({dx:.0f},{dy:.0f})px,允许<=({max_dx:.0f},{max_dy:.0f})px", - draw_img, - bbox, - gate_block=True, - ) - - # ---- 首选:pose 模型直接给出 k1/k2 关键点(不必再找圆) ---- - if bool(cfg.get("keypoint_enable", True)): - kp = _keypoint_holes( - dets, - conf_thr=conf, - min_kconf=float(cfg.get("keypoint_min_conf", 0.30)), - radius_px=float(cfg.get("keypoint_hole_radius_px", 12.0)), - min_dist_px=float(cfg.get("keypoint_min_dist_px", 15.0)), - ) - if kp is not None: - (k1, k2, r1, r2) = kp - hole_points = [[float(k1[0]), float(k1[1])], [float(k2[0]), float(k2[1])]] - hole_radii = [float(r1), float(r2)] - dist = float(np.hypot(k1[0] - k2[0], k1[1] - k2[1])) - gate = (max_dx, max_dy) if bool(cfg.get("center_gate_draw", True)) else None - draw_img = _render_success( - image, bbox, hole_points, hole_radii, dist, gate=gate, label=label - ) - return { - "status": True, - "msg": f"pose 关键点 k1/k2,两孔距离 {dist:.1f}px", - "hole_points": hole_points, - "hole_radii": hole_radii, - "bbox": list(bbox), - "label": label, - "source": "keypoint", - "draw_img": draw_img, - } - - # ---- 主路径:螺纹嵌件对(亮环签名 + 关于中心孔对称),抗多孔干扰、抗跳变 ---- - if bool(cfg.get("insert_pair_enable", True)): - gray_full = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) if image.ndim == 3 else image - pair = _detect_insert_pair(gray_full, bbox, cfg, depth_m=depth_m, intr=intr) - if pair is not None: - (k1, k2, r1, r2) = pair - hole_points = [[float(k1[0]), float(k1[1])], [float(k2[0]), float(k2[1])]] - hole_radii = [float(r1), float(r2)] - dist = float(np.hypot(k1[0] - k2[0], k1[1] - k2[1])) - gate = (max_dx, max_dy) if bool(cfg.get("center_gate_draw", True)) else None - draw_img = _render_success( - image, bbox, hole_points, hole_radii, dist, gate=gate, label=label - ) - return { - "status": True, - "msg": f"螺纹嵌件对,两孔距离 {dist:.1f}px", - "hole_points": hole_points, - "hole_radii": hole_radii, - "bbox": list(bbox), - "label": label, - "draw_img": draw_img, - } - # ---- 退路:原 Hough 老路径 ---- - - # YOLO 框经常只包住半边法兰;扩到能同时容纳两个螺纹孔 - min_w = int(cfg.get("bbox_min_width", 280)) - min_h = int(cfg.get("bbox_min_height", 220)) - x1, y1, x2, y2 = bbox - bw, bh = x2 - x1, y2 - y1 - if bw < min_w or bh < min_h: - cxb, cyb = 0.5 * (x1 + x2), 0.5 * (y1 + y2) - bw, bh = max(bw, min_w), max(bh, min_h) - x1 = int(round(cxb - 0.5 * bw)) - y1 = int(round(cyb - 0.5 * bh)) - x2 = int(round(cxb + 0.5 * bw)) - y2 = int(round(cyb + 0.5 * bh)) - bbox = ( - max(0, x1), max(0, y1), - min(w, x2), min(h, y2), - ) - - # 2) padding ROI + 边界保护 - rx1, ry1, rx2, ry2, offset_x, offset_y = _pad_roi(w, h, bbox, padding) - roi = image[ry1:ry2, rx1:rx2] - if roi.size == 0: - return _fail("ROI 裁剪失败", draw_img, bbox) - - # 3) 灰度 + 高斯模糊 - gray = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY) if roi.ndim == 3 else roi - blur = cv2.GaussianBlur(gray, (ksize, ksize), sigma) - - # 4) HoughCircles - circles = cv2.HoughCircles( - blur, - cv2.HOUGH_GRADIENT, - dp=float(cfg.get("hough_dp", 1.2)), - minDist=float(cfg.get("hough_min_dist", 40)), - param1=float(cfg.get("hough_param1", 100)), - param2=float(cfg.get("hough_param2", 28)), - minRadius=int(cfg.get("hough_min_radius", 6)), - maxRadius=int(cfg.get("hough_max_radius", 45)), - ) - if circles is None: - return _fail("HoughCircles 未检测到圆孔", draw_img, bbox) - - # 5) ROI 坐标 -> 原图坐标,再亚像素细化孔心 - circles = np.asarray(circles[0], dtype=np.float64) - gray_full = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) if image.ndim == 3 else image - do_refine = bool(cfg.get("refine_hole_centers", True)) - mapped: list[tuple[float, float, float]] = [] - for cx, cy, r in circles: - fx = float(cx + offset_x) - fy = float(cy + offset_y) - fr = float(r) - if do_refine: - fx, fy = _refine_circle_center(gray_full, fx, fy, fr) - mapped.append((fx, fy, fr)) - - # 6) 工业校验(含 bbox padding 区内的孔,避免螺纹孔落在框外) - bx1, by1, bx2, by2 = bbox - vx1 = max(0, bx1 - padding) - vy1 = max(0, by1 - padding) - vx2 = min(w, bx2 + padding) - vy2 = min(h, by2 + padding) - min_r = float(cfg.get("min_radius", 6)) - max_r = float(cfg.get("max_radius", 45)) - dist_min = float(cfg.get("hole_distance_min", 80)) - dist_max = float(cfg.get("hole_distance_max", 900)) - - valid: list[tuple[float, float, float]] = [] - for cx, cy, r in mapped: - if not (vx1 <= cx <= vx2 and vy1 <= cy <= vy2): - continue - if not (min_r <= r <= max_r): - continue - valid.append((cx, cy, r)) - - # 丢掉法兰中心大孔:螺纹孔在工件两端,中心孔靠近 bbox 中心 - bcx = 0.5 * (bx1 + bx2) - bcy = 0.5 * (by1 + by2) - diag = max(40.0, float(np.hypot(bx2 - bx1, by2 - by1))) - ring = [ - c for c in valid - if float(np.hypot(c[0] - bcx, c[1] - bcy)) >= 0.18 * diag - ] - if len(ring) >= 2: - valid = ring - - # 多于 2 个:在间距窗内取半径接近、间距最大的一对(左右螺纹孔,避开中心大孔边缘) - if len(valid) >= 2: - best = None - best_d = -1.0 - for i in range(len(valid)): - for j in range(i + 1, len(valid)): - d = float(np.hypot(valid[i][0] - valid[j][0], valid[i][1] - valid[j][1])) - if not (dist_min <= d <= dist_max): - continue - if abs(float(valid[i][2]) - float(valid[j][2])) > 10.0: - continue - if d > best_d: - best_d = d - best = (valid[i], valid[j]) - if best is None: - return _fail( - f"候选圆孔={len(valid)},没有间距在 [{dist_min}, {dist_max}] 且半径接近的一对", - draw_img, - bbox, - ) - valid = [best[0], best[1]] - - if len(valid) != 2: - return _fail(f"有效圆孔数量={len(valid)},要求严格等于 2", draw_img, bbox) - - ordered = sorted(valid, key=lambda c: c[0]) - (x1, y1, r1), (x2, y2, r2) = ordered - dist = float(np.hypot(x1 - x2, y1 - y2)) - if not (dist_min <= dist <= dist_max): - return _fail( - f"两孔距离={dist:.1f}px,不在 [{dist_min}, {dist_max}]", - draw_img, - bbox, - ) - - hole_points = [[x1, y1], [x2, y2]] - hole_radii = [r1, r2] - gate = (max_dx, max_dy) if bool(cfg.get("center_gate_draw", True)) else None - draw_img = _render_success(image, bbox, hole_points, hole_radii, dist, gate=gate, label=label) - return { - "status": True, - "msg": f"检测成功,两孔距离 {dist:.1f}px", - "hole_points": hole_points, - "hole_radii": hole_radii, - "bbox": list(bbox), - "label": label, - "draw_img": draw_img, - } - except Exception as exc: - fallback = image.copy() if isinstance(image, np.ndarray) and image.size else np.zeros((480, 640, 3), dtype=np.uint8) - return _fail(f"异常: {exc}", fallback) - - -class HoleStabilizer: - """时序稳帧:EMA 平滑中心/半径,短暂失败时沿用上一帧结果,抑制闪烁。""" - - def __init__(self, config: dict[str, Any] | None = None) -> None: - cfg = config or {} - self.cfg = cfg - self.hold_frames = int(cfg.get("stabilize_hold_frames", 15)) - self.ema_alpha = float(cfg.get("stabilize_ema_alpha", 0.35)) - self.max_jump = float(cfg.get("stabilize_max_jump", 60)) - self.reset() - - def reset(self) -> None: - self.points: list[list[float]] | None = None - self.radii: list[float] | None = None - self.bbox: tuple[int, int, int, int] | None = None - self.miss = 0 - - def update(self, image: np.ndarray, result: dict[str, Any]) -> dict[str, Any]: - try: - # 未居中:不做二阶、不沿用旧孔,立即清空稳帧 - if result.get("gate_block"): - self.reset() - out = dict(result) - out["hole_points"] = [] - out["hole_radii"] = [] - return out - - bbox = result.get("bbox") - if bbox is not None and len(bbox) == 4: - self.bbox = (int(bbox[0]), int(bbox[1]), int(bbox[2]), int(bbox[3])) - - if result.get("status") and len(result.get("hole_points") or []) == 2: - pts = [[float(p[0]), float(p[1])] for p in result["hole_points"]] - pts = sorted(pts, key=lambda p: p[0]) - rad = result.get("hole_radii") or [12.0, 12.0] - rad = [float(rad[0]), float(rad[1])] if len(rad) >= 2 else [12.0, 12.0] - - if self.points is not None: - jump = max( - float(np.hypot(pts[0][0] - self.points[0][0], pts[0][1] - self.points[0][1])), - float(np.hypot(pts[1][0] - self.points[1][0], pts[1][1] - self.points[1][1])), - ) - if jump > self.max_jump: - # 跳变过大,当作本帧失败,沿用稳定值 - self.miss += 1 - else: - a = self.ema_alpha - self.points = [ - [ - (1 - a) * self.points[0][0] + a * pts[0][0], - (1 - a) * self.points[0][1] + a * pts[0][1], - ], - [ - (1 - a) * self.points[1][0] + a * pts[1][0], - (1 - a) * self.points[1][1] + a * pts[1][1], - ], - ] - self.radii = [ - (1 - a) * self.radii[0] + a * rad[0], - (1 - a) * self.radii[1] + a * rad[1], - ] - self.miss = 0 - else: - self.points = pts - self.radii = rad - self.miss = 0 - else: - self.miss += 1 - if self.miss > self.hold_frames: - self.points = None - self.radii = None - - if self.points is None or self.radii is None: - # 彻底丢失:只保留当前帧绘制(可能仅有 bbox) - out = dict(result) - out["hole_points"] = [] - out["hole_radii"] = [] - return out - - dist = float( - np.hypot( - self.points[0][0] - self.points[1][0], - self.points[0][1] - self.points[1][1], - ) - ) - bbox_draw = self.bbox - if bbox_draw is None and result.get("bbox") is not None: - b = result["bbox"] - bbox_draw = (int(b[0]), int(b[1]), int(b[2]), int(b[3])) - if bbox_draw is None: - # 无框时仍画孔 - draw_img = image.copy() - _draw_holes(draw_img, self.points, self.radii) - else: - gate = None - if bool(self.cfg.get("center_gate_draw", True)): - ih, iw = image.shape[:2] - max_dx = float(self.cfg.get("center_max_offset_ratio_x", 0.12)) * iw - max_dy = float(self.cfg.get("center_max_offset_ratio_y", 0.12)) * ih - gate = (max_dx, max_dy) - draw_img = _render_success( - image, - bbox_draw, - self.points, - self.radii, - dist, - gate=gate, - label=str(result.get("label") or ""), - ) - - held = self.miss > 0 - return { - "status": True, - "msg": ( - f"检测成功,两孔距离 {dist:.1f}px" - + (f"(稳帧 hold={self.miss})" if held else "") - ), - "hole_points": [[p[0], p[1]] for p in self.points], - "hole_radii": [float(self.radii[0]), float(self.radii[1])], - "bbox": list(bbox_draw) if bbox_draw is not None else result.get("bbox"), - "draw_img": draw_img, - } - except Exception as exc: - fallback = image.copy() if isinstance(image, np.ndarray) and image.size else np.zeros((480, 640, 3), dtype=np.uint8) - return _fail(f"稳帧异常: {exc}", fallback) diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/hole_detect_node.py b/install/arm_application/lib/python3.11/site-packages/arm_application/hole_detect_node.py deleted file mode 100644 index e8d7f8b..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/hole_detect_node.py +++ /dev/null @@ -1,190 +0,0 @@ -#!/usr/bin/env python3 -"""在当前机械臂的 D405 彩色话题上做入孔检测。只检测,不做插入动作。""" - -from __future__ import annotations - -import os - -import numpy as np -import rclpy -from rclpy.node import Node -from rclpy.qos import qos_profile_sensor_data -from sensor_msgs.msg import Image -from std_msgs.msg import Float32MultiArray - -from arm_application.handeye_realsense import resolve_realsense_topics -from arm_application.hole_detect_hough import HoleStabilizer -from arm_application.hole_detector import ( - HoleDetection, - HoleDetectResult, - HoleDetector, - config_from_site, - weights_from_site, -) -from arm_application.site_io import load_site_dict -from arm_msgs.msg import HoleDetection as HoleDetectionMsg -from arm_msgs.msg import HoleDetections - -from arm_application.ros_node import TolerantNode - - -def _as_bool(val, default: bool = False) -> bool: - if val is None: - return default - if isinstance(val, str): - return val.strip().lower() in ("1", "true", "yes", "on") - return bool(val) - - -def _bgr_copy(msg: Image) -> np.ndarray: - h, w = int(msg.height), int(msg.width) - enc = (msg.encoding or "").lower() - buf = np.frombuffer(msg.data, dtype=np.uint8) - if enc == "bgr8": - return buf.reshape(h, w, 3).copy() - if enc == "rgb8": - return buf.reshape(h, w, 3)[:, :, ::-1].copy() - raise RuntimeError(f"Unsupported encoding {msg.encoding!r}") - - -def _bgr_to_msg(image: np.ndarray, stamp, frame_id: str) -> Image: - msg = Image() - msg.header.stamp = stamp - msg.header.frame_id = frame_id - msg.height = int(image.shape[0]) - msg.width = int(image.shape[1]) - msg.encoding = "bgr8" - msg.step = int(image.shape[1] * 3) - msg.data = image.tobytes() - return msg - - -class HoleDetectNode(TolerantNode): - def __init__(self) -> None: - super().__init__("hole_detect") - self.declare_parameter("camera_source", os.environ.get("SITE_CAM_NAME") or "d405") - self.declare_parameter("image_topic", "") - self.declare_parameter("weights", "") - self.declare_parameter("config_file", "") - self.declare_parameter("backend", "two_stage") - self.declare_parameter("device", os.environ.get("SITE_YOLO_DEVICE") or "0") - self.declare_parameter("preview", False) - - site = load_site_dict() - cam = str(self.get_parameter("camera_source").value or "d405") - image_topic, _info = resolve_realsense_topics(cam, image_topic=str(self.get_parameter("image_topic").value or "")) - cfg = config_from_site(site) - param_backend = str(self.get_parameter("backend").value or "").strip().lower() - if param_backend: - cfg["backend"] = param_backend - backend = str(cfg.get("backend") or "two_stage") - weights = str(self.get_parameter("weights").value or "").strip() or weights_from_site(site) - self._preview = _as_bool(self.get_parameter("preview").value, False) - self._detector = HoleDetector( - model_path=weights or None, - config=cfg, - device=str(self.get_parameter("device").value or "0"), - ) - self._stabilizer = ( - HoleStabilizer(cfg) if backend in ("two_stage", "hough_roi") else None - ) - self._pub = self.create_publisher(HoleDetections, "/hole_detect/result", 10) - self._arr_pub = self.create_publisher(Float32MultiArray, "/hole_detect/holes", 10) - self._overlay_pub = self.create_publisher(Image, "/hole_detect/overlay", 10) - self.create_subscription(Image, image_topic, self._on_image, qos_profile_sensor_data) - self.get_logger().info( - f"hole_detect camera={cam} topic={image_topic} backend={backend} " - f"weights={self._detector.model_path} site overlay=hole_detect" - ) - - def _on_image(self, msg: Image) -> None: - try: - bgr = _bgr_copy(msg) - except Exception as exc: - self.get_logger().error(str(exc)) - return - result = self._detector.detect(bgr) - if self._stabilizer is not None: - result = self._stabilize(bgr, result) - out = HoleDetections() - out.header = msg.header - out.ok = bool(result.status) - out.message = result.msg - for hole in result.holes: - hmsg = HoleDetectionMsg() - hmsg.u = float(hole.center_px[0]) - hmsg.v = float(hole.center_px[1]) - hmsg.radius_px = float(hole.radius_px) - hmsg.confidence = float(hole.confidence) - hmsg.label = hole.label or "" - if hole.bbox: - hmsg.bbox = [int(v) for v in hole.bbox] - out.holes.append(hmsg) - self._pub.publish(out) - - arr = Float32MultiArray() - data = [1.0 if result.status else 0.0, float(len(result.holes))] - for hole in result.holes: - data.extend([hole.center_px[0], hole.center_px[1], hole.radius_px, hole.confidence]) - arr.data = data - self._arr_pub.publish(arr) - - overlay = result.draw_img if result.draw_img is not None else bgr - self._overlay_pub.publish(_bgr_to_msg(overlay, msg.header.stamp, msg.header.frame_id)) - if self._preview: - import cv2 - - cv2.imshow("hole_detect", overlay) - cv2.waitKey(1) - - def _stabilize(self, bgr, result: HoleDetectResult) -> HoleDetectResult: - raw = result.raw if isinstance(result.raw, dict) else {} - payload = { - "status": result.status, - "msg": result.msg, - "hole_points": raw.get("hole_points") - or [list(h.center_px) for h in result.holes], - "hole_radii": raw.get("hole_radii") or [h.radius_px for h in result.holes], - "bbox": raw.get("bbox") or (list(result.holes[0].bbox) if result.holes and result.holes[0].bbox else None), - "draw_img": result.draw_img, - "gate_block": bool(raw.get("gate_block")), - } - stab = self._stabilizer.update(bgr, payload) - holes: list[HoleDetection] = [] - radii = stab.get("hole_radii") or [] - bbox = stab.get("bbox") - bbox_t = tuple(int(v) for v in bbox) if bbox and len(bbox) == 4 else None - for i, pt in enumerate(stab.get("hole_points") or []): - rr = float(radii[i]) if i < len(radii) else 0.0 - holes.append( - HoleDetection( - center_px=(float(pt[0]), float(pt[1])), - radius_px=rr, - confidence=1.0, - bbox=bbox_t, - label="left" if i == 0 else "right" if i == 1 else f"h{i + 1}", - ) - ) - return HoleDetectResult( - bool(stab.get("status")), - str(stab.get("msg") or ""), - holes, - stab.get("draw_img", result.draw_img), - raw=stab, - ) - - -def main() -> None: - rclpy.init() - node = HoleDetectNode() - try: - rclpy.spin(node) - except KeyboardInterrupt: - pass - finally: - node.destroy_node() - rclpy.shutdown() - - -if __name__ == "__main__": - main() diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/hole_detector.py b/install/arm_application/lib/python3.11/site-packages/arm_application/hole_detector.py deleted file mode 100644 index 8f31781..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/hole_detector.py +++ /dev/null @@ -1,368 +0,0 @@ -"""孔定位模块:加载已训练模型,输出孔中心像素坐标与置信度。 - -与工件定位(thread_gauge)完全分离,可独立替换模型与参数。 -""" - -from __future__ import annotations - -from dataclasses import dataclass -from pathlib import Path -from typing import Any - -import cv2 -import numpy as np -import yaml - -_PKG_SHARE_FALLBACK = Path(__file__).resolve().parents[1] / "config" -DEFAULT_CONFIG = _PKG_SHARE_FALLBACK / "hole_insert.yaml" - -# 仓库里**实际存在**的孔/工件检测模型,相对仓库根。 -# 以前这个位置上写的是 ``models/hole_insert/best.pt`` —— 文件根本不存在,属于悬空引用: -# 配置齐全时永远走不到这条分支,一旦 site.yaml 缺键就报"模型文件不存在", -# 而打印出来的路径看着特别合理,很容易被误判成"文件被人误删了"。 -# 改动这个常量时,顺手跑 ``bash scripts/weights.sh doctor`` 确认没有悬空引用。 -_CANONICAL_HOLE_MODEL = "models/yolo/gongjian0929.onnx" - - -@dataclass -class HoleDetection: - """单孔检测结果。""" - - center_px: tuple[float, float] - radius_px: float - confidence: float - bbox: tuple[int, int, int, int] | None = None - cls_id: int = 0 - label: str = "" # left / right - - -@dataclass -class HoleDetectResult: - """孔定位整体结果。""" - - status: bool - msg: str - holes: list[HoleDetection] - draw_img: np.ndarray - raw: dict[str, Any] | None = None - - -def load_hole_config(path: str | Path | None = None) -> dict[str, Any]: - cfg_path = Path(path) if path else DEFAULT_CONFIG - with open(cfg_path, encoding="utf-8") as f: - data = yaml.safe_load(f) or {} - if not isinstance(data, dict): - raise ValueError(f"孔定位配置格式错误: {cfg_path}") - return data - - -_HOLE_SITE_SKIP = {"weights", "workpiece_weights", "config"} - - -def config_from_site(data: dict[str, Any] | None = None) -> dict[str, Any]: - """先取包内 yaml 默认值,再用 ``site.yaml`` 的 ``hole_detect:`` 覆盖。 - - 以 ``site.yaml`` 为准(operator 的唯一数据源);``data`` 参数用于测试时直接喂字典。 - """ - from arm_application.site_io import deep_merge, load_site_dict, ros2_root - - site = data if data is not None else load_site_dict() - hd = dict(site.get("hole_detect") or {}) - backend = str(hd.get("backend") or "two_stage").strip().lower() - cfg_path = str(hd.get("config") or "").strip() - if not cfg_path: - root = ros2_root() - if backend in ("two_stage", "hough_roi"): - cfg_path = str(root / "src" / "arm_application" / "config" / "hole_detect.yaml") - else: - cfg_path = str(root / "src" / "arm_application" / "config" / "hole_insert.yaml") - base = load_hole_config(cfg_path) if Path(cfg_path).is_file() else {} - overlay = {k: v for k, v in hd.items() if k not in _HOLE_SITE_SKIP and v != ""} - merged = deep_merge(base, overlay) - merged["backend"] = backend - return merged - - -def weights_from_site(data: dict[str, Any] | None = None) -> str: - from arm_application.site_io import load_site_dict, ros2_root - - site = data if data is not None else load_site_dict() - hd = site.get("hole_detect") or {} - paths = site.get("paths") or {} - backend = str(hd.get("backend") or "two_stage").strip().lower() - if backend in ("two_stage", "hough_roi"): - return str( - hd.get("workpiece_weights") - or paths.get("hole_workpiece_weights") - or paths.get("yolo_weights") - or "" - ) - return str( - hd.get("weights") - or paths.get("hole_weights") - or str(ros2_root() / _CANONICAL_HOLE_MODEL) - ) - - -def _default_model_path() -> Path: - """未显式给 ``model_path`` 时的兜底模型路径。 - - 以前这里枚举了 ``hole_insert/best.pt`` / ``hole_best.pt`` / ``yolo/detect_best.pt``, - 三个文件在本仓库里**都不存在**,函数却会 ``return candidates[0]`` —— - 于是永远返回一个不存在的路径(同 ``weights_from_site`` 里那个悬空的 best.pt)。 - - 现在以 site.yaml 为准(它才是真正的来源),它给的路径存在就用它; - 否则退到仓库里实际存在的规范模型。这样报错信息里的路径至少是对的。 - """ - configured = weights_from_site() - if configured: - p = Path(configured).expanduser() - if p.is_file(): - return p - - from arm_application.site_io import ros2_root - - return ros2_root() / _CANONICAL_HOLE_MODEL - - -class HoleDetector: - """孔定位检测器:支持 YOLO / HoughCircles 双模式,可配置切换。""" - - def __init__( - self, - model_path: str | Path | None = None, - config: dict[str, Any] | None = None, - device: str | int = 0, - ) -> None: - self.cfg = config or load_hole_config() - self.device = device - self.model_path = Path(model_path) if model_path else _default_model_path() - self._detector = None - self._backend = self.cfg.get("backend", "yolo").lower() - - def _load_yolo(self): - if self._detector is not None: - return self._detector - from arm_application.yolo_detector import build_detector, resolve_weights - - weights = resolve_weights( - self.model_path, - backend=str(self.cfg.get("yolo_backend") or "auto"), - ) - # build_detector 会自己识别 pose 模型(k0/k1/k2),不必在这里分支。 - self._detector = build_detector( - weights, - conf=float(self.cfg.get("conf", 0.25)), - iou=float(self.cfg.get("iou", 0.7)), - device=str(self.device), - imgsz=int(self.cfg.get("imgsz", 640)), - ) - return self._detector - - def detect(self, image_bgr: np.ndarray) -> HoleDetectResult: - """检测图像中的孔,返回像素坐标列表。""" - if image_bgr is None or image_bgr.size == 0: - return HoleDetectResult(False, "输入图像无效", [], np.zeros((480, 640, 3), dtype=np.uint8)) - - draw_img = image_bgr.copy() - backend = self._backend - - if backend in {"yolo", "faster_rcnn"}: - return self._detect_by_model(image_bgr, draw_img) - if backend in {"two_stage", "hough_roi"}: - return self._detect_two_stage(image_bgr, draw_img) - if backend == "hough": - return self._detect_by_hough(image_bgr, draw_img) - return HoleDetectResult(False, f"未知 backend: {backend}", [], draw_img) - - def _detect_two_stage(self, image: np.ndarray, draw_img: np.ndarray) -> HoleDetectResult: - from arm_application.hole_detect_hough import detect_holes - - try: - detector = self._load_yolo() - except Exception as exc: - return HoleDetectResult(False, f"模型加载失败: {exc}", [], draw_img) - - raw = detect_holes(image, detector, config=self.cfg, device=self.device) - holes: list[HoleDetection] = [] - points = raw.get("hole_points") or [] - radii = raw.get("hole_radii") or [] - bbox = raw.get("bbox") - bbox_t = tuple(int(v) for v in bbox) if bbox and len(bbox) == 4 else None - for i, pt in enumerate(points): - r = float(radii[i]) if i < len(radii) else 0.0 - label = "left" if i == 0 else "right" if i == 1 else f"h{i + 1}" - holes.append( - HoleDetection( - center_px=(float(pt[0]), float(pt[1])), - radius_px=r, - confidence=1.0, - bbox=bbox_t, - label=label, - ) - ) - draw = raw.get("draw_img", draw_img) - return HoleDetectResult(bool(raw.get("status")), str(raw.get("msg") or ""), holes, draw, raw=raw) - - def _detect_by_model(self, image: np.ndarray, draw_img: np.ndarray) -> HoleDetectResult: - try: - detector = self._load_yolo() - except Exception as exc: - return HoleDetectResult(False, f"模型加载失败: {exc}", [], draw_img) - - conf = float(self.cfg.get("conf", 0.25)) - iou = float(self.cfg.get("iou", 0.7)) - imgsz = int(self.cfg.get("imgsz", 640)) - - dets = detector.detect(image, conf=conf, iou=iou, imgsz=imgsz) - if not dets: - return HoleDetectResult(False, "未检测到孔", [], draw_img) - - holes: list[HoleDetection] = [] - for d in dets: - x1, y1, x2, y2 = [int(v) for v in d.xyxy] - cx = 0.5 * (x1 + x2) - cy = 0.5 * (y1 + y2) - r = 0.5 * max(x2 - x1, y2 - y1) - holes.append( - HoleDetection( - center_px=(float(cx), float(cy)), - radius_px=float(r), - confidence=float(d.conf), - bbox=(x1, y1, x2, y2), - cls_id=int(getattr(d, "cls_id", 0)), - ) - ) - return _finalize_holes(holes, draw_img, raw={"dets": dets}, cfg=self.cfg) - - def _detect_by_hough(self, image: np.ndarray, draw_img: np.ndarray) -> HoleDetectResult: - gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) if image.ndim == 3 else image - ksize = int(self.cfg.get("gaussian_ksize", 5)) - if ksize % 2 == 0: - ksize += 1 - blur = cv2.GaussianBlur(gray, (ksize, ksize), float(self.cfg.get("gaussian_sigma", 1.5))) - - circles = cv2.HoughCircles( - blur, - cv2.HOUGH_GRADIENT, - dp=float(self.cfg.get("hough_dp", 1.2)), - minDist=float(self.cfg.get("hough_min_dist", 40)), - param1=float(self.cfg.get("hough_param1", 100)), - param2=float(self.cfg.get("hough_param2", 28)), - minRadius=int(self.cfg.get("hough_min_radius", 6)), - maxRadius=int(self.cfg.get("hough_max_radius", 45)), - ) - if circles is None: - return HoleDetectResult(False, "HoughCircles 未检测到孔", [], draw_img) - - holes: list[HoleDetection] = [] - for c in np.asarray(circles[0], dtype=np.float64): - cx, cy, r = float(c[0]), float(c[1]), float(c[2]) - holes.append(HoleDetection(center_px=(cx, cy), radius_px=r, confidence=1.0)) - return _finalize_holes(holes, draw_img, cfg=self.cfg) - - def pixel_to_camera( - self, - hole: HoleDetection, - depth_m: float | None = None, - intrinsics: dict[str, float] | None = None, - ) -> np.ndarray: - depth = float(depth_m if depth_m is not None else self.cfg.get("default_depth_m", 0.10)) - intr = intrinsics or self.cfg.get("camera_intrinsics") or {} - return pixel_to_camera(hole, depth, intr) - - -def pair_two_holes(holes: list[HoleDetection], cfg: dict[str, Any] | None = None) -> list[HoleDetection]: - """取左右两孔:优先最高置信度,再按图像 x 排序并打 left/right 标签。""" - cfg = cfg or {} - expected = int(cfg.get("expected_holes", 2)) - if expected != 2: - ordered = sorted(holes, key=lambda h: h.center_px[0]) - for i, hole in enumerate(ordered): - hole.label = f"h{i + 1}" - return ordered - - if len(holes) < 2: - return holes - - picked = sorted(holes, key=lambda h: h.confidence, reverse=True) - if len(picked) > 2: - by_x = sorted(picked, key=lambda h: h.center_px[0]) - picked = [by_x[0], by_x[-1]] - else: - picked = picked[:2] - picked.sort(key=lambda h: h.center_px[0]) - dist = float( - np.hypot( - picked[1].center_px[0] - picked[0].center_px[0], - picked[1].center_px[1] - picked[0].center_px[1], - ) - ) - min_sep = float(cfg.get("min_hole_sep_px", 20.0)) - max_sep = float(cfg.get("max_hole_sep_px", 2000.0)) - if not (min_sep <= dist <= max_sep): - return [] - picked[0].label = "left" - picked[1].label = "right" - return picked - - -def _draw_holes(draw_img: np.ndarray, holes: list[HoleDetection]) -> None: - for hole in holes: - cx, cy = int(round(hole.center_px[0])), int(round(hole.center_px[1])) - rr = max(4, int(round(hole.radius_px))) - cv2.circle(draw_img, (cx, cy), rr, (0, 0, 255), 2) - cv2.drawMarker(draw_img, (cx, cy), (0, 255, 255), cv2.MARKER_CROSS, 16, 2) - cv2.circle(draw_img, (cx, cy), 3, (0, 255, 255), -1) - name = hole.label or "hole" - cv2.putText( - draw_img, - f"{name} ({cx},{cy}) {hole.confidence:.2f}", - (cx + 12, cy - 8), - cv2.FONT_HERSHEY_SIMPLEX, - 0.55, - (0, 0, 255), - 2, - ) - - -def _finalize_holes( - holes: list[HoleDetection], - draw_img: np.ndarray, - raw: dict[str, Any] | None = None, - cfg: dict[str, Any] | None = None, -) -> HoleDetectResult: - cfg = cfg or {} - paired = pair_two_holes(holes, cfg) - if len(holes) >= 2 and not paired: - _draw_holes(draw_img, holes) - return HoleDetectResult(False, "两孔间距不在允许范围", holes, draw_img, raw=raw) - if not paired: - _draw_holes(draw_img, holes) - return HoleDetectResult(False, f"有效孔数量={len(holes)},需要 2 个", holes, draw_img, raw=raw) - _draw_holes(draw_img, paired) - dist = float( - np.hypot( - paired[1].center_px[0] - paired[0].center_px[0], - paired[1].center_px[1] - paired[0].center_px[1], - ) - ) - msg = f"检测到双孔 left={paired[0].center_px} right={paired[1].center_px} dist={dist:.1f}px" - return HoleDetectResult(True, msg, paired, draw_img, raw=raw) - - -def pixel_to_camera( - hole: HoleDetection, - depth_m: float, - intrinsics: dict[str, float], -) -> np.ndarray: - """像素坐标 + 深度 -> 相机系三维坐标(m)。""" - fx = float(intrinsics["fx"]) - fy = float(intrinsics["fy"]) - cx = float(intrinsics["cx"]) - cy = float(intrinsics["cy"]) - u, v = hole.center_px - z = float(depth_m) - x = (u - cx) * z / fx - y = (v - cy) * z / fy - return np.array([x, y, z], dtype=float) diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/image_utils.py b/install/arm_application/lib/python3.11/site-packages/arm_application/image_utils.py deleted file mode 100644 index 4f0d294..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/image_utils.py +++ /dev/null @@ -1,149 +0,0 @@ -"""把 numpy 数组打包成 ``sensor_msgs/Image``。 - -为什么需要 ----------- -Orisys 视触觉传感器的数据分两类: - -* **三力**(``fnormal`` / ``fshearx`` / ``fsheary``)—— 每帧几个标量,走子进程 - 队列几乎没有开销。 -* **图像类**(形变图 / 深度图 / 力矢量场)—— 每帧几百 KB 到几 MB。原先 - ``tactile_worker`` 为了性能**故意不过队列**,于是这些数据从未离开子进程、 - 也从未发布到 ROS 话题上。 - -本模块只负责最后一公里:把已经拿到的数组正确打包成 ``Image``。放在单独文件 -里是为了能脱离相机单测 —— 编码、``step``、通道顺序这些细节一旦写错,下游 -拿到的图会静默错位(图像撕裂、颜色通道互换),而不是报错。 - -支持的形状与编码 ----------------- -=============== ============== ========================================== -形状 dtype 编码 -=============== ============== ========================================== -``(H, W)`` ``uint8`` ``mono8`` -``(H, W)`` ``uint16`` ``mono16`` -``(H, W)`` ``float32`` ``32FC1`` -``(H, W, 1)`` 任意 ``mono8`` -``(H, W, 2)`` ``float32`` ``32FC2``(力矢量场:每像素 dx, dy) -``(H, W, 3)`` ``uint8`` ``rgb8`` -``(H, W, 4)`` ``uint8`` ``rgba8`` -=============== ============== ========================================== - -2 通道的 ``32FC2`` 是 ROS 里表达矢量场的标准做法,``step = W * 4 * 2``。 -""" - -from __future__ import annotations - -from typing import Optional, Tuple - -import numpy as np -from sensor_msgs.msg import Image - -__all__ = ["ndarray_to_image", "infer_encoding", "UnsupportedImageError"] - - -class UnsupportedImageError(ValueError): - """数组的形状/类型没有对应的 ROS 编码。 - - 宁可显式报错也不要猜 —— 猜错的结果是下游拿到一张静默错位的图。 - 错误消息里带上实际形状与 dtype,方便对照本文档的表格。 - """ - - -#: (通道数, dtype) -> ROS 编码 -_ENCODING_BY_CHANNELS = { - (1, np.dtype(np.uint8)): "mono8", - (1, np.dtype(np.uint16)): "mono16", - (1, np.dtype(np.float32)): "32FC1", - (2, np.dtype(np.float32)): "32FC2", - (3, np.dtype(np.uint8)): "rgb8", - (4, np.dtype(np.uint8)): "rgba8", -} - - -def infer_encoding(array: np.ndarray) -> str: - """推断 ROS 编码。推不出来时抛 :class:`UnsupportedImageError`。""" - arr = np.asarray(array) - if arr.ndim == 2: - channels = 1 - elif arr.ndim == 3: - channels = arr.shape[2] - else: - raise UnsupportedImageError( - f"只支持 2D(灰度)或 3D(H,W,C)数组,收到 {arr.ndim}D,形状 {arr.shape}" - ) - - key = (channels, arr.dtype) - encoding = _ENCODING_BY_CHANNELS.get(key) - if encoding is None: - supported = ", ".join( - f"{enc}({c}通道/{d.name})" - for (c, d), enc in sorted(_ENCODING_BY_CHANNELS.items(), key=lambda kv: kv[1]) - ) - raise UnsupportedImageError( - f"没有 {channels} 通道 + {arr.dtype.name} 对应的 ROS 编码。" - f"支持: {supported}。" - f"(收到形状 {arr.shape})" - ) - return encoding - - -def _layout(array: np.ndarray) -> Tuple[int, int, int]: - """返回 ``(height, width, channels)``,并把 (H,W,1) 归一化成 2D 语义。""" - arr = np.asarray(array) - if arr.ndim == 2: - h, w = arr.shape - return int(h), int(w), 1 - h, w, c = arr.shape - return int(h), int(w), int(c) - - -def ndarray_to_image( - array: np.ndarray, - *, - frame_id: str = "", - stamp=None, - encoding: Optional[str] = None, -) -> Image: - """把数组打包成 ``sensor_msgs/Image``。 - - 参数 - ---- - array: - 图像或矢量场。必须是 C 连续(``np.ascontiguousarray`` 会自动处理)。 - encoding: - 显式指定编码以覆盖推断。仅在确实知道自己在做什么时使用 —— - 编码与 dtype 不匹配会让下游按错误的元素大小解读 ``data``。 - """ - arr = np.asarray(array) - if encoding is None: - encoding = infer_encoding(arr) - - height, width, channels = _layout(arr) - - # (H,W,1) 在内存里与 (H,W) 连续一致,压平即可。 - flat = np.ascontiguousarray(arr).reshape(-1) - - msg = Image() - if stamp is not None: - msg.header.stamp = stamp - msg.header.frame_id = frame_id - msg.height = height - msg.width = width - msg.encoding = encoding - msg.is_bigendian = False - msg.step = int(width * channels * flat.dtype.itemsize) - msg.data = flat.tobytes() - return msg - - -def expected_step(array: np.ndarray, encoding: Optional[str] = None) -> int: - """算出应当写入 ``Image.step`` 的值。测试与自检用。""" - arr = np.asarray(array) - _, width, channels = _layout(arr) - if encoding is not None: - channels = {"mono8": 1, "mono16": 1, "32FC1": 1, "32FC2": 2, - "rgb8": 3, "rgba8": 4}.get(encoding, channels) - itemsize = {"mono8": 1, "mono16": 2, "32FC1": 4, "32FC2": 4, - "rgb8": 1, "rgba8": 1}.get(encoding, arr.dtype.itemsize) - return int(width * channels * itemsize) - return int(width * channels * arr.dtype.itemsize) diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/kalman_filter.py b/install/arm_application/lib/python3.11/site-packages/arm_application/kalman_filter.py deleted file mode 100644 index eafcbbd..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/kalman_filter.py +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/env python3 -"""三维点的匀速模型卡尔曼滤波(坐标系为相机系)。""" - -from __future__ import annotations - -from typing import Optional - -import numpy as np - - -class KalmanFilter3D: - """状态量为 ``[x, y, z, vx, vy, vz]``;观测只有位置,没有速度。""" - - def __init__( - self, - *, - q_pos: float = 1e-4, - q_vel: float = 5e-3, - r_pos: float = 4e-4, - ) -> None: - self.q_pos = float(q_pos) - self.q_vel = float(q_vel) - self.r_pos = float(r_pos) - self.x = np.zeros(6, dtype=float) - self.P = np.eye(6, dtype=float) - self._t: Optional[float] = None - self.initialized = False - - def reset(self, p: np.ndarray, t: Optional[float] = None) -> None: - p = np.asarray(p, dtype=float).reshape(3) - self.x[:] = 0.0 - self.x[:3] = p - self.P = np.diag([1e-3, 1e-3, 1e-3, 1e-2, 1e-2, 1e-2]) - self._t = t - self.initialized = True - - @property - def position(self) -> np.ndarray: - return self.x[:3].copy() - - @property - def velocity(self) -> np.ndarray: - return self.x[3:].copy() - - def advance(self, t: float) -> None: - """把状态预测到时刻 ``t``(秒,必须单调递增)。 - - 超过 0.5 秒的空档按"目标可能已经跑掉"处理:位置不动、速度清零, - 否则旧速度会把位置外推得很离谱。 - """ - if not self.initialized or self._t is None: - self._t = t - return - dt = float(t - self._t) - if dt <= 1e-6: - return - if dt > 0.5: - # 空档太长——位置保持不动,速度清零。 - self.x[3:] = 0.0 - self._t = t - return - self._predict(dt) - self._t = t - - def zero_velocity(self) -> None: - """把速度状态清零、位置保持不动。 - - 用途:观测疑似假跳变(见 ``feature_jump_guard.FeatureJumpGate``)时本次不 - 采信观测,但**不能**让上一次的速度继续把位置外推出去 —— 否则"不动"会变成 - "按旧速度匀速跑掉",刚好是我们要避免的那件事。 - """ - self.x[3:] = 0.0 - - def update(self, z: np.ndarray) -> None: - """用一次三维位置观测做量测更新。""" - z = np.asarray(z, dtype=float).reshape(3) - if not self.initialized: - self.reset(z) - return - H = np.zeros((3, 6), dtype=float) - H[0, 0] = H[1, 1] = H[2, 2] = 1.0 - R = np.eye(3, dtype=float) * self.r_pos - y = z - H @ self.x - S = H @ self.P @ H.T + R - K = self.P @ H.T @ np.linalg.inv(S) - self.x = self.x + K @ y - I = np.eye(6) - self.P = (I - K @ H) @ self.P - - def _predict(self, dt: float) -> None: - F = np.eye(6, dtype=float) - F[0, 3] = F[1, 4] = F[2, 5] = dt - q_p = self.q_pos - q_v = self.q_vel - Q = np.diag([q_p, q_p, q_p, q_v, q_v, q_v]) - self.x = F @ self.x - self.P = F @ self.P @ F.T + Q diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/model_labels.py b/install/arm_application/lib/python3.11/site-packages/arm_application/model_labels.py deleted file mode 100644 index a8c299b..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/model_labels.py +++ /dev/null @@ -1,558 +0,0 @@ -"""模型类别标签(class names)的统一读写。 - -## 为什么需要这个模块 - -推理代码需要把模型输出的**类别索引**(整数 0/1/2…)翻译成**人能看懂的名字**。 -这件事原先没有统一做法,导致同一个模型在不同后端下名字都不一样: - -- `.pt`:从 Ultralytics 的 `model.names` 读(来源是 checkpoint 内嵌 metadata) -- `.onnx`:ONNX 文件里有 `names` metadata,但代码没用,而是**硬编码** `{0: "workpiece"}` -- `.engine`:**标签直接丢了** - -最后一条是本模块存在的主要原因。TensorRT engine 要用 `trt.OnnxParser` 重新构建, -而**当前安装的 TensorRT(10.13)Python API 根本没有 metadata 读写接口** —— -`INetworkDefinition` / `IBuilderConfig` / `ICudaEngine` 上都没有任何 metadata 方法。 -所以 engine 构建完就只剩张量,标签无从附着。实测: - - detect_best_0.engine 二进制里搜不到 "workpiece" → 标签已丢 - detect_hc90.engine 能搜到 "workpiece" → 旧版 TRT 建的,但当前环境已无法加载 - -(`detect_hc90` 已作为零引用模型移出仓库,这里保留这行是因为它同时印证了两件事: -旧版 TRT 建的 engine 里其实是有标签的,以及 engine 与 TRT 版本绑死。) - -后果很隐蔽:`yolo_detector` 读不到名字时会退化成 `str(cid)`,也就是类名变成字符串 -`"0"`;而预览界面又不绘制类名,所以**没有任何地方看得出标签丢了**。 - -## 解决办法:旁挂标签文件 - -在每个权重旁边放一个同名文本文件 `<模型名>.labels.yaml`: - - models/yolo/detect_best_0.onnx - models/yolo/detect_best_0.engine - models/yolo/detect_best_0.labels.yaml ← 就是这个 - -选文本文件而不是想办法塞进 engine,理由有二: - -1. **可修改**。标签是配置,不是模型的一部分。塞进 engine 就只能重建 engine 才能改。 -2. **跨格式统一**。engine / onnx / pt 三种格式共用同一份标签,不会出现 - "换后端名字就变了"。engine 丢标签的问题也一并绕过了。 - -标签文件是纯文本,进 git(体积小、属于配置);权重二进制不进 git。 - -## 读取优先级 - - sidecar(旁挂文件) > onnx(ONNX metadata) > model(模型自身 metadata) > placeholder - -`read_labels()` 会连**来源**一起返回。这点很重要:调用方可以据此提示 -"标签来自占位符,请补一个 .labels.yaml",而不是悄悄给出一个错的类名。 -""" - -from __future__ import annotations - -import re -from dataclasses import dataclass -from pathlib import Path -from typing import Dict, List, Optional, Sequence, Tuple, Union - -# 标签文件的扩展名。刻意用双后缀:既能被 *.yaml 工具识别, -# 又能和模型自身的配置(如果有)区分开。 -LABELS_SUFFIX = ".labels.yaml" - -# read_labels() 的来源标记。顺序即优先级(高 → 低)。 -SOURCE_SIDECAR = "sidecar" # 旁挂 <模型名>.labels.yaml(权威,用户可直接改) -SOURCE_ONNX = "onnx" # ONNX 文件内嵌 metadata -SOURCE_MODEL = "model" # 模型自身 metadata(Ultralytics 的 .names) -SOURCE_PLACEHOLDER = "placeholder" # 都没有 → 占位符 class_0/class_1… - -SOURCE_LABELS_ZH = { - SOURCE_SIDECAR: "旁挂标签文件", - SOURCE_ONNX: "ONNX 内嵌 metadata", - SOURCE_MODEL: "模型内嵌 metadata", - SOURCE_PLACEHOLDER: "占位符(缺标签)", -} - - -@dataclass(frozen=True) -class LabelSet: - """一次标签读取的结果。 - - ``names`` 是索引 → 名字;``source`` 说明它从哪来(见 SOURCE_* 常量)。 - - 调用方**应该**检查 ``source``:如果是 ``placeholder``,说明这个模型缺标签, - 此时给出的是 ``class_0`` 这样的占位名,只适合占位显示,不该当成真名使用。 - """ - - names: Dict[int, str] - source: str - path: Optional[Path] = None # 实际读到的文件(placeholder 时为 None) - - @property - def is_placeholder(self) -> bool: - return self.source == SOURCE_PLACEHOLDER - - def get(self, cid: int, default: Optional[str] = None) -> str: - if cid in self.names: - return self.names[cid] - return default if default is not None else f"class_{cid}" - - def sorted_names(self) -> List[str]: - return [self.names[k] for k in sorted(self.names)] - - -# --------------------------------------------------------------------------- -# 路径 -# --------------------------------------------------------------------------- - - -def labels_path_for(weights: Union[str, Path]) -> Path: - """给出权重对应的旁挂标签文件路径。 - - 只换后缀,目录不变:``models/yolo/detect_best_0.engine`` → - ``models/yolo/detect_best_0.labels.yaml``。 - - 这样无论 ``resolve_weights()`` 最后选中了 .pt/.onnx/.engine 中的哪一个, - 算出来的标签路径都相同 —— 一份标签服务同一个模型的所有格式。 - """ - p = Path(weights).expanduser() - # 用 stem 手工拼接,而不是 with_suffix('.labels.yaml'): - # 后者对 `a.b.onnx` 这类含点文件名容易踩坑,手工拼没有歧义。 - return p.parent / (p.stem + LABELS_SUFFIX) - - -# --------------------------------------------------------------------------- -# 解析:把各种形状的标签定义统一成 {索引: 名字} -# --------------------------------------------------------------------------- - - -def _clean(text: object) -> str: - # None 必须先拦掉:str(None) == "None" 是 truthy 的, - # 直接 str() 会让空项变成一个字面量为 "None" 的类名。 - if text is None: - return "" - return str(text).strip() - - -def _try_parse_structured(text: str) -> Optional[Dict[int, str]]: - """尝试把字符串当成 dict/list 的字面量解析。 - - 为什么需要:ONNX metadata 里的 ``names`` 存的**不是** JSON,也不是逗号列表, - 而是 Python 字典的 repr(单引号): - - "{0: 'workpiece'}" - - Ultralytics 是直接 ``str(names)`` 写进去的,所以 ``json.loads`` 会失败。 - 两种都试一遍(JSON 标准、literal_eval 兜底),都不行才交给逗号解析。 - ``ast.literal_eval`` 只解析字面量、不执行代码,是安全的。 - """ - s = text.strip() - if not s: - return None - import ast - import json - - for loader in (json.loads, ast.literal_eval): - try: - obj = loader(s) - except Exception: # noqa: BLE001 - continue - if isinstance(obj, (dict, list, tuple)): - return parse_names_field(obj) - return None - - -def _parse_freeform_text(text: str) -> Dict[int, str]: - """解析"自由文本"形式的标签内容。 - - 两种情况要分开,否则会互相吃掉: - - - 一行一个名字(有人把 ``classes.txt`` 直接改名成 ``.labels.yaml``): - ``"a\\nb"`` → ``{0:'a', 1:'b'}`` - - 单行逗号串:``"a, b"`` → ``{0:'a', 1:'b'}`` - - 判据是"有没有多行"。只有一行时才按逗号切, - 否则 ``"a, b"`` 这种文件名里带逗号的写法会被切错。 - """ - items = [ - ln.strip() - for ln in text.splitlines() - if ln.strip() and not ln.strip().startswith("#") - ] - if len(items) > 1: - return {i: n for i, n in enumerate(items)} - return parse_label_list(text) - - -def parse_names_field(value: object) -> Dict[int, str]: - """把 YAML/metadata 里的 ``names`` 字段规范成 ``{int: str}``。 - - 容忍三种写法,因为它们各自都很常见: - - - 字典(Ultralytics data.yaml 的写法):``{0: workpiece, 1: hole}`` - - 列表(本模块写出的规范形式,索引即顺序):``[workpiece, hole]`` - - 逗号分隔的字符串:``"workpiece, hole"`` - - 跳过空项但**保留其索引位置**,这样 ``[a, "", c]`` 不会让 c 变成 1 号。 - 无法解析成整数键的字典项会被忽略(不抛异常 —— 标签读不出来不该让程序崩)。 - """ - if value is None: - return {} - if isinstance(value, dict): - out: Dict[int, str] = {} - for k, v in value.items(): - try: - idx = int(k) - except (TypeError, ValueError): - continue - name = _clean(v) - if name: - out[idx] = name - return out - if isinstance(value, (list, tuple)): - out = {} - for i, v in enumerate(value): - name = _clean(v) - if name: - out[i] = name - return out - if isinstance(value, str): - # 字符串可能是三种东西:dict/list 的字面量(ONNX metadata)、 - # 逗号列表、或者多行文本。先试结构化的,再退到逗号/多行解析。 - structured = _try_parse_structured(value) - if structured is not None: - return structured - return _parse_freeform_text(value) - return {} - - -def parse_label_list(text: str) -> Dict[int, str]: - """解析逗号(或中文逗号、分号)分隔的类别名。 - - ``"workpiece, hole"`` → ``{0: 'workpiece', 1: 'hole'}`` - - 同时兼容 ``"0:workpiece, 1:hole"`` 这种带显式索引的写法, - 因为用户从别处拷配置过来时经常带着索引。空项被跳过。 - """ - if not text or not text.strip(): - return {} - parts = [p for p in re.split(r"[,,;;\n]", text)] - out: Dict[int, str] = {} - next_idx = 0 - for raw in parts: - item = raw.strip() - if not item: - continue - m = re.match(r"^\s*(\d+)\s*[::]\s*(.+)$", item) - if m: - idx = int(m.group(1)) - name = m.group(2).strip() - if name: - out[idx] = name - next_idx = max(next_idx, idx + 1) - continue - out[next_idx] = item - next_idx += 1 - return out - - -def read_label_text_file(path: Union[str, Path]) -> Dict[int, str]: - """读纯文本标签文件:一行一个类名(YOLO 的 classes.txt 就是这个格式)。 - - 空行和 ``#`` 开头的注释行被忽略,且**不占索引**。 - 这样用户可以在文件里随意加注释而不破坏索引对应关系。 - """ - p = Path(path).expanduser() - out: Dict[int, str] = {} - idx = 0 - with p.open("r", encoding="utf-8") as f: - for line in f: - s = line.strip() - if not s or s.startswith("#"): - continue - out[idx] = s - idx += 1 - return out - - -def placeholder_labels(nc: int) -> Dict[int, str]: - """没有标签可用时的占位名。 - - 刻意用 ``class_0`` 而不是直接回退成字符串形式的数字 ``"0"``: - 后者和"真的有一个叫 0 的类"无法区分,正是原先难以发现问题所在。 - ``class_`` 前缀一眼就能看出是没配标签。 - """ - n = max(0, int(nc)) - return {i: f"class_{i}" for i in range(n)} - - -# --------------------------------------------------------------------------- -# 旁挂标签文件读写 -# --------------------------------------------------------------------------- - - -def format_labels_yaml(names: Dict[int, str], model: Optional[str] = None) -> str: - """生成旁挂标签文件的内容(带使用说明的注释头)。 - - 注释头是刻意保留的:这个文件会被不熟悉的人直接打开编辑, - 把"第几行 = 第几类"写在文件里比写在文档里有效得多。 - """ - lines: List[str] = [] - lines.append("# 模型类别标签(class names)") - lines.append("#") - lines.append("# 一个模型对应一份标签,放在权重旁边、同名前缀:") - lines.append("# detect_best_0.engine ← 权重") - lines.append("# detect_best_0.labels.yaml ← 本文件") - lines.append("#") - lines.append("# 写法:names 下面一行一个类名,第 1 行对应类别 0,第 2 行对应类别 1,依次类推。") - lines.append("# 改完保存即生效,不需要重新转换模型、也不用重启环境(重跑节点即可)。") - lines.append("#") - lines.append("# 命令行查看/修改(推荐,不用手改本文件):") - lines.append("# bash ~/ros2/scripts/weights.sh labels <模型名>") - lines.append("# bash ~/ros2/scripts/weights.sh labels <模型名> --set \"工件,通止规\"") - lines.append("") - if model: - # 记下所属模型,便于发现"标签文件被拷给了另一个模型"这种错配。 - lines.append(f"model: {model}") - lines.append("names:") - if names: - for k in sorted(names): - lines.append(f" - {names[k]}") - else: - lines.append(" []") - return "\n".join(lines) + "\n" - - -def write_labels( - weights: Union[str, Path], - names: Dict[int, str], - *, - path: Optional[Union[str, Path]] = None, -) -> Path: - """把标签写到权重旁边的旁挂文件,返回写入路径。""" - dst = Path(path).expanduser() if path else labels_path_for(weights) - dst.parent.mkdir(parents=True, exist_ok=True) - model = Path(weights).stem - dst.write_text(format_labels_yaml(names, model=model), encoding="utf-8") - return dst - - -def read_label_file(path: Union[str, Path]) -> Optional[Dict[int, str]]: - """读旁挂标签文件。文件不存在或内容为空返回 None(不抛异常)。""" - p = Path(path).expanduser() - if not p.is_file(): - return None - try: - raw = p.read_text(encoding="utf-8") - except Exception: # noqa: BLE001 - return None - try: - import yaml - - data = yaml.safe_load(raw) - except Exception: # noqa: BLE001 - # 文件存在但读不动(语法错、编码错、权限)。返回 None 让调用方按 - # "没有标签"处理,而不是让整个推理进程崩掉 —— 标签缺失不该是致命的。 - return None - - if isinstance(data, dict): - # 规范形式:names: [...] - names = parse_names_field(data.get("names")) - if names: - return names - # 容忍 {0: 'a', 1: 'b'} 这种"顶层直接就是索引字典"的写法(Ultralytics data.yaml) - names = { - int(k): str(v).strip() - for k, v in data.items() - if str(k).lstrip("-").isdigit() and str(v).strip() - } - # 是合法 YAML 字典却读不出类别名 → 就是没有标签。 - # 这里**不能**再回落到"按行读文件",否则会把 `names: []` 里的 - # 'names:' 这几个字当成类名。 - return names or None - - if isinstance(data, (list, tuple)): - return parse_names_field(data) or None - - if isinstance(data, str): - # 整个文件就是一个标量 —— 可能是"改名过来的 classes.txt"。 - # 注意必须用**原始文本**:YAML 会把多行纯标量折成一行 - # ("a\nb\n" → "a b"),用 data 的话换行已经没了, - # "一行一个类名"会被当成一个带空格的长名字。 - return _parse_freeform_text(raw) or None - - # 空文件 / 只有注释 / 其它标量类型:按行读(能正确处理注释行)。 - try: - return read_label_text_file(p) or None - except Exception: # noqa: BLE001 - return None - - -def label_file_model(path: Union[str, Path]) -> Optional[str]: - """读旁挂标签文件里记录的 ``model:`` 字段(用于发现标签错配)。""" - p = Path(path).expanduser() - if not p.is_file(): - return None - try: - import yaml - - data = yaml.safe_load(p.read_text(encoding="utf-8")) - except Exception: # noqa: BLE001 - return None - if isinstance(data, dict): - v = data.get("model") - return _clean(v) if v else None - return None - - -# --------------------------------------------------------------------------- -# 从模型自身读标签 -# --------------------------------------------------------------------------- - - -def onnx_metadata(path: Union[str, Path]) -> Dict[str, str]: - """读 ONNX 的 ``metadata_props``(全是字符串),读不到返回空字典。 - - 用 ``load_external_data=False``:只读图结构不读权重,对 38MB 的模型也是毫秒级。 - Ultralytics 导出时会写入 ``names`` / ``imgsz`` / ``nc`` / ``task`` 等。 - """ - p = Path(path).expanduser() - if not p.is_file(): - return {} - try: - import onnx - - m = onnx.load(str(p), load_external_data=False) - except Exception: # noqa: BLE001 - return {} - return {x.key: x.value for x in m.metadata_props} - - -def labels_from_onnx(path: Union[str, Path]) -> Optional[Tuple[Dict[int, str], int]]: - """从 ONNX 的 ``metadata_props`` 读 ``names`` 与类别数 ``nc``。 - - 返回 ``(names, nc)``;读不到返回 None。 - - 注意 ``names`` 在 ONNX 里存的是 **Python 字典的 repr 字符串**(单引号), - 形如 ``"{0: 'workpiece'}"`` —— 不是 JSON。解析细节见 ``parse_names_field``。 - """ - meta = onnx_metadata(path) - if not meta: - return None - - names = parse_names_field(meta.get("names")) - nc = 0 - raw_nc = meta.get("nc") - if raw_nc is not None: - try: - nc = int(str(raw_nc).strip()) - except (TypeError, ValueError): - nc = 0 - if not nc and names: - nc = max(names) + 1 - return (names, nc) if names else None - - -def labels_from_model(path: Union[str, Path]) -> Optional[Tuple[Dict[int, str], int]]: - """从模型自身 metadata 读标签(走 Ultralytics,主要给 .pt 用)。 - - 对 .engine / .onnx 也能用(Ultralytics 会自己反序列化),但代价高: - 要加载整个模型。所以 ``read_labels()`` 只在必要时才调它。 - - Ultralytics 的 model 对象除了 ``names`` 还有 ``nc``;拿不到 nc 时用 names 推断。 - """ - p = Path(path).expanduser() - if not p.is_file(): - return None - try: - from ultralytics import YOLO - - model = YOLO(str(p), task="detect") - raw = getattr(model, "names", None) or {} - names = parse_names_field(raw) - nc = 0 - for attr in ("nc",): - try: - nc = int(getattr(model, attr) or 0) - except Exception: # noqa: BLE001 - nc = 0 - if not nc and names: - nc = max(names) + 1 - return (names, nc) if names else None - except Exception: # noqa: BLE001 - return None - - -# --------------------------------------------------------------------------- -# 统一入口 -# --------------------------------------------------------------------------- - - -def read_labels( - weights: Union[str, Path], - *, - allow_model_metadata: bool = True, - nc_hint: int = 0, -) -> LabelSet: - """按优先级读出一个模型该用的标签。 - - 优先级:旁挂文件 > ONNX metadata > 模型自身 metadata > 占位符。 - - 旁挂优先是刻意的:它是用户能直接编辑的那一份,必须覆盖模型内嵌的旧值, - 否则"我明明改了标签为什么不生效"就会变成一个很难查的问题。 - - 绝不抛异常。读不到就返回占位符并把原因记在 ``source`` 里, - 由调用方决定是记一条警告还是直接显示。 - """ - p = Path(weights).expanduser() - - side = labels_path_for(p) - names = read_label_file(side) - if names: - return LabelSet(names=names, source=SOURCE_SIDECAR, path=side) - - suffix = p.suffix.lower() - # .pt 的标签只可能来自模型自身;.onnx 先看内嵌 metadata(快); - # .engine / .trt 没有可用 metadata(见模块头说明),直接落到占位符或模型加载。 - if suffix == ".onnx": - got = labels_from_onnx(p) - if got: - return LabelSet(names=got[0], source=SOURCE_ONNX, path=p) - elif suffix in (".pt", ".pth"): - got = labels_from_model(p) - if got: - return LabelSet(names=got[0], source=SOURCE_MODEL, path=p) - - if allow_model_metadata and suffix in (".engine", ".trt"): - # engine 一般读不到(当前 TRT 没 metadata API),但也别直接放弃: - # 若用户是用 Ultralytics 导出的 engine,metadata 可能在。 - got = labels_from_model(p) - if got: - return LabelSet(names=got[0], source=SOURCE_MODEL, path=p) - - return LabelSet(names=placeholder_labels(nc_hint), source=SOURCE_PLACEHOLDER, path=None) - - -def describe(labels: LabelSet) -> str: - """一句人能看懂的说明,用于日志:``workpiece (来源: 旁挂标签文件)``。""" - names = ", ".join(labels.sorted_names()) or "(空)" - src = SOURCE_LABELS_ZH.get(labels.source, labels.source) - return f"{names} (来源: {src})" - - -def label_file_status( - weights: Union[str, Path], -) -> Tuple[bool, Optional[Path], Optional[str]]: - """检查旁挂标签文件状态,供 doctor 用。 - - 返回 ``(存在, 路径, 提示)``;``提示`` 为 None 表示没有问题。 - """ - p = Path(weights).expanduser() - side = labels_path_for(p) - if not side.is_file(): - return False, side, f"缺标签文件:{side.name}" - recorded = label_file_model(side) - if recorded and Path(weights).stem != recorded: - return True, side, ( - f"标签文件记录的 model 是 '{recorded}',但当前权重是 " - f"'{Path(weights).stem}' —— 可能是拷错了标签文件" - ) - return True, side, None diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/move_to_pose_client.py b/install/arm_application/lib/python3.11/site-packages/arm_application/move_to_pose_client.py deleted file mode 100644 index 2a55ac5..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/move_to_pose_client.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python3 -"""``arm_msgs/action/MoveToPose``(笛卡尔目标)的示例客户端。 - -等你有了 MoveIt 或自己的 IK 求解 action server 后,把它接上去即可。 -""" - -from __future__ import annotations - -import sys - -import rclpy -from rclpy.action import ActionClient -from rclpy.node import Node -from geometry_msgs.msg import PoseStamped - -from arm_msgs.action import MoveToPose - -from arm_application.ros_node import TolerantNode - - -class MoveToPoseClient(TolerantNode): - def __init__(self) -> None: - super().__init__('move_to_pose_client') - self._client = ActionClient(self, MoveToPose, 'move_to_pose') - - def send(self, x: float, y: float, z: float) -> None: - if not self._client.wait_for_server(timeout_sec=5.0): - self.get_logger().error( - 'move_to_pose action 不可用。' - '请启动一个实现了它的笛卡尔规划器(例如 MoveIt)。' - ) - return - - goal = MoveToPose.Goal() - goal.target_pose = PoseStamped() - goal.target_pose.header.frame_id = 'base_link' - goal.target_pose.header.stamp = self.get_clock().now().to_msg() - goal.target_pose.pose.position.x = x - goal.target_pose.pose.position.y = y - goal.target_pose.pose.position.z = z - # 单位姿态(不旋转) - goal.target_pose.pose.orientation.w = 1.0 - goal.velocity_scale = 0.3 - goal.acceleration_scale = 0.3 - goal.avoid_collisions = True - - self.get_logger().info(f'发送笛卡尔目标:({x:.3f}, {y:.3f}, {z:.3f})') - future = self._client.send_goal_async(goal) - rclpy.spin_until_future_complete(self, future) - handle = future.result() - if handle is None or not handle.accepted: - self.get_logger().error('目标被拒绝') - return - - result_future = handle.get_result_async() - rclpy.spin_until_future_complete(self, result_future) - result = result_future.result().result - self.get_logger().info(f'success={result.success} msg={result.message}') - - -def main(args=None) -> None: - rclpy.init(args=args) - node = MoveToPoseClient() - # 默认演示位姿;可通过命令行覆盖:x y z - vals = [0.35, 0.0, 0.35] - if len(sys.argv) >= 4: - vals = [float(sys.argv[1]), float(sys.argv[2]), float(sys.argv[3])] - node.send(*vals) - node.destroy_node() - rclpy.shutdown() - - -if __name__ == '__main__': - main() diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/onnx_workpiece.py b/install/arm_application/lib/python3.11/site-packages/arm_application/onnx_workpiece.py deleted file mode 100644 index f3ae202..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/onnx_workpiece.py +++ /dev/null @@ -1,152 +0,0 @@ -#!/usr/bin/env python3 -"""Direct ONNX Runtime inference for Ultralytics end2end detect models. - -为什么不走 ultralytics.YOLO:它对 .onnx 会按发行包名检查 onnxruntime, -环境装的是 onnxruntime-gpu 时会触发 pip AutoUpdate(可能卡死/破坏环境)。 -本模块用 onnxruntime 直接推理,显式 CPU provider,一次性拍照场景足够快。 - -模型要求:Ultralytics 导出时 end2end=True(NMS 已融合), -输出形状 [1, N, 6] = x1, y1, x2, y2, conf, cls(letterbox 坐标系)。 -detect_best_1.onnx 满足(metadata: end2end=True, nms=False)。 -""" - -from __future__ import annotations - -import logging -from pathlib import Path -from typing import List, Optional, Union - -import numpy as np - -from arm_application.model_labels import ( - SOURCE_MODEL, - LabelSet, - parse_names_field, - read_labels, -) -from arm_application.yolo_detector import Detection - -logger = logging.getLogger(__name__) - - -class OnnxWorkpieceDetector: - """给 detect_holes() 用的最小接口:detect(image, conf, iou, imgsz)。""" - - def __init__( - self, - weights: Union[str, Path], - *, - conf: float = 0.25, - imgsz: int = 640, - class_names: Optional[dict] = None, - ) -> None: - import onnxruntime as ort - - path = Path(weights).expanduser() - if not path.is_file(): - raise FileNotFoundError(f"ONNX weights not found: {path}") - so = ort.SessionOptions() - so.log_severity_level = 3 # 关掉 ORT 刷屏告警 - self._sess = ort.InferenceSession( - str(path), sess_options=so, providers=["CPUExecutionProvider"] - ) - inp = self._sess.get_inputs()[0] - self._iname = inp.name - shape = [d if isinstance(d, int) and d > 0 else imgsz for d in inp.shape] - self._in_h, self._in_w = int(shape[-2]), int(shape[-1]) - # 只认 ultralytics end2end 检测输出 ``[1, N, 6]``,否则**当场报错**。 - # 为什么必须在这里硬失败:2026-10-08 真机,把一个 ``task=pose`` 的模型 - # (输出 ``[1, 4+nc+3K, 8400]``)从这条分支解出来,得到的是 12 个垃圾框 - # ——conf 直接是坐标值(最高 70.87)、类名 ``class_73``、退化框 ``y1=y2=0``。 - # 而流水线照跑不误,只在二阶段"看不出工件"上体现出来,排查代价极大。 - # 宁可启动就失败(元规则:静默失效是头号敌人)。 - outs = self._sess.get_outputs() - tail = outs[0].shape[-1] if (outs and outs[0].shape) else None - if isinstance(tail, int) and tail != 6: - raise RuntimeError( - f"{path.name} 的检测输出最后一维是 {tail},不是 6 —— 它不是" - " ultralytics end2end 检测模型([1,N,6])。带 k0/k1/k2 关键点的" - " pose 模型必须交给 pose_detector / build_detector,否则坐标会被" - "当成置信度解出垃圾框,而且不会报错。" - ) - self.conf = float(conf) - self.imgsz = int(imgsz) - # 类别名:显式传入 > 旁挂标签文件 > ONNX 内嵌 metadata > 占位符。 - # 原先这里是硬编码 {0: "workpiece"},等于把类名写死在代码里 —— - # 换一个多类模型就会展示错误的名字,而且没人改得动。 - if class_names: - names = parse_names_field(class_names) - self._labels = LabelSet(names=names, source=SOURCE_MODEL, path=path) - else: - self._labels = read_labels(path, allow_model_metadata=False) - if self._labels.is_placeholder: - logger.warning( - "ONNX %s 没有类别标签,将用占位名显示。" - "补法: bash ~/ros2/scripts/weights.sh labels %s --from-model", - path.name, - path.stem, - ) - # 兼容旧属性名,避免外部代码引用时报 AttributeError。 - self._names = dict(self._labels.names) - - def _letterbox(self, img: np.ndarray): - h, w = img.shape[:2] - scale = min(self._in_w / w, self._in_h / h) - nw, nh = int(round(w * scale)), int(round(h * scale)) - import cv2 - - resized = cv2.resize(img, (nw, nh), interpolation=cv2.INTER_LINEAR) - canvas = np.full((self._in_h, self._in_w, 3), 114, dtype=np.uint8) - top = (self._in_h - nh) // 2 - left = (self._in_w - nw) // 2 - canvas[top : top + nh, left : left + nw] = resized - return canvas, scale, left, top - - def detect( - self, - image_bgr: np.ndarray, - conf: Optional[float] = None, - iou: Optional[float] = None, # end2end 模型已内置 NMS,忽略 - imgsz: Optional[int] = None, # 输入尺寸由模型决定,忽略 - **_kwargs, - ) -> List[Detection]: - del iou, imgsz - thr = float(conf if conf is not None else self.conf) - canvas, scale, left, top = self._letterbox(image_bgr) - blob = canvas[:, :, ::-1].transpose(2, 0, 1)[None].astype(np.float32) / 255.0 - out = self._sess.run(None, {self._iname: blob})[0] # [1, N, 6] - dets: List[Detection] = [] - if out is None or out.size == 0: - return dets - arr = np.asarray(out).reshape(-1, out.shape[-1]) - h, w = image_bgr.shape[:2] - for row in arr: - if row.shape[0] < 6: - continue - x1, y1, x2, y2, score, cls = [float(v) for v in row[:6]] - if score < thr: - continue - # letterbox 坐标 → 原图坐标 - xa = (x1 - left) / scale - ya = (y1 - top) / scale - xb = (x2 - left) / scale - yb = (y2 - top) / scale - xyxy = np.array( - [ - float(np.clip(xa, 0, w - 1)), - float(np.clip(ya, 0, h - 1)), - float(np.clip(xb, 0, w - 1)), - float(np.clip(yb, 0, h - 1)), - ] - ) - cid = int(cls) - dets.append( - Detection( - xyxy=xyxy, - conf=float(score), - cls_id=cid, - cls_name=self._labels.get(cid), - ) - ) - dets.sort(key=lambda d: d.conf, reverse=True) - return dets diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/orisys_tactile.py b/install/arm_application/lib/python3.11/site-packages/arm_application/orisys_tactile.py deleted file mode 100644 index 2ff58a8..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/orisys_tactile.py +++ /dev/null @@ -1,587 +0,0 @@ -"""Orisys 视触觉适配器。SDK 通过 pip 安装;设备 id 存放在 ``site.yaml`` 里。""" - -from __future__ import annotations - -import time -from dataclasses import dataclass -from pathlib import Path -from typing import Any, Optional - -import numpy as np - -from arm_application.site_io import ros2_root -from arm_application.tactile_interface import TactileCommand, TactileInterface, TactileSample - - -@dataclass -class OrisysSensorConfig: - vid_src: int | str = 0 - config_name: str = "dd03" - rotation_config_path: str = "" - cuda: bool = True - isstitch: bool = True - backend: str = "auto" - motion_threshold: float = 0.0 - target_fps: float = 30.0 - - -@dataclass -class OrisysDualConfig: - left: OrisysSensorConfig - right: OrisysSensorConfig - baseline_seconds: float = 2.0 - filter_alpha: float = 0.25 - backend: str = "orisys" # orisys | mock - image_hz: float = 0.0 - """视触觉图像(深度/形变图)的发布频率。0 = 不发布图像。 - - 为什么默认关:图像每帧几百 KB,跨进程序列化 + ROS 发布的开销远大于三力。 - 三力路径必须跑在 30fps(接触判据靠它),图像只是给人看和给算法备用, - 默认不开以免动到已经调好的三力时序。装配现场按需在 site.yaml 打开。""" - - -def resolve_orisys_config(config_name: str, config_file: str = "") -> str: - """把型号名解析成实际的 config.json 路径。 - - 查找顺序(先命中先用): - - 1. 显式传入的 ``config_file`` - 2. 参数本身就是存在的文件路径 - 3. ``devices/sensors/orisys/models/<型号>/config.json`` —— 型号配置随 SDK 放, - 这是现在唯一推荐的位置 - 4. 老位置 ``src/arm_application/config/orisys/<型号>.json``(兼容保留: - 站点自己放的定制配置可能还在这里) - 5. Orisys 包自带的 ``configs/<型号>.json`` - 6. 都没找到就把原样返回,交给 SDK 自己解析(它支持内置型号名) - """ - if config_file: - p = Path(config_file).expanduser() - if p.is_file(): - return str(p) - raw = (config_name or "dd03").strip() - p = Path(raw).expanduser() - if p.is_file(): - return str(p) - - root = ros2_root() - for cand in ( - root / "devices" / "sensors" / "orisys" / "models" / raw / "config.json", - root / "src" / "arm_application" / "config" / "orisys" / f"{raw}.json", - ): - if cand.is_file(): - return str(cand) - try: - import orisys - - pkg_root = Path(orisys.__file__).resolve().parent.parent - for cand in (pkg_root / "configs" / f"{raw}.json", pkg_root / "config" / f"{raw}.json"): - if cand.is_file(): - return str(cand) - except Exception: - pass - return raw - - -def load_orisys_from_site(data: dict) -> OrisysDualConfig: - t = data.get("tactile") or {} - left_raw = t.get("left") if isinstance(t.get("left"), dict) else {} - right_raw = t.get("right") if isinstance(t.get("right"), dict) else {} - cfg_file = str(t.get("config_file") or "") - # model 是设备契约层选型号用的键(对应 models/<型号>/ 目录名); - # config 是它的旧名,仅为兼容老站点文件保留,站点里应统一用 model。 - cfg_name = str(t.get("model") or t.get("config") or "dd03") - resolved = resolve_orisys_config(cfg_name, cfg_file) - common = dict( - config_name=resolved, - rotation_config_path=str(t.get("rotation_config") or ""), - cuda=bool(t.get("cuda", True)), - isstitch=bool(t.get("isstitch", True)), - backend=str(t.get("infer_backend") or t.get("backend_infer") or "auto"), - motion_threshold=float(t.get("motion_threshold") or 0.0), - target_fps=float(t.get("target_fps") or 30.0), - ) - left_vid = left_raw.get("video", t.get("left_video", 0)) - right_vid = right_raw.get("video", t.get("right_video", 2)) - left = OrisysSensorConfig(vid_src=_parse_video(left_vid), **common) - right = OrisysSensorConfig(vid_src=_parse_video(right_vid), **common) - if left_raw.get("config") or left_raw.get("config_file"): - left.config_name = resolve_orisys_config( - str(left_raw.get("config") or cfg_name), - str(left_raw.get("config_file") or ""), - ) - if right_raw.get("config") or right_raw.get("config_file"): - right.config_name = resolve_orisys_config( - str(right_raw.get("config") or cfg_name), - str(right_raw.get("config_file") or ""), - ) - left.rotation_config_path = str( - left_raw.get("rotation_config") or t.get("left_rotation") or t.get("rotation_config") or "" - ) - right.rotation_config_path = str( - right_raw.get("rotation_config") or t.get("right_rotation") or t.get("rotation_config") or "" - ) - return OrisysDualConfig( - left=left, - right=right, - baseline_seconds=float(t.get("baseline_seconds") or 2.0), - filter_alpha=float(t.get("filter_alpha") or 0.25), - backend=str(t.get("backend") or "orisys"), - image_hz=float(t.get("image_hz") or 0.0), - ) - - -def read_vector_map(sensor: Any) -> Optional[np.ndarray]: - """尝试从传感器读出力矢量场(每像素的切向力/位移矢量)。 - - 为什么要"尝试" - -------------- - Orisys 的 Python 绑定是编译过的,公开接口里没有一个明确叫 - "force vector map" 的方法。按语义最接近的是 ``compute_flow()`` - (形变光流 ≈ 切向位移场 ≈ 力矢量场),其次是 ``compute_hhd()``。 - 不同 SDK 版本这两个方法的返回值也不一样 —— 有的是 ``(H,W,2)`` 数组, - 有的返回 ``bool``(只给"形变是否超阈值")或可视化图。 - - 所以这里逐个试,只接受真正是二维以上数组的结果;都拿不到就返回 ``None``, - 上层跳过该话题而不是发一张假图。哪一路成功会打到日志里,便于现场核对。 - """ - for name in ("compute_flow", "compute_hhd", "compute_deformation"): - fn = getattr(sensor, name, None) - if fn is None: - continue - try: - result = fn() - except Exception: - continue - if isinstance(result, np.ndarray) and result.ndim >= 2 and result.size: - return result - return None - - -def _parse_video(value) -> int | str: - if isinstance(value, int): - return value - text = str(value).strip() - if text.isdigit(): - return int(text) - return text - - -class OrisysTactile(TactileInterface): - name = "orisys_tactile" - - def __init__(self, config: OrisysDualConfig | None = None) -> None: - self.cfg = config or OrisysDualConfig( - left=OrisysSensorConfig(vid_src=0), - right=OrisysSensorConfig(vid_src=2), - ) - self._sensors: list[dict[str, Any]] = [] - self._baseline: dict[str, float] = {} - self._connected = False - - def connect(self, sides=("left", "right")) -> None: - """连接指定侧的传感器。注意:SDK 单进程双开会严重掉帧(30→0.8fps), - 双指请拆两个进程各连一侧(tactile.launch.py 已是双进程)。""" - try: - import orisys - except ImportError as exc: - raise RuntimeError( - "缺少 orisys SDK。请执行 pip install -e /path/to/orisys-sdk " - "(git.orisys-tech.cn/orisys/test)。配置依旧从 ``site.yaml`` 的 ``tactile`` 段读取。" - ) from exc - - self._sensors = [] - for side, cfg in (("left", self.cfg.left), ("right", self.cfg.right)): - if side not in sides: - continue - kwargs = dict( - cuda=cfg.cuda, - isstitch=cfg.isstitch, - verbose=False, - config_name=cfg.config_name, - backend=cfg.backend, - ) - if cfg.rotation_config_path: - kwargs["rotation_config_path"] = cfg.rotation_config_path - sensor = orisys.Sensor(cfg.vid_src, **kwargs) - self._sensors.append({"side": side, "sensor": sensor, "cfg": cfg}) - self._calibrate_baseline() - self._connected = True - - def read_side(self, side: str, want_vector: bool = False) -> dict[str, Any]: - """读指定侧(单侧进程模式);未连接/未知侧返回全零。 - - ``want_vector=True`` 时额外计算力矢量场(逐像素运算,较贵)—— - 只应在需要发布矢量图的那些帧上打开。 - """ - if not self._connected: - return self._empty_sample(side) - for item in self._sensors: - if item["side"] == side: - return self._read_single(item, want_vector=want_vector) - return self._empty_sample(side) - - def disconnect(self) -> None: - for item in self._sensors: - try: - item["sensor"].disconnect() - except Exception: - pass - self._sensors = [] - self._connected = False - - def reset(self, hole_id: int) -> None: - del hole_id - - def step(self, sample: TactileSample) -> TactileCommand: - del sample - return TactileCommand( - delta_xyz=np.zeros(3), - delta_rpy=np.zeros(3), - done=False, - ok=True, - message="orisys step", - ) - - def read_sample(self) -> TactileSample: - if not self._connected or len(self._sensors) != 2: - return TactileSample( - timestamp=time.time(), - force_xyz=np.zeros(3), - torque_xyz=np.zeros(3), - contact=False, - ) - left = self._read_single(self._sensors[0]) - right = self._read_single(self._sensors[1]) - force_xyz = np.array( - [ - (left["fnormal"] + right["fnormal"]) * 0.5, - (left["fshearx"] + right["fshearx"]) * 0.5, - (left["fsheary"] + right["fsheary"]) * 0.5, - ] - ) - torque_xyz = np.array( - [ - right["fnormal"] - left["fnormal"], - right["fshearx"] - left["fshearx"], - right["fsheary"] - left["fsheary"], - ] - ) - return TactileSample( - timestamp=time.time(), - force_xyz=force_xyz, - torque_xyz=torque_xyz, - contact=bool(left["is_contact"] or right["is_contact"]), - embedding=np.array( - [ - left["fnormal"], - right["fnormal"], - left["fshearx"], - right["fshearx"], - left["fsheary"], - right["fsheary"], - ] - ), - raw={"left": left, "right": right, "centroid": self._estimate_centroid(left, right)}, - ) - - def _read_single(self, item: dict, want_vector: bool = False) -> dict[str, Any]: - sensor = item["sensor"] - cfg = item["cfg"] - img = sensor.get_img() - if img is None: - return self._empty_sample(item["side"]) - is_contact = sensor.compute_deformation(check_motion=True, threshold=cfg.motion_threshold) - fps, fnormal, fshearx, fsheary = sensor.read_info( - sensor.info.FPS, - sensor.info.FNORMAL, - sensor.info.FSHEARX, - sensor.info.FSHEARY, - ) - side = item["side"] - fnormal = max(0.0, float(fnormal) - self._baseline.get(f"{side}_normal", 0.0)) - fshearx = float(fshearx) - self._baseline.get(f"{side}_shearx", 0.0) - fsheary = float(fsheary) - self._baseline.get(f"{side}_sheary", 0.0) - centroid = (0.0, 0.0) - centroid_found = False - try: - sensor.compute_contact() - c, found = sensor.read_info(sensor.info.CENTROID) - if found: - centroid = c - centroid_found = True - except Exception: - pass - return { - "side": side, - "fnormal": fnormal, - "fshearx": fshearx, - "fsheary": fsheary, - "fps": float(fps), - "is_contact": bool(is_contact), - "centroid": centroid, - "centroid_found": centroid_found, - "img": img, - # 矢量场只在被要求时才算:compute_flow 是逐像素运算,每帧都做会 - # 明显增加 worker 耗时,可能拖累三力的 30fps。 - "vector": read_vector_map(sensor) if want_vector else None, - } - - def _empty_sample(self, side: str = "unknown") -> dict[str, Any]: - return { - "side": side, - "fnormal": 0.0, - "fshearx": 0.0, - "fsheary": 0.0, - "fps": 0.0, - "is_contact": False, - "centroid": (0.0, 0.0), - "centroid_found": False, - "img": None, - "vector": None, - } - - def _calibrate_baseline(self) -> None: - seconds = self.cfg.baseline_seconds - if seconds <= 0: - return - buckets: dict[str, list[float]] = { - "left_normal": [], - "right_normal": [], - "left_shearx": [], - "right_shearx": [], - "left_sheary": [], - "right_sheary": [], - } - deadline = time.perf_counter() + seconds - while time.perf_counter() < deadline: - for item in self._sensors: - sensor = item["sensor"] - side = item["side"] - img = sensor.get_img() - if img is None: - continue - sensor.compute_deformation(check_motion=False) - fnormal, fshearx, fsheary = sensor.read_info( - sensor.info.FNORMAL, - sensor.info.FSHEARX, - sensor.info.FSHEARY, - ) - buckets[f"{side}_normal"].append(float(fnormal)) - buckets[f"{side}_shearx"].append(float(fshearx)) - buckets[f"{side}_sheary"].append(float(fsheary)) - time.sleep(0.01) - self._baseline = {k: float(np.mean(v)) if v else 0.0 for k, v in buckets.items()} - - def _estimate_centroid(self, left: dict, right: dict) -> tuple[float, float]: - if left["centroid_found"] and right["centroid_found"]: - return ( - (left["centroid"][0] + right["centroid"][0]) * 0.5, - (left["centroid"][1] + right["centroid"][1]) * 0.5, - ) - if left["centroid_found"]: - return left["centroid"] - if right["centroid_found"]: - return right["centroid"] - return (0.0, 0.0) - - -class MockOrisysTactile(OrisysTactile): - name = "mock_orisys" - - def __init__(self, config: OrisysDualConfig | None = None) -> None: - super().__init__(config) - self._n = 0 - - def connect(self) -> None: - self._connected = True - self._baseline = {} - self._n = 0 - self._sensors = [ - {"side": "left", "sensor": None, "cfg": self.cfg.left}, - {"side": "right", "sensor": None, "cfg": self.cfg.right}, - ] - - def read_sample(self) -> TactileSample: - self._n += 1 - contact = self._n >= 8 - force = 0.2 if contact else 0.0 - return TactileSample( - timestamp=time.time(), - force_xyz=np.array([force, 0.01, 0.005]), - torque_xyz=np.zeros(3), - contact=contact, - raw={ - "left": {"fnormal": force, "fshearx": 0.0, "fsheary": 0.0, "is_contact": contact, "fps": 30.0, "centroid": (0, 0), "centroid_found": False}, - "right": {"fnormal": force, "fshearx": 0.0, "fsheary": 0.0, "is_contact": contact, "fps": 30.0, "centroid": (0, 0), "centroid_found": False}, - }, - ) - - -def make_tactile(data: dict) -> TactileInterface: - cfg = load_orisys_from_site(data) - backend = (cfg.backend or "orisys").strip().lower() - if backend in ("mock", "mock_orisys"): - return MockOrisysTactile(cfg) - return OrisysTactile(cfg) - - -# ==================== 多进程工作器(厂家推荐架构,每进程独立 CUDA 上下文) ==================== -# 实测:单进程双开两路传感器会互相拖垮(30→0.8fps);两个独立进程各开一路则稳定 30fps。 - -def _usb_devpath_for_video(vid_src) -> Optional[str]: - """/dev/v4l/by-path/... 或 /dev/videoN → sysfs USB 设备号(如 1-3.4.1)。""" - import re - - try: - real = os.path.realpath(str(vid_src)) - base = os.path.basename(real) - if not base.startswith("video"): - return None - sysdev = os.path.realpath(f"/sys/class/video4linux/{base}/device") - for part in reversed(sysdev.split("/")): - if re.fullmatch(r"\d+-\d+(\.\d+)*", part): - return part - except Exception: - pass - return None - - -def _usb_self_heal(vid_src, side: str) -> None: - """内核级卡死(select 超时循环)只有 unbind/bind 能救。orisys-usb-reset - 是 root 拥有的白名单脚本(sudoers NOPASSWD),只认 Orisys 的 vid/pid。""" - import subprocess - - dev = _usb_devpath_for_video(vid_src) - if not dev: - return f"[{side}] USB 自愈:解析不到设备号({vid_src})" - try: - r = subprocess.run( - ["sudo", "-n", "/usr/local/bin/orisys-usb-reset", dev], - capture_output=True, text=True, timeout=15.0, - ) - note = (r.stdout or r.stderr).strip().splitlines() - return f"[{side}] USB 自愈复位 {dev}: {note[-1] if note else 'ok'}" - except Exception as exc: - return f"[{side}] USB 自愈失败 {dev}: {exc}" - - -def tactile_worker(side: str, cfg: OrisysDualConfig, q, stop_event, image_q=None) -> None: - """独立进程:开一侧传感器,把样本推进队列。 - - q: mp.Queue(调用方给 maxsize≈2,满了丢旧留新)—— 三力等轻量数据,每帧都推。 - image_q: mp.Queue 或 None —— 视触觉图像与力矢量场。 - - 图像默认**不过队列**(``image_q=None``):每帧几百 KB,跨进程序列化 + - ROS 发布的开销会挤占三力的 30fps 时序。需要图像时调用方传一个 - ``maxsize=1`` 的队列,并按 ``cfg.image_hz`` 节流推送 —— 队列满时丢旧留新, - 主进程来不及消费也只会丢图像,不会影响三力。 - - stop_event: mp.Event,置位后干净退出(先 disconnect 释放 V4L2 设备) - - 自动重连:摄像头被强占/USB 抖动后会出现 get_img 持续 select 超时(空读, - 单次最长阻塞 ~10s)。连续 2 次空读或单次读取 >2s 即断开重连,直到恢复。 - """ - try: # 给进程起个可识别的 comm 名,便于 pkill 清理孤儿(否则占死 /dev/video*) - import ctypes - ctypes.CDLL("libc.so.6").prctl(15, b"orisys_tac_w", 0, 0, 0) # PR_SET_NAME - except Exception: - pass - - def _put(item: dict) -> None: - try: - if q.full(): - try: - q.get_nowait() - except Exception: - pass - q.put(item) - except Exception: - pass - - def _put_image(item: dict) -> None: - """图像入队:只保留最新一帧。队列满说明主进程没在消费,丢掉旧的即可。""" - try: - if image_q is None: - return - if image_q.full(): - try: - image_q.get_nowait() - except Exception: - pass - image_q.put(item) - except Exception: - pass - - period = 1.0 / max(1.0, float(getattr(cfg.left if side == "left" else cfg.right, "target_fps", 30.0))) - img_period = (1.0 / cfg.image_hz) if (image_q is not None and cfg.image_hz > 0) else 0.0 - last_img_t = 0.0 - vid_src = getattr(cfg.left if side == "left" else cfg.right, "vid_src", None) - tac: Optional[OrisysTactile] = None - bad = 0 - dead_cycles = 0 # 连续“重连了但读不到数据”的轮数 → 内核级卡死 → USB 自愈 - backoff = 0.5 - while not stop_event.is_set(): - if tac is None: - try: - tac = OrisysTactile(cfg) - tac.connect(sides=(side,)) - _put({"side": side, "error": f"[{side}] (re)connected"}) - backoff = 0.5 - except Exception as exc: - _put({"side": side, "error": f"connect failed: {exc}"}) - tac = None - dead_cycles += 1 - if dead_cycles >= 2: - _put({"side": side, "error": _usb_self_heal(vid_src, side)}) - dead_cycles = 0 - time.sleep(min(backoff, 3.0)) - backoff *= 2.0 - continue - # 只有图像帧才算矢量场:compute_flow 是逐像素运算,每帧都算会拖累三力。 - want_img = image_q is not None and (time.perf_counter() - last_img_t) >= img_period - t0 = time.perf_counter() - try: - d = tac.read_side(side, want_vector=want_img) - empty = d.get("img") is None - except Exception: - d, empty = None, True - dt = time.perf_counter() - t0 - if empty or dt > 2.0: - bad += 1 - if bad >= 2: - _put({"side": side, "error": f"[{side}] 相机断流,自动重连中…"}) - try: - tac.disconnect() - except Exception: - pass - tac = None - bad = 0 - dead_cycles += 1 - if dead_cycles >= 2: - _put({"side": side, "error": _usb_self_heal(vid_src, side)}) - dead_cycles = 0 - continue - else: - bad = 0 - dead_cycles = 0 - if d is not None and not empty: - if want_img: - last_img_t = time.perf_counter() - _put_image({ - "side": side, - "img": d.get("img"), - "vector": d.get("vector"), - "stamp": time.time(), - }) - # 图像与矢量场已单独走 image_q;三力这条轻量队列不背它们。 - d = {k: v for k, v in d.items() if k not in ("img", "vector")} - d["error"] = "" - _put(d) - rest = period - (time.perf_counter() - t0) - if rest > 0: - time.sleep(rest) - try: - if tac is not None: - tac.disconnect() - except Exception: - pass diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/perception_node.py b/install/arm_application/lib/python3.11/site-packages/arm_application/perception_node.py deleted file mode 100644 index 21510b1..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/perception_node.py +++ /dev/null @@ -1,1668 +0,0 @@ -#!/usr/bin/env python3 -"""perception_node —— YOLO + 深度 + 卡尔曼滤波(独立进程)。 - -硬性规则: -- 图像回调**只**存最新帧(绝不在回调里跑 YOLO) -- YOLO 跑在专门的工作线程上,保证 ``MutuallyExclusive`` 的 I/O 回调永远不会被阻塞 -- 用 ``SensorDataQoS`` ``BEST_EFFORT`` ``keep_last(5)`` -- 滤波后的三维点用 ``geometry_msgs/PointStamped`` 发布(不用 Service) -- 动态物体 TF 只在视觉帧率下发布 -- 高置信度检测始终重新捕获(快速运动时不会冻结) -""" - -from __future__ import annotations - -import os -import threading -import time -from pathlib import Path -from typing import Optional - -import numpy as np -import rclpy -from geometry_msgs.msg import PointStamped, TransformStamped -from rclpy.callback_groups import MutuallyExclusiveCallbackGroup -from rclpy.executors import MultiThreadedExecutor -from rclpy.node import Node -from rclpy.qos import ( - HistoryPolicy, - QoSProfile, - ReliabilityPolicy, - qos_profile_sensor_data, -) -from sensor_msgs.msg import CameraInfo, Image -from std_msgs.msg import Bool, Float32, Float32MultiArray -from tf2_ros import TransformBroadcaster - -from arm_application.box_tracker import BoxTracker -from arm_application.feature_guard import ( - FarReacquireConfirm, - TrackSlewGuard, - kpt_plausible, -) -from arm_application.geom_ik import load_handeye_T -from arm_application.handeye_realsense import ( - is_realsense_source, - resolve_realsense_topics, -) -from arm_application.overhead_oneshot import ( - D405_MISS_BEFORE_D435_S, - ONESHOT_ACCEPT_TIMEOUT_S, - best_det_conf, - depth_raw_to_m, - oneshot_k0_base, - oneshot_shot_timed_out, - oneshot_should_submit, - select_oneshot_det, - wrist_needs_handoff, - z_locked_qos, -) -from arm_application.kalman_filter import KalmanFilter3D -from arm_application.plane_feature import ( - PlaneFeature, - geometric_center_on_plane, - workpiece_xyz_in_box, -) -from arm_application.pose_detector import TRACK_KPT_INDEX -from arm_application.yolo_detector import ( - INFER_BUSY, - YoloDetector, - YoloInferProcess, - build_detector, - pick_best, - resolve_weights, -) - -from arm_application.ros_node import TolerantNode - -# D435 一次性推理用的 seq。必须远离腕部帧序号,结果绝不能当 D405 检测去立体匹配。 -_ONESHOT_SEQ = 2_000_000_000 -_ONESHOT_VIZ_SEQ = 2_000_000_001 - - -def _bgr_copy(msg: Image) -> np.ndarray: - """返回调用方持有的 BGR uint8 数组(对异步 YOLO 安全;ROS 可能把原消息丢掉)。""" - h, w = int(msg.height), int(msg.width) - enc = (msg.encoding or "").lower() - buf = np.frombuffer(msg.data, dtype=np.uint8) - if enc == "bgr8": - return buf.reshape(h, w, 3).copy() - if enc == "rgb8": - return buf.reshape(h, w, 3)[:, :, ::-1].copy() - raise RuntimeError(f"不支持的编码 {msg.encoding!r}") - - -class PerceptionNode(TolerantNode): - def __init__(self) -> None: - super().__init__("perception_node") - tid = threading.get_ident() - self.get_logger().warn( - f"perception_node 已启动 pid={os.getpid()} thread_id={tid}" - ) - - self.declare_parameter("camera_source", "d405") - self.declare_parameter("camera_namespace", "") - self.declare_parameter("image_topic", "") - self.declare_parameter("camera_info_topic", "") - self.declare_parameter("depth_topic", "/d405/aligned_depth_to_color/image_raw") - self.declare_parameter("weights", "/home/cc/ros2/models/yolo/gongjian0929.onnx") - self.declare_parameter("conf", 0.10) - self.declare_parameter("iou", 0.45) - self.declare_parameter("imgsz", 640) - self.declare_parameter("device", "0") - self.declare_parameter("min_conf", 0.12) - # 重新捕获门槛(跳到新位置必须达到的置信度)。为什么必须比 min_conf 高得多: - # 真机实测假框 conf 0.13~0.47,而真 k0 是 0.87(推导见 site.yaml 同名字段)。 - # 旧写法把它接成 min_conf ⇒ 0.15 的远框被原样采信、kf.reset() 直接跳过去。 - self.declare_parameter("reacquire_conf", 0.55) - # ---- 跟踪点可信性的三道守卫(实现与推导见 feature_guard.py)---- - # 2026-10-08 真机:真 k0(conf 0.87)被一串**高置信度假 k0**(conf 0.53~0.73) - # 顶掉,1s 内把臂从 home 带到工作盒角落,之后 148s 全是"检测漏检"。 - # 假 k0 挡不住的地方:置信度没有可分区间;它们**贴在画面边上**、**借深度**。 - self.declare_parameter("keypoint_border_px", 6.0) - self.declare_parameter("track_max_step_m", 0.04) - self.declare_parameter("reacquire_far_px", 120.0) - self.declare_parameter("reacquire_confirm_frames", 3) - self.declare_parameter("vision_hz", 30.0) - self.declare_parameter("z_ref_m", 0.40) - self.declare_parameter("jump_px", 280.0) - self.declare_parameter("jump_z_m", 0.20) - self.declare_parameter("min_depth_m", 0.04) - # 特征点的**相机量程下限**:比这更近的深度读数一定来自机械臂自身(爪上夹的 - # 通止规 / 相机座),不是工件。判据是实测两条带(见 site.yaml 同名字段的推导): - # 随臂一起动的近带 0.078~0.087m,工件面 0.19~0.29m ⇒ 取 0.14。 - self.declare_parameter("feature_min_range_m", 0.14) - self.declare_parameter("max_depth_m", 0.55) - self.declare_parameter("work_z_max_m", 0.50) # 高于此值 = 孔 / 背景 - self.declare_parameter("object_frame", "tracked_object") - self.declare_parameter("camera_frame", "d405_color_optical_frame") - self.declare_parameter("kf_q_pos", 2.0e-3) - self.declare_parameter("kf_q_vel", 5.0e-2) - self.declare_parameter("kf_r_pos", 8.0e-4) - self.declare_parameter("meas_blend", 0.65) # 1 = 原始测量值,0 = 纯卡尔曼滤波 - self.declare_parameter("half_precision", True) - self.declare_parameter("backend", "auto") # auto|torch|tensorrt - self.declare_parameter("mp_infer", True) # YOLO 跑在 spawn() 子进程里 - # 自适应 Z 低通滤波:alpha_z = clamp(z_alpha_min + |vel_z|*z_alpha_gain, min, max) - self.declare_parameter("z_alpha_min", 0.10) - self.declare_parameter("z_alpha_max", 0.60) - self.declare_parameter("z_alpha_gain", 2.0) - # 加速 YOLO:推理前先降采样;检测框再缩放回全分辨率 - self.declare_parameter("infer_max_width", 0) - # 检测框 EMA(1 = 每帧都用原始 YOLO —— 紧跟目标;更低 = 更平滑但滞后) - self.declare_parameter("box_ema_alpha", 0.85) - # YOLO 短暂漏检:预览里保留上一个框;只有连续 N 帧都漏检才清除 - self.declare_parameter("miss_clear_frames", 12) - self.declare_parameter("overlay_hold_on_miss", True) - self.declare_parameter("hold_point_on_miss", True) - self.declare_parameter("miss_hold_point_frames", 2) - # plane = 立体表面质心(推荐);box = YOLO 检测框中心 - # keypoint = pose 模型的 k0 关键点(跟踪孔);见 pose_detector - self.declare_parameter("feature_mode", "plane") - self.declare_parameter("keypoint_index", TRACK_KPT_INDEX) - self.declare_parameter("keypoint_min_conf", 0.30) - self.declare_parameter("keypoint_win_px", 6) - self.declare_parameter("plane_inlier_m", 0.008) - self.declare_parameter("plane_band_m", 0.06) - # ---- D405 主跟踪 + D435 一次性(键必须从 site 接入,缺了启动即红)---- - self.declare_parameter("wrist_handoff_conf", -1.0) - self.declare_parameter("overhead_oneshot_enable", False) - self.declare_parameter("d435_move_only", False) - self.declare_parameter("overhead_min_depth_m", -1.0) - self.declare_parameter("overhead_max_depth_m", -1.0) - self.declare_parameter("overhead_oneshot_conf", -1.0) - self.declare_parameter("overhead_cooldown_s", -1.0) - self.declare_parameter("overhead_frame_max_age_s", -1.0) - self.declare_parameter("overhead_handeye_file", "") - self.declare_parameter("overhead_camera_source", "") - self.declare_parameter("overhead_camera_frame", "") - self.declare_parameter("overhead_image_topic", "") - self.declare_parameter("overhead_info_topic", "") - self.declare_parameter("overhead_depth_topic", "") - self.declare_parameter("base_frame", "") - - self.z_ref = float(self.get_parameter("z_ref_m").value) - self.min_conf = float(self.get_parameter("min_conf").value) - self.reacquire_conf = float(self.get_parameter("reacquire_conf").value) - self.jump_px = float(self.get_parameter("jump_px").value) - self.jump_z_m = float(self.get_parameter("jump_z_m").value) - self.min_depth = float(self.get_parameter("min_depth_m").value) - self.max_depth = float(self.get_parameter("max_depth_m").value) - # 特征点量程下限 = max(解码量程下限, 工具几何下限):两者取严,不许被调松到 - # 比 min_depth 还小(那会让"工具自己"重新变成合法目标)。 - self.feature_min_range = max( - self.min_depth, float(self.get_parameter("feature_min_range_m").value) - ) - self.work_z_max = float(self.get_parameter("work_z_max_m").value) - self.hold_point_on_miss = bool(self.get_parameter("hold_point_on_miss").value) - self.object_frame = str(self.get_parameter("object_frame").value) - self.camera_frame = str(self.get_parameter("camera_frame").value) - self.meas_blend = float(np.clip(float(self.get_parameter("meas_blend").value), 0.0, 1.0)) - self.z_alpha_min = float(self.get_parameter("z_alpha_min").value) - self.z_alpha_max = float(self.get_parameter("z_alpha_max").value) - self.z_alpha_gain = float(self.get_parameter("z_alpha_gain").value) - self.infer_max_width = int(self.get_parameter("infer_max_width").value) - self.backend_name = str(self.get_parameter("backend").value or "auto") - self.mp_infer = bool(self.get_parameter("mp_infer").value) - self.box_ema_alpha = float(np.clip(float(self.get_parameter("box_ema_alpha").value), 0.2, 1.0)) - self.miss_clear_frames = max(1, int(self.get_parameter("miss_clear_frames").value)) - self.overlay_hold_on_miss = bool(self.get_parameter("overlay_hold_on_miss").value) - self.miss_hold_point_frames = max( - 1, int(self.get_parameter("miss_hold_point_frames").value) - ) - self.feature_mode = str(self.get_parameter("feature_mode").value or "plane").strip().lower() - self.keypoint_index = max(0, int(self.get_parameter("keypoint_index").value)) - self.keypoint_min_conf = float(self.get_parameter("keypoint_min_conf").value) - self.keypoint_win_px = max(1, int(self.get_parameter("keypoint_win_px").value)) - # 跟踪点三道守卫(单一实现见 feature_guard.py) - self.keypoint_border_px = float(self.get_parameter("keypoint_border_px").value) - self.track_max_step_m = float(self.get_parameter("track_max_step_m").value) - self.reacquire_far_px = float(self.get_parameter("reacquire_far_px").value) - self._slew = TrackSlewGuard(self.track_max_step_m) - self._far = FarReacquireConfirm( - self.reacquire_far_px, - int(self.get_parameter("reacquire_confirm_frames").value), - ) - self.plane_inlier_m = float(self.get_parameter("plane_inlier_m").value) - self.plane_band_m = float(self.get_parameter("plane_band_m").value) - self.overhead_oneshot_enable = bool( - self.get_parameter("overhead_oneshot_enable").value - ) - self.d435_move_only = bool(self.get_parameter("d435_move_only").value) - self._T_oh: Optional[np.ndarray] = None - self._oh_image: Optional[Image] = None - self._oh_depth: Optional[Image] = None - self._oh_image_mono = -1.0 - self._oh_depth_mono = -1.0 - self._oh_fx = self._oh_fy = self._oh_cx = self._oh_cy = 0.0 - self._oh_frame = "" - self._oneshot_t = -1.0e9 - self._need_oneshot = False - self._oneshot_inflight = False - self._oneshot_shot = False - self._oneshot_shot_t = -1.0e9 - self._low_since: Optional[float] = None - self._d435_commanding = False - self._z_locked = False - self._oneshot_img: Optional[Image] = None - self._oneshot_depth: Optional[Image] = None - self._oneshot_viz_only = False - self._oh_viz_t = -1.0e9 - if self.overhead_oneshot_enable: - self.wrist_handoff_conf = float( - self.get_parameter("wrist_handoff_conf").value - ) - if self.wrist_handoff_conf < 0.0: - raise RuntimeError( - "overhead_oneshot_enable 时 wrist_handoff_conf 必须由 site.yaml 接入," - "收到哨兵 -1 —— 配置没接线。" - ) - self.overhead_min_depth = float( - self.get_parameter("overhead_min_depth_m").value - ) - self.overhead_max_depth = float( - self.get_parameter("overhead_max_depth_m").value - ) - self.overhead_oneshot_conf = float( - self.get_parameter("overhead_oneshot_conf").value - ) - self.overhead_cooldown_s = float( - self.get_parameter("overhead_cooldown_s").value - ) - self.overhead_frame_max_age_s = float( - self.get_parameter("overhead_frame_max_age_s").value - ) - if min( - self.overhead_min_depth, - self.overhead_max_depth, - self.overhead_oneshot_conf, - self.overhead_cooldown_s, - self.overhead_frame_max_age_s, - ) < 0.0: - raise RuntimeError( - "D435 一次性参数仍是哨兵 -1 —— site.yaml 的 perception.overhead 没接到节点。" - ) - oh_file = str(self.get_parameter("overhead_handeye_file").value or "") - if not Path(oh_file).is_file(): - raise RuntimeError( - f"D435 一次性定位缺眼在手外结果:{oh_file}。" - "先跑 bash ~/ros2/scripts/run_handeye.sh --arm 89 --mode eye_to_hand calibrate" - ) - self._T_oh = load_handeye_T(oh_file) - self._oh_frame = str( - self.get_parameter("overhead_camera_frame").value or "" - ) - - self._fx = self._fy = self._cx = self._cy = 0.0 - self._latest_image: Optional[Image] = None - self._latest_depth: Optional[Image] = None - self._last_uv: Optional[np.ndarray] = None - # k0 相对工件检测框的**归一化偏移**(相对框中心、除以框宽高)。k0 掉信时 - # 用它在框上重建 k0 —— 只借"偏移"不借"绝对位置",跟踪点就不会横移一大截 - #(见 `_keypoint_feature` 的真机反例)。 - self._kpt_box_frac: Optional[np.ndarray] = None - self._last_good_z: Optional[float] = None - self._last_plane_xyz: Optional[np.ndarray] = None - self._last_filt: Optional[np.ndarray] = None - self._z_filt: Optional[float] = None - self._z_filt_t: Optional[float] = None - self._box_ema: Optional[np.ndarray] = None # xyxy - self._last_raw_xyxy: Optional[np.ndarray] = None - self._box_trk = BoxTracker() - self._last_box_cls = 0.0 - self._last_box_conf = 0.0 - self._last_yolo_t: Optional[float] = None - self._miss_count = 0 - self._last_det_payload: Optional[list] = None - self._frame_seq = 0 - self._done_seq = -1 - self._frame_t: dict = {} - self._infer_meta: dict = {} - self._submitted_seq = -1 - self._last_gpu_t: Optional[float] = None - self._last_restart_t = 0.0 - self._lock = threading.Lock() - self._infer_busy = False - self._stop = threading.Event() - self._wake = threading.Event() - - # I/O 回调组:只做轻量的“存最新帧”(绝不跑 YOLO) - self._io_cbg = MutuallyExclusiveCallbackGroup() - self._wake_cbg = MutuallyExclusiveCallbackGroup() - - self.kf = KalmanFilter3D( - q_pos=float(self.get_parameter("kf_q_pos").value), - q_vel=float(self.get_parameter("kf_q_vel").value), - r_pos=float(self.get_parameter("kf_r_pos").value), - ) - - weights_raw = str(self.get_parameter("weights").value) - weights = str(resolve_weights(weights_raw, self.backend_name)) - yolo_cfg = { - "weights": weights, - "backend": self.backend_name, - "conf": float(self.get_parameter("conf").value), - "iou": float(self.get_parameter("iou").value), - "device": str(self.get_parameter("device").value or ""), - "imgsz": int(self.get_parameter("imgsz").value), - "half": bool(self.get_parameter("half_precision").value), - } - self._yolo_half = bool(yolo_cfg["half"]) - self._yolo_proc: Optional[YoloInferProcess] = None - if self.mp_infer: - self._yolo_proc = YoloInferProcess(yolo_cfg) - self.detector = self._yolo_proc # 鸭子类型,只要求有 infer() - imgsz = self._yolo_proc.imgsz - self.get_logger().info( - f"YOLO worker pid={self._yolo_proc._p.pid} weights={self._yolo_proc.weights_path}" - ) - else: - self.detector = build_detector( - weights, - backend=self.backend_name, - conf=float(yolo_cfg["conf"]), - iou=float(yolo_cfg["iou"]), - device=str(yolo_cfg["device"]), - imgsz=int(yolo_cfg["imgsz"]), - ) - # PoseDetector 自己管 GPU 张量,没有 ultralytics 的 _model 可挪。 - if self._yolo_half and hasattr(self.detector, "_model"): - try: - import torch - - if torch.cuda.is_available(): - self.detector._model.to("cuda") - else: - self._yolo_half = False - except Exception: # noqa: BLE001 - self._yolo_half = False - elif self._yolo_half: - self._yolo_half = False - try: - self.detector.warmup(half=self._yolo_half) - except Exception as exc: # noqa: BLE001 - self.get_logger().warn(f"YOLO 预热失败:{exc}") - imgsz = self.detector.imgsz - - image_qos = QoSProfile( - history=HistoryPolicy.KEEP_LAST, - depth=5, - reliability=ReliabilityPolicy.BEST_EFFORT, - ) - assert image_qos.reliability == qos_profile_sensor_data.reliability - - cam_src = str(self.get_parameter("camera_source").value).strip().lower() - img_topic = str(self.get_parameter("image_topic").value or "").strip() - info_topic = str(self.get_parameter("camera_info_topic").value or "").strip() - ns = str(self.get_parameter("camera_namespace").value or "").strip() - if is_realsense_source(cam_src) or is_realsense_source(ns): - img_topic, info_topic = resolve_realsense_topics( - cam_src, - camera_namespace=ns, - image_topic=img_topic, - camera_info_topic=info_topic, - ) - depth_topic = str(self.get_parameter("depth_topic").value or "").strip() - cam_ns = (ns or cam_src).strip().strip("/") - if not depth_topic or ( - is_realsense_source(cam_ns) - and depth_topic - in ( - "/d405/aligned_depth_to_color/image_raw", - "/d435/aligned_depth_to_color/image_raw", - ) - and cam_ns not in ("d405", "d435") - ): - depth_topic = f"/{cam_ns}/aligned_depth_to_color/image_raw" - if not img_topic: - raise RuntimeError( - f"image_topic 为空(camera_source={cam_src!r} ns={ns!r});" - "请使用 d405 / d405_left / d405_right" - ) - self.get_logger().info( - f"perception image={img_topic} depth={depth_topic} info={info_topic or '-'}" - ) - - self.create_subscription( - Image, img_topic, self._on_image, image_qos, callback_group=self._io_cbg - ) - if info_topic: - self.create_subscription( - CameraInfo, info_topic, self._on_info, image_qos, - callback_group=self._io_cbg, - ) - self.create_subscription( - Image, depth_topic, self._on_depth, image_qos, callback_group=self._io_cbg - ) - self.base_frame = str(self.get_parameter("base_frame").value or "").strip() - if self.overhead_oneshot_enable: - oh_img = str(self.get_parameter("overhead_image_topic").value or "").strip() - oh_info = str(self.get_parameter("overhead_info_topic").value or "").strip() - oh_dep = str(self.get_parameter("overhead_depth_topic").value or "").strip() - if not oh_img or not oh_dep: - raise RuntimeError( - "overhead_oneshot_enable 但 overhead_image_topic / " - "overhead_depth_topic 为空 —— 配置没接线。" - ) - self.create_subscription( - Image, oh_img, self._on_oh_image, image_qos, - callback_group=self._io_cbg, - ) - self.create_subscription( - Image, oh_dep, self._on_oh_depth, image_qos, - callback_group=self._io_cbg, - ) - if oh_info: - self.create_subscription( - CameraInfo, oh_info, self._on_oh_info, image_qos, - callback_group=self._io_cbg, - ) - self.create_subscription( - Bool, "visual_servo/z_locked", self._on_z_locked, z_locked_qos(), - callback_group=self._io_cbg, - ) - self.create_subscription( - Bool, - "visual_servo/d435_commanding", - self._on_d435_commanding, - z_locked_qos(), - callback_group=self._io_cbg, - ) - extra = ( - ";d435_move_only:不等 D405 丢目标,0.5s 后必拍一张" - if self.d435_move_only - else "" - ) - self.get_logger().info( - f"D435 待命 image={oh_img} depth={oh_dep} " - f"handoff_conf={self.wrist_handoff_conf:.2f} " - f"看不到满 {D405_MISS_BEFORE_D435_S:.1f}s 才拍一张 " - f"T={self.get_parameter('overhead_handeye_file').value}" - f"{extra}" - ) - - point_qos = QoSProfile( - history=HistoryPolicy.KEEP_LAST, - depth=5, - reliability=ReliabilityPolicy.BEST_EFFORT, - ) - self._point_pub = self.create_publisher( - PointStamped, "visual_servo/filtered_point", point_qos - ) - self._wrist_conf_pub = self.create_publisher( - Float32, "visual_servo/wrist_conf", 5 - ) - self._overhead_k0_pub = self.create_publisher( - PointStamped, "visual_servo/overhead_k0", point_qos - ) - # RELIABLE + keep_last(5):相机预览能容忍短暂的 DDS 丢包间隙 - det_qos = QoSProfile( - history=HistoryPolicy.KEEP_LAST, - depth=5, - reliability=ReliabilityPolicy.RELIABLE, - ) - self._det_pub = self.create_publisher(Float32MultiArray, "workpiece/detection", det_qos) - # 顶视框单独话题:像素是 D435 的,不能叠到 D405 窗上。 - self._oh_det_pub = self.create_publisher( - Float32MultiArray, "workpiece/detection_overhead", det_qos - ) - self._tf_br = TransformBroadcaster(self) - - vision_hz = max(5.0, min(40.0, float(self.get_parameter("vision_hz").value))) - self.create_timer(1.0 / vision_hz, self._wake_infer, callback_group=self._wake_cbg) - self._worker = threading.Thread(target=self._infer_loop, name="yolo_worker", daemon=True) - self._worker.start() - - self.get_logger().info( - f"perception 就绪 vision≤{vision_hz:.0f}Hz imgsz={imgsz} " - f"infer_max_w={self.infer_max_width} mp={int(self.mp_infer)} " - f"backend={self.backend_name} half={self._yolo_half} " - f"feature={self.feature_mode} image={img_topic}" - ) - - def destroy_node(self) -> bool: - self._stop.set() - self._wake.set() - if self._yolo_proc is not None: - self._yolo_proc.close() - self._yolo_proc = None - return super().destroy_node() - - def _on_image(self, msg: Image) -> None: - self._latest_image = msg - self._frame_seq += 1 - seq = self._frame_seq - self._frame_t[seq] = time.monotonic() - if len(self._frame_t) > 40: - cut = seq - 30 - self._frame_t = {k: v for k, v in self._frame_t.items() if k >= cut} - self._infer_meta = {k: v for k, v in self._infer_meta.items() if k >= cut} - if self._cx <= 1.0: - self._cx = float(msg.width) * 0.5 - self._cy = float(msg.height) * 0.5 - if self._fx <= 1.0: - w = float(msg.width) - self._fx = 654.8 if w >= 1200 else 393.9 * (w / 640.0) - self._fy = 654.0 if w >= 1200 else 393.4 * (float(msg.height) / 480.0) - # 千万不要在这里把图像 pickle 进 YOLO 队列 —— 那会卡住相机回调, - # 看起来就像是推理冻结。由推理线程负责提交。 - self._wake.set() - - def _on_info(self, msg: CameraInfo) -> None: - self._fx = float(msg.k[0]) - self._fy = float(msg.k[4]) - self._cx = float(msg.k[2]) - self._cy = float(msg.k[5]) - if msg.header.frame_id: - self.camera_frame = msg.header.frame_id - - def _on_depth(self, msg: Image) -> None: - self._latest_depth = msg - - def _on_oh_image(self, msg: Image) -> None: - self._oh_image = msg - self._oh_image_mono = time.monotonic() - - def _on_oh_depth(self, msg: Image) -> None: - self._oh_depth = msg - self._oh_depth_mono = time.monotonic() - - def _on_oh_info(self, msg: CameraInfo) -> None: - self._oh_fx = float(msg.k[0]) - self._oh_fy = float(msg.k[4]) - self._oh_cx = float(msg.k[2]) - self._oh_cy = float(msg.k[5]) - if msg.header.frame_id: - self._oh_frame = str(msg.header.frame_id) - - def _wake_infer(self) -> None: - if self._latest_image is None: - return - self._wake.set() - - def _submit_latest(self) -> None: - """复制最新的相机帧,交给 GPU 进程。""" - msg = self._latest_image - seq = int(self._frame_seq) - if msg is None or seq <= self._submitted_seq: - return - try: - bgr = _bgr_copy(msg) - small, scale = self._prepare_infer(bgr) - self._infer_meta[seq] = scale - self.detector.submit(small, seq) - self._submitted_seq = seq - except Exception as exc: # noqa: BLE001 - self.get_logger().warn(f"yolo 提交失败:{exc}", throttle_duration_sec=2.0) - - def _restart_yolo(self, why: str) -> None: - """自愈:重启卡死 / 挂掉的 GPU 工作进程(重新加载 engine 需要几秒)。""" - now = time.monotonic() - if now - self._last_restart_t < 5.0: - return - if not hasattr(self.detector, "restart"): - return - self._last_restart_t = now - self.get_logger().error(f"YOLO 工作进程 {why} —— 正在重启(检测框靠惯性滑行)") - try: - self.detector.restart() - self._submitted_seq = -1 - self._oneshot_inflight = False - self._oneshot_viz_only = False - self._last_gpu_t = time.monotonic() - self.get_logger().info("YOLO 工作进程已重启") - except Exception as exc: # noqa: BLE001 - self.get_logger().error(f"YOLO 重启失败:{exc}") - - def _infer_loop(self) -> None: - """提交最新帧,收集 GPU 结果,再做立体匹配。 - - GPU 绝不能等立体匹配:如果我们短暂正忙,工作进程会直接丢掉旧结果。 - 我们还会**先**提交再去等,这样下一次推理已经排进队列了。 - """ - while not self._stop.is_set(): - # 一次性占用 GPU 时不要再塞 D405,否则两帧挤一条队列,结果会对错图。 - if not self._oneshot_inflight: - self._submit_latest() - try: - got = self.detector.wait_result(timeout=0.030) - except Exception as exc: # noqa: BLE001 - self.get_logger().error(f"推理:{exc}", throttle_duration_sec=2.0) - if not getattr(self.detector, "alive", True): - self._restart_yolo("died") - time.sleep(0.02) - continue - now = time.monotonic() - if got is None: - silent = (now - self._last_gpu_t) if self._last_gpu_t else 0.0 - if self._last_gpu_t is not None and silent > 0.25: - self.get_logger().warn( - f"YOLO 静默 {silent*1000:.0f}ms " - f"(worker={'存活' if getattr(self.detector, 'alive', True) else '已死'})", - throttle_duration_sec=1.0, - ) - outstanding = self._submitted_seq > self._done_seq or self._oneshot_inflight - if outstanding and self._last_gpu_t is not None and silent > 2.0: - self._oneshot_inflight = False - self._restart_yolo(f"卡死 {silent:.1f}s") - continue - if ( - self._last_yolo_t is not None - and (now - self._last_yolo_t) > 0.070 - and self._last_raw_xyxy is not None - ): - self._coast_box("gpu") - self._wake.wait(timeout=0.015) - self._wake.clear() - continue - self._last_gpu_t = now - seq, dets, gpu_ms = got - if dets is INFER_BUSY: - continue - if int(seq) >= _ONESHOT_SEQ: - try: - self._finish_overhead_oneshot( - dets, - float(self._infer_meta.get(int(seq), 1.0)), - viz_only=bool(int(seq) == _ONESHOT_VIZ_SEQ), - ) - except Exception as exc: # noqa: BLE001 - self.get_logger().error( - f"D435 一次性结果处理失败:{exc}", throttle_duration_sec=2.0 - ) - self._oneshot_inflight = False - self._oneshot_viz_only = False - self._oneshot_t = time.monotonic() - continue - scale = float(self._infer_meta.get(int(seq), 1.0)) - t_img = float(self._frame_t.get(int(seq), time.monotonic())) - t0 = time.monotonic() - try: - self._apply_detections(dets, scale, t_img) - except Exception as exc: # noqa: BLE001 - self.get_logger().error(f"应用检测结果出错:{exc}", throttle_duration_sec=2.0) - self._done_seq = int(seq) - if self._need_oneshot and not self._oneshot_inflight: - self._submit_overhead_oneshot(viz_only=False) - elif self._should_submit_overhead_viz() and not self._oneshot_inflight: - self._submit_overhead_oneshot(viz_only=True) - else: - self._submit_latest() - dt_ms = (time.monotonic() - t0) * 1000.0 - lag_ms = (time.monotonic() - t_img) * 1000.0 - self.get_logger().info( - f"infer gpu={gpu_ms:.0f}ms apply={dt_ms:.0f}ms lag={lag_ms:.0f}ms seq={seq}", - throttle_duration_sec=1.0, - ) - - def _decode_depth_m(self, msg: Image) -> Optional[np.ndarray]: - w, h = int(msg.width), int(msg.height) - enc = (msg.encoding or "").lower() - if enc in ("16uc1", "mono16"): - raw = np.frombuffer(msg.data, dtype=np.uint16) - if raw.size < w * h: - return None - return raw[: w * h].reshape(h, w) - if enc == "32fc1": - raw = np.frombuffer(msg.data, dtype=np.float32) - if raw.size < w * h: - return None - return raw[: w * h].reshape(h, w) - return None - - def _depth_in_box(self, xyxy) -> tuple: - msg = self._latest_depth - if msg is None: - return None, "无深度" - if not self._depth_fresh(msg): - return None, "深度过期" - enc = (msg.encoding or "").lower() - buf = self._decode_depth_m(msg) - if buf is None: - return None, "深度无效" - h, w = buf.shape - x1, y1, x2, y2 = [float(v) for v in xyxy] - img = self._latest_image - if img is not None and (int(img.width) != w or int(img.height) != h): - sx, sy = w / float(img.width), h / float(img.height) - x1, y1, x2, y2 = x1 * sx, y1 * sy, x2 * sx, y2 * sy - bw, bh = max(8.0, x2 - x1), max(8.0, y2 - y1) - # 内部 ROI —— 避开检测框边缘;但对有孔的工件仍要保留足够像素 - ix0 = int(np.clip(x1 + 0.20 * bw, 0, w - 1)) - iy0 = int(np.clip(y1 + 0.20 * bh, 0, h - 1)) - ix1 = int(np.clip(x2 - 0.20 * bw, ix0 + 2, w)) - iy1 = int(np.clip(y2 - 0.20 * bh, iy0 + 2, h)) - roi = buf[iy0:iy1, ix0:ix1].reshape(-1).astype(np.float32) - scale = 0.001 - if enc in ("16uc1", "mono16"): - pos = roi[roi > 0] - if pos.size >= 8: - med_raw = float(np.median(pos)) - scale = 0.001 if 20.0 <= med_raw <= 8000.0 else (1.0 if med_raw < 20 else 0.0001) - meters = pos * scale - else: - meters = np.array([], dtype=np.float32) - else: - meters = roi - scale = 1.0 - vals = meters[np.isfinite(meters) & (meters > self.feature_min_range) & (meters < self.max_depth)] - if vals.size < 8: - # 内部 ROI 经常落在孔上;改用整个检测框重试。 - y0 = int(np.clip(y1, 0, h - 1)) - x0 = int(np.clip(x1, 0, w - 1)) - y1b = int(np.clip(y2, y0 + 2, h)) - x1b = int(np.clip(x2, x0 + 2, w)) - roi2 = buf[y0:y1b, x0:x1b].reshape(-1).astype(np.float32) - if enc in ("16uc1", "mono16"): - pos2 = roi2[roi2 > 0] - if pos2.size >= 8: - med_raw = float(np.median(pos2)) - scale = 0.001 if 20.0 <= med_raw <= 8000.0 else (1.0 if med_raw < 20 else 0.0001) - meters2 = pos2 * scale - else: - meters2 = roi2 - vals = meters2[np.isfinite(meters2) & (meters2 > self.feature_min_range) & (meters2 < self.max_depth)] - if vals.size < 8: - med_m = float(np.median(meters)) if meters.size else 0.0 - return None, f"ok={vals.size} scale={scale} med={med_m:.3f}" - # 只取近表面:孔 / 桌面 / 远处背景绝不能把 Z 拉偏。 - # 先取最近的 40%,再围绕第 10 百分位保留一个 6 cm 的带宽。 - vals = np.sort(vals) - n_near = max(8, int(0.40 * vals.size)) - near = vals[:n_near] - z_p10 = float(np.percentile(near, 10)) - band = near[near <= (z_p10 + 0.06)] - if band.size < 4: - band = near - z = float(np.median(band)) - if z > self.work_z_max: - return None, f"ok={vals.size} far={z:.3f}" - return z, f"ok={vals.size} near={band.size}" - - def _adaptive_filter_z(self, z_raw: float, now: float) -> float: - """第 4 项:对深度做自适应低通滤波 —— 静止时更稳,运动时更灵敏。""" - if self._z_filt is None or self._z_filt_t is None: - self._z_filt = float(z_raw) - self._z_filt_t = now - return self._z_filt - dt = max(1e-3, float(now - self._z_filt_t)) - vel_z = abs(float(z_raw) - self._z_filt) / dt - alpha_z = float( - np.clip( - self.z_alpha_min + vel_z * self.z_alpha_gain, - self.z_alpha_min, - self.z_alpha_max, - ) - ) - self._z_filt = alpha_z * float(z_raw) + (1.0 - alpha_z) * self._z_filt - self._z_filt_t = now - return float(self._z_filt) - - def _pixel_to_cam(self, u: float, v: float, z: float) -> np.ndarray: - return np.array( - [ - (u - self._cx) * z / max(self._fx, 1.0), - (v - self._cy) * z / max(self._fy, 1.0), - z, - ], - dtype=float, - ) - - def _cam_to_pixel(self, p: np.ndarray) -> np.ndarray: - z = max(float(p[2]), 1e-3) - return np.array( - [ - self._fx * float(p[0]) / z + self._cx, - self._fy * float(p[1]) / z + self._cy, - ], - dtype=float, - ) - - def _publish_detection_clear(self) -> None: - """空检测 → 预览清掉绿框(绝不能复用上一次的 xyxy)。""" - self._last_det_payload = None - msg = Float32MultiArray() - msg.data = [] - self._det_pub.publish(msg) - - def _publish_detection_box( - self, xyxy: np.ndarray, conf: float, cls_id: float, uv: np.ndarray, z: float - ) -> None: - det = Float32MultiArray() - det.data = [ - float(xyxy[0]), float(xyxy[1]), float(xyxy[2]), float(xyxy[3]), - float(conf), float(cls_id), - float(uv[0]), float(uv[1]), float(z), - ] - self._last_det_payload = list(det.data) - self._det_pub.publish(det) - - def _republish_last_box(self) -> None: - if not self._last_det_payload: - return - msg = Float32MultiArray() - msg.data = list(self._last_det_payload) - self._det_pub.publish(msg) - - def _prepare_infer(self, bgr: np.ndarray) -> tuple: - """可选的 YOLO 降采样;返回 (infer_bgr, scale),全分辨率 = 推理图 * scale。""" - max_w = self.infer_max_width - h, w = bgr.shape[:2] - if max_w <= 0 or w <= max_w: - return bgr, 1.0 - scale = w / float(max_w) - new_w = int(max_w) - new_h = max(1, int(round(h / scale))) - try: - import cv2 - small = cv2.resize(bgr, (new_w, new_h), interpolation=cv2.INTER_AREA) - except Exception: # noqa: BLE001 - small = bgr - scale = 1.0 - return small, scale - - def _img_wh(self) -> Optional[tuple]: - msg = self._latest_image - if msg is None: - return None - return (int(msg.width), int(msg.height)) - - def _coast_box(self, note: str) -> bool: - """让绿框按上一次的速度继续移动;不要用它驱动三维。""" - now = time.monotonic() - pred = self._box_trk.predict(now, self._img_wh()) - if pred is None and self._last_raw_xyxy is not None: - pred = np.asarray(self._last_raw_xyxy, dtype=float).reshape(4) - if pred is None: - return False - uv = np.array( - [0.5 * (pred[0] + pred[2]), 0.5 * (pred[1] + pred[3])], dtype=float - ) - z = float(self._z_filt if self._z_filt is not None else self.z_ref) - self._publish_detection_box( - pred, float(self._last_box_conf), float(self._last_box_cls), uv, z - ) - self.get_logger().info(f"检测框惯滑 {note}", throttle_duration_sec=0.5) - return True - - def _clear_track(self) -> None: - self._box_ema = None - self._last_raw_xyxy = None - self._last_uv = None - self._kpt_box_frac = None - self._last_filt = None - self._last_plane_xyz = None - self._box_trk.reset() - # 两道有状态守卫跟着"真正丢目标"一起冷启动。**只在长丢时清**,不在单帧 - # 漏检时清:单帧漏检极常见(真机日志里几乎每隔一两帧就一次),每漏一帧 - # 就把锚点清空,会让下一帧的任何观测都变成"首次观测"而被 TrackSlewGuard - # 无条件放行 —— 借深度的假点于是每次都能重新锚定,守卫形同虚设。 - self._slew.reset() - self._far.reset() - self._last_yolo_t = None - self._publish_detection_clear() - - def _apply_detections(self, dets, scale: float, t_img: float) -> None: - """匹配 YOLO 结果,发布按当前时刻预测的检测框,再在该框上做立体匹配。""" - if scale != 1.0: - for d in dets: - d.xyxy = d.xyxy * scale - best_conf = best_det_conf(dets) - self._publish_wrist_conf(best_conf) - handoff = bool( - self.overhead_oneshot_enable - and ( - self.d435_move_only - or wrist_needs_handoff(best_conf, self.wrist_handoff_conf) - ) - ) - now_m = time.monotonic() - if self._d435_commanding: - # 臂还在赶 D435 那个点。漏检计时清掉,走到并停稳之后再重新计。 - self._low_since = None - self._need_oneshot = False - elif not handoff: - self._low_since = None - self._oneshot_shot = False - self._need_oneshot = False - else: - if oneshot_shot_timed_out( - shot=self._oneshot_shot, - commanding=self._d435_commanding, - age_s=now_m - float(self._oneshot_shot_t), - timeout_s=ONESHOT_ACCEPT_TIMEOUT_S, - ): - self.get_logger().warn( - "D435 拍了但伺服没接住(工作盒拒收等),允许再拍" - ) - self._oneshot_shot = False - self._low_since = None - if self._low_since is None: - self._low_since = now_m - low_for = now_m - self._low_since - self._need_oneshot = oneshot_should_submit( - handoff=True, - low_for_s=low_for, - already_shot=self._oneshot_shot, - wait_s=D405_MISS_BEFORE_D435_S, - ) - if self._oneshot_shot: - self.get_logger().info( - "D435 这一轮已经拍过一张,等这一段走完,不再连拍", - throttle_duration_sec=2.0, - ) - elif not self._need_oneshot: - self.get_logger().info( - f"D405 已连续 {low_for:.2f}s 没有高置信度目标," - f"未满 {D405_MISS_BEFORE_D435_S:.1f}s,D435 继续待命", - throttle_duration_sec=0.5, - ) - now = time.monotonic() - pred_at_img = self._box_trk.predict(t_img, self._img_wh()) - with self._lock: - prev_uv = None if self._last_uv is None else self._last_uv.copy() - prev_xyxy = pred_at_img if pred_at_img is not None else self._last_raw_xyxy - best = pick_best( - dets, - prefer_center=(self._cx, self._cy), - prev_uv=prev_uv, - prev_xyxy=prev_xyxy, - max_track_px=max(400.0, self.jump_px), - reacquire_conf=self.reacquire_conf, - min_conf=self.min_conf, - lock_iou=0.05, - ) - if best is None: - self._miss_count += 1 - # 单帧漏检**不清**守卫锚点(见 _clear_track 的注释):真机 2026-10-08 - # 漏检几乎每帧都有,一漏就 reset ⇒ 每帧都当"首次观测" ⇒ 借深度的假 k0 - # 次次都能重新锚定。真正丢目标由下面的 miss_clear_frames 长丢分支 - # 走 _clear_track(连丢 miss_clear_frames 帧才冷启动)。 - if self._miss_count >= self.miss_clear_frames: - self._clear_track() - self._last_yolo_t = None - self.get_logger().info( - "检测漏检 —— 已清除叠加显示", - throttle_duration_sec=1.0, - ) - else: - if not self._coast_box(f"miss={self._miss_count}"): - if self.overlay_hold_on_miss: - self._republish_last_box() - if ( - self.hold_point_on_miss - and self._miss_count <= self.miss_hold_point_frames - and not handoff - ): - self._republish_held_point() - return - - self._miss_count = 0 - self._last_yolo_t = now - xyxy_raw = np.asarray(best.xyxy, dtype=float).reshape(4) - a = self.box_ema_alpha - if self._box_ema is None: - self._box_ema = xyxy_raw.copy() - else: - self._box_ema = a * xyxy_raw + (1.0 - a) * self._box_ema - self._last_raw_xyxy = xyxy_raw.copy() - self._last_box_conf = float(best.conf) - self._last_box_cls = float(best.cls_id) - self._box_trk.update(xyxy_raw, t_img) - # 补偿推理延迟:画工件**当前**所在的位置,而不是 YOLO 看到它时的位置 - xyxy = self._box_trk.predict(now, self._img_wh()) - if xyxy is None: - xyxy = xyxy_raw - uv = np.array( - [0.5 * (xyxy[0] + xyxy[2]), 0.5 * (xyxy[1] + xyxy[3])], - dtype=float, - ) - box_uv = uv.copy() - z_preview = float(self._z_filt if self._z_filt is not None else self.z_ref) - self._publish_detection_box( - xyxy, float(best.conf), float(best.cls_id), box_uv, z_preview - ) - - # 悬停目标 = 检测框内工件表面的立体三维点(不是穿过孔 / 桌面的射线, - # 也不是 z_ref)。红点 = 该三维点。 - # 混合流程交回 D405 之后追工件框的矩形中心,不追 k0。 - # YOLO-pose 照常跑(框和关键点都在),只是跟踪点取框心。 - # 对小孔关键点在二阶段,那里不用深度图。 - track_box = self.overhead_oneshot_enable and not self.d435_move_only - feat = None - p_cam: Optional[np.ndarray] = None - note = "框心" if track_box else "box" - z_meas = None - uv = box_uv - # 本帧的深度是不是**借**来的(见 PlaneFeature.borrowed)—— 给"每帧位移上限" - # 守卫用:借来的深度意味着该像素读不到自己的深度,绝对位置不足以重定位。 - borrowed = False - if track_box: - feat = None - elif self.feature_mode == "keypoint": - feat = self._keypoint_feature(best) - # k0 掉信时 `_keypoint_feature` 会**按 k0 相对框的偏移**在框上重建跟踪点 - # (位置连续、不横移)。只有冷启动、连一次可信 k0 都没见过时才返回 None, - # 此时才退到"框内深度 + 框中心"。 - elif self.feature_mode != "box": - feat = self._workpiece_xyz(xyxy) - if feat is None: - feat = self._plane_center(xyxy) - if feat is not None: - p_cam = np.asarray(feat.xyz, dtype=float).reshape(3) - uv = np.asarray(feat.uv, dtype=float).reshape(2) - z_meas = float(p_cam[2]) - note = feat.note - borrowed = bool(getattr(feat, "borrowed", False)) - else: - z_meas, note = self._depth_in_box(xyxy) - note = f"框心 {note} box_z" if track_box else f"{note} box_z" - z_ok = z_meas is not None - z, note = self._metric_z(z_meas, note) - if z is None: - # 从未拿到过可用深度(目标超出 D405 量程 / 不在工作区内 / 相机安装或 - # 手眼标定有问题)。不要发布 z_ref 点 —— 那会在幻影位置上假装锁定夹爪。 - # 此时应保持不动。 - self.get_logger().warn( - f"目标没有可用深度({note})—— 不跟踪。" - f"请把工件放到相机视野内 {self.min_depth:.2f}-{self.work_z_max:.2f} m 处," - "或检查相机安装 / 手眼标定。", - throttle_duration_sec=1.0, - ) - return - now = time.monotonic() - z = self._adaptive_filter_z(float(z), now) - if p_cam is None: - p_cam = self._pixel_to_cam(box_uv[0], box_uv[1], float(z)) - stamp = self.get_clock().now().to_msg() - - self._publish_detection_box(xyxy, float(best.conf), float(best.cls_id), uv, float(z)) - - # ---- 守卫二:跟踪点的**每帧位移上限** ---- - # 工件不动、相机 30Hz,真实观测一帧走不了 4cm(实测真实运动 ≤15mm/帧)。 - # 观测可信 ⇒ 夹到上限限速跟随(不丢目标);观测是**借深度**的 ⇒ 超上限整帧 - # 不采信(2026-10-08 真机,假 k0 带着借来的深度、z 看着很合理,1s 把臂带走 - # 400mm)。判不采信时**不发跟踪点**,让伺服按"目标丢失"处理(原地不动)。 - step, why_step = self._slew.update( - np.asarray(p_cam, dtype=float).reshape(3)[:2], borrowed=borrowed - ) - if step is None: - self.get_logger().warn( - f"跟踪点判误检,本帧不发点({why_step})" - f" uv=({uv[0]:.0f},{uv[1]:.0f}) conf={best.conf:.2f}", - throttle_duration_sec=0.5, - ) - return - p_cam = np.asarray(p_cam, dtype=float).reshape(3).copy() - p_cam[0], p_cam[1] = float(step[0]), float(step[1]) - - with self._lock: - self.kf.advance(now) - if self.kf.initialized: - pred = self.kf.position - dpx = float(np.linalg.norm(box_uv - self._cam_to_pixel(pred))) - dz = abs(float(p_cam[2] - pred[2])) if z_ok else 0.0 - if dpx > self.jump_px or (z_ok and dz > self.jump_z_m): - # ---- 守卫三:远框"重新捕获"要多帧确认 ---- - # 一帧的远框更可能是模型在别的东西上误报,而不是工件真被挪走了 - #(真机那串假框的 dpx 是 480/418/207,而且每帧换个地方)。 - ok_far, why_far = self._far.allow( - None if self.feature_mode != "keypoint" else tuple(uv), - dpx, - near_px=self.reacquire_far_px, - ) - if not ok_far: - self.get_logger().warn( - f"重新捕获未确认({why_far})conf={best.conf:.2f} —— " - "本帧不发点,不追这一帧的新位置", - throttle_duration_sec=0.5, - ) - return - self.kf.reset(p_cam, now) - self.get_logger().info( - f"重新捕获 conf={best.conf:.2f} dpx={dpx:.0f}", - throttle_duration_sec=0.5, - ) - else: - self.kf.update(p_cam) - else: - self.kf.reset(p_cam, now) - self._last_uv = box_uv - kf_p = self.kf.position - blend = self.meas_blend - filt = blend * p_cam + (1.0 - blend) * kf_p - # 即使卡尔曼里还残留着旧的远距离 Z,也要保证 XY 的尺度真实 - z_use = float(np.clip(filt[2], self.min_depth, self.work_z_max)) - if abs(z_use - float(p_cam[2])) > 0.04: - filt = p_cam.copy() - z_use = float(p_cam[2]) - filt[2] = z_use - self._last_filt = filt.copy() - - if handoff or self._d435_commanding: - # 没有高置信度,或 D435 厂家移动还没交接:推理留着,控制点不许发。 - return - self._publish_point(filt, stamp) - self.get_logger().info( - f"跟踪 {'框心' if track_box else self.feature_mode} conf={best.conf:.2f} uv=({uv[0]:.0f},{uv[1]:.0f}) " - f"z={filt[2]:.3f} z_ok={int(z_ok)} {note}", - throttle_duration_sec=0.4, - ) - - def _depth_fresh(self, msg: Image) -> bool: - """拒绝过期的深度 —— 对快速运动的工件,当前检测框处的旧深度会读到背景 - (约 2.4 m 处的桌面),从而污染三维点。""" - try: - t = rclpy.time.Time.from_msg(msg.header.stamp) - age = (self.get_clock().now() - t).nanoseconds * 1e-9 - except Exception: # noqa: BLE001 - return True - return age < 0.25 - - def _keypoint_feature(self, det): - """用 pose 模型的 ``keypoint_index``(默认 k0)当跟踪点。 - - 约定:k0 是跟踪孔,k1/k2 是对孔(见 ``pose_detector``)。 - 返回 ``PlaneFeature``,坐标系 / 语义和 plane 模式完全一致 —— 下游 - (卡尔曼、visual_servo)不需要知道这是关键点。 - - k0 掉信(置信度低 / 该处没深度)时**不许把跟踪点横移到框中心** —— - 那是另一个点,会瞬间平移一大截。正确做法是用 k0 相对工件框的**归一化偏移** - 在框上重建 k0:位置连续,工件动时还能跟着动。 - - 真机反例(2026-10-08,一阶段跑 150s 没锁上,arm 89): - - 0659.551 死区保持 |e_xy|=3.0mm ← 其实已经锁定(误差 3mm) - 0659.598 k0 置信度 0.01 < 0.30,本帧不用它 - 0659.604 feat_base=(0.675,-0.099) ← 兜底切到框中心,跟踪点横移 89mm - 0660.121 v=(-0.206,+0.400) ← 伺服以 0.45m/s 去追这个假点 - 0660.561 过期保持 —— 不跟踪冻结的检测框 ← 画面糊掉,彻底丢失 - - 只有在"连一次可信的 k0 都没见过"(``_kpt_box_frac`` 为空)时才返回 None, - 交给调用方回落到框中心 —— 那是冷启动,没有更好的信息可用。 - """ - kpts = getattr(det, "kpts", None) - if kpts is None: - return None - kpts = np.asarray(kpts, dtype=float) - if kpts.ndim != 2 or kpts.shape[0] <= self.keypoint_index or kpts.shape[1] < 3: - return None - u, v, kc = (float(x) for x in kpts[self.keypoint_index][:3]) - - # 工件框(用来把 k0 的偏移归一化,以及掉信时重建) - box = getattr(det, "xyxy", None) - box = None if box is None else np.asarray(box, dtype=float).reshape(4) - cx = cy = bw = bh = None - if box is not None: - cx = 0.5 * (box[0] + box[2]) - cy = 0.5 * (box[1] + box[3]) - bw = abs(box[2] - box[0]) - bh = abs(box[3] - box[1]) - - finite = bool(np.isfinite(u) and np.isfinite(v) and np.isfinite(kc)) - # k0 的**像素位置**是否可信:置信度够 ≠ 位置对。2026-10-08 真机,模型在 - # uv=(12,30)/(76,75)/(143,92) 这些**贴画面边**的地方以 conf 0.53~0.73 报 k0 - #(真 k0 是 0.87,没有可分区间)—— 孔心长在工件上,不可能在画面边上。 - # 位置不可信不是"没有目标",而是"本帧 k0 位置不能用",交回下面的连续性路径。 - why_pos = ( - kpt_plausible( - u, v, box, *self._img_wh_or_zero(), border_px=self.keypoint_border_px - ) - if finite - else None - ) - borrowed = False - if finite and kc >= self.keypoint_min_conf and why_pos is None: - # k0 可信:位置就用 k0 自己 - uv = np.array([u, v], dtype=float) - z, znote = self._depth_at_uv(u, v) - if z is None: - # 位置可信、只是深度读不到:XY 仍然用 k0(不许横移),只借深度 - if box is None: - return None - z, note2 = self._depth_in_box(box) - if z is None: - return None - znote = f"{note2} 借深度" - borrowed = True - if box is not None and bw is not None and bw > 1e-6 and bh > 1e-6: - self._kpt_box_frac = np.array( - [(u - cx) / bw, (v - cy) / bh], dtype=float - ) - reason = "" - else: - # k0 不可信:按"相对框的偏移"重建,位置连续、且跟着框走。 - if not finite: - reason = "非有限值" - elif why_pos is not None: - # 置信度够但**位置**不合理(贴画面边 / 不在自己的框里) - reason = why_pos - else: - reason = f"置信度 {kc:.2f} < {self.keypoint_min_conf:.2f}" - if ( - self._kpt_box_frac is None - or box is None - or bw is None - or bw <= 1e-6 - or bh is None - or bh <= 1e-6 - ): - self.get_logger().warn( - f"k{self.keypoint_index} {reason},且还没有可信历史 —— 本帧不用它", - throttle_duration_sec=1.0, - ) - return None - uv = np.array( - [cx + float(self._kpt_box_frac[0]) * bw, - cy + float(self._kpt_box_frac[1]) * bh], - dtype=float, - ) - z, znote = self._depth_at_uv(float(uv[0]), float(uv[1])) - if z is None: - z, note2 = self._depth_in_box(box) - if z is None: - return None - znote = f"{note2} 借深度" - borrowed = True - self.get_logger().warn( - f"k{self.keypoint_index} {reason} —— 按框上相对偏移重建跟踪点" - f"(uv=({uv[0]:.0f},{uv[1]:.0f}),框心=({cx:.0f},{cy:.0f})),不横移", - throttle_duration_sec=1.0, - ) - z = float(z) - return PlaneFeature( - uv=uv, - z=z, - xyz=self._pixel_to_cam(float(uv[0]), float(uv[1]), z), - n_inliers=1, - note=f"k{self.keypoint_index}保持({reason}) {znote} z={z:.3f}", - borrowed=borrowed, - ) - - z = float(z) - return PlaneFeature( - uv=uv, - z=z, - xyz=self._pixel_to_cam(float(uv[0]), float(uv[1]), z), - # 关键点特征没有"平面内点"的概念——支撑样本就它自己一个。 - # 这个字段目前没有下游消费者,给 1 是为了让日志里 n=1 说得通。 - n_inliers=1, - note=f"k{self.keypoint_index}({znote}) z={z:.3f}", - borrowed=borrowed, - ) - - def _img_wh_or_zero(self) -> tuple: - """当前彩色图 ``(w,h)``;还没收到图时给 ``(0,0)``(守卫会跳过边缘判据)。""" - wh = self._img_wh() - return (0, 0) if wh is None else (int(wh[0]), int(wh[1])) - - def _depth_at_uv(self, u: float, v: float) -> tuple: - """取 (u,v) 附近小窗口的中位深度(米)。``u,v`` 是**彩色图**像素。 - - 深度是 aligned-to-color,但分辨率不一定等于彩色图(D405 的 aligned - 深度会和彩色图不同尺寸),所以先按比例映射到深度图坐标 —— 这点和 - ``_depth_in_box`` 里的缩放保持一致,否则关键点深度会整体偏。 - """ - msg = self._latest_depth - if msg is None: - return None, "无深度" - if not self._depth_fresh(msg): - return None, "深度过期" - buf = self._decode_depth_m(msg) - if buf is None: - return None, "深度无效" - h, w = buf.shape - img = self._latest_image - if img is not None and (int(img.width) != w or int(img.height) != h): - u = u * (w / float(img.width)) - v = v * (h / float(img.height)) - win = self.keypoint_win_px - x0 = int(np.clip(round(u) - win, 0, w - 1)) - x1 = int(np.clip(round(u) + win, x0 + 1, w)) - y0 = int(np.clip(round(v) - win, 0, h - 1)) - y1 = int(np.clip(round(v) + win, y0 + 1, h)) - roi = buf[y0:y1, x0:x1].reshape(-1).astype(np.float32) - if roi.size == 0: - return None, "窗口越界" - enc = (msg.encoding or "").lower() - if enc in ("16uc1", "mono16"): - pos = roi[roi > 0] - if pos.size < 4: - return None, "该处无有效深度" - med = float(np.median(pos)) - # 和 _depth_in_box 同一套量纲判断(有的相机给 mm,有的给 m) - scale = 0.001 if 20.0 <= med <= 8000.0 else (1.0 if med < 20 else 0.0001) - z = med * scale - else: - vals = roi[np.isfinite(roi) & (roi > 0)] - if vals.size < 4: - return None, "该处无有效深度" - z = float(np.median(vals)) - if not (self.feature_min_range < z < self.max_depth): - # 太近 ⇒ 十有八九是爪上夹的通止规(规尖在相机前 ~0.10m,工件面 0.17~0.22m)。 - # 当"这里没有目标"处理,绝不把它当工件去伺服 —— 否则臂会去追自己的工具。 - return None, f"深度 {z:.3f}m 命中工具量程(<{self.feature_min_range:.2f}m)" - return z, f"({u:.0f},{v:.0f})" - - def _workpiece_xyz(self, xyxy): - msg = self._latest_depth - img = self._latest_image - if msg is None or img is None: - return None - if not self._depth_fresh(msg): - return None - buf = self._decode_depth_m(msg) - if buf is None: - return None - try: - return workpiece_xyz_in_box( - buf, - msg.encoding or "", - xyxy, - self._fx, - self._fy, - self._cx, - self._cy, - (int(img.width), int(img.height)), - min_depth=self.feature_min_range, # 太近=爪上工具,见 feature_min_range_m - max_depth=self.max_depth, - work_z_max=self.work_z_max, - band_m=self.plane_band_m, - ) - except Exception as exc: # noqa: BLE001 - self.get_logger().warn(f"inner3d 特征计算失败:{exc}", throttle_duration_sec=2.0) - return None - - def _plane_center(self, xyxy): - msg = self._latest_depth - img = self._latest_image - if msg is None or img is None: - return None - if not self._depth_fresh(msg): - return None - buf = self._decode_depth_m(msg) - if buf is None: - return None - try: - return geometric_center_on_plane( - buf, - msg.encoding or "", - xyxy, - self._fx, - self._fy, - self._cx, - self._cy, - (int(img.width), int(img.height)), - min_depth=self.feature_min_range, # 太近=爪上工具,见 feature_min_range_m - max_depth=self.max_depth, - work_z_max=self.work_z_max, - inlier_m=self.plane_inlier_m, - band_m=self.plane_band_m, - ) - except Exception as exc: # noqa: BLE001 - self.get_logger().warn(f"平面特征计算失败:{exc}", throttle_duration_sec=2.0) - return None - - def _metric_z(self, z_meas: Optional[float], note: str) -> tuple: - """用于像素→米的 Z。绝不能用孔 / 地面的深度(会放大 XY 误差)。 - 当这个目标**从未**有过可用深度时返回 (None, note) —— 那种情况下发布 - z_ref 点会让伺服假锁到一个幻影 XY 上。""" - z_ref = max(0.12, float(self.z_ref)) - if z_meas is not None and self.min_depth <= z_meas <= self.work_z_max: - self._last_good_z = float(z_meas) - return float(z_meas), note - if self._last_good_z is not None and self._last_good_z <= self.work_z_max: - return float(self._last_good_z), f"{note} hold_near" - return None, f"{note} no_depth" - - def _publish_wrist_conf(self, best_conf: Optional[float]) -> None: - msg = Float32() - msg.data = float("nan") if best_conf is None else float(best_conf) - self._wrist_conf_pub.publish(msg) - - def _on_z_locked(self, msg: Bool) -> None: - """锁高状态只记着。拍不拍 D435 不看它,看 D405 连续漏检。""" - self._z_locked = bool(msg.data) - - def _on_d435_commanding(self, msg: Bool) -> None: - """伺服还在执行 D435 那一个点时,不再提交下一张,D405 控制点也不发。 - - 这一轮已经拍过并走完。停稳后打开 D405 框心,不因交接瞬间漏检再 MoveL。 - """ - self._d435_commanding = bool(msg.data) - - def _publish_overhead_k0(self, p_base: np.ndarray, is_k0: bool) -> None: - pt = PointStamped() - pt.header.stamp = self.get_clock().now().to_msg() - pt.header.frame_id = self.base_frame or "base" - pt.point.x = float(p_base[0]) - pt.point.y = float(p_base[1]) - pt.point.z = float(p_base[2]) - self._overhead_k0_pub.publish(pt) - del is_k0 # 语义写在日志里;话题保持 PointStamped,避免再抄一份类型 - - def _should_submit_overhead_viz(self) -> bool: - """低频率给 D435 窗刷绿框;不发控制点。赶路时不抢 GPU。""" - if not self.overhead_oneshot_enable or self.d435_move_only: - return False - if self._d435_commanding or self._need_oneshot: - return False - return (time.monotonic() - self._oh_viz_t) >= 0.5 - - def _publish_overhead_det( - self, xyxy: np.ndarray, conf: float, cls_id: float, uv: np.ndarray, z: float - ) -> None: - det = Float32MultiArray() - det.data = [ - float(xyxy[0]), float(xyxy[1]), float(xyxy[2]), float(xyxy[3]), - float(conf), float(cls_id), - float(uv[0]), float(uv[1]), float(z), - ] - self._oh_det_pub.publish(det) - - def _publish_overhead_det_clear(self) -> None: - msg = Float32MultiArray() - msg.data = [] - self._oh_det_pub.publish(msg) - - def _submit_overhead_oneshot(self, *, viz_only: bool = False) -> None: - """把最新 D435 帧排进同一条 YOLO 队列。不在这里等结果 —— 等会把 D405 卡死。""" - if self._oneshot_inflight or not self.overhead_oneshot_enable: - return - now = time.monotonic() - if (not viz_only) and now - self._oneshot_t < self.overhead_cooldown_s: - return - img = self._oh_image - depth = self._oh_depth - if img is None or depth is None: - if not viz_only: - self.get_logger().warn( - "D405 无合格目标,但 D435 还没出图 —— 不编造点", - throttle_duration_sec=1.0, - ) - return - if (now - self._oh_image_mono) > self.overhead_frame_max_age_s: - if not viz_only: - self.get_logger().warn( - f"D435 彩图过期 {(now - self._oh_image_mono)*1000:.0f}ms —— 不反投影", - throttle_duration_sec=1.0, - ) - return - if (not viz_only) and (now - self._oh_depth_mono) > self.overhead_frame_max_age_s: - self.get_logger().warn( - f"D435 深度过期 {(now - self._oh_depth_mono)*1000:.0f}ms —— 不反投影", - throttle_duration_sec=1.0, - ) - return - if (not viz_only) and self._oh_fx <= 1.0: - self.get_logger().warn( - "D435 内参还没到(camera_info)—— 不反投影", - throttle_duration_sec=1.0, - ) - return - if (not viz_only) and self._T_oh is None: - self.get_logger().error("眼在手外 T 没加载 —— 一次性定位拒绝") - return - seq = _ONESHOT_VIZ_SEQ if viz_only else _ONESHOT_SEQ - try: - bgr = _bgr_copy(img) - small, scale = self._prepare_infer(bgr) - self._infer_meta[seq] = scale - if not self.detector.submit(small, seq): - return - except Exception as exc: # noqa: BLE001 - self.get_logger().warn( - f"D435 {'预览' if viz_only else '一次性'}提交失败:{exc}", - throttle_duration_sec=2.0, - ) - return - self._oneshot_inflight = True - self._oneshot_viz_only = bool(viz_only) - self._oneshot_img = img - self._oneshot_depth = depth - if viz_only: - self._oh_viz_t = now - else: - self.get_logger().info("D435 一次性已提交(不打断 D405 队列)") - - def _finish_overhead_oneshot( - self, dets, scale: float, *, viz_only: bool = False - ) -> None: - """YOLO 返回的顶视结果。viz_only 只刷绿框;控制路径才发基座点。""" - self._oneshot_inflight = False - viz_only = bool(viz_only or self._oneshot_viz_only) - self._oneshot_viz_only = False - now = time.monotonic() - if not viz_only: - self._oneshot_t = now - img = self._oneshot_img - depth = self._oneshot_depth - self._oneshot_img = None - self._oneshot_depth = None - if dets is INFER_BUSY or dets is None or img is None: - return - if scale != 1.0: - for d in dets: - d.xyxy = d.xyxy * scale - if getattr(d, "kpts", None) is not None: - d.kpts = np.asarray(d.kpts, dtype=float).copy() - d.kpts[:, :2] *= scale - det = select_oneshot_det(dets, self.overhead_oneshot_conf if not viz_only else 0.25) - if det is None: - self._publish_overhead_det_clear() - if not viz_only: - self._oneshot_t = now - self.get_logger().warn( - f"D435 一次性:画面里没有 conf≥{self.overhead_oneshot_conf:.2f} 的工件", - throttle_duration_sec=1.0, - ) - return - xyxy = np.asarray(det.xyxy, dtype=float).reshape(4) - uv = np.array( - [0.5 * (xyxy[0] + xyxy[2]), 0.5 * (xyxy[1] + xyxy[3])], dtype=float - ) - self._publish_overhead_det( - xyxy, float(det.conf), float(det.cls_id), uv, 0.0 - ) - if viz_only: - return - if depth is None: - self._oneshot_t = now - return - raw = self._decode_depth_m(depth) - depth_m = depth_raw_to_m(raw, depth.encoding or "") - if depth_m is None: - self._oneshot_t = now - self.get_logger().warn( - "D435 深度无法转成米 —— 不发点", throttle_duration_sec=1.0 - ) - return - color_wh = (int(img.width), int(img.height)) - depth_wh = (int(depth_m.shape[1]), int(depth_m.shape[0])) - got = oneshot_k0_base( - det, - depth_m, - fx=self._oh_fx, - fy=self._oh_fy, - cx=self._oh_cx, - cy=self._oh_cy, - T_cam_to_base=self._T_oh, - min_z_m=self.overhead_min_depth, - max_z_m=self.overhead_max_depth, - kpt_index=self.keypoint_index, - kpt_min_conf=self.keypoint_min_conf, - min_det_conf=self.overhead_oneshot_conf, - color_wh=color_wh, - depth_wh=depth_wh, - ) - self._oneshot_t = now - if got is None: - self.get_logger().warn( - "D435 一次性:深度或 k0 不可用,不发点", - throttle_duration_sec=1.0, - ) - return - p_base, is_k0 = got - self._oneshot_shot = True - self._oneshot_shot_t = now - self._need_oneshot = False - self._publish_overhead_k0(p_base, is_k0) - self.get_logger().info( - f"D435 一次性定位 {'k0' if is_k0 else '框心(顶视看不见 k0)'} " - f"base=({p_base[0]:.3f},{p_base[1]:.3f},{p_base[2]:.3f}) " - f"conf={float(det.conf):.2f}" - ) - - def _publish_point(self, filt: np.ndarray, stamp) -> None: - pt = PointStamped() - pt.header.stamp = stamp - pt.header.frame_id = self.camera_frame - pt.point.x = float(filt[0]) - pt.point.y = float(filt[1]) - pt.point.z = float(filt[2]) - self._point_pub.publish(pt) - tf = TransformStamped() - tf.header.stamp = stamp - tf.header.frame_id = self.camera_frame - tf.child_frame_id = self.object_frame - tf.transform.translation.x = float(filt[0]) - tf.transform.translation.y = float(filt[1]) - tf.transform.translation.z = float(filt[2]) - tf.transform.rotation.w = 1.0 - self._tf_br.sendTransform(tf) - - def _republish_held_point(self) -> None: - if self._last_filt is None: - return - self._publish_point(self._last_filt, self.get_clock().now().to_msg()) - - -def main(args=None) -> None: - import multiprocessing as mp - - try: - mp.set_start_method("spawn", force=True) - except RuntimeError: - pass - rclpy.init(args=args) - node = PerceptionNode() - executor = MultiThreadedExecutor(num_threads=4) - executor.add_node(node) - try: - executor.spin() - except KeyboardInterrupt: - pass - finally: - node._stop.set() - node._wake.set() - if getattr(node, "_yolo_proc", None) is not None: - node._yolo_proc.close() - node._yolo_proc = None - executor.shutdown() - node.destroy_node() - if rclpy.ok(): - rclpy.shutdown() - - -if __name__ == "__main__": - main() diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/pid_controller.py b/install/arm_application/lib/python3.11/site-packages/arm_application/pid_controller.py deleted file mode 100644 index 5819675..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/pid_controller.py +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env python3 -"""PID 控制器,带积分限幅、微分作用于测量值(derivative-on-measurement)以及积分分离。""" - -from __future__ import annotations - -from typing import Optional - - -class PidController: - """``u = Kp e + Ki ∫e + Kd (−dmeas/dt)``,然后再做饱和限幅。 - - 积分分离:当 ``|error| > i_sep_thresh`` 时,积分被强制置 0 且不再累积 - (只用 P+D,以便快速追赶 / 减少超调)。 - """ - - def __init__( - self, - kp: float, - ki: float, - kd: float, - *, - i_limit: float = 0.05, - out_limit: float = 0.20, - i_sep_thresh: float = 0.005, - ) -> None: - self.kp = float(kp) - self.ki = float(ki) - self.kd = float(kd) - self.i_limit = abs(float(i_limit)) - self.out_limit = abs(float(out_limit)) - self.i_sep_thresh = abs(float(i_sep_thresh)) - self._i = 0.0 - self._meas_prev: Optional[float] = None - - def reset(self) -> None: - self._i = 0.0 - self._meas_prev = None - - @property - def integral(self) -> float: - return float(self._i) - - def update(self, error: float, meas: float, dt: float) -> float: - dt = max(float(dt), 1e-4) - err = float(error) - x = float(meas) - if self._meas_prev is None: - dterm = 0.0 - else: - dterm = -(x - self._meas_prev) / dt - self._meas_prev = x - - # 积分分离 —— 误差较大:清空 I,不再累积 - if self.i_sep_thresh > 0.0 and abs(err) > self.i_sep_thresh: - self._i = 0.0 - else: - self._i = max(-self.i_limit, min(self.i_limit, self._i + err * dt)) - - u = self.kp * err + self.ki * self._i + self.kd * dterm - if u > self.out_limit: - u = self.out_limit - elif u < -self.out_limit: - u = -self.out_limit - return float(u) diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/pipeline_node.py b/install/arm_application/lib/python3.11/site-packages/arm_application/pipeline_node.py deleted file mode 100644 index a27c828..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/pipeline_node.py +++ /dev/null @@ -1,521 +0,0 @@ -#!/usr/bin/env python3 -"""三阶段串联:视觉跟踪锁定 → 孔定位 → 搜孔并轻轻按压(默认不拧入)。 - -流畅性(相对 bash 杀进程再起节点): - - 相机 / 触觉 / 手眼 TF 全程只起一次 - - 一阶段锁定后 SIGTERM 跟踪节点,立刻 pin 当前关节,不回零、不抬臂 - - 二阶段已垂直 / 已在悬停高则跳过对应动作;对准完立刻下压搜孔 - - 找到孔位后力闭环轻压保持;拧入是后续阶段(--depth 才插入) -""" - -from __future__ import annotations - -import json -import os -import signal -import subprocess -import time -from pathlib import Path -from typing import Optional - -import numpy as np -import rclpy -from geometry_msgs.msg import PointStamped -from rclpy.qos import HistoryPolicy, QoSProfile, ReliabilityPolicy -from std_msgs.msg import Bool, String - -from arm_application.overhead_oneshot import D435_MOVEL_GAVE_UP -from arm_application.stage3_search_node import Stage3Search - - -#: 悬停时规尖离面不够,跟踪高再抬的量 [m]。 -#: -#: 只在「悬停高上规尖离工件面 < :data:`TRACK_LOCK_GAP_M`」时加上。仿真悬停按 -#: 工具几何只留约 2mm,不抬就会在跟踪时刮到工件。真机 89 悬停 0.320 时规尖 -#: 已经在面上方约 75mm,再抬 50mm 会让对孔前先改一次高度(0.37→0.32)。 -#: -#: ⚠️ 抽成常量是因为它不只被流程用:``scripts/check_sim_scene.py`` 要用它核对 -#: "跟踪高有没有超出工作盒上界"(仿真里悬停 0.632 + 0.05 = 0.682 > 真机那套 -#: 0.65 上界,就是被这条查出来的)。两处各写一个字面量迟早漂移。 -TRACK_CLEARANCE_M = 0.05 -#: 悬停时规尖离面已经不少于这个值 [m],一阶段就锁在悬停高,对孔完成后再下降。 -TRACK_LOCK_GAP_M = 0.040 - - -def init_z_refusal( - z_m: float, - tool_len_m: float, - surface_z_m: float, - gap_m: float, - z_min: float, - z_max: float, -) -> str: - """初始法兰高度能不能用。空串表示可以;非空就是拒绝原因,不许悄悄抬高。""" - z = float(z_m) - if z < float(z_min) - 1e-6 or z > float(z_max) + 1e-6: - return ( - f"初始法兰 Z {z:.3f}m 超出工作盒 [{float(z_min):.3f}, {float(z_max):.3f}]," - "拒绝开跑" - ) - tool = float(tool_len_m) - surf = float(surface_z_m) - if tool <= 0.0 or surf <= 0.0: - return "写了初始高度,但工具长度或工件面未知,无法确认尖端在面之上,拒绝开跑" - clear = z - tool - surf - if clear < float(gap_m) - 0.001: - return ( - f"初始法兰 Z {z:.3f}m 会让工具尖进入工件:" - f"尖端 {z - tool:.3f},工件面 {surf:.3f}," - f"间隙 {clear * 1000:.1f}mm,要求 ≥ {float(gap_m) * 1000:.1f}mm。" - "拒绝开跑,不会悄悄抬高。" - ) - return "" - - -def hold_at_insert_z(final, *, skip3: bool) -> bool: - """贴面已经按 ``final_gap_mm`` 停下时,不再进三阶段。 - - 三阶段开局会抬到悬高上方测触觉,再落回 ``hole_hover_z_m``。 - 没有接触传感器。到位高度就是这次的贴面间隙,不另设一个 Z。 - """ - if skip3: - return True - if not isinstance(final, dict): - return False - return bool(final.get("insert_held")) - - -def track_lock_z(hover_z: float, tool_len_m: float, surface_z_m: float) -> float: - """一阶段锁高。 - - 悬停时规尖离面已经 ≥ ``TRACK_LOCK_GAP_M``:锁在悬停高,跟踪和对孔都不改 Z, - 对孔完成后再下降。离面不够(仿真悬停只留 2mm):再抬 ``TRACK_CLEARANCE_M``, - 否则跟踪会刮到工件。工具长或工件面缺失时抬升 —— 缺数时锁在悬停高等于没检查。 - """ - tool = float(tool_len_m) - surf = float(surface_z_m) - hover = float(hover_z) - if tool > 0.0 and surf > 0.0 and (hover - tool - surf) >= TRACK_LOCK_GAP_M: - return hover - return hover + TRACK_CLEARANCE_M - - -def stage1_log_fatal(log_path: str) -> str: - """一阶段日志里已经写明失败时,不许再空等锁定。空串 = 还没到这一步。""" - try: - text = Path(log_path).read_text(encoding="utf-8", errors="replace") - except OSError: - return "" - if D435_MOVEL_GAVE_UP in text: - return ( - f"D435 {D435_MOVEL_GAVE_UP}(RDK 控制模式没切到 primitive)," - f"一阶段中止。不是视野/标定。看 {log_path}" - ) - return "" - - -def stage1_timeout_reason(points_seen: int, timeout_s: float, log_path: str) -> str: - """一阶段超时了,到底是"感知没给点"还是"给了点但没收敛"。 - - 这两种情况的排查方向完全相反,而现象长得一模一样(都是"没锁定"): - - * **一个点都没收到** → 感知侧的事:yolo 后端多半缺 ultralytics/torch、 - truth 后端真值节点没起来、external 后端没人发。跟标定、跟工件在不在 - 视野里**都没关系**。 - * **收到了点但没收敛** → 控制/几何侧的事:工件不在视野、手眼不对、 - 目标超出工作空间、增益太小。 - - 以前两种情况共用一句"没锁定(视野里没工件?)",于是"perception_node - 因为缺依赖早退了"被读成"算法不收敛",白查半天。 - """ - fatal = stage1_log_fatal(log_path) - if fatal: - return fatal - if points_seen <= 0: - return ( - f"一阶段 {timeout_s:.0f}s 没锁定:**一个视觉目标点都没收到**" - "(visual_servo/filtered_point 上 0 条)—— 这是感知没起来," - "不是标定/视野问题。按 perception.source 对号入座:\n" - " yolo → 多半缺推理依赖(ultralytics/torch)," - f"看感知进程退出前几行:{log_path}\n" - " truth → 仿真真值节点没起来,或场景/物体名读不出来" - "(它退出前会打印原因)\n" - " external → 外部节点没按这个话题/这个类型发" - ) - return ( - f"一阶段 {timeout_s:.0f}s 没锁定(收到 {points_seen} 个目标点但没收敛):" - f"工件不在视野 / 手眼不对 / 目标超出工作空间。看 {log_path}" - ) - - -class AssemblyPipeline(Stage3Search): - def __init__(self, node_name: str = "assembly_pipeline") -> None: - # node_name 可覆盖:通止规装配(gauge_assembly_node)继承本类以复用 - # 一阶段跟踪的拉起/拆分与二阶段定位链,但它是**另一条流程**, - # 在图上必须是另一个节点名(否则 ros2 node list 里两个同名的节点, - # 出问题时连"是哪条流程在发指令"都分不清)。 - super().__init__(node_name=node_name) - self.declare_parameter("skip_stage1", False) - self.declare_parameter("skip_stage2", False) - self.declare_parameter("skip_stage3", False) # 默认搜孔+轻压;拧入靠 --depth - self.declare_parameter("d435_move_only", False) - self.declare_parameter("init_z_m", -1.0) # >0:启动后先到这个法兰高度 - self.declare_parameter("stage1_timeout_sec", 150.0) - self.linger3 = 1.2 # 串联结束短保持;单独跑 stage3 仍用 site linger_sec - - self._s1: Optional[subprocess.Popen] = None - self._locked = False - self.create_subscription(Bool, "/visual_servo/locked", self._on_lock, 10) - # 诊断用:一阶段超时时靠它区分"感知没给点"和"给了点没收敛"。 - # 只计数,不参与控制 —— 它绝不能影响流程本身的判断。 - # - # ⚠️ QoS 必须与感知发布端**逐项一致**(BEST_EFFORT + KEEP_LAST(5), - # 见 perception_node / sim_truth_perception)。用默认的 RELIABLE 订阅 - # BEST_EFFORT 的话题:不报错、话题列表里也在,但**一条都收不到** —— - # 于是超时归因会一口咬定"感知没起来",把人往完全错误的方向带 - #(真实原因可能只是这里 QoS 不匹配)。这类"诊断自己坏了"最难查, - # 所以宁可多写这几行。 - self.declare_parameter("diag_point_topic", "visual_servo/filtered_point") - self._diag_point_topic = str(self.get_parameter("diag_point_topic").value) - self._point_msgs = 0 - self.create_subscription( - PointStamped, - self._diag_point_topic, - self._on_point_seen, - QoSProfile( - history=HistoryPolicy.KEEP_LAST, - depth=5, - reliability=ReliabilityPolicy.BEST_EFFORT, - ), - ) - self._pipe_pub = self.create_publisher(String, "/pipeline/state", 10) - self._pipe_result = self.create_publisher(String, "/pipeline/result", 10) - - skip1 = bool(self.get_parameter("skip_stage1").value) - skip2 = bool(self.get_parameter("skip_stage2").value) - skip3 = bool(self.get_parameter("skip_stage3").value) - self.d435_move_only = bool(self.get_parameter("d435_move_only").value) - self.get_logger().info( - f"pipeline arm_ee={self.ee_frame} hole={self.target_hole} " - f"skip1={skip1} skip2={skip2} skip3={skip3} " - f"d435_only={self.d435_move_only} insert={self.insert_depth_mm:.1f}mm" - ) - - def _state(self, s: str) -> None: - self.get_logger().info(f"[pipeline] === {s} ===") - msg = String() - msg.data = s - self._state_pub.publish(msg) - self._pipe_pub.publish(msg) - - def _on_lock(self, msg: Bool) -> None: - if bool(msg.data): - self._locked = True - - def _on_point_seen(self, _msg: PointStamped) -> None: - """只记"收到过目标点",用于超时后的归因(见 stage1_timeout_reason)。""" - self._point_msgs += 1 - - def _kill_old_stage1(self) -> None: - for pat in ( - "visual_servo.launch", - "lib/arm_application/servo_node", - "lib/arm_application/perception_node", - ): - subprocess.call(["pkill", "-f", pat], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) - time.sleep(0.25) - - def _stop_stage1(self) -> None: - proc = self._s1 - self._s1 = None - if proc is None: - self._kill_old_stage1() - return - if proc.poll() is None: - try: - os.killpg(proc.pid, signal.SIGTERM) - except Exception: - proc.terminate() - try: - proc.wait(timeout=4.0) - except Exception: - try: - os.killpg(proc.pid, signal.SIGKILL) - except Exception: - proc.kill() - self._kill_old_stage1() - - def _track_z(self) -> float: - """一阶段锁高。写了 ``init_z_m`` 就用它,否则见 :func:`track_lock_z`。""" - z = float(self.get_parameter("init_z_m").value) - if z > 0.0: - return z - return track_lock_z( - float(self.hover_z), - float(getattr(self, "tool_tip_below_flange_m", 0.0) or 0.0), - float(getattr(self, "surface_z_m", 0.0) or 0.0), - ) - - def _ensure_clearance(self) -> bool: - """没写初始高度:只在低于锁高时抬上去。写了:升或降到那个法兰 Z,不安全就拒绝。""" - user = float(self.get_parameter("init_z_m").value) > 0.0 - q, Tee = self._wait_state(4.0) - if q is None or Tee is None: - if user: - self.get_logger().error("设了 --init-z,但拿不到当前位姿,拒绝开跑") - return False - return True - tz = self._track_z() - if user: - why = init_z_refusal( - tz, - float(getattr(self, "tool_tip_below_flange_m", 0.0) or 0.0), - float(getattr(self, "surface_z_m", 0.0) or 0.0), - float(self.final_gap_m), - float(self.ws_min[2]), - float(self.ws_max[2]), - ) - if why: - self.get_logger().error(why) - return False - z = float(Tee[2, 3]) - if user: - if abs(z - tz) <= 0.008: - self.get_logger().info(f"已在初始高度 Z={z:.3f}m(目标 {tz:.3f})") - return True - elif z >= tz - 0.008: - return True - self._state("pre_lift") - self.get_logger().info(f"先到初始高度:Z {z:.3f} → {tz:.3f}m") - ok, q, Tee = self._goto( - q, Tee, np.array([float(Tee[0, 3]), float(Tee[1, 3]), tz]), - verticalize=True, tol_m=0.003, tol_tilt=self.vert_tol_rad * 2.0, - tag="pre_lift", v=self.move_speed, max_hops=8, hold_xy=True, settle_s=0.25, - ) - q2 = self._q() - self._pin(q2 if q2 is not None else q) - z2 = float(Tee[2, 3]) - if user and (not ok or abs(z2 - tz) > 0.008): - self.get_logger().error(f"初始高度没到位:Z={z2:.3f},目标 {tz:.3f}") - return False - return True - - def _run_stage1(self) -> int: - """拉起 perception+servo,等到 /visual_servo/locked 后冻结并拆跟踪。""" - if not self._ensure_clearance(): - return 2 - self._state("stage1_track") - self._kill_old_stage1() - self._locked = False - log_path = "/tmp/pipeline_stage1.log" - logf = open(log_path, "w", encoding="utf-8") - lock_z = self._track_z() - # use_sim_time 必须**原样传下去**:本节点在仿真里是 true,子 launch 若是 - # false,perception/servo 就跑在系统时间上,TF 全是仿真时刻的戳 → - # "看得见图、算得出点,就是查不到变换",一阶段永远不收敛。 - use_sim = bool(self.get_parameter("use_sim_time").value) - cmd = [ - "ros2", "launch", "arm_application", "visual_servo.launch.py", - "enable_control:=true", - "publish_handeye_tf:=false", - f"ee_z_m:={lock_z:.3f}", - f"use_sim_time:={str(use_sim).lower()}", - f"d435_move_only:={str(self.d435_move_only).lower()}", - ] - if self.d435_move_only: - self.get_logger().info( - f"启动 D435 位移测试(锁高 {lock_z:.3f}m,到位后不交 D405、不进二阶段)" - ) - else: - self.get_logger().info( - f"启动一阶段跟踪(锁高 {lock_z:.3f}m,锁定后自动交二阶段)" - ) - self._s1 = subprocess.Popen( - cmd, stdout=logf, stderr=subprocess.STDOUT, start_new_session=True, - ) - timeout = float(self.get_parameter("stage1_timeout_sec").value) - self._point_msgs = 0 - t0 = time.monotonic() - while time.monotonic() - t0 < timeout: - self._spin(0.1) - if self._locked: - break - fatal = stage1_log_fatal(log_path) - if fatal: - self._stop_stage1() - self.get_logger().error(fatal) - return 1 - if self._s1.poll() is not None: - self.get_logger().error(f"一阶段进程提前退出,看 {log_path}") - return 1 - else: - self._stop_stage1() - self.get_logger().error( - stage1_timeout_reason(self._point_msgs, timeout, log_path) - ) - return 1 - if self.d435_move_only: - self.get_logger().info( - "D435 位移测试结束 — 停跟踪、钉住当前关节,跳过二阶段" - ) - else: - self.get_logger().info("一阶段已锁定 — 停跟踪、钉住当前关节,直接进二阶段") - self._stop_stage1() - time.sleep(0.35) - q = self._q() - if q is not None: - self._pin(q) - return 0 - - def run(self) -> int: - skip1 = bool(self.get_parameter("skip_stage1").value) - skip2 = bool(self.get_parameter("skip_stage2").value) - skip3 = bool(self.get_parameter("skip_stage3").value) - if self.d435_move_only: - skip2 = True - skip3 = True - if not self._cli.wait_for_server(timeout_sec=5.0): - self.get_logger().error("JTC action 不在 —— 先开 T1: run_real.sh --arm 89") - return 2 - - try: - if not skip1: - code = self._run_stage1() - if code != 0: - return code - else: - if not self._ensure_clearance(): - return 2 - self._state("skip_stage1") - - q, Tee = self._wait_state(10.0) - if q is None or Tee is None: - self.get_logger().error("拿不到 joint_states/TF") - return 2 - - final: dict = {} - if not skip2: - self._state("stage2_locate") - code, q, Tee, final = self._run_locate(q, Tee) - if code != 0: - self.get_logger().error(f"二阶段失败 exit={code},停在当前位姿") - return code - stay = hold_at_insert_z(final, skip3=skip3) - if stay and final.get("insert_held"): - self.get_logger().info( - f"二阶段 OK 残差 {final.get('residual_mm', -1)}mm — " - f"插孔停在法兰 Z={final.get('flange_z_m')}m," - f"规尖离面 {final.get('tip_gap_mm')}mm" - f"(目标 {final.get('commanded_gap_mm')}mm,来自 final_gap_mm)。" - "没有接触传感器,不另设 Z,不抬回悬高。" - ) - else: - self.get_logger().info( - f"二阶段 OK 残差 {final.get('residual_mm', -1)}mm" - + ( - " — 跳过搜孔,停在观测高度(看规尖是否对中;进程退出后臂保持)" - if skip3 - else " — 立刻下压搜孔并轻压(不拧入)" - ) - ) - else: - self._state("skip_stage2") - stay = hold_at_insert_z(final, skip3=skip3) - - if stay: - self._state("skip_stage3") - if self.d435_move_only: - self.get_logger().info( - "D435 位移测试结束 —— 臂停在当前高度,不交 D405、不对孔;" - "15s 后本进程退出,臂保持不动" - ) - elif isinstance(final, dict) and final.get("insert_held"): - if q is not None: - self._pin(q) - self.get_logger().info( - "插孔已停在贴面高度,不进搜孔、不抬回悬高。" - "15s 后本进程退出,臂保持这个 Z。" - ) - else: - self.get_logger().info( - "跳过搜孔 —— 臂停在当前高度。请看规尖与孔是否对中;" - "15s 后本进程退出,臂保持不动" - ) - if final: - self._publish_result(final) - self._linger_hold(final if final else {"ok": True}, seconds=15.0) - payload = {"ok": True, "stage": "pipeline", "exit": 0, "skipped": "stage3"} - try: - payload["stage2"] = json.loads( - open("/tmp/stage2_result.json", encoding="utf-8").read() - ) - except Exception: - pass - msg = String() - msg.data = json.dumps(payload, ensure_ascii=False) - self._pipe_result.publish(msg) - return 0 - - self._state("stage3_search") - code = self._run_search(q, Tee, linger=False, stage2_final=final) - payload = { - "ok": code == 0, - "stage": "pipeline", - "exit": code, - } - try: - payload["stage3"] = json.loads( - open("/tmp/stage3_result.json", encoding="utf-8").read() - ) - except Exception: - pass - msg = String() - msg.data = json.dumps(payload, ensure_ascii=False) - self._pipe_result.publish(msg) - return code - finally: - self._stop_stage1() - - -def main(args=None) -> None: - rclpy.init(args=args) - node = AssemblyPipeline() - code = 2 - try: - code = node.run() - except KeyboardInterrupt: - node.get_logger().info("用户中断") - code = 130 - except Exception as exc: # noqa: BLE001 - node.get_logger().error(f"pipeline 异常终止: {exc}") - code = 2 - finally: - try: - node._stop_stage1() - except Exception: - pass - if code != 0: - try: - q = node._q() - if q is not None: - node._pin(q) - except Exception: - pass - try: - node._shutdown_tf() - except Exception: - pass - try: - node.destroy_node() - except Exception: - pass - try: - if rclpy.ok(): - rclpy.shutdown() - except Exception: - pass - os._exit(code) - - -if __name__ == "__main__": - main() diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/plane_feature.py b/install/arm_application/lib/python3.11/site-packages/arm_application/plane_feature.py deleted file mode 100644 index 1cc1eae..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/plane_feature.py +++ /dev/null @@ -1,300 +0,0 @@ -#!/usr/bin/env python3 -"""在 YOLO 检测框中心处求立体平面的 Z。 - -悬停目标是「检测框中心射线」与「拟合出的近平面」的交点。这样既能留在检测结果上, -又带有真实的米制 Z(30° 相机下,Z 错了会把 base 系的 XY 也带偏)。不使用点云均值 -质心 —— 孔 / 桌面的内点会把它从绿框上拉走。 -""" - -from __future__ import annotations - -from dataclasses import dataclass -from typing import Optional, Tuple - -import numpy as np - - -@dataclass -class PlaneFeature: - uv: np.ndarray # (2,) 三维质心对应的彩色像素坐标 - z: float # 三维质心在相机坐标系下的 Z - xyz: np.ndarray # (3,) 相机坐标系下的立体点云质心 - n_inliers: int - note: str - # 这个点的 Z 是不是**借**来的(该像素处读不到自己的深度,从检测框里借了一个)。 - # 为什么要显式带出来、而不是让下游去认 ``note`` 里的字:借深度意味着该像素的 - # 深度不可读 ⇒ 绝对位置不足以用来**重定位**(2026-10-08 真机,假 k0 带着借来的 - # 深度、z 看着很合理 0.27~0.39m,于是"物理量程"守卫也失效)。 - borrowed: bool = False - - -def _depth_meters(buf: np.ndarray, encoding: str) -> Tuple[np.ndarray, float]: - enc = (encoding or "").lower() - raw = np.asarray(buf) - if enc in ("16uc1", "mono16") or raw.dtype == np.uint16: - pos = raw.reshape(-1).astype(np.float32) - pos = pos[pos > 0] - if pos.size >= 8: - med = float(np.median(pos)) - scale = 0.001 if 20.0 <= med <= 8000.0 else (1.0 if med < 20.0 else 0.0001) - else: - scale = 0.001 - return raw.astype(np.float32) * scale, scale - return raw.astype(np.float32), 1.0 - - -def _near_band_mask( - meters: np.ndarray, - valid: np.ndarray, - min_depth: float, - work_z_max: float, - band_m: float, -) -> np.ndarray: - vals = meters[valid] - if vals.size < 8: - return valid - vals = np.sort(vals) - n_near = max(8, int(0.40 * vals.size)) - near = vals[:n_near] - z_p10 = float(np.percentile(near, 10)) - hi = min(float(work_z_max), z_p10 + float(band_m)) - return valid & (meters <= hi) & (meters >= float(min_depth)) - - -def _ransac_plane( - pts: np.ndarray, - thresh: float, - n_iter: int = 24, - rng: Optional[np.random.Generator] = None, -) -> Optional[Tuple[np.ndarray, np.ndarray]]: - n = int(pts.shape[0]) - if n < 12: - return None - rng = rng or np.random.default_rng() - best_inl: Optional[np.ndarray] = None - best_count = 0 - for _ in range(n_iter): - i = rng.choice(n, 3, replace=False) - p0, p1, p2 = pts[i] - nvec = np.cross(p1 - p0, p2 - p0) - nn = float(np.linalg.norm(nvec)) - if nn < 1e-9: - continue - nvec = nvec / nn - dist = np.abs((pts - p0) @ nvec) - inl = dist < thresh - c = int(inl.sum()) - if c > best_count: - best_count = c - best_inl = inl - if best_inl is None or best_count < max(12, int(0.15 * n)): - return None - subset = pts[best_inl] - p0 = subset.mean(axis=0) - _, _, vh = np.linalg.svd(subset - p0, full_matrices=False) - nvec = vh[-1] - nvec = nvec / (float(np.linalg.norm(nvec)) + 1e-12) - if float(nvec @ p0) > 0.0: - nvec = -nvec - return nvec, p0 - - -def _plane_z( - nvec: np.ndarray, - p0: np.ndarray, - u: float, - v: float, - fx: float, - fy: float, - cx: float, - cy: float, -) -> Optional[float]: - direc = np.array([(u - cx) / max(fx, 1.0), (v - cy) / max(fy, 1.0), 1.0], dtype=float) - denom = float(nvec @ direc) - if abs(denom) < 1e-8: - return None - z = float(nvec @ p0) / denom - return z if np.isfinite(z) else None - - -def workpiece_xyz_in_box( - depth_buf: np.ndarray, - encoding: str, - xyxy, - fx: float, - fy: float, - cx: float, - cy: float, - img_wh: Tuple[int, int], - min_depth: float, - max_depth: float, - work_z_max: float, - inner: float = 0.40, - band_m: float = 0.06, -) -> Optional[PlaneFeature]: - """工件上的实体点:内层检测框里近表面深度的三维中位数。 - - 不是单目射线(孔会穿透到桌面),也不是整个 ROI 的点云均值 - (桌面 / 单侧深度会把它从工件上拉走)。 - """ - meters, _ = _depth_meters(depth_buf, encoding) - if meters.ndim != 2: - return None - img_w, img_h = int(img_wh[0]), int(img_wh[1]) - dh, dw = int(meters.shape[0]), int(meters.shape[1]) - x1, y1, x2, y2 = [float(v) for v in xyxy] - u_c = 0.5 * (x1 + x2) - v_c = 0.5 * (y1 + y2) - if dw != img_w or dh != img_h: - sx, sy = dw / max(float(img_w), 1.0), dh / max(float(img_h), 1.0) - x1, y1, x2, y2 = x1 * sx, y1 * sy, x2 * sx, y2 * sy - scale_u, scale_v = 1.0 / sx, 1.0 / sy - else: - scale_u = scale_v = 1.0 - bw = max(8.0, x2 - x1) - bh = max(8.0, y2 - y1) - frac = 0.5 * float(np.clip(inner, 0.2, 0.8)) - ix0 = int(np.clip(min(x1, x2) + (0.5 - frac) * bw, 0, dw - 1)) - iy0 = int(np.clip(min(y1, y2) + (0.5 - frac) * bh, 0, dh - 1)) - ix1 = int(np.clip(max(x1, x2) - (0.5 - frac) * bw, ix0 + 2, dw)) - iy1 = int(np.clip(max(y1, y2) - (0.5 - frac) * bh, iy0 + 2, dh)) - roi = meters[iy0:iy1, ix0:ix1] - finite = np.isfinite(roi) & (roi > float(min_depth)) & (roi < float(max_depth)) - if int(finite.sum()) < 12: - return None - near = _near_band_mask(roi, finite, min_depth, work_z_max, band_m) - if int(near.sum()) < 8: - near = finite - yy, xx = np.nonzero(near) - if yy.size < 8: - return None - zs = roi[yy, xx] - us = (xx + ix0) * scale_u - vs = (yy + iy0) * scale_v - pts = np.stack( - [ - (us - cx) * zs / max(fx, 1.0), - (vs - cy) * zs / max(fy, 1.0), - zs, - ], - axis=1, - ) - p_xyz = np.median(pts, axis=0) - if not np.all(np.isfinite(p_xyz)): - return None - z = float(p_xyz[2]) - if not (min_depth <= z <= work_z_max): - return None - uv = np.array( - [ - fx * float(p_xyz[0]) / max(z, 1e-6) + cx, - fy * float(p_xyz[1]) / max(z, 1e-6) + cy, - ], - dtype=float, - ) - return PlaneFeature( - uv=uv, - z=z, - xyz=p_xyz.astype(float), - n_inliers=int(yy.size), - note=f"inner3d n={int(yy.size)} z={z:.3f}", - ) - - -def geometric_center_on_plane( - depth_buf: np.ndarray, - encoding: str, - xyxy, - fx: float, - fy: float, - cx: float, - cy: float, - img_wh: Tuple[int, int], - min_depth: float, - max_depth: float, - work_z_max: float, - inlier_m: float = 0.008, - band_m: float = 0.06, -) -> Optional[PlaneFeature]: - """拟合出的近平面上、位于检测框中心的点,拿不到则返回 None。""" - meters, _ = _depth_meters(depth_buf, encoding) - if meters.ndim != 2: - return None - img_w, img_h = int(img_wh[0]), int(img_wh[1]) - dh, dw = int(meters.shape[0]), int(meters.shape[1]) - x1, y1, x2, y2 = [float(v) for v in xyxy] - u_c = 0.5 * (x1 + x2) - v_c = 0.5 * (y1 + y2) - if dw != img_w or dh != img_h: - sx, sy = dw / max(float(img_w), 1.0), dh / max(float(img_h), 1.0) - x1, y1, x2, y2 = x1 * sx, y1 * sy, x2 * sx, y2 * sy - # uv 保持用彩色像素坐标:先在深度像素下计算,再缩放回来。 - scale_u, scale_v = 1.0 / sx, 1.0 / sy - else: - scale_u = scale_v = 1.0 - - x0 = int(np.clip(min(x1, x2), 0, dw - 1)) - y0 = int(np.clip(min(y1, y2), 0, dh - 1)) - x1i = int(np.clip(max(x1, x2), x0 + 2, dw)) - y1i = int(np.clip(max(y1, y2), y0 + 2, dh)) - roi = meters[y0:y1i, x0:x1i] - if roi.size < 16: - return None - - finite = np.isfinite(roi) & (roi > float(min_depth)) & (roi < float(max_depth)) - if int(finite.sum()) < 16: - return None - near = _near_band_mask(roi, finite, min_depth, work_z_max, band_m) - if int(near.sum()) < 12: - near = finite - - yy, xx = np.nonzero(near) - zs = roi[yy, xx] - # 反投影用的彩色等效像素(对齐后的深度使用的是彩色内参 K)。 - us = (xx + x0) * scale_u - vs = (yy + y0) * scale_v - pts = np.stack( - [ - (us - cx) * zs / max(fx, 1.0), - (vs - cy) * zs / max(fy, 1.0), - zs, - ], - axis=1, - ) - if pts.shape[0] > 800: - rng = np.random.default_rng() - sel = rng.choice(pts.shape[0], 800, replace=False) - fit_pts = pts[sel] - else: - fit_pts = pts - - fitted = _ransac_plane(fit_pts, thresh=float(inlier_m)) - if fitted is None: - return None - nvec, p0 = fitted - dist = np.abs((pts - p0) @ nvec) - n_inl = int((dist < float(inlier_m)).sum()) - if n_inl < 12: - return None - z = _plane_z(nvec, p0, u_c, v_c, fx, fy, cx, cy) - if z is None or not (min_depth <= float(z) <= work_z_max): - zs_inl = pts[dist < float(inlier_m), 2] - z = float(np.median(zs_inl)) if zs_inl.size else None - if z is None or not (min_depth <= z <= work_z_max): - return None - z = float(z) - p_xyz = np.array( - [ - (u_c - cx) * z / max(fx, 1.0), - (v_c - cy) * z / max(fy, 1.0), - z, - ], - dtype=float, - ) - return PlaneFeature( - uv=np.array([u_c, v_c], dtype=float), - z=z, - xyz=p_xyz, - n_inliers=n_inl, - note=f"box_on_plane n={n_inl} z={z:.3f}", - ) diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/realsense_color_pub.py b/install/arm_application/lib/python3.11/site-packages/arm_application/realsense_color_pub.py deleted file mode 100644 index c95b46a..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/realsense_color_pub.py +++ /dev/null @@ -1,977 +0,0 @@ -#!/usr/bin/env python3 -"""把 RealSense 彩色流发布到 ROS 话题(不依赖 realsense2_camera 的 apt 包)。 - -当你没装 ``ros-humble-realsense2-camera``、但 ``pyrealsense2`` 能正常工作时用它。 - -默认话题(camera_name=d405): - /d405/color/image_raw - /d405/color/camera_info - /d405/aligned_depth_to_color/image_raw (16UC1 mm,需开启 enable_depth) - -性能说明 --------- -* 在采集线程里直接发布(没有定时器带来的延迟)。 -* 使用 SensorDataQoS(BEST_EFFORT,depth=1),这样慢的订阅者会主动丢旧帧。 -* 可选的 SDK 预览:``-p show_preview:=true``(沿用 Intel 示例的链路:pipeline → numpy → 窗口)。 -""" - -from __future__ import annotations - -import array -import os -import threading -import time -from pathlib import Path -from typing import Optional - -import numpy as np -import rclpy -from rcl_interfaces.msg import ParameterDescriptor -from rclpy.node import Node -from rclpy.qos import qos_profile_sensor_data -from sensor_msgs.msg import CameraInfo, Image -from std_msgs.msg import Float32MultiArray - -from arm_application.ros_node import TolerantNode, param_as_str - -# RealSense 掉到 480Mbps(或整台消失)时的排查口径。写在这里是为了"只有一处": -# 相机节点的报错、preflight 脚本、文档都引用同一套说法,不会各说各的。 -# 为什么 480Mbps 值得专门解释一次(2026-09-28 现场): -# D435 原本协商到 USB 3.2、1280x720@30 跑得好好的,中途 -# `xioctl(UVCIOC_CTRL_QUERY) ... No such file or directory`(= 设备从总线上消失) -# 之后重新枚举成了 **USB 2.1**。USB3 线缆/座子里 SuperSpeed 那一对针脚一旦 -# 接触不良,USB2 的针脚还能用 —— 于是设备不会"掉线",只是**悄悄掉速**, -# 表现成"相机在,但帧率/分辨率不对"。这时查软件是查不出来的。 -USB_RESEAT_HINT = ( - '拔插一次、换一根 USB3 线,或换到机箱后面板直连的蓝色口 —— ' - '只协商到 480Mbps 通常是 SuperSpeed 针脚没接上,不是相机坏了。' - '看当前协商速率:lsusb -t(设备后面写 480M 还是 5000M)。' -) - - -def _fill_camera_info( - msg: CameraInfo, width: int, height: int, fx, fy, cx, cy, frame_id: str, dist -) -> None: - msg.width = width - msg.height = height - msg.distortion_model = 'plumb_bob' - msg.d = [float(v) for v in list(dist)[:5]] - while len(msg.d) < 5: - msg.d.append(0.0) - msg.k = [ - float(fx), 0.0, float(cx), - 0.0, float(fy), float(cy), - 0.0, 0.0, 1.0, - ] - msg.r = [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0] - msg.p = [ - float(fx), 0.0, float(cx), 0.0, - 0.0, float(fy), float(cy), 0.0, - 0.0, 0.0, 1.0, 0.0, - ] - msg.header.frame_id = frame_id - - -def _site_yaml_path() -> Path: - from arm_application.site_io import site_path - - return site_path() - - -class RealsenseColorPub(TolerantNode): - def __init__(self) -> None: - super().__init__('realsense_color_pub') - self.declare_parameter('camera_name', 'd405') # 话题命名空间 - self._name = str(self.get_parameter('camera_name').value).strip().strip('/') - self._serial = param_as_str(self, 'camera_serial', '') - self.declare_parameter('width', 1280) - self.declare_parameter('height', 720) - self.declare_parameter('fps', 15) - self.declare_parameter('show_preview', False) - self.declare_parameter('overlay_detection', True) - self.declare_parameter('overlay_hold_sec', 1.5) - self.declare_parameter('enable_depth', True) - self.declare_parameter('enable_infra', True) - self.declare_parameter('preview_stereo', True) - # Qt 预览每 N 帧才渲染一次 —— 发布始终保持满帧率; - # CPU 上色 + 四窗格绘制绝不能拖慢数据流。 - self.declare_parameter('preview_decimation', 2) - self.declare_parameter('auto_exposure', True) - self.declare_parameter('ae_limit_us', 3000.0) - self.declare_parameter('emitter_enabled', False) - self.declare_parameter('laser_power', 0.0) - self.declare_parameter('exposure_us', 0.0) - self.declare_parameter('gain', 0.0) - - self._width = int(self.get_parameter('width').value) - self._height = int(self.get_parameter('height').value) - self._fps = int(self.get_parameter('fps').value) - self._show_preview = bool(self.get_parameter('show_preview').value) - self._overlay_detection = bool(self.get_parameter('overlay_detection').value) - self._overlay_hold_sec = float(self.get_parameter('overlay_hold_sec').value) - self._enable_depth_param = bool(self.get_parameter('enable_depth').value) - self._enable_infra_param = bool(self.get_parameter('enable_infra').value) - self._preview_stereo = bool(self.get_parameter('preview_stereo').value) - self._preview_every = max( - 1, int(self.get_parameter('preview_decimation').value) - ) - self._auto_exposure = bool(self.get_parameter('auto_exposure').value) - self._ae_limit_us = float(self.get_parameter('ae_limit_us').value) - self._emitter_enabled = bool(self.get_parameter('emitter_enabled').value) - self._laser_power = float(self.get_parameter('laser_power').value) - self._exposure_us = float(self.get_parameter('exposure_us').value) - self._gain = float(self.get_parameter('gain').value) - # FPS 表:硬件帧号对比实际发布帧数(循环速率) - self._fps_t0 = 0.0 - self._fps_pub_color = 0 - self._fps_pub_depth = 0 - self._fps_fn_color = -1 - self._fps_fn_depth = -1 - self._t_wait = 0.0 - self._t_align = 0.0 - self._t_pub = 0.0 - - qos = qos_profile_sensor_data # BEST_EFFORT,只保留最后 1 帧 - base = f'/{self._name}/color' - self._img_pub = self.create_publisher( - Image, f'{base}/image_raw', qos - ) - self._info_pub = self.create_publisher( - CameraInfo, f'{base}/camera_info', qos - ) - self._depth_pub = self.create_publisher( - Image, f'/{self._name}/aligned_depth_to_color/image_raw', qos - ) - # IR 流也会一起发布,这样预览可以放在独立的查看器进程里 - # (Qt 不能和采集循环共享 GIL)。 - self._ir1_pub = None - self._ir2_pub = None - if self._enable_infra_param and self._preview_stereo: - self._ir1_pub = self.create_publisher( - Image, f'/{self._name}/infra1/image_rect_raw', qos - ) - self._ir2_pub = self.create_publisher( - Image, f'/{self._name}/infra2/image_rect_raw', qos - ) - - self._pipe = None - self._profile = None - self._align = None - self._have_depth = False - self._have_infra = False - self._infra_mode = 'none' - self._colorizer = None - self._logged_depth = False - # 设备深度尺度 → 用原始 uint16 乘上它才是真实的 mm。 - # D405 = 0.1 mm/单位,D435 = 1.0 mm/单位。启动时从传感器读取。 - self._depth_to_mm = 1.0 - self._running = True - self._thread: Optional[threading.Thread] = None - self._fx = self._fy = self._cx = self._cy = 0.0 - self._dist = [0.0] * 5 - self._frame_id = f'{self._name}_color_optical_frame' - self._info_every = 1 - self._frame_i = 0 - self._preview = None - self._overlay: Optional[list] = None - self._overlay_stamp = 0.0 - self._capture_started = False - self._cap_lock = threading.Lock() - self._cap_event = threading.Event() - self._pending = None - self._last_frame_mono = 0.0 - self._usb_desc = '' - self._last_ok = None - self._site_yaml = _site_yaml_path() - self._site_mtime = 0.0 - self._site_wh_warned = False - if self._show_preview: - from arm_application.realsense_sdk_view import SdkPreviewWindow, ensure_app - - self._qt_app = ensure_app() - self._preview = SdkPreviewWindow( - title=f'RealSense {self._name} COLOR|DEPTH|IR-L|IR-R (pyrealsense2 SDK)' - ) - self._preview.show() - if self._overlay_detection: - from rclpy.qos import HistoryPolicy, QoSProfile, ReliabilityPolicy - - det_qos = QoSProfile( - history=HistoryPolicy.KEEP_LAST, - depth=5, - reliability=ReliabilityPolicy.RELIABLE, - ) - self.create_subscription( - Float32MultiArray, - 'workpiece/detection', - self._on_det, - det_qos, - ) - self.get_logger().info( - 'SDK 预览已开启 —— 本进程内显示 COLOR|DEPTH|IR-L|IR-R ' - f'(保留 {self._overlay_hold_sec:.1f}s)。关窗口 ≠ 停相机。' - ) - self._start_pipeline() - - def _pick_device(self, devices, rs): - """优先用配置的序列号,其次按名字选 D405(这台机器上还接了 D435)。""" - hint = (self._name or 'd405').lower() - if self._serial: - for d in devices: - if d.get_info(rs.camera_info.serial_number) == self._serial: - return d - avail = ', '.join( - f"{d.get_info(rs.camera_info.name)}:{d.get_info(rs.camera_info.serial_number)}" - for d in devices - ) - raise RuntimeError( - f'找不到序列号 {self._serial!r}。当前已连接:{avail}' - ) - for d in devices: - name = str(d.get_info(rs.camera_info.name) or '').lower() - if hint in name or (hint == 'd405' and '405' in name): - return d - return devices[0] - - def _reload_site_preview(self, stream_w: int = 0, stream_h: int = 0) -> None: - """不重启就能读到新的 overlay_hold_sec(宽高变了则给出警告)。""" - path = self._site_yaml - if not path.is_file(): - return - try: - mtime = path.stat().st_mtime - except OSError: - return - if mtime <= self._site_mtime: - return - self._site_mtime = mtime - try: - import yaml - - data = yaml.safe_load(path.read_text(encoding="utf-8")) or {} - cam = data.get("camera") or {} - except Exception as exc: # noqa: BLE001 - self.get_logger().warn(f"site.yaml 重新加载失败:{exc}") - return - if "overlay_hold_sec" in cam: - hold = max(0.0, float(cam.get("overlay_hold_sec") or 0.0)) - if abs(hold - self._overlay_hold_sec) > 1e-6: - self.get_logger().info( - f"overlay_hold_sec {self._overlay_hold_sec:.2f}s → {hold:.2f}s (site.yaml)" - ) - self._overlay_hold_sec = hold - want_w = int(cam.get("width") or self._width) - want_h = int(cam.get("height") or self._height) - live_w = stream_w or self._width - live_h = stream_h or self._height - if (want_w, want_h) != (live_w, live_h) and not self._site_wh_warned: - self._site_wh_warned = True - self.get_logger().warn( - f"预览流是 {live_w}x{live_h},而 site.yaml 里的 camera 是 " - f"{want_w}x{want_h} —— 请重启:bash ~/ros2/scripts/run_camera_d405.sh --preview" - ) - elif (want_w, want_h) == (live_w, live_h): - self._site_wh_warned = False - - def _on_det(self, msg: Float32MultiArray) -> None: - # 空负载 = 感知漏检 → 立刻清掉绿框 - if not msg.data or len(msg.data) < 8: - self._overlay = None - self._overlay_stamp = 0.0 - if self._preview is not None: - self._preview.set_overlay(None) - return - self._overlay = list(msg.data) - self._overlay_stamp = time.monotonic() - if self._preview is not None: - self._preview.set_overlay(self._overlay) - - def _publish_frame(self, bgr: np.ndarray, depth_u16: Optional[np.ndarray] = None) -> None: - h, w = bgr.shape[0], bgr.shape[1] - stamp = self.get_clock().now().to_msg() - - img = Image() - img.header.stamp = stamp - img.header.frame_id = self._frame_id - img.height = h - img.width = w - img.encoding = 'bgr8' - img.is_bigendian = 0 - img.step = w * 3 - # array.array('B', ...) 会走 setter 的快路径 —— 直接传 bytes 会触发 - # 逐元素的 debug 检查,在这里每帧要多花约 40 ms。 - img.data = array.array('B', np.ascontiguousarray(bgr).tobytes()) - self._img_pub.publish(img) - - info = CameraInfo() - info.header.stamp = stamp - info.header.frame_id = self._frame_id - _fill_camera_info( - info, w, h, self._fx, self._fy, self._cx, self._cy, - self._frame_id, self._dist, - ) - self._info_pub.publish(info) - - if depth_u16 is not None: - self._publish_depth(depth_u16, stamp) - - def _publish_depth(self, depth_u16: np.ndarray, stamp=None) -> None: - dh, dw = int(depth_u16.shape[0]), int(depth_u16.shape[1]) - dmsg = Image() - dmsg.header.stamp = stamp or self.get_clock().now().to_msg() - dmsg.header.frame_id = self._frame_id - dmsg.height = dh - dmsg.width = dw - dmsg.encoding = '16UC1' - dmsg.is_bigendian = 0 - dmsg.step = dw * 2 - dmsg.data = array.array('B', np.ascontiguousarray(depth_u16).tobytes()) - self._depth_pub.publish(dmsg) - if not self._logged_depth: - self._logged_depth = True - self.get_logger().info( - f'首个对齐深度 {dw}x{dh} → ' - f'/{self._name}/aligned_depth_to_color/image_raw' - ) - - def _start_pipeline(self, reconnect: bool = False) -> None: - try: - import pyrealsense2 as rs - except Exception as exc: # noqa: BLE001 - raise RuntimeError( - 'pyrealsense2 不可用。请执行 conda activate ros_flexiv' - ) from exc - - # 杀掉上一个发布进程后,USB 需要 1–3s 才能重新枚举。 - ctx = rs.context() - devices = [] - for attempt in range(8): - devices = list(ctx.devices) - if devices: - break - time.sleep(0.4) - ctx = rs.context() - if not devices: - raise RuntimeError( - '没有连接 RealSense(多次重试后 USB 仍为空)。' - '拔插一次;确认没有 realsense-viewer / 其它进程占着这台相机;' - + USB_RESEAT_HINT - ) - - found = self._pick_device(devices, rs) - try: - self._serial = str(found.get_info(rs.camera_info.serial_number)) - except Exception: # noqa: BLE001 - pass - usb_desc = '' - try: - usb_desc = str(found.get_info(rs.camera_info.usb_type_descriptor)) - except Exception: # noqa: BLE001 - usb_desc = '?' - self._usb_desc = usb_desc - usb2 = usb_desc.startswith('2') - cam_name = '' - try: - cam_name = str(found.get_info(rs.camera_info.name)) - except Exception: # noqa: BLE001 - cam_name = self._name - self.get_logger().info( - f'{cam_name} serial={self._serial or "?"} USB={usb_desc} ' - f'requested {self._width}x{self._height}@{self._fps}Hz' - ) - if usb2: - # 只在 480Mbps 口上才降。实测(2026-09-28)640x480@15 彩色+深度 - # 可以稳定跑满 15fps;但 1280x720@30 在 USB2 上物理不可能 - # (SuperSpeed 没协商上)。 - self.get_logger().warn( - f'{cam_name} 只协商到 USB {usb_desc}(480Mbps)—— 降到 ' - f'640x480@15Hz。' + USB_RESEAT_HINT - ) - self._width, self._height, self._fps = 640, 480, 15 - - want = (self._width, self._height, self._fps) - last = self._last_ok - if reconnect: - candidates = [] - if last: - candidates.append(last) - if want not in candidates: - candidates.append(want) - if (640, 480, 15) not in candidates: - candidates.append((640, 480, 15)) - else: - candidates = [ - want, - (1280, 720, 15), - (640, 480, 15), - (640, 480, 5), - ] - if usb2: - candidates = [(640, 480, 15), (640, 480, 5), (424, 240, 15)] - # 丢弃固件里的垃圾模式(848@90 之类),它们会 ioctl 失败并卡死 USB。 - seen = set() - trimmed = [] - for item in candidates: - if item in seen: - continue - w, h, fps = item - if fps not in (5, 15, 30): - continue - if w * h > 1280 * 720: - continue - seen.add(item) - trimmed.append(item) - candidates = trimmed or [(640, 480, 15)] - - pipe = rs.pipeline() - profile = None - last_err = None - want_depth = bool(self._enable_depth_param) - want_infra = ( - bool(self._enable_infra_param) - and bool(self._preview_stereo) - ) - have_depth = False - have_infra = False - - # USB3:先尝试真正的 IR-L+IR-R(共享立体自动曝光)。彩色+IR-L 在 D405 上 - # 经常失败 —— 那就退回 IR-R + 把彩色当左目(观感不同,且不共享自动曝光)。 - def _modes(): - if want_depth and want_infra and not usb2: - yield True, 'both' - if want_depth and want_infra: - yield True, 'right' - if want_depth: - yield True, 'none' - yield False, 'none' - - for w, h, fps in candidates: - for with_depth, infra_mode in _modes(): - try: - trial = rs.config() - if self._serial: - trial.enable_device(self._serial) - trial.enable_stream(rs.stream.color, w, h, rs.format.bgr8, fps) - if with_depth: - trial.enable_stream( - rs.stream.depth, w, h, rs.format.z16, fps - ) - if infra_mode in ('both', 'left'): - trial.enable_stream( - rs.stream.infrared, 1, w, h, rs.format.y8, fps - ) - if infra_mode in ('both', 'right'): - trial.enable_stream( - rs.stream.infrared, 2, w, h, rs.format.y8, fps - ) - # 回调里只留最新一帧。wait_for_frames 会等彩色、深度、红外齐套, - # 场景一动红外对不齐,彩色帧就在这里被丢掉。 - profile = pipe.start(trial, self._on_sdk_frame) - have_depth = with_depth - have_infra = infra_mode != 'none' - self._infra_mode = infra_mode - if (w, h, fps) != want: - self.get_logger().warn( - f'请求 {want[0]}x{want[1]}@{want[2]}Hz ' - f'→ 改用 {w}x{h}@{fps}Hz' - ) - if want_depth and not with_depth: - self.get_logger().warn( - f'{w}x{h}@{fps}Hz 彩色+深度失败 —— 只用彩色' - ) - elif want_infra and infra_mode == 'none': - self.get_logger().warn( - f'{w}x{h}@{fps}Hz 立体 IR 失败 —— 改用彩色+深度预览' - ) - elif infra_mode == 'both': - self.get_logger().info( - f'{w}x{h}@{fps}Hz 立体 IR-L+IR-R(共享自动曝光)+ 深度' - ) - elif infra_mode == 'right': - self.get_logger().info( - f'{w}x{h}@{fps}Hz IR-L=彩色灰度,IR-R=原始 IR ' - '(明暗不同 —— 这不是两路自动曝光)' - ) - self._width, self._height, self._fps = w, h, fps - self._last_ok = (w, h, fps) - break - except Exception as exc: # noqa: BLE001 - last_err = exc - kind = f'color+depth+IR-{infra_mode}' if with_depth else 'color' - self.get_logger().warn(f'{w}x{h}@{fps}Hz {kind} 失败:{exc}') - profile = None - have_depth = False - have_infra = False - try: - pipe.stop() - except Exception: # noqa: BLE001 - pass - time.sleep(0.8) - pipe = rs.pipeline() - if profile is not None: - break - if profile is None: - raise RuntimeError( - f'{self._name} 没有可用的彩色配置。最后的错误:{last_err}' - ) - - self._pipe = pipe - self._profile = profile - try: - sensor = profile.get_device().first_color_sensor() - if sensor.supports(rs.option.frames_queue_size): - # 队列只留最新一张,避免越积越慢,动起来画面还停在旧帧。 - sensor.set_option(rs.option.frames_queue_size, 1) - except Exception: # noqa: BLE001 - pass - self._have_depth = have_depth - self._have_infra = have_infra - self._logged_depth = False - # 深度按**真实毫米**发布。D405 的原始单位是 0.1 mm(D435 是 1 mm); - # 下游(感知/伺服)都按 mm 处理,所以要按设备尺度归一化。 - self._depth_to_mm = 1.0 - if have_depth: - try: - ds = float(profile.get_device().first_depth_sensor().get_depth_scale()) - self._depth_to_mm = ds * 1000.0 # m/单位 → mm/单位 - self.get_logger().info( - f'深度尺度 {ds * 1000.0:.4f} mm/单位 → 按真实 mm 发布' - ) - except Exception as exc: # noqa: BLE001 - self.get_logger().warn(f'读取深度尺度失败,按 mm 处理:{exc}') - self._depth_to_mm = 1.0 - self._align = rs.align(rs.stream.color) if have_depth else None - self._colorizer = None - if have_depth: - try: - self._colorizer = rs.colorizer() - self._colorizer.set_option(rs.option.color_scheme, 0) - except Exception: # noqa: BLE001 - self._colorizer = None - try: - from arm_application.handeye_realsense import apply_realsense_exposure - import time as _time - - exp_us = self._exposure_us if self._exposure_us > 0 else None - gain = self._gain if self._gain > 0 else None - kwargs = dict( - auto_exposure=self._auto_exposure, - ae_limit_us=self._ae_limit_us, - emitter_enabled=self._emitter_enabled, - laser_power=self._laser_power, - exposure_us=exp_us, - gain=gain, - log=self.get_logger().info, - ) - apply_realsense_exposure(profile.get_device(), **kwargs) - # 固件经常会在最初几帧重置自动曝光;所以再设置一次。 - _time.sleep(0.25) - apply_realsense_exposure(profile.get_device(), **kwargs) - except Exception as exc: # noqa: BLE001 - self.get_logger().warn(f'应用曝光参数失败:{exc}') - if self._preview is not None: - if self._infra_mode == 'both': - self._preview.set_pane_titles( - 'COLOR', 'DEPTH', 'IR-L (左红外,与右目同一曝光)', 'IR-R (右红外)' - ) - elif self._infra_mode == 'right': - self._preview.set_pane_titles( - 'COLOR', 'DEPTH', '左目≈彩图灰度(不是红外曝光)', 'IR-R (右红外)' - ) - else: - self._preview.set_pane_titles( - 'COLOR', 'DEPTH', 'IR-L (无)', 'IR-R (无)' - ) - - vs = profile.get_stream(rs.stream.color).as_video_stream_profile() - try: - intr = vs.get_intrinsics() - self._fx = float(intr.fx) - self._fy = float(intr.fy) - self._cx = float(intr.ppx) - self._cy = float(intr.ppy) - dist = list(intr.coeffs[:5]) if intr.coeffs else [0.0] * 5 - except Exception as exc: # noqa: BLE001 - self.get_logger().warn( - f'get_intrinsics 失败({exc});改用 D405 的默认内参,' - f'分辨率 {self._width}x{self._height}' - ) - w, h = float(self._width), float(self._height) - if w >= 1200: - self._fx, self._fy = 654.8, 654.0 - else: - self._fx = 393.9 * (w / 640.0) - self._fy = 393.4 * (h / 480.0) - self._cx, self._cy = w * 0.5, h * 0.5 - dist = [0.0] * 5 - while len(dist) < 5: - dist.append(0.0) - self._dist = dist - - sn = profile.get_device().get_info(rs.camera_info.serial_number) - model = profile.get_device().get_info(rs.camera_info.name) - depth_txt = ( - f' + aligned depth /{self._name}/aligned_depth_to_color/image_raw' - if have_depth - else ' (仅彩色)' - ) - if have_infra: - depth_txt += ' + IR-L/IR-R 预览' - self.get_logger().info( - f'{model} serial={sn} USB={usb_desc} → /{self._name}/color/image_raw ' - f'{self._width}x{self._height}@{self._fps}Hz ' - f'fx={self._fx:.1f} fy={self._fy:.1f}{depth_txt} (SensorDataQoS)' - ) - - if not getattr(self, '_capture_started', False): - self._capture_started = True - self._thread = threading.Thread(target=self._publish_loop, daemon=True, name="rs-publish") - self._thread.start() - - def _enable_color_ae_fast(self, profile, rs) -> None: - """彩色自动曝光,优先用短曝光(减少运动模糊)。""" - try: - sensor = profile.get_device().first_color_sensor() - except Exception as exc: # noqa: BLE001 - self.get_logger().warn(f'彩色 AE:没有彩色传感器({exc})') - return - try: - if sensor.supports(rs.option.enable_auto_exposure): - sensor.set_option(rs.option.enable_auto_exposure, 1.0) - if sensor.supports(rs.option.auto_exposure_priority): - # 0 = 保住帧率,场景够亮时缩短曝光时间 - sensor.set_option(rs.option.auto_exposure_priority, 0.0) - limit = getattr(rs.option, "auto_exposure_limit", None) - if limit is not None and sensor.supports(limit): - try: - sensor.set_option(limit, 5000.0) # µs;30 Hz 下减少运动模糊 - except Exception: - pass - self.get_logger().info('彩色自动曝光已开启(优先帧率 / 减少模糊)') - except Exception as exc: # noqa: BLE001 - self.get_logger().warn(f'彩色 AE:{exc}') - - def _enable_stereo_ae(self, profile, rs) -> None: - """两路 IR 成像器共用一路自动曝光(立体模块)。""" - try: - sensor = profile.get_device().first_depth_sensor() - if sensor.supports(rs.option.enable_auto_exposure): - sensor.set_option(rs.option.enable_auto_exposure, 1.0) - limit = getattr(rs.option, "auto_exposure_limit", None) - if limit is not None and sensor.supports(limit): - try: - # 把 IR 曝光上限压到远低于 33 ms 的帧周期,这样光线暗的场景 - # 也不会悄悄把数据流掉到 30 Hz 以下。 - sensor.set_option(limit, 20000.0) - self.get_logger().info('立体 IR 曝光上限 20ms') - except Exception: - pass - self.get_logger().info('立体 IR 自动曝光已开启(左右共享)') - except Exception as exc: # noqa: BLE001 - self.get_logger().warn(f'立体 AE:{exc}') - - def _colorize_depth(self, depth_frame, depth_u16: np.ndarray) -> np.ndarray: - if self._colorizer is not None: - try: - rgb = np.asanyarray(self._colorizer.colorize(depth_frame).get_data()) - if rgb.ndim == 3 and rgb.shape[2] >= 3: - return rgb[:, :, ::-1].copy() - except Exception: # noqa: BLE001 - pass - d = np.asarray(depth_u16) - vis = np.zeros((d.shape[0], d.shape[1], 3), dtype=np.uint8) - valid = d > 0 - if not valid.any(): - return vis - x = d.astype(np.float32) - lo, hi = np.percentile(x[valid], [5, 95]) - hi = max(float(hi), float(lo) + 1.0) - gray = np.clip((x - lo) / (hi - lo), 0.0, 1.0) - gray = (gray * 255.0).astype(np.uint8) - gray[~valid] = 0 - try: - import cv2 - - vis = cv2.applyColorMap(gray, cv2.COLORMAP_JET) - vis[~valid] = 0 - except Exception: # noqa: BLE001 - vis[:, :, 0] = gray - vis[:, :, 1] = gray - vis[:, :, 2] = gray - return vis - - def _reconnect(self) -> bool: - try: - if self._pipe is not None: - self._pipe.stop() - except Exception: # noqa: BLE001 - pass - self._pipe = None - time.sleep(2.5) - try: - self._start_pipeline(reconnect=True) - return self._pipe is not None - except Exception as exc: # noqa: BLE001 - self.get_logger().error( - f'重连失败:{exc}。请拔插 USB3,并给线缆留点余量。', - throttle_duration_sec=5.0, - ) - return False - - def _on_sdk_frame(self, frame) -> None: - """SDK 回调。只拷走彩色并握住这一组帧,立刻返回。 - - 对齐、深度换算和 ROS 发布若做在这个回调里,下一帧来不及取, - 动起来时彩色帧号会跳。那些工作放到 ``_publish_loop``。 - """ - try: - frames = frame.as_frameset() - color = frames.get_color_frame() - if not color: - return - bgr = np.array(np.asanyarray(color.get_data()), copy=True) - frames.keep() - with self._cap_lock: - self._pending = (bgr, frames) - self._last_frame_mono = time.monotonic() - self._cap_event.set() - except Exception as exc: # noqa: BLE001 - try: - self.get_logger().warn(f'收帧:{exc}', throttle_duration_sec=2.0) - except Exception: # noqa: BLE001 - pass - - def _publish_loop(self) -> None: - got = False - while self._running and rclpy.ok(): - if self._pipe is None: - if not self._reconnect(): - time.sleep(2.0) - continue - if not self._cap_event.wait(0.2): - silent = self._last_frame_mono and time.monotonic() - self._last_frame_mono > 2.0 - if silent: - usb = getattr(self, '_usb_desc', '?') - self.get_logger().error( - f'相机超过 2 秒没有新帧(USB={usb})。正在重连 —— ' - '请给 USB 线缆留点余量,别让机械臂把它拽掉。' - ) - self._last_frame_mono = 0.0 - got = False - self._reconnect() - continue - self._cap_event.clear() - with self._cap_lock: - item = self._pending - self._pending = None - if item is None: - continue - bgr, frames = item - try: - t_pub = time.monotonic() - # 彩色先发出去。深度对齐再慢,也不能把这一帧彩色拖掉。 - self._publish_frame(bgr, None) - self._t_pub = time.monotonic() - t_pub - ir_l = ( - frames.get_infrared_frame(1) - if self._have_infra and self._infra_mode in ('both', 'left') - else None - ) - ir_r = ( - frames.get_infrared_frame(2) - if self._have_infra and self._infra_mode in ('both', 'right') - else None - ) - aligned = frames - if self._align is not None: - t_al = time.monotonic() - aligned = self._align.process(frames) - self._t_align = time.monotonic() - t_al - depth = aligned.get_depth_frame() - color = frames.get_color_frame() - except Exception as exc: # noqa: BLE001 - text = str(exc) - dropped = ( - 'disconnect' in text.lower() - or 'ioctl' in text.lower() - or 'errno=5' in text.lower() - ) - if dropped: - usb = getattr(self, '_usb_desc', '?') - self.get_logger().error( - f'相机数据流中断(USB={usb}):{text[:120]}。' - '正在重连 —— 请给 USB 线缆留点余量,别让机械臂把它拽掉。' - ) - got = False - self._last_frame_mono = 0.0 - self._reconnect() - else: - self.get_logger().warn(f'整理帧:{exc}', throttle_duration_sec=2.0) - continue - depth_u16 = np.asanyarray(depth.get_data()) if depth else None - if depth_u16 is not None and self._depth_to_mm != 1.0: - # 原始设备单位 → 真实 mm(D405 原始为 0.1 mm/单位) - depth_u16 = np.clip( - depth_u16.astype(np.float32) * self._depth_to_mm, 0, 65535 - ).astype(np.uint16) - if depth_u16 is not None: - try: - self._publish_depth(depth_u16) - except Exception as exc: # noqa: BLE001 - if not self._running: - break - self.get_logger().warn(f'发布深度失败:{exc}', throttle_duration_sec=2.0) - self._frame_i += 1 - self._fps_meter(color, depth, depth_u16) - # 预览相关的工作(CPU 上色、IR 拷贝、四窗格绘制)每 N 帧才做一次 - # —— 它绝不能拖慢发布。 - do_push = ( - self._preview is not None - and (self._frame_i % self._preview_every) == 0 - ) - depth_bgr = None - ir_l_img = None - ir_r_img = None - if do_push: - if depth and depth_u16 is not None and depth_u16.size: - depth_bgr = self._colorize_depth(depth, depth_u16) - ir_l_img = np.asanyarray(ir_l.get_data()).copy() if ir_l else None - ir_r_img = np.asanyarray(ir_r.get_data()).copy() if ir_r else None - # 只有在拿不到原始左目 IR 流时,才用彩色灰度来顶替。 - if ir_l_img is None and self._infra_mode != 'both': - ir_l_img = np.mean(bgr, axis=2).astype(np.uint8) - if not got: - got = True - sw, sh = int(bgr.shape[1]), int(bgr.shape[0]) - self.get_logger().info(f'首帧 {sw}x{sh}') - if self._preview is not None: - self._preview.set_pane_titles( - f"COLOR {sw}x{sh}", - "DEPTH", - "IR-L (左红外)", - "IR-R (右红外)", - ) - try: - t_pub = time.monotonic() - if self._ir1_pub is not None and ir_l is not None: - self._publish_ir(ir_l, self._ir1_pub) - if self._ir2_pub is not None and ir_r is not None: - self._publish_ir(ir_r, self._ir2_pub) - self._t_pub = time.monotonic() - t_pub - if do_push: - self._reload_site_preview(int(bgr.shape[1]), int(bgr.shape[0])) - hold = max(0.0, self._overlay_hold_sec) - age = time.monotonic() - self._overlay_stamp - if self._overlay_detection and self._overlay is not None and age > hold: - self._overlay = None - self._preview.set_overlay(None) - if self._overlay_detection and ( - self._overlay is None or age > hold - ): - self._preview.set_status( - '没有框 —— 检查 perception_node / conf' - ) - else: - self._preview.set_status('') - self._preview.push_views( - bgr.copy(), depth_bgr, ir_l_img, ir_r_img - ) - except Exception as exc: # noqa: BLE001 - # 上下文可能正在关闭 - if not self._running: - break - self.get_logger().warn( - f'发布失败:{exc}', throttle_duration_sec=2.0 - ) - - def _publish_ir(self, frame, pub) -> None: - """把原始 IR 成像器以 mono8 发布,供外部查看器进程使用。""" - arr = np.asanyarray(frame.get_data()) - h, w = int(arr.shape[0]), int(arr.shape[1]) - msg = Image() - msg.header.stamp = self.get_clock().now().to_msg() - msg.header.frame_id = self._frame_id - msg.height = h - msg.width = w - msg.encoding = 'mono8' - msg.is_bigendian = 0 - msg.step = w - msg.data = array.array('B', np.ascontiguousarray(arr).tobytes()) - pub.publish(msg) - - def _fps_meter(self, color, depth, depth_u16) -> None: - """记录发布帧率与硬件帧率 —— 用来区分循环太慢 - (预览/CPU)和 SDK 侧掉帧(自动曝光长曝光 / USB)。""" - now = time.monotonic() - try: - fn_c = int(color.get_frame_number()) - except Exception: # noqa: BLE001 - fn_c = -1 - try: - fn_d = int(depth.get_frame_number()) if depth else -1 - except Exception: # noqa: BLE001 - fn_d = -1 - if self._fps_t0 <= 0.0: - self._fps_t0 = now - self._fps_pub_color = 0 - self._fps_pub_depth = 0 - self._fps_fn_color = fn_c - self._fps_fn_depth = fn_d - return - self._fps_pub_color += 1 - if depth_u16 is not None: - self._fps_pub_depth += 1 - dt = now - self._fps_t0 - if dt < 5.0: - return - hw_c = (fn_c - self._fps_fn_color) / dt if self._fps_fn_color >= 0 and fn_c >= 0 else -1.0 - hw_d = (fn_d - self._fps_fn_depth) / dt if self._fps_fn_depth >= 0 and fn_d >= 0 else -1.0 - self.get_logger().info( - f'stream fps color={self._fps_pub_color / dt:.1f} (hw {hw_c:.1f}) ' - f'depth={self._fps_pub_depth / dt:.1f} (hw {hw_d:.1f}) ' - f'wait={self._t_wait * 1e3:.0f} align={getattr(self, "_t_align", 0.0) * 1e3:.0f} ' - f'pub={getattr(self, "_t_pub", 0.0) * 1e3:.0f}ms' - ) - self._fps_t0 = now - self._fps_pub_color = 0 - self._fps_pub_depth = 0 - self._fps_fn_color = fn_c - self._fps_fn_depth = fn_d - - -def main(args=None) -> None: - rclpy.init(args=args) - node = RealsenseColorPub() - try: - preview = getattr(node, '_preview', None) - if preview is not None: - app = node._qt_app - # 关闭窗口绝不能停掉相机 —— 跟踪需要这条数据流。 - while rclpy.ok() and node._running: - rclpy.spin_once(node, timeout_sec=0.01) - app.processEvents() - if node._preview is not None and not node._preview.isVisible(): - node.get_logger().warn( - '预览已关闭 —— 相机继续发布' - ) - node._preview = None - else: - rclpy.spin(node) - except KeyboardInterrupt: - pass - finally: - node._running = False - if node._pipe is not None: - try: - node._pipe.stop() - except Exception: # noqa: BLE001 - pass - if node._thread is not None: - node._thread.join(timeout=1.0) - node.destroy_node() - if rclpy.ok(): - rclpy.shutdown() - - -if __name__ == '__main__': - main() diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/realsense_sdk_view.py b/install/arm_application/lib/python3.11/site-packages/arm_application/realsense_sdk_view.py deleted file mode 100644 index 1bb3b14..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/realsense_sdk_view.py +++ /dev/null @@ -1,236 +0,0 @@ -#!/usr/bin/env python3 -"""RealSense SDK 预览:固定的 2x2 Qt 窗格(彩色 / 深度 / IR-L / IR-R)。 - -把四路画面拼成一张 pixmap 时,一旦缺了深度 / IR 看起来就像单相机视图。 -现在每路画面都有自己带标题的独立窗格。 -""" - -from __future__ import annotations - -import threading -from typing import Optional, Sequence, Tuple - -import numpy as np - -try: - from PySide6.QtCore import Qt, QTimer - from PySide6.QtGui import QImage, QPixmap - from PySide6.QtWidgets import ( - QApplication, - QGridLayout, - QLabel, - QMainWindow, - QSizePolicy, - QVBoxLayout, - QWidget, - ) -except Exception: # noqa: BLE001 - QApplication = None # type: ignore - - -def _to_bgr(img: Optional[np.ndarray]) -> Optional[np.ndarray]: - if img is None: - return None - vis = img - if vis.ndim == 2: - vis = np.stack([vis, vis, vis], axis=-1) - elif vis.ndim == 3 and vis.shape[2] == 4: - vis = vis[:, :, :3] - if vis.dtype != np.uint8: - vis = np.clip(vis, 0, 255).astype(np.uint8) - return np.ascontiguousarray(vis) - - -def _bgr_to_pixmap(bgr: np.ndarray) -> "QPixmap": - rgb = np.ascontiguousarray(bgr[:, :, ::-1]) - h, w, _ = rgb.shape - qimg = QImage(rgb.data, w, h, w * 3, QImage.Format_RGB888).copy() - return QPixmap.fromImage(qimg) - - -def _placeholder(text: str, w: int = 424, h: int = 240) -> np.ndarray: - vis = np.zeros((h, w, 3), dtype=np.uint8) - vis[:] = (28, 28, 28) - try: - import cv2 - - cv2.putText( - vis, text, (16, h // 2), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (180, 180, 180), 2 - ) - except Exception: # noqa: BLE001 - pass - return vis - - -class SdkPreviewWindow(QMainWindow): - def __init__(self, title: str = "RealSense") -> None: - super().__init__() - self.setWindowTitle(title) - self._lock = threading.Lock() - self._color: Optional[np.ndarray] = None - self._depth: Optional[np.ndarray] = None - self._ir_l: Optional[np.ndarray] = None - self._ir_r: Optional[np.ndarray] = None - self._overlay: Optional[Sequence[float]] = None - self._status: str = "" - self._hud: str = "" - - central = QWidget() - grid = QGridLayout(central) - grid.setContentsMargins(6, 6, 6, 6) - grid.setSpacing(6) - self._img_labels: Tuple[QLabel, QLabel, QLabel, QLabel] - self._cap_labels: Tuple[QLabel, QLabel, QLabel, QLabel] - panes = [] - caps = [] - for row, col, name in ( - (0, 0, "COLOR"), - (0, 1, "DEPTH"), - (1, 0, "IR-L (左红外)"), - (1, 1, "IR-R (右红外)"), - ): - box, lab, cap = self._make_pane(name) - grid.addWidget(box, row, col) - panes.append(lab) - caps.append(cap) - self._img_labels = tuple(panes) # type: ignore[assignment] - self._cap_labels = tuple(caps) # type: ignore[assignment] - self.setCentralWidget(central) - self.resize(1360, 820) - self.setMinimumSize(880, 520) - - self._timer = QTimer(self) - self._timer.timeout.connect(self._redraw) - self._timer.start(66) - - @staticmethod - def _make_pane(title: str) -> Tuple[QWidget, QLabel, QLabel]: - box = QWidget() - lay = QVBoxLayout(box) - lay.setContentsMargins(0, 0, 0, 0) - lay.setSpacing(2) - cap = QLabel(title) - cap.setAlignment(Qt.AlignCenter) - cap.setStyleSheet("color:#e8e8e8; font-weight:600; font-size:13px; background:#222;") - img = QLabel("等待画面 …") - img.setAlignment(Qt.AlignCenter) - img.setMinimumSize(400, 220) - img.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) - img.setStyleSheet("background:#111; color:#777;") - img.setScaledContents(False) - lay.addWidget(cap) - lay.addWidget(img, 1) - return box, img, cap - - def set_pane_titles(self, color: str, depth: str, ir_l: str, ir_r: str) -> None: - for lab, text in zip(self._cap_labels, (color, depth, ir_l, ir_r)): - lab.setText(text) - - def push_bgr(self, bgr: np.ndarray) -> None: - self.push_views(bgr) - - def push_views( - self, - color: np.ndarray, - depth_bgr: Optional[np.ndarray] = None, - ir_left: Optional[np.ndarray] = None, - ir_right: Optional[np.ndarray] = None, - ) -> None: - with self._lock: - self._color = color - self._depth = depth_bgr - self._ir_l = ir_left - self._ir_r = ir_right - - def set_overlay(self, data: Optional[Sequence[float]]) -> None: - with self._lock: - self._overlay = data - - def set_status(self, text: str) -> None: - with self._lock: - self._status = text or "" - - def _draw_overlay(self, bgr: np.ndarray, ov, status: str) -> np.ndarray: - vis = bgr - need = (ov is not None and len(ov) >= 8) or bool(status) - if not need: - return vis - try: - import cv2 - except Exception: # noqa: BLE001 - return vis - vis = bgr.copy() - if ov is not None and len(ov) >= 8: - x1, y1, x2, y2 = [int(round(v)) for v in ov[:4]] - cx, cy = int(round(ov[6])), int(round(ov[7])) - cv2.rectangle(vis, (x1, y1), (x2, y2), (0, 255, 0), 2) - cv2.drawMarker( - vis, - (vis.shape[1] // 2, vis.shape[0] // 2), - (255, 255, 0), - cv2.MARKER_CROSS, - 20, - 2, - ) - cv2.circle(vis, (cx, cy), 6, (0, 0, 255), -1) - conf = float(ov[4]) if len(ov) > 4 else 0.0 - z = float(ov[8]) if len(ov) > 8 else 0.0 - cv2.putText( - vis, - f"{conf:.2f} z={z:.3f}m", - (x1, max(20, y1 - 8)), - cv2.FONT_HERSHEY_SIMPLEX, - 0.65, - (0, 255, 0), - 2, - ) - if status: - is_right = ("91" in status) or ("右" in status) - col = (0, 140, 255) if is_right else (40, 200, 255) - cv2.rectangle(vis, (0, 0), (vis.shape[1], 40), (16, 16, 16), -1) - cv2.putText( - vis, - status[:80], - (12, 28), - cv2.FONT_HERSHEY_SIMPLEX, - 0.75, - col, - 2, - ) - return vis - - def _set_pane(self, label: QLabel, bgr: Optional[np.ndarray], empty: str) -> None: - vis = _to_bgr(bgr) - if vis is None: - vis = _placeholder(empty) - pix = _bgr_to_pixmap(vis) - slot = label.size() - if slot.width() > 4 and slot.height() > 4: - pix = pix.scaled(slot, Qt.KeepAspectRatio, Qt.FastTransformation) - label.setPixmap(pix) - - def _redraw(self) -> None: - with self._lock: - color = None if self._color is None else self._color - depth = self._depth - ir_l = self._ir_l - ir_r = self._ir_r - ov = self._overlay - status = self._status - if color is None: - return - color = self._draw_overlay(color, ov, status) - labs = self._img_labels - self._set_pane(labs[0], color, "无彩色") - self._set_pane(labs[1], depth, "无深度") - self._set_pane(labs[2], ir_l, "无 IR-L") - self._set_pane(labs[3], ir_r, "无 IR-R") - - -def ensure_app() -> "QApplication": - if QApplication is None: - raise RuntimeError("RealSense 预览窗口缺少 PySide6,无法创建") - app = QApplication.instance() - if app is None: - app = QApplication([]) - return app diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/realsense_view.py b/install/arm_application/lib/python3.11/site-packages/arm_application/realsense_view.py deleted file mode 100644 index e1a6c87..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/realsense_view.py +++ /dev/null @@ -1,292 +0,0 @@ -#!/usr/bin/env python3 -"""realsense_view —— D405 四窗格预览(COLOR|DEPTH|IR-L|IR-R),独立进程运行。 - -相机节点(``realsense_color_pub``)只负责发布话题。所有 Qt 工作都放在这里, -这样绘制永远不会拖垮相机采集循环(两者同进程时,Python 的 GIL 会让 ``publish`` -的墙钟耗时从 1 ms 跳到约 70 ms)。关闭窗口只是隐藏预览;Ctrl+C 才停止查看器 -(相机仍在持续发布)。 -""" - -from __future__ import annotations - -import threading -import time -from typing import Optional - -import numpy as np -import rclpy -from rclpy.executors import MultiThreadedExecutor -from rclpy.node import Node -from rclpy.qos import ( - HistoryPolicy, - QoSProfile, - ReliabilityPolicy, - qos_profile_sensor_data, -) -from sensor_msgs.msg import Image -from std_msgs.msg import Float32MultiArray - -from arm_application.realsense_color_pub import _site_yaml_path -from arm_application.ros_node import TolerantNode - - -def _colorize_depth_u16(d: np.ndarray) -> np.ndarray: - """为预览窗格做快速 numpy JET 上色(不使用 SDK 的 colorizer)。""" - vis = np.zeros((d.shape[0], d.shape[1], 3), dtype=np.uint8) - valid = d > 0 - if not valid.any(): - return vis - x = d.astype(np.float32) - lo, hi = np.percentile(x[valid], [5, 95]) - hi = max(float(hi), float(lo) + 1.0) - gray = (np.clip((x - lo) / (hi - lo), 0.0, 1.0) * 255.0).astype(np.uint8) - gray[~valid] = 0 - try: - import cv2 - - vis = cv2.applyColorMap(gray, cv2.COLORMAP_JET) - vis[~valid] = 0 - except Exception: # noqa: BLE001 - vis[:, :, 0] = gray - vis[:, :, 1] = gray - vis[:, :, 2] = gray - return vis - - -def _mono_to_bgr(mono: np.ndarray) -> np.ndarray: - return np.ascontiguousarray(np.stack([mono, mono, mono], axis=-1)) - - -class RealsenseView(TolerantNode): - def __init__(self) -> None: - super().__init__('realsense_view') - self.declare_parameter('camera_name', 'd405') - self.declare_parameter('overlay_hold_sec', 0.10) - self.declare_parameter('overlay_detection', True) - # D405 用 workpiece/detection;D435 用 workpiece/detection_overhead(像素坐标系不同)。 - self.declare_parameter('detection_topic', 'workpiece/detection') - self.declare_parameter('view_hz', 20.0) - self.declare_parameter('hud_label', '') - self._name = str(self.get_parameter('camera_name').value).strip().strip('/') - self._hold = max(0.0, float(self.get_parameter('overlay_hold_sec').value)) - self._overlay_detection = bool(self.get_parameter('overlay_detection').value) - self._det_topic = str(self.get_parameter('detection_topic').value or '').strip() or ( - 'workpiece/detection' - ) - self._hud = str(self.get_parameter('hud_label').value or '').strip() - - self._color: Optional[Image] = None - self._depth: Optional[Image] = None - self._ir1: Optional[Image] = None - self._ir2: Optional[Image] = None - self._overlay: Optional[list] = None - self._overlay_stamp = 0.0 - # stage2 孔对准叠图(已是标注好的 BGR 图),新鲜时 COLOR 窗格直接显示它 - self._stage2_img: Optional[np.ndarray] = None - self._stage2_stamp = 0.0 - self._site_yaml = _site_yaml_path() - self._site_mtime = 0.0 - # RX 速率表 —— 用来直观诊断卡顿(是传输问题还是绘制问题) - self._rx_color = 0 - self._rx_depth = 0 - self._rx_ir = 0 - self._rx_t0 = 0.0 - - qos = qos_profile_sensor_data # BEST_EFFORT keep_last(1) - base = f'/{self._name}' - self.create_subscription(Image, f'{base}/color/image_raw', self._on_color, qos) - self.create_subscription( - Image, f'{base}/aligned_depth_to_color/image_raw', self._on_depth, qos - ) - self.create_subscription( - Image, f'{base}/infra1/image_rect_raw', self._on_ir1, qos - ) - self.create_subscription( - Image, f'{base}/infra2/image_rect_raw', self._on_ir2, qos - ) - det_qos = QoSProfile( - history=HistoryPolicy.KEEP_LAST, - depth=5, - reliability=ReliabilityPolicy.RELIABLE, - ) - if self._overlay_detection: - self.create_subscription( - Float32MultiArray, self._det_topic, self._on_det, det_qos - ) - # stage2 孔对准叠图(k1/k2 标注 + 残差 HUD),有它时优先显示 - self.create_subscription( - Image, '/stage2/overlay', self._on_stage2_overlay, qos_profile_sensor_data - ) - - from arm_application.realsense_sdk_view import SdkPreviewWindow, ensure_app - - self._qt_app = ensure_app() - hud = self._hud or self._name - self._preview = SdkPreviewWindow( - title=f'{hud} /{self._name} COLOR|DEPTH|IR (查看器)' - ) - self._preview.set_pane_titles( - 'COLOR', 'DEPTH', 'IR-L (左红外)', 'IR-R (右红外)' - ) - self._preview.show() - hz = max(5.0, min(30.0, float(self.get_parameter('view_hz').value))) - self.create_timer(1.0 / hz, self._push) - self.get_logger().info( - f'查看器已启动 —— 订阅 /{self._name}/color|depth|infra1|infra2 ' - f'检测={self._det_topic if self._overlay_detection else "关"} ' - f'(保留 {self._hold:.2f}s)。关闭窗口 = 仅隐藏。' - ) - - # 回调只存最新消息;转换在 _push 里做。 - def _on_color(self, msg: Image) -> None: - self._color = msg - self._rx_color += 1 - - def _on_depth(self, msg: Image) -> None: - self._depth = msg - self._rx_depth += 1 - - def _on_ir1(self, msg: Image) -> None: - self._ir1 = msg - self._rx_ir += 1 - - def _on_ir2(self, msg: Image) -> None: - self._ir2 = msg - - def _on_stage2_overlay(self, msg: Image) -> None: - try: - arr = np.frombuffer(msg.data, dtype=np.uint8).reshape( - int(msg.height), int(msg.width), 3 - ) - self._stage2_img = np.ascontiguousarray(arr) - self._stage2_stamp = time.monotonic() - except Exception: # noqa: BLE001 - pass - - def _on_det(self, msg: Float32MultiArray) -> None: - data = list(msg.data) - if not data: - self._overlay = None - self._overlay_stamp = 0.0 - if self._preview is not None: - self._preview.set_overlay(None) - return - self._overlay = data - self._overlay_stamp = time.monotonic() - if self._preview is not None: - self._preview.set_overlay(data) - - def _reload_site(self) -> None: - path = self._site_yaml - if not path.is_file(): - return - try: - mtime = path.stat().st_mtime - except OSError: - return - if mtime <= self._site_mtime: - return - self._site_mtime = mtime - try: - import yaml - - data = yaml.safe_load(path.read_text(encoding="utf-8")) or {} - cam = data.get("camera") or {} - except Exception as exc: # noqa: BLE001 - self.get_logger().warn(f"site.yaml 重新加载失败:{exc}") - return - if "overlay_hold_sec" in cam: - # 顶视检测频率低,保留 launch 里设的较长 hold,别被 site 的 0.1s 冲掉。 - if "overhead" in self._det_topic: - return - hold = max(0.0, float(cam.get("overlay_hold_sec") or 0.0)) - if abs(hold - self._hold) > 1e-6: - self.get_logger().info( - f"overlay_hold_sec {self._hold:.2f}s → {hold:.2f}s (site.yaml)" - ) - self._hold = hold - - @staticmethod - def _bgr(msg: Image) -> np.ndarray: - return np.frombuffer(msg.data, dtype=np.uint8).reshape( - int(msg.height), int(msg.width), 3 - ) - - @staticmethod - def _mono(msg: Image) -> np.ndarray: - return np.frombuffer(msg.data, dtype=np.uint8).reshape( - int(msg.height), int(msg.width) - ) - - def _push(self) -> None: - if self._preview is None: - return - self._reload_site() - now = time.monotonic() - if self._rx_t0 <= 0.0: - self._rx_t0 = now - elif now - self._rx_t0 >= 5.0: - dt = now - self._rx_t0 - self.get_logger().info( - f'查看器接收 color={self._rx_color / dt:.1f}/s ' - f'depth={self._rx_depth / dt:.1f}/s ir={self._rx_ir / dt:.1f}/s' - ) - self._rx_t0 = now - self._rx_color = 0 - self._rx_depth = 0 - self._rx_ir = 0 - age = now - self._overlay_stamp - if self._overlay is not None and age > self._hold: - self._overlay = None - self._preview.set_overlay(None) - if self._overlay is None or age > self._hold: - miss = '没有框 —— 检查 perception_node / conf' - self._preview.set_status(f'{self._hud} {miss}' if self._hud else miss) - else: - self._preview.set_status(self._hud) - if self._color is None: - return - color = self._bgr(self._color) - # stage2 孔对准叠图新鲜时,COLOR 窗格直接显示它(带 k1/k2 标注 + 残差) - if self._stage2_img is not None and (now - self._stage2_stamp) < 2.5: - color = self._stage2_img - depth_bgr = None - if self._depth is not None: - d = np.frombuffer(self._depth.data, dtype=np.uint16).reshape( - int(self._depth.height), int(self._depth.width) - ) - depth_bgr = _colorize_depth_u16(d) - # 在这里(执行器线程)做 Mono→BGR,让 Qt 绘制线程保持轻量。 - ir1 = None if self._ir1 is None else _mono_to_bgr(self._mono(self._ir1)) - ir2 = None if self._ir2 is None else _mono_to_bgr(self._mono(self._ir2)) - self._preview.push_views(color, depth_bgr, ir1, ir2) - - -def main(args=None) -> None: - rclpy.init(args=args) - node = RealsenseView() - app = node._qt_app - # ROS 回调(图像反序列化、深度上色、推送)跑在执行器线程上; - # 主线程只负责绘制 Qt —— 不会有共享的 GIL 突发。 - executor = MultiThreadedExecutor(num_threads=3) - executor.add_node(node) - spin_t = threading.Thread(target=executor.spin, daemon=True) - spin_t.start() - try: - while rclpy.ok() and spin_t.is_alive(): - app.processEvents() - time.sleep(0.005) - if node._preview is not None and not node._preview.isVisible(): - node.get_logger().warn('预览已关闭 —— 查看器挂起(相机仍在发布)') - node._preview = None - except KeyboardInterrupt: - pass - finally: - executor.shutdown() - node.destroy_node() - if rclpy.ok(): - rclpy.shutdown() - - -if __name__ == '__main__': - main() diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/run_joint_trajectory.py b/install/arm_application/lib/python3.11/site-packages/arm_application/run_joint_trajectory.py deleted file mode 100644 index 771b9ac..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/run_joint_trajectory.py +++ /dev/null @@ -1,174 +0,0 @@ -#!/usr/bin/env python3 -"""通过 ``/follow_joint_trajectory`` 发送多点关节轨迹(真机 + mock 都适用)。""" - -from __future__ import annotations - -import time - -import rclpy -from rclpy.action import ActionClient -from rclpy.node import Node - -from arm_application.site_io import joint_prefix_default -from arm_msgs.action import FollowJointTrajectory - -from arm_application.ros_node import TolerantNode - -DEFAULT_JOINTS = [ - 'joint1', 'joint2', 'joint3', 'joint4', 'joint5', 'joint6', 'joint7', -] -NUM_JOINTS = 7 -# 扁平化存放的位置(3 个点 x 7 个关节)+ 时间 —— ROS 参数不支持列表套字典 -DEFAULT_TIMES = [3.0, 6.0, 9.0] -DEFAULT_POSITIONS = [ - 0.0, -0.698, 0.0, 1.57, 0.0, 0.698, 0.0, - 0.35, -0.698, 0.35, 1.57, 0.0, 0.698, 0.0, - 0.0, -0.698, 0.0, 1.57, 0.0, 0.698, 0.0, -] - - -class RunJointTrajectory(TolerantNode): - def __init__(self) -> None: - super().__init__('run_joint_trajectory') - self.declare_parameter('joint_prefix', joint_prefix_default()) - self.declare_parameter('joint_names', DEFAULT_JOINTS) - self.declare_parameter('velocity_scale', 0.15) - self.declare_parameter('action_name', 'follow_joint_trajectory') - self.declare_parameter('waypoint_times', DEFAULT_TIMES) - self.declare_parameter('waypoint_positions', DEFAULT_POSITIONS) - # 1 = 只跑一次(默认);0 = 循环直到 Ctrl+C;N = 重复 N 次 - self.declare_parameter('loop_count', 1) - self.declare_parameter('pause_between_loops', 0.5) - - prefix = str(self.get_parameter('joint_prefix').value or '') - base = list( - self.get_parameter('joint_names').get_parameter_value().string_array_value - or DEFAULT_JOINTS - ) - self.joint_names = [f'{prefix}{n}' for n in base] - self.velocity_scale = float(self.get_parameter('velocity_scale').value) - action = str(self.get_parameter('action_name').value) - self._action_name = action - self._client = ActionClient(self, FollowJointTrajectory, action) - - def run(self) -> int: - if not self._client.wait_for_server(timeout_sec=15.0): - self.get_logger().error( - f'Action [{self._action_name}] 不可用。' - '请先启动真机栈:bash scripts/run_real.sh' - ) - return 1 - - times = list(self.get_parameter('waypoint_times').value) - positions = list(self.get_parameter('waypoint_positions').value) - n_j = len(self.joint_names) - n_pts = len(times) - if n_pts < 1: - self.get_logger().error('waypoint_times 为空') - return 1 - if len(positions) != n_pts * n_j: - self.get_logger().error( - f'waypoint_positions 长度 {len(positions)} != ' - f'{n_pts} 个点 x {n_j} 个关节 = {n_pts * n_j}' - ) - return 1 - - goal = FollowJointTrajectory.Goal() - goal.joint_names = self.joint_names - goal.num_points = n_pts - goal.velocity_scale = self.velocity_scale - goal.positions = positions - goal.time_from_start = [float(t) for t in times] - - loop_count = int(self.get_parameter('loop_count').value) - pause = float(self.get_parameter('pause_between_loops').value) - duration = goal.time_from_start[-1] - if loop_count == 0: - self.get_logger().info( - f'循环模式:{goal.num_points} 个点,约 {duration:.1f}s/圈 ' - f'(Ctrl+C 停止)' - ) - elif loop_count > 1: - self.get_logger().info( - f'循环模式:{loop_count} 圈,{goal.num_points} 个点,' - f'约 {duration:.1f}s/圈' - ) - else: - self.get_logger().info( - f'发送 {goal.num_points} 个点,v_scale={goal.velocity_scale},' - f'时长={duration:.1f}s' - ) - - iteration = 0 - while rclpy.ok(): - iteration += 1 - if loop_count > 1: - self.get_logger().info(f'第 {iteration}/{loop_count} 圈') - - code = self._send_once(goal, duration) - if code != 0: - return code - - if loop_count == 1: - self.get_logger().info('完成:OK') - return 0 - if loop_count > 1 and iteration >= loop_count: - self.get_logger().info(f'完成:已跑完 {loop_count} 圈') - return 0 - if pause > 0: - time.sleep(pause) - - def _send_once(self, goal: FollowJointTrajectory.Goal, duration: float) -> int: - send = self._client.send_goal_async(goal) - deadline = time.monotonic() + 10.0 - while rclpy.ok() and not send.done(): - rclpy.spin_once(self, timeout_sec=0.05) - if time.monotonic() > deadline: - self.get_logger().error('发送目标超时') - return 2 - handle = send.result() - if handle is None or not handle.accepted: - self.get_logger().error('目标被拒绝') - return 3 - - res_fut = handle.get_result_async() - deadline = time.monotonic() + max(120.0, duration * 3.0) - next_log = time.monotonic() + 10.0 - while rclpy.ok() and not res_fut.done(): - rclpy.spin_once(self, timeout_sec=0.05) - now = time.monotonic() - if now >= next_log: - left = max(0.0, deadline - now) - self.get_logger().info( - f'正在执行轨迹(计划约 {duration:.0f}s),' - f'等待机器人……(剩余超时 {left:.0f}s)' - ) - next_log = now + 10.0 - if now > deadline: - self.get_logger().error('等待结果超时') - return 4 - result = res_fut.result().result - if not result.success: - self.get_logger().error(f'失败:{result.message}') - return 5 - self.get_logger().info(f'本圈结束:{result.message or "OK"}') - return 0 - - -def main(args=None) -> None: - rclpy.init(args=args) - node = RunJointTrajectory() - code = 1 - try: - code = node.run() - except KeyboardInterrupt: - code = 0 - finally: - node.destroy_node() - if rclpy.ok(): - rclpy.shutdown() - raise SystemExit(code) - - -if __name__ == '__main__': - main() diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/servo_node.py b/install/arm_application/lib/python3.11/site-packages/arm_application/servo_node.py deleted file mode 100644 index 10eb349..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/servo_node.py +++ /dev/null @@ -1,2357 +0,0 @@ -#!/usr/bin/env python3 -"""servo_node —— 100 Hz 的 Twist 视觉伺服(PBVS,独立进程,不跑 YOLO)。 - -硬性规则: -- 用 ``MultiThreadedExecutor`` + ``Reentrant`` 的 ``ControlCallbackGroup`` 驱动 100 Hz 定时器 -- 只订阅 ``PointStamped``(不用 Service) -- ``cmd_vel`` 用 ``SystemDefaults`` + ``keep_last(1)``,保证驱动器总能看到最新指令 -- 看门狗:目标丢失 → 冻结外推、速度置零、清 I、轨迹置零 -- 只有在目标数据新鲜时才做延迟补偿 -- 绝不在 100 Hz 循环里调用 ``sendTransform`` -""" - -from __future__ import annotations - -import os -import math -import sys -import threading -import time -from collections import deque -from typing import Deque, List, Optional, Tuple - -import numpy as np -import rclpy -from geometry_msgs.msg import PointStamped, Twist -from std_msgs.msg import Bool, Float32 -from rclpy.callback_groups import MutuallyExclusiveCallbackGroup, ReentrantCallbackGroup -from rclpy.action import ActionClient -from rclpy.executors import MultiThreadedExecutor -from rclpy.node import Node -from control_msgs.action import FollowJointTrajectory -from rclpy.qos import ( - DurabilityPolicy, - HistoryPolicy, - QoSProfile, - ReliabilityPolicy, - qos_profile_sensor_data, - qos_profile_system_default, -) -from sensor_msgs.msg import JointState -from tf2_ros import Buffer, TransformListener -from trajectory_msgs.msg import JointTrajectory, JointTrajectoryPoint - -from arm_application.geom_ik import ( - RIZON_LINK_AXES, - dls_twist, - geometric_jacobian, - load_handeye_T, - quat_xyzw_to_R, -) -from arm_application.handeye_lib import cam_point_to_base, cam_to_base_T -from arm_application.overhead_oneshot import ( - D435_MOVEL_GAVE_UP, - D435_MOVEL_RETRY, - D435_MOVEL_RETRY_S, - D435_NEAR_CRUISE_MPS, - D435_SETTLE_S, - D435_VENDOR_MOVEL_VEL_MPS, - StillLock, - at_lock_height, - d405_commands_arm, - d435_movel_from_tcp, - flange_tilt_rad, - hold_translation_vz, - hybrid_cruise_vxy, - lock_z_velocity, - oneshot_concat_hold_ori, - oneshot_full_cruise_mps, - oneshot_full_segments, - oneshot_hop_limits, - oneshot_may_send_another, - oneshot_needs_verticalize, - wrist_needs_handoff, - z_locked_qos, -) -from arm_application.path_profile import smooth_joint_schedule, translate_hold_ori_waypoints -from arm_application.pid_controller import PidController -from arm_application.kalman_filter import KalmanFilter3D -from arm_application.feature_jump_guard import ( - ACCEPT, - HOLD, - REJECT, - FeatureJumpGate, -) -from arm_application.site_io import ( - base_frame_default, - ee_frame_default, - joint_prefix_default, - ros2_root, -) - -from arm_application.ros_node import TolerantNode - -try: - from flexiv_msgs.msg import RobotStates -except ImportError: # pragma: no cover - RobotStates = None # type: ignore - - -DEFAULT_JOINTS = [ - "joint1", "joint2", "joint3", "joint4", "joint5", "joint6", "joint7", -] - - -def _saturate_vec(v: np.ndarray, limit: float) -> np.ndarray: - n = float(np.linalg.norm(v)) - if n > limit > 0.0: - v = v * (limit / n) - return v - - -class ServoNode(TolerantNode): - def __init__(self) -> None: - super().__init__("servo_node") - tid = threading.get_ident() - self.get_logger().warn( - f"servo_node 已启动 pid={os.getpid()} thread_id={tid}" - ) - - self.declare_parameter("joint_prefix", joint_prefix_default()) - self.declare_parameter("joint_names", DEFAULT_JOINTS) - self.declare_parameter("base_frame", base_frame_default()) - self.declare_parameter("ee_frame", ee_frame_default()) - self.declare_parameter("camera_frame", "d405_color_optical_frame") - self.declare_parameter("traj_topic", "rizon_arm_controller/joint_trajectory") - self.declare_parameter( - "action_name", "rizon_arm_controller/follow_joint_trajectory" - ) - self.declare_parameter("point_topic", "visual_servo/filtered_point") - # 默认值只作兜底:真机运行一定由 launch 传入 site.yaml 的 paths.handeye_file。 - # 指向 /tmp 是历史遗留(标定临时产物),会让人误以为"标定结果在那里"。 - self.declare_parameter("handeye_file", "/home/cc/ros2/handeye/results/89_eye_in_hand.yaml") - # eye_in_hand = cam→法兰;eye_to_hand = cam→基座。写错会把固定相机当腕部用。 - self.declare_parameter("handeye_mode", "eye_in_hand") - self.declare_parameter("use_static_handeye_tf", False) - self.declare_parameter("handeye_child_frame", "d405_color_optical_frame") - - self.declare_parameter("control_hz", 100.0) - self.declare_parameter("z_ref_m", 0.40) - self.declare_parameter("z_min_m", 0.25) - self.declare_parameter("approach_xy_gate_m", 0.040) - self.declare_parameter("v_approach_z", 0.025) - self.declare_parameter("enable_control", False) - self.declare_parameter("max_extrapolate_sec", 0.18) - self.declare_parameter("predict_enable", True) - self.declare_parameter("predict_sec", 0.10) - self.declare_parameter("predict_v_max", 0.35) - self.declare_parameter("predict_jump_m", 0.08) - # 大跳变要连续多少帧指向同一新位置才采信(见 feature_jump_guard 的注释)。 - # 30Hz 下 3 帧 ≈ 0.1s:真的重定位 0.1s 就被认,假点(乱跳)永远认不了。 - self.declare_parameter("jump_confirm_frames", 3) - # 特征点位置合理性:必须落在工作盒 XY 内(含此余量 [m])。跑出去的点几乎必然 - # 是误检(见 feature_jump_guard 的注释),当"没有目标"处理。 - self.declare_parameter("feat_ws_margin_m", 0.05) - - # --- 看门狗(丢失目标即硬停) --- - self.declare_parameter("watchdog_timeout_sec", 1.2) - self.declare_parameter("stale_hold_sec", 0.28) # 触发看门狗前先冻结 XY - - # --- PID --- - self.declare_parameter("kp_xy", 2.00) - self.declare_parameter("ki_xy", 0.02) - self.declare_parameter("kd_xy", 0.50) - self.declare_parameter("kp_z", 1.20) - self.declare_parameter("ki_z", 0.02) - self.declare_parameter("kd_z", 0.45) - self.declare_parameter("i_limit_xy", 0.03) - self.declare_parameter("i_limit_z", 0.025) - # 积分分离阈值 - self.declare_parameter("i_sep_pos_m", 0.005) - self.declare_parameter("i_sep_ang_rad", 0.02) - - self.declare_parameter("deadzone_m", 0.008) - self.declare_parameter("deadzone_z_m", 0.012) - self.declare_parameter("v_max_xy", 0.06) - self.declare_parameter("v_max_z", 0.04) - # 远处限速(防"追着假目标把臂带走"):目标离得超过 slow_far_m 时 XY 限速到 - # v_slow_xy。真机 2026-10-08:0.7s 内被假 k0 从 home 带走 400mm 到工作盒角落。 - self.declare_parameter("slow_far_m", 0.05) - self.declare_parameter("v_slow_xy", 0.08) - self.declare_parameter("a_max", 0.45) - self.declare_parameter("lost_timeout_sec", 1.2) # 别名 / 用时间戳年龄兜底 - self.declare_parameter("e_xy_clip_m", 0.080) # 误差绝不按大于 8 cm 处理 - - # --- 速度低通滤波(把 100Hz 平滑成轨迹) --- - self.declare_parameter("vel_lpf_alpha", 0.40) - self.declare_parameter("wz_lpf_alpha", 0.40) - - # --- JTC 的 dq 滑动窗口 --- - self.declare_parameter("dq_window_size", 5) - - self.declare_parameter("min_ee_z_m", 0.20) - self.declare_parameter("workspace_xyz_min", [0.15, -0.50, 0.18]) - self.declare_parameter("workspace_xyz_max", [0.80, 0.50, 0.60]) - # base 系下的末端保持(法兰)。Z/XY 单位为米,可通过 site.yaml 修改。 - self.declare_parameter("ee_x_m", 0.25) - self.declare_parameter("ee_y_m", 0.00) - self.declare_parameter("ee_z_m", 0.25) - self.declare_parameter("ee_hold_xy", False) - self.declare_parameter("ee_vertical_down", True) - # hover = 让法兰/夹爪中心 XY 停在三维特征点上(任意锁定高度都可)。 - # lookat = 对准图像中心。hover_offset_ee_xy_m 是法兰 XY 到爪中心的偏移。 - self.declare_parameter("xy_track", "hover") - self.declare_parameter("hover_offset_ee_xy_m", [0.0, 0.0]) - self.declare_parameter("arm_label", "") - self.declare_parameter("ee_hold_kp", 2.0) - self.declare_parameter("ee_w_max", 0.60) - self.declare_parameter("damping", 0.08) - self.declare_parameter("max_qdot", 0.85) - self.declare_parameter("exec_horizon_sec", 0.20) - self.declare_parameter("traj_stream_hz", 15.0) - self.declare_parameter("min_cmd_delta_rad", 0.004) - self.declare_parameter("camera_fx", 390.0) - self.declare_parameter("camera_fy", 390.0) - self.declare_parameter("camera_cx", 320.0) - self.declare_parameter("camera_cy", 240.0) - # Seek:到达锁定高度却没有有效目标时,扫描工作区域,让 eye-in-hand - # 相机自己去找到工件(自适应找工件)。 - self.declare_parameter("seek_enabled", True) - self.declare_parameter("seek_radius_max_m", 0.16) - self.declare_parameter("seek_speed_mps", 0.05) - self.declare_parameter("seek_timeout_sec", 45.0) - # 悬停积分:用来突破约 4mm 的关节指令死区,否则 XY 收敛到最后几毫米 - # 时就会停滞、贴不到工件上。 - self.declare_parameter("ki_hover", 0.8) - # 串联用:XY 入死区 + Z 到锁高持续这么久 → /visual_servo/locked=True - self.declare_parameter("lock_hold_sec", 2.0) - # D405 跟住后法兰静止多久进二阶段。哨兵 -1 = 没从 site 接入。 - # lock_still_sec 仍须从 site 接上(缺了就报错)。 - # 厂家 MoveL 结束后,法兰连续停稳 d435_handback_sec 才打开 D405 框心。 - self.declare_parameter("lock_still_sec", -1.0) - self.declare_parameter("d435_handback_sec", -1.0) - self.declare_parameter("wrist_align_sec", -1.0) - self.declare_parameter("lock_still_move_m", -1.0) - self.declare_parameter("wrist_handoff_conf", -1.0) - self.declare_parameter("overhead_hold_s", -1.0) - # 只测 D435 位移:到位后不交 D405、不靠 D405 静止去锁二阶段。 - self.declare_parameter("d435_move_only", False) - self.declare_parameter("overhead_k0_topic", "visual_servo/overhead_k0") - self.declare_parameter("wrist_conf_topic", "visual_servo/wrist_conf") - - prefix = str(self.get_parameter("joint_prefix").value or "") - base = list( - self.get_parameter("joint_names").get_parameter_value().string_array_value - or DEFAULT_JOINTS - ) - self.joint_names = [f"{prefix}{n}" for n in base] - self.link_frames = [f"{prefix}link{i}" for i in range(1, 8)] - self.base_frame = str(self.get_parameter("base_frame").value) - self.ee_frame = str(self.get_parameter("ee_frame").value) - self.camera_frame = str(self.get_parameter("camera_frame").value) - self.handeye_child = str(self.get_parameter("handeye_child_frame").value) - self.use_static_tf = bool(self.get_parameter("use_static_handeye_tf").value) - - self.z_ref = float(self.get_parameter("z_ref_m").value) - self.z_min_m = float(self.get_parameter("z_min_m").value) - self.approach_xy_gate_m = float(self.get_parameter("approach_xy_gate_m").value) - self.v_approach_z = float(self.get_parameter("v_approach_z").value) - self.enable_control = bool(self.get_parameter("enable_control").value) - self.max_extrap = float(self.get_parameter("max_extrapolate_sec").value) - self.predict_enable = bool(self.get_parameter("predict_enable").value) - self.predict_sec = float(self.get_parameter("predict_sec").value) - self.predict_v_max = float(self.get_parameter("predict_v_max").value) - self.predict_jump_m = float(self.get_parameter("predict_jump_m").value) - self.jump_confirm_frames = max(1, int(self.get_parameter("jump_confirm_frames").value)) - self.feat_ws_margin_m = float(self.get_parameter("feat_ws_margin_m").value) - self.watchdog_timeout = float(self.get_parameter("watchdog_timeout_sec").value) - self.stale_hold_sec = float(self.get_parameter("stale_hold_sec").value) - self.deadzone_m = float(self.get_parameter("deadzone_m").value) - self.deadzone_z_m = float(self.get_parameter("deadzone_z_m").value) - self.v_max_xy = float(self.get_parameter("v_max_xy").value) - self.v_max_z = float(self.get_parameter("v_max_z").value) - # 远处限速:目标离得比 slow_far_m 远时,XY 速度降到 v_slow_xy(见 hover 段注释) - self.slow_far_m = float(self.get_parameter("slow_far_m").value) - self.v_slow_xy = float(self.get_parameter("v_slow_xy").value) - self.a_max = float(self.get_parameter("a_max").value) - self.lost_timeout = float(self.get_parameter("lost_timeout_sec").value) - self.e_xy_clip = float(self.get_parameter("e_xy_clip_m").value) - self.kp_xy = float(self.get_parameter("kp_xy").value) - self.vel_lpf_alpha = float(np.clip(float(self.get_parameter("vel_lpf_alpha").value), 0.05, 1.0)) - self.wz_lpf_alpha = float(np.clip(float(self.get_parameter("wz_lpf_alpha").value), 0.05, 1.0)) - self.dq_window_size = max(1, int(self.get_parameter("dq_window_size").value)) - self.min_ee_z = float(self.get_parameter("min_ee_z_m").value) - self.ee_x_m = float(self.get_parameter("ee_x_m").value) - self.ee_y_m = float(self.get_parameter("ee_y_m").value) - self.ee_z_m = float(self.get_parameter("ee_z_m").value) - self.ee_hold_xy = bool(self.get_parameter("ee_hold_xy").value) - self.ee_vertical_down = bool(self.get_parameter("ee_vertical_down").value) - self.xy_track = str(self.get_parameter("xy_track").value or "hover").strip().lower() - if self.xy_track not in ("hover", "lookat"): - self.xy_track = "hover" - off = list( - self.get_parameter("hover_offset_ee_xy_m").get_parameter_value().double_array_value - or [0.0, 0.0] - ) - self.hover_offset_ee_xy = np.array( - [float(off[0]) if len(off) > 0 else 0.0, float(off[1]) if len(off) > 1 else 0.0, 0.0], - dtype=float, - ) - self.arm_label = str(self.get_parameter("arm_label").value or "").strip() - self.ee_hold_kp = float(self.get_parameter("ee_hold_kp").value) - self.ee_w_max = float(self.get_parameter("ee_w_max").value) - self.damping = float(self.get_parameter("damping").value) - self.max_qdot = float(self.get_parameter("max_qdot").value) - self.exec_horizon = float(self.get_parameter("exec_horizon_sec").value) - self.traj_stream_hz = max(8.0, float(self.get_parameter("traj_stream_hz").value)) - self.min_cmd_delta = float(self.get_parameter("min_cmd_delta_rad").value) - self._last_traj_mono = 0.0 - self._fx = float(self.get_parameter("camera_fx").value) - self._fy = float(self.get_parameter("camera_fy").value) - self._cx = float(self.get_parameter("camera_cx").value) - self._cy = float(self.get_parameter("camera_cy").value) - self.seek_enabled = bool(self.get_parameter("seek_enabled").value) - self.seek_radius_max = float(self.get_parameter("seek_radius_max_m").value) - self.seek_speed = float(self.get_parameter("seek_speed_mps").value) - self.seek_timeout = float(self.get_parameter("seek_timeout_sec").value) - self.ki_hover = float(self.get_parameter("ki_hover").value) - self.lock_hold_sec = float(self.get_parameter("lock_hold_sec").value) - self.lock_still_sec = float(self.get_parameter("lock_still_sec").value) - self.d435_handback_sec = float(self.get_parameter("d435_handback_sec").value) - self.wrist_align_sec = float(self.get_parameter("wrist_align_sec").value) - self.lock_still_move_m = float(self.get_parameter("lock_still_move_m").value) - self.wrist_handoff_conf = float(self.get_parameter("wrist_handoff_conf").value) - self.overhead_hold_s = float(self.get_parameter("overhead_hold_s").value) - self.d435_move_only = bool(self.get_parameter("d435_move_only").value) - self._hybrid = ( - self.lock_still_sec >= 0.0 - and self.d435_handback_sec >= 0.0 - and self.wrist_align_sec >= 0.0 - and self.lock_still_move_m >= 0.0 - and self.wrist_handoff_conf >= 0.0 - and self.overhead_hold_s >= 0.0 - ) - # 框心对准进精拍用 wrist_align_sec。D435 交接只用 d435_handback_sec,两段不要合成一个数。 - self._still = StillLock( - still_sec=max(0.0, self.wrist_align_sec), - still_move_m=max(0.0, self.lock_still_move_m), - ) - self._arrive = StillLock( - still_sec=max(0.0, self.d435_handback_sec), - still_move_m=max(0.0, self.lock_still_move_m), - ) - self._sw_cli = None - self._d435_vendor_done = False - self._d435_vendor_busy = False - self._d435_vendor_failed = False - self._d435_vendor_tries = 0 - self._d435_retry_after = 0.0 - self._d435_settled = False - self._d435_exec_until = 0.0 - self._d435_pinned = False - self._d435_sent = False - self._d435_last_dist = None - self._d435_give_up = False - self._d435_plan_lock = threading.Lock() - self._d435_inflight = False - self._d435_settle_until = 0.0 - self._d435_last_z_err = None - self._d435_z_stall = 0 - self._d435_remeasure_log = False - self._d435_vert_done = False - self._d435_full_done = False - self._d435_fix_done = False - self._track_source = "wrist" # wrist | overhead - self._wrist_conf: Optional[float] = None - self._wrist_conf_t = -1.0 - self._overhead_t = -1.0e9 - i_sep_pos = float(self.get_parameter("i_sep_pos_m").value) - self.i_sep_ang = float(self.get_parameter("i_sep_ang_rad").value) - ws_min = list( - self.get_parameter("workspace_xyz_min").get_parameter_value().double_array_value - or [0.30, -0.50, 0.15] - ) - ws_max = list( - self.get_parameter("workspace_xyz_max").get_parameter_value().double_array_value - or [0.80, 0.50, 0.60] - ) - self.ws_min = np.array([float(v) for v in ws_min[:3]], dtype=float) - self.ws_max = np.array([float(v) for v in ws_max[:3]], dtype=float) - - self.T_cam_to_gripper = load_handeye_T( - str(self.get_parameter("handeye_file").value) - ) - self.handeye_mode = str( - self.get_parameter("handeye_mode").value or "eye_in_hand" - ).strip().lower() - if self.handeye_mode not in ("eye_in_hand", "eye_to_hand"): - raise RuntimeError( - f"handeye_mode 只能是 eye_in_hand 或 eye_to_hand," - f"收到 {self.handeye_mode!r}" - ) - if self.handeye_mode == "eye_to_hand" and self.xy_track == "lookat": - raise RuntimeError( - "眼在手外相机固定,lookat 没有意义。xy_track 必须是 hover" - ) - if self.handeye_mode == "eye_in_hand" and not self._hybrid: - raise RuntimeError( - "腕部主跟踪必须从 site.yaml 接入 lock_still_sec / d435_handback_sec / " - "wrist_align_sec / lock_still_move_m / wrist_handoff_conf / overhead_hold_s。" - "收到哨兵 -1 = 配置没接线,不许用代码默认秒数假装已经静止判据。" - ) - R_he = np.asarray(self.T_cam_to_gripper[:3, :3], dtype=float) - t_he = np.asarray(self.T_cam_to_gripper[:3, 3], dtype=float) - axis_z = float(np.clip(R_he[2, 2], -1.0, 1.0)) - self._cam_tilt_deg = float(np.degrees(np.arccos(axis_z))) - he_path = str(self.get_parameter("handeye_file").value) - if self.handeye_mode == "eye_to_hand": - self.get_logger().warn( - f"HANDEYE yaml={he_path} mode=eye_to_hand " - f"cam_in_base=({t_he[0]:.3f},{t_he[1]:.3f},{t_he[2]:.3f})m " - f"— 悬停用 cam→基座,不乘法兰" - ) - else: - self.get_logger().warn( - f"HANDEYE yaml={he_path} " - f"cam_in_flange=({t_he[0]*1000:.1f},{t_he[1]*1000:.1f},{t_he[2]*1000:.1f})mm " - f"optical_vs_flangeZ={self._cam_tilt_deg:.1f}deg " - f"— 悬停使用这个 T,而不是用 TF 查询" - ) - if self.d435_move_only: - self.get_logger().warn( - "d435_move_only:只跑 D435 单次位移。到位停稳后钉住," - "不交 D405;locked 只用来结束一阶段,不进二阶段" - ) - - self.pid_x = PidController( - float(self.get_parameter("kp_xy").value), - float(self.get_parameter("ki_xy").value), - float(self.get_parameter("kd_xy").value), - i_limit=float(self.get_parameter("i_limit_xy").value), - out_limit=self.v_max_xy, - i_sep_thresh=i_sep_pos, - ) - self.pid_y = PidController( - float(self.get_parameter("kp_xy").value), - float(self.get_parameter("ki_xy").value), - float(self.get_parameter("kd_xy").value), - i_limit=float(self.get_parameter("i_limit_xy").value), - out_limit=self.v_max_xy, - i_sep_thresh=i_sep_pos, - ) - self.pid_z = PidController( - float(self.get_parameter("kp_z").value), - float(self.get_parameter("ki_z").value), - float(self.get_parameter("kd_z").value), - i_limit=float(self.get_parameter("i_limit_z").value), - out_limit=self.v_max_z, - i_sep_thresh=i_sep_pos, - ) - - self._control_cbg = ReentrantCallbackGroup() - self._state_cbg = MutuallyExclusiveCallbackGroup() - - self._lock = threading.Lock() - self._p_meas = np.zeros(3, dtype=float) - self._stamp_sec = -1.0 - self._last_seen_time = -1.0 # 单调时钟,每次收到 PointStamped 都会更新 - self._have_target = False - self._target_lost_flag = True - self._v_raw = np.zeros(3, dtype=float) - self._v_filt = np.zeros(3, dtype=float) # 线速度低通(相机系) - self._wz_filt = 0.0 # 预留的角速度 z 低通 - self._wz_raw = 0.0 - self._zeroed = True - self._last_js: Optional[JointState] = None - self._ctrl_count = 0 - self._ctrl_t0 = self.get_clock().now() - self._dq_hist: Deque[np.ndarray] = deque(maxlen=self.dq_window_size) - self._reacq_mono = 0.0 - self._xy_in_dead = False - self._v_xy_cmd = np.zeros(2, dtype=float) - self._p_feat_base: Optional[np.ndarray] = None - self._he_cmp_done = False - self._feat_kf = KalmanFilter3D(q_pos=2.0e-3, q_vel=1.5e-1, r_pos=4.0e-4) - # 大跳变确认门限:单帧不采信(见 feature_jump_guard 的注释与真机反例)。 - self._jump_gate = FeatureJumpGate(self.predict_jump_m, self.jump_confirm_frames) - # 只有当法兰 Z 已经落到锁定平面上(深度新鲜)才开启 XY 悬停。 - self._xy_armed = bool(self.ee_z_m <= 0.0) - self._z_hold: Optional[float] = None - # Seek(搜索)状态:在锁定高度且没有目标时扫描工件。 - self._seek_t0 = 0.0 - self._seek_theta = 0.0 - self._seek_origin = (0.0, 0.0) - self._seek_warned = False - self._hover_ixy = np.zeros(2, dtype=float) # 悬停积分(抗死区) - - point_topic = str(self.get_parameter("point_topic").value) - point_qos = QoSProfile( - history=HistoryPolicy.KEEP_LAST, - depth=5, - reliability=ReliabilityPolicy.BEST_EFFORT, - ) - self.create_subscription( - PointStamped, - point_topic, - self._on_point, - point_qos, - callback_group=self._state_cbg, - ) - if self._hybrid: - oh_topic = str(self.get_parameter("overhead_k0_topic").value) - conf_topic = str(self.get_parameter("wrist_conf_topic").value) - self.create_subscription( - PointStamped, - oh_topic, - self._on_overhead_k0, - point_qos, - callback_group=self._state_cbg, - ) - self.create_subscription( - Float32, - conf_topic, - self._on_wrist_conf, - 5, - callback_group=self._state_cbg, - ) - self.create_subscription( - JointState, - "joint_states", - self._on_js, - 10, - callback_group=self._control_cbg, - ) - # 厂家 tcp_pose(WORLD)。D435 MoveL 必须在这上面加 ROS 相对位移。 - self._tcp_world: Optional[Tuple[float, float, float]] = None - self._t_tcp: Optional[float] = None - prefix_ns = str(self.get_parameter("joint_prefix").value or "").rstrip("_") - self.robot_states_topic = f"/{prefix_ns.replace('-', '_')}/flexiv_robot_states" - if RobotStates is not None: - self.create_subscription( - RobotStates, - self.robot_states_topic, - self._on_servo_robot_states, - qos_profile_sensor_data, - callback_group=self._state_cbg, - ) - else: - self.get_logger().error( - "没有 flexiv_msgs.RobotStates,D435 粗定位不能读厂家 tcp_pose," - "不许退回杀栈 MoveL" - ) - - cmd_qos = QoSProfile( - history=HistoryPolicy.KEEP_LAST, - depth=1, - reliability=qos_profile_system_default.reliability, - durability=qos_profile_system_default.durability, - ) - self._twist_pub = self.create_publisher( - Twist, "visual_servo/cmd_vel", cmd_qos - ) - # 一阶段锁定信号(串联编排器用它判断可以进入二阶段) - self._lock_pub = self.create_publisher(Bool, "visual_servo/locked", 1) - # TRANSIENT_LOCAL:感知节点比伺服晚起来,默认 QoS 会丢掉启动时那一拍 - # True,感知就永远停在「还没到锁高」、D435 不拍。两边必须同一份 QoS。 - self._z_lock_pub = self.create_publisher( - Bool, "visual_servo/z_locked", z_locked_qos() - ) - # 感知用它挡住「平移半路再拍一张」。晚启动也能拿到当前值。 - self._d435_cmd_pub = self.create_publisher( - Bool, "visual_servo/d435_commanding", z_locked_qos() - ) - self._d435_cmd_sent: Optional[bool] = None - self._z_locked_sent: Optional[bool] = None - self._z_lock_pub_mono = 0.0 - self._lock_since: Optional[float] = None - self._locked = False - self._lock_pub_t = 0.0 - traj_topic = str(self.get_parameter("traj_topic").value) - self._traj_pub = self.create_publisher(JointTrajectory, traj_topic, cmd_qos) - self._jtc_cbg = ReentrantCallbackGroup() - self._jtc = ActionClient( - self, - FollowJointTrajectory, - str(self.get_parameter("action_name").value), - callback_group=self._jtc_cbg, - ) - - self._tf = Buffer() - TransformListener(self._tf, self, spin_thread=True) - - control_hz = max(50.0, float(self.get_parameter("control_hz").value)) - self._ctrl_dt = 1.0 / control_hz - self.create_timer( - self._ctrl_dt, - self._control_tick, - callback_group=self._control_cbg, - ) - - mode = "控制已开启" if self.enable_control else "仅 cmd_vel" - arm = self.arm_label or self.ee_frame - self.get_logger().info( - f"伺服就绪 [{arm}] [{mode}] {control_hz:.0f}Hz watchdog={self.watchdog_timeout:.2f}s " - f"vel_lpf_α={self.vel_lpf_alpha:.2f} dq_win={self.dq_window_size} " - f"lock_z={self.ee_z_m:.3f}m (site servo.ee_z_m) " - f"xy_track={self.xy_track} cam_tilt={self._cam_tilt_deg:.1f}° " - f"cam_in_flange=({t_he[0]*1000:.0f},{t_he[1]*1000:.0f},{t_he[2]*1000:.0f})mm " - f"hover_off_ee_xy=({self.hover_offset_ee_xy[0]*1000:.1f},{self.hover_offset_ee_xy[1]*1000:.1f})mm " - f"base EE xy=({self.ee_x_m:.3f},{self.ee_y_m:.3f}) " - f"hold_xy={int(self.ee_hold_xy)} down={int(self.ee_vertical_down)} " - f"XY_after_lock_z±{self.approach_xy_gate_m*1000:.0f}mm" - ) - self._publish_z_locked(self._xy_armed) - self._publish_d435_commanding(False) - - def _publish_z_locked(self, locked: bool) -> None: - """法兰是否在锁高带里。只记日志,不拦 D435。 - - 状态没变也每 0.5 s 再发一次:只发一次的话,晚订阅的感知收不到。 - """ - locked = bool(locked) - now = time.monotonic() - changed = self._z_locked_sent is not locked - if (not changed) and (now - self._z_lock_pub_mono) < 0.5: - return - self._z_locked_sent = locked - self._z_lock_pub_mono = now - self._z_lock_pub.publish(Bool(data=locked)) - if not changed: - return - if locked: - self.get_logger().info("锁高已到位") - else: - self.get_logger().info("离开锁高带 —— 平移仍保持当前高度,不改去追锁高") - - def _publish_d435_commanding(self, commanding: bool) -> None: - """正在用 D435 那一个点赶路。感知看到 True 就不再拍第二张。""" - commanding = bool(commanding) - if self._d435_cmd_sent is commanding: - return - self._d435_cmd_sent = commanding - self._d435_cmd_pub.publish(Bool(data=commanding)) - - def _on_js(self, msg: JointState) -> None: - self._last_js = msg - - def _on_servo_robot_states(self, msg) -> None: - """缓存厂家 ``tcp_pose``(WORLD)。名字避开其它节点的 ``_on_robot_states``。""" - p = msg.tcp_pose.pose.position - xyz = (float(p.x), float(p.y), float(p.z)) - if not all(math.isfinite(v) for v in xyz): - return - self._tcp_world = xyz - self._t_tcp = time.monotonic() - - def _fresh_tcp_world(self): - """最近 0.5s 的厂家 TCP [m]。过期/没有 → None,不许用旧值凑。""" - if self._tcp_world is None or self._t_tcp is None: - return None - if time.monotonic() - float(self._t_tcp) > 0.5: - return None - return self._tcp_world - - def _on_wrist_conf(self, msg: Float32) -> None: - c = float(msg.data) - with self._lock: - self._wrist_conf = None if not np.isfinite(c) else c - self._wrist_conf_t = time.monotonic() - - def _on_overhead_k0(self, msg: PointStamped) -> None: - """D435 一次性:点已经在基座系。再乘腕部 T 会差几十厘米还看起来合理。""" - if not self._hybrid: - return - if not self.enable_control: - # 仅观察时不占臂:占着 d435_commanding 会把感知的预览框也卡死。 - self.get_logger().info( - "仅观察:收到 D435 点,不占臂、不挡 D405 预览", - throttle_duration_sec=2.0, - ) - return - fid = str(msg.header.frame_id or "").strip() - if fid and self.base_frame and fid != self.base_frame: - self.get_logger().error( - f"overhead_k0 的 frame_id={fid!r} 不是基座 {self.base_frame!r} —— 丢弃," - "不许当相机系点去乘手眼 T" - ) - return - p_base = np.array( - [float(msg.point.x), float(msg.point.y), float(msg.point.z)], dtype=float - ) - if not np.all(np.isfinite(p_base)): - return - if not self._feat_workspace_ok(p_base): - m = float(self.feat_ws_margin_m) - self.get_logger().warn( - f"D435 一次性点 ({p_base[0]:.3f},{p_base[1]:.3f}) 在工作盒外 " - f"(x[{self.ws_min[0]:.2f},{self.ws_max[0]:.2f}] " - f"y[{self.ws_min[1]:.2f},{self.ws_max[1]:.2f}] ±{m:.2f})" - "—— 丢弃,不发轨迹。这不是起步加速度。" - ) - return - with self._lock: - busy = self._track_source == "overhead" and not self._d435_settled - if busy: - self.get_logger().info( - "D435 这一段还没走完,不再换目标", - throttle_duration_sec=1.0, - ) - return - now_m = time.monotonic() - now_sec = self.get_clock().now().nanoseconds * 1e-9 - with self._lock: - self._p_feat_base = p_base.copy() - self._p_meas[:] = 0.0 - self._p_meas[2] = self.z_ref - self._feat_kf.reset(p_base, now_m) - self._jump_gate.reset() - self._have_target = True - self._target_lost_flag = False - self._track_source = "overhead" - self._d435_settled = False - self._d435_vendor_done = False - self._d435_vendor_busy = False - self._d435_vendor_failed = False - self._d435_vendor_tries = 0 - self._d435_retry_after = 0.0 - self._overhead_t = now_m - self._last_seen_time = now_m - self._stamp_sec = now_sec - self._seek_t0 = 0.0 - self._seek_warned = False - self._still.reset() - self._arrive.reset() - self._d435_exec_until = 0.0 - self._d435_pinned = False - self._d435_sent = False - self._d435_last_dist = None - self._d435_give_up = False - self._d435_inflight = False - self._d435_settle_until = 0.0 - self._d435_last_z_err = None - self._d435_z_stall = 0 - self._d435_remeasure_log = False - self._d435_vert_done = False - self._d435_full_done = False - self._d435_fix_done = False - self._d435_vendor_done = False - self._d435_vendor_busy = False - self._d435_vendor_failed = False - self._d435_vendor_tries = 0 - self._d435_retry_after = 0.0 - self._publish_d435_commanding(True) - self.get_logger().info( - f"D435 一次性设定 feat_base=({p_base[0]:.3f},{p_base[1]:.3f},{p_base[2]:.3f}) " - f"—— 走到这个点并停稳之前,不下发 D405 的点" - ) - - def _on_point(self, msg: PointStamped) -> None: - """新的视觉测量 —— 给看门狗“上弦”并清除丢失标志。""" - if ( - self._hybrid - and self._wrist_conf is not None - and wrist_needs_handoff(self._wrist_conf, self.wrist_handoff_conf) - ): - # 已经收到腕部 conf 且低于门槛:这条 D405 点不能当跟踪源。 - # conf 还是 None = 感知还没报到,不要把开场几帧也丢掉。 - return - with self._lock: - using_d435 = self._track_source == "overhead" - settled = self._d435_settled - # 到位必须是 MoveL 已经结束,不能把「还在赶路、XY 进了 15mm」当成到位。 - # 停稳计时也不许在这段路上累计,否则 D405 会在 D435 没走完时就开始带臂晃。 - if self._hybrid and not d405_commands_arm( - using_d435=using_d435, - arrived=(self._d435_vendor_done and not self._d435_vendor_busy), - settled=settled, - move_only=self.d435_move_only, - ): - # 推理不关。没到「法兰停稳」之前,这帧不能进运动控制。 - self.get_logger().info( - "D405 输出已截断:D435 厂家移动还没结束或法兰还没停稳", - throttle_duration_sec=1.0, - ) - return - p_cam = np.array( - [float(msg.point.x), float(msg.point.y), float(msg.point.z)], dtype=float - ) - T_ee = self._lookup_T(self.base_frame, self.ee_frame) - p_base = self._feature_in_base(T_ee, p_cam) if T_ee is not None else None - if not self._he_cmp_done: - self._he_cmp_done = True - self._log_handeye_tf_vs_yaml() - now_m = time.monotonic() - rejected = False - with self._lock: - was_lost = self._target_lost_flag - self._track_source = "wrist" - self._p_meas[:] = p_cam - if p_base is not None: - verdict = self._update_feat_track(p_base, was_lost=was_lost, now_m=now_m) - if verdict == ACCEPT: - self._p_feat_base = np.asarray(p_base, dtype=float).copy() - elif verdict == HOLD: - # hold 时下游必须拿到"钉住的旧位置":`_hover_vs_feature` 用的是 - # `_p_feat_base`,这里若照抄 p_base,就等于还是去追那个假点。 - self._p_feat_base = self._feat_kf.position.copy() - else: # REJECT:物理上不合理的点,当"没有目标"处理 - # 关键:必须同时清掉 `_have_target`。只清 `_p_feat_base` 不够 —— - # `_hover_vs_feature` 在 frozen=None 时会退回原始 `p_cam`, - # 那还是去追那个假点。 - self._p_feat_base = None - self._have_target = False - rejected = True - self._stamp_sec = float(msg.header.stamp.sec) + 1e-9 * float( - msg.header.stamp.nanosec - ) - self._last_seen_time = now_m - if not rejected: - self._have_target = True - self._target_lost_flag = False - self._seek_t0 = 0.0 # 已捕获目标 —— 重置 seek,供下次使用 - self._seek_warned = False - if msg.header.frame_id: - self.camera_frame = msg.header.frame_id - if p_base is not None: - v = self._feat_kf.velocity if self._feat_kf.initialized else np.zeros(3) - self.get_logger().info( - f"HANDEYE snap feat_base=({p_base[0]:.3f},{p_base[1]:.3f},{p_base[2]:.3f}) " - f"v_xy=({v[0]:+.3f},{v[1]:+.3f}) " - f"p_cam=({p_cam[0]:.3f},{p_cam[1]:.3f},{p_cam[2]:.3f})", - throttle_duration_sec=0.5, - ) - if was_lost: - self._reacq_mono = time.monotonic() - self.get_logger().info( - "已重新捕获目标 —— 继续伺服", - throttle_duration_sec=0.5, - ) - - def _feat_workspace_ok(self, p: np.ndarray) -> bool: - """特征点 XY 是否落在工作盒内(含余量)。 - - 只查 XY、**不查 Z**:特征点是**工件表面点**(z≈0.022,贴台面),而工作盒 - 的 z 区间(0.18~0.65)是给**法兰**用的,两者不是一回事。 - """ - m = float(self.feat_ws_margin_m) - return bool( - self.ws_min[0] - m <= float(p[0]) <= self.ws_max[0] + m - and self.ws_min[1] - m <= float(p[1]) <= self.ws_max[1] + m - ) - - def _slow_xy_limit(self, nerr: float, v_xy: float) -> tuple: - """远处限速:目标离得超过 ``slow_far_m`` 就把 XY 速度上限降到 ``v_slow_xy``。 - - 返回 ``(上限, 原因或 None)``。单拎出来是为了能**离线测**(不需要 ROS 实体)。 - - 为什么需要(2026-10-08 真机,一阶段):被一串高置信度假 k0(conf 0.53~0.73) - 顶掉后,伺服在 0.7s 内以 ``v_max_xy``=0.45m/s 把臂从 home ``(0.686,-0.113)`` - 带到工作盒角落 ``(0.083,-0.515)``,之后 148s 全是"检测漏检"、150s 超时。 - - 这道限速**与"目标真不真"无关** —— 它不试图判断真假,只保证"追错时走得少": - 真目标(实测真 k0 离 145mm)只是晚 ~1.8s 到位;假目标最多把臂带走几厘米。 - """ - if nerr > self.slow_far_m: - return min(float(v_xy), self.v_slow_xy), ( - f"目标离 {nerr*1000:.0f}mm > {self.slow_far_m*1000:.0f}mm" - ) - return float(v_xy), None - - def _update_feat_track( - self, p_base: np.ndarray, *, was_lost: bool, now_m: float - ) -> str: - """把一次特征观测并入 ``_feat_kf``;返回 :data:`ACCEPT` / ``HOLD`` / ``REJECT``。 - - 为什么要单拎出来(2026-10-08 真机实测):一阶段已经收敛到 9mm 之后,模型在 - 运动模糊下误检出一连串"假工件"(框置信度 0.13~0.47,位置各不相同),伺服每 - 个都追 —— 机械臂被带到工作盒边缘卡住(`ee_xy` 从 0.68,-0.12 漂到 0.07,-0.50, - 横移 0.62m)。两道独立防线: - - 1. **跳变确认**(:class:`FeatureJumpGate`):单帧大跳只 hold、不动;乱跳 - (每帧不同位置)永远确认不了 ⇒ 这一串假点全被挡掉。 - 2. **物理合理性**:跑出工作盒 XY 的点直接 reject —— 实测假点落在基座后方 - ``(-0.10,-0.65)``,而工件在 ``(0.5,-0.12)``。 - - 调用方必须在 ``self._lock`` 内调用(会改 ``_feat_kf`` 与 ``_jump_gate``)。 - """ - p = np.asarray(p_base, dtype=float).reshape(3) - - # --- 防线 2:物理合理性(先判,因为它在"单帧 vs 多帧"之外) --- - if not self._feat_workspace_ok(p): - self._feat_kf.zero_velocity() - self._jump_gate.reset() - self.get_logger().warn( - f"特征点 ({p[0]:.3f},{p[1]:.3f}) 在工作盒外" - f"(x[{self.ws_min[0]:.2f},{self.ws_max[0]:.2f}] " - f"y[{self.ws_min[1]:.2f},{self.ws_max[1]:.2f}] ±{self.feat_ws_margin_m:.2f})" - "—— 判为误检,当「没有目标」处理,不去追", - throttle_duration_sec=1.0, - ) - return REJECT - - # --- 防线 1:跳变确认 --- - if was_lost or (not self._feat_kf.initialized): - # 刚重新捕获:没有可信的历史位置可比,直接以新观测重定位。 - self._feat_kf.reset(p, now_m) - self._jump_gate.reset() - return ACCEPT - verdict = self._jump_gate.update(p[:2], self._feat_kf.position[:2]) - if verdict == FeatureJumpGate.JUMP: - self._feat_kf.reset(p, now_m) - return ACCEPT - if verdict == FeatureJumpGate.NEAR: - self._feat_kf.advance(now_m) - self._feat_kf.update(p) - return ACCEPT - - # HOLD:本次观测不采信。位置钉住不动,并把速度清零 —— 否则旧速度会把 - # "不动"变成"按旧速度匀速跑掉",正是要避免的那件事。 - self._feat_kf.zero_velocity() - dxy = float( - np.hypot(p[0] - self._feat_kf.position[0], p[1] - self._feat_kf.position[1]) - ) - self.get_logger().warn( - f"特征点疑似假跳 {dxy * 1000:.0f}mm > {self.predict_jump_m * 1000:.0f}mm" - f"(连续 {self._jump_gate.hold_frames} 帧)—— 本次不采信,位置保持不动;" - f"连续 {self._jump_gate.confirm_frames} 帧一致才认", - throttle_duration_sec=1.0, - ) - return HOLD - - def _reset_motion_state(self) -> None: - """硬停内部状态:I=0、滤波速度=0、dq 窗口清空。""" - self.pid_x.reset() - self.pid_y.reset() - self.pid_z.reset() - self._v_raw[:] = 0.0 - self._v_filt[:] = 0.0 - self._wz_raw = 0.0 - self._wz_filt = 0.0 - self._v_xy_cmd[:] = 0.0 - self._p_feat_base = None - self._feat_kf.initialized = False - self._jump_gate.reset() - self._dq_hist.clear() - - def _pub_zero_twist(self) -> None: - tw = Twist() - self._twist_pub.publish(tw) - - def _watchdog_trip(self, reason: str) -> None: - """优先级 1 的硬停:不外推、指令置零、轨迹增量为零。""" - if not self._target_lost_flag: - self.get_logger().warn(f"看门狗急停:{reason}") - self._target_lost_flag = True - self._reset_motion_state() - self._zeroed = True - self._pub_zero_twist() - if self.enable_control: - self._send_hold() - - def _control_tick(self) -> None: - now_msg = self.get_clock().now() - now_sec = float(now_msg.nanoseconds) * 1e-9 - now_mono = time.monotonic() - dt = self._ctrl_dt - - self._ctrl_count += 1 - if self._ctrl_count >= int(round(1.0 / self._ctrl_dt)): - elapsed = (now_msg - self._ctrl_t0).nanoseconds * 1e-9 - hz = self._ctrl_count / max(elapsed, 1e-6) - self.get_logger().info(f"cmd_vel 速率约 {hz:.1f} Hz", throttle_duration_sec=1.0) - self._ctrl_count = 0 - self._ctrl_t0 = now_msg - - with self._lock: - have = self._have_target - stamp = self._stamp_sec - last_seen = self._last_seen_time - p_meas = self._p_meas.copy() - lost = self._target_lost_flag - source = self._track_source - if self._hybrid: - self._tick_d435_arrive() - self._tick_still_lock() - if self.enable_control and self._d435_oneshot_holds_the_arm(): - return - if ( - self.enable_control - and self._hybrid - and self._locked - and not self.d435_move_only - ): - # 框心已经对准并停稳。实时预测到此为止,臂钉住,等二阶段精拍一次。 - self._execute_twist(np.zeros(3, dtype=float), p_cam=None, hold_xy=True) - return - - # 还没有目标、人又停在锁高下面:只抬一次 Z。已经有 D435 点或腕部点之后 - # 不再插这一步 —— 平移途中改高度会抖,也会把正在走的 XY 掐掉。 - if self.enable_control and self.ee_z_m > 0.0 and not have: - T_ee0 = self._lookup_T(self.base_frame, self.ee_frame) - if T_ee0 is None: - return - z_now = float(T_ee0[2, 3]) - self._update_xy_arm(z_now) - if not self._xy_armed: - self.get_logger().info( - f"先回锁高 {self.ee_z_m:.3f}m 当前={z_now:.3f}m(还没有目标,只动 Z)", - throttle_duration_sec=1.0, - ) - self._target_lost_flag = False - self._execute_twist(np.zeros(3, dtype=float), p_cam=None, hold_xy=True) - self._lock_feedback(False) - return - - # ----- Seek:已在锁定高度但还没有有效目标。eye-in-hand 相机只能看到 - # 一小块区域,所以扫描工作区(先漂到标称工作 XY,再向外螺旋)直到工件进入视野。 - if ( - self.enable_control - and self.seek_enabled - and (not self._hybrid) # 混合模式用 D435 一次性,不螺旋搜 - and self.ee_z_m > 0.0 - and not have - and self._xy_armed - ): - T_ee0 = self._lookup_T(self.base_frame, self.ee_frame) - if T_ee0 is None: - return # TF 还没就绪 —— 等待,不要触发保持急停 - v_seek = self._seek_velocity(T_ee0[:3, 3]) - if v_seek is None: - # 超时了 —— 放弃搜索,原地保持 - if not self._seek_warned: - self._seek_warned = True - self.get_logger().warn( - f"seek 超时 {self.seek_timeout:.0f}s —— 没找到工件。" - "保持当前位置。请把工件放到桌面视野内,或调大 " - "seek_radius_max_m / 检查相机安装与手眼标定。" - ) - self._lock_feedback(False) - self._pub_zero_twist() - self._send_hold() - return - self.get_logger().info( - f"寻找工件…… ee_xy=({T_ee0[0,3]:.3f},{T_ee0[1,3]:.3f}) " - f"v=({v_seek[0]:+.3f},{v_seek[1]:+.3f})", - throttle_duration_sec=1.0, - ) - self._target_lost_flag = False # seek 期间允许执行 - self._execute_twist( - np.zeros(3, dtype=float), p_cam=None, v_base_override=v_seek - ) - self._lock_feedback(False) - return - - # ----- 第 1 项:看门狗(按接收时间)—— 数据过期就冻结所有运动 ----- - if (not have) or last_seen < 0.0: - self._lock_feedback(False) - self._watchdog_trip("还没有收到 PointStamped") - return - - seen_age = now_mono - last_seen - stamp_age = now_sec - stamp if stamp >= 0.0 else 1e9 - if self._hybrid and source == "overhead": - # 一次性设定一直用到 D405 接上。按秒数冻住的话,臂还在平移就被看门狗 - # 掐掉,D435 又不再拍,停在半路。 - stamp_age = 0.0 - seen_age = 0.0 - elif seen_age > self.watchdog_timeout or stamp_age > self.lost_timeout: - self._watchdog_trip( - f"目标丢失 seen_age={seen_age:.3f}s stamp_age={stamp_age:.3f}s" - ) - self._lock_feedback(False) - return - - # 检测框冻结 / USB 卡住:锁住关节,不要继续按上一个误差驱动。 - # D435 一次性不是流,保持设定直到 hold 超时或 D405 接回。 - stale = max(0.15, float(self.stale_hold_sec)) - if (not (self._hybrid and source == "overhead")) and ( - seen_age > stale or stamp_age > stale - ): - self.get_logger().info( - f"过期保持 seen_age={seen_age:.2f}s —— 不跟踪冻结的检测框", - throttle_duration_sec=1.0, - ) - self._v_raw[:] = 0.0 - self._v_filt[:] = 0.0 - self._lock_feedback(False) - self._pub_zero_twist() - if self.enable_control: - self._send_hold() - return - - if lost: - # 本应在 _on_point 里清掉;这里再加一道保险 - self._lock_feedback(False) - self._pub_zero_twist() - return - - # Hover 直接使用视觉三维点。不要把 cmd_vel(坐标系不对) - # 叠加到 p_cam 上 —— 那样会把目标从工件上带跑。 - p = p_meas.copy() - if self.xy_track == "lookat": - dt_lat = float(np.clip(stamp_age, 0.0, self.max_extrap)) - p = p_meas + self._v_filt * dt_lat - - ex, ey = float(p[0]), float(p[1]) - ez = float(p[2] - self.z_ref) - r_xy_raw = float(np.hypot(ex, ey)) - look = None - T_ee_now = None - if self.ee_z_m > 0.0: - T_ee_now = self._lookup_T(self.base_frame, self.ee_frame) - if T_ee_now is not None: - self._update_xy_arm(float(T_ee_now[2, 3])) - if self.ee_z_m > 0.0 and self._xy_armed: - if T_ee_now is not None: - look = self._xy_track_vs_feature(T_ee_now, p) - if look is not None: - ex, ey = float(look[0][0]), float(look[0][1]) - r_xy_raw = float(np.hypot(ex, ey)) - elif self.ee_z_m > 0.0: - ex = ey = 0.0 - r_xy_raw = 0.0 - xy_dead = self._xy_deadzone(r_xy_raw) - clip_xy = max(0.03, float(self.e_xy_clip)) - r_xy = r_xy_raw - if r_xy > clip_xy: - s = clip_xy / r_xy - ex *= s - ey *= s - r_xy = clip_xy - # 在 base 系里保持法兰高度时,相机深度 Z 就不再使用 - z_dead = True if self.ee_z_m > 0.0 else (abs(ez) <= self.deadzone_z_m) - if xy_dead: - ex = ey = 0.0 - self.pid_x.reset() - self.pid_y.reset() - if z_dead: - ez = 0.0 - self.pid_z.reset() - - # ----- 第 2 项:带积分分离的 PID(分离逻辑在 PidController 内部) ----- - v_des = np.array( - [ - 0.0 if self.ee_hold_xy else self.pid_x.update(ex, float(p[0]), dt), - 0.0 if self.ee_hold_xy else self.pid_y.update(ey, float(p[1]), dt), - 0.0 if self.ee_z_m > 0.0 else self.pid_z.update(ez, float(p[2]), dt), - ], - dtype=float, - ) - if xy_dead: - v_des[0] = v_des[1] = 0.0 - if z_dead: - v_des[2] = 0.0 - v_des[:2] = _saturate_vec(v_des[:2].copy(), self.v_max_xy) - v_des[2] = float(np.clip(v_des[2], -self.v_max_z, self.v_max_z)) - - # base 平面模式:绝不指令相机 +Z(那会直接扎进工件里) - if self.ee_z_m > 0.0: - v_des[2] = 0.0 - else: - z_meas = float(p[2]) - too_close = z_meas < self.z_min_m - off_center = r_xy > self.approach_xy_gate_m - if v_des[2] > 0.0 and (too_close or off_center): - v_des[2] = 0.0 - self.pid_z.reset() - elif v_des[2] > 0.0: - v_des[2] = min(v_des[2], self.v_approach_z) - if too_close: - v_des[2] = min(v_des[2], 0.0) - if z_meas < (self.z_min_m - 0.02): - v_des[2] = min(v_des[2], -0.03) - - # 先对原始期望速度做加速度限制,再做低通滤波 - dv = v_des - self._v_raw - n_dv = float(np.linalg.norm(dv)) - dv_max = self.a_max * dt - if n_dv > dv_max > 0.0: - dv *= dv_max / n_dv - self._v_raw = self._v_raw + dv - - # ----- 第 3 项:对线速度做一阶低通(+ 预留的 wz) ----- - a = self.vel_lpf_alpha - self._v_filt = a * self._v_raw + (1.0 - a) * self._v_filt - # 角速度目前预留(PBVS 当前只做线速度);仍做滤波以保持接口完整 - self._wz_raw = 0.0 - aw = self.wz_lpf_alpha - self._wz_filt = aw * self._wz_raw + (1.0 - aw) * self._wz_filt - - if xy_dead and z_dead: - self._v_raw[:] = 0.0 - self._v_filt[:] = 0.0 - self._wz_filt = 0.0 - - v_cam = self._v_filt.copy() - if self.ee_z_m > 0.0: - v_cam[2] = 0.0 - self._v_filt[2] = 0.0 - self._v_raw[2] = 0.0 - elif v_cam[2] > 0.0 and (float(p[2]) < self.z_min_m or r_xy > self.approach_xy_gate_m): - v_cam[2] = 0.0 - self._v_filt[2] = 0.0 - self._v_raw[2] = 0.0 - elif v_cam[2] > 0.0: - v_cam[2] = min(v_cam[2], self.v_approach_z) - self._v_filt[2] = v_cam[2] - - tw = Twist() - tw.linear.x = float(v_cam[0]) - tw.linear.y = float(v_cam[1]) - tw.linear.z = float(v_cam[2]) - tw.angular.z = float(self._wz_filt) - self._twist_pub.publish(tw) - - need_base = self.ee_z_m > 0.0 or self.ee_vertical_down or self.ee_hold_xy - if xy_dead and z_dead: - self._lock_feedback(True) # 串联信号:活目标 + 死区驻留 = 收敛 - self.get_logger().info( - f"死区保持 |e_xy|={r_xy_raw*1000:.1f}mm ez={ez*1000:.1f}mm", - throttle_duration_sec=1.0, - ) - if self.enable_control: - # 若高度 / 垂直朝下稍有偏差仍要修正,否则彻底冻结 - if need_base: - self._execute_twist(np.zeros(3, dtype=float), p_cam=p, hold_xy=True) - elif not self._zeroed: - self._dq_hist.clear() - self._send_hold() - self._zeroed = True - return - - self._zeroed = False - self._lock_feedback(False) # 仍在跟踪收敛中 - extra = "" - if look is not None: - extra = ( - f" {self.xy_track}=({look[2][0]:.3f},{look[2][1]:.3f})" - f" feat=({look[1][0]:.3f},{look[1][1]:.3f})" - ) - self.get_logger().info( - f"twist 相机系 v=({v_cam[0]:+.3f},{v_cam[1]:+.3f},{v_cam[2]:+.3f}) " - f"|e_xy|={r_xy_raw*1000:.0f}mm ez={ez*1000:.0f}mm age={stamp_age*1000:.0f}ms" - f"{extra}", - throttle_duration_sec=0.5, - ) - if self.enable_control and ( - float(np.linalg.norm(v_cam)) > 1e-4 or need_base or r_xy_raw > self.deadzone_m - ): - self._execute_twist(v_cam, p_cam=p) - - def _e_stop(self, reason: str) -> None: - self.get_logger().warn(f"急停:{reason}") - self._watchdog_trip(reason) - - def _R_cam_to_base(self, T_ee: np.ndarray) -> np.ndarray: - return self._T_cam_in_base(T_ee)[:3, :3] - - def _T_ee_cam(self) -> np.ndarray: - # 始终使用标定出的 yaml。TF 只用于 RViz / 打印做核对。 - return np.array(self.T_cam_to_gripper, dtype=float) - - def _T_cam_in_base(self, T_ee: np.ndarray) -> np.ndarray: - return cam_to_base_T(self.T_cam_to_gripper, T_ee, self.handeye_mode) - - def _log_handeye_tf_vs_yaml(self) -> None: - t_yaml = np.asarray(self.T_cam_to_gripper[:3, 3], dtype=float) - parent = ( - self.base_frame if self.handeye_mode == "eye_to_hand" else self.ee_frame - ) - T_tf = self._lookup_T(parent, self.handeye_child) - if T_tf is None: - self.get_logger().warn( - "HANDEYE TF 查询失败(无妨)—— 伺服使用 yaml " - f"t=({t_yaml[0]*1000:.1f},{t_yaml[1]*1000:.1f},{t_yaml[2]*1000:.1f})mm" - ) - return - t_tf = T_tf[:3, 3] - d = float(np.linalg.norm(t_tf - t_yaml)) - self.get_logger().warn( - f"HANDEYE yaml t=({t_yaml[0]*1000:.1f},{t_yaml[1]*1000:.1f},{t_yaml[2]*1000:.1f})mm " - f"TF t=({t_tf[0]*1000:.1f},{t_tf[1]*1000:.1f},{t_tf[2]*1000:.1f})mm " - f"|Δ|={d*1000:.1f}mm" - ) - if d > 0.015: - self.get_logger().error( - "HANDEYE TF 与 yaml 的偏差 >15mm —— 相机坐标系上挂了重复的父节点? " - "伺服仍然使用 yaml。" - ) - - def _intersect_z( - self, origin: np.ndarray, direction: np.ndarray, z_plane: float - ) -> Optional[np.ndarray]: - d = np.asarray(direction, dtype=float).reshape(3) - n = float(np.linalg.norm(d)) - if n < 1e-9: - return None - d = d / n - if abs(float(d[2])) < 1e-4: - return None - t = (float(z_plane) - float(origin[2])) / float(d[2]) - if t < 0.03 or t > 1.50: - return None - return np.asarray(origin, dtype=float).reshape(3) + t * d - - def _lookat_vs_feature( - self, T_ee: np.ndarray, p_cam: np.ndarray - ) -> Optional[tuple]: - """让特征点居中到图像里所需的 base 系 XY 误差。 - - 30° 的 eye-in-hand 安装:图像中心是光轴打到工作平面上的点, - 而不是法兰的 XY。在固定高度 / 姿态下平移法兰 XY,会把该 look-at 点 - 按 1:1 一起带走。 - """ - T_bc = self._T_cam_in_base(T_ee) - R = T_bc[:3, :3] - o = T_bc[:3, 3] - zc = float(np.clip(float(p_cam[2]), 0.04, 0.60)) - axis = R @ np.array([0.0, 0.0, 1.0], dtype=float) - z_plane = float(o[2] + zc * axis[2]) - p_look = self._intersect_z(o, axis, z_plane) - d_feat = R @ np.array( - [float(p_cam[0]), float(p_cam[1]), zc], dtype=float - ) - p_feat = self._intersect_z(o, d_feat, z_plane) - if p_look is None or p_feat is None: - return None - err = p_feat[:2] - p_look[:2] - return err, p_feat, p_look - - def _feature_in_base(self, T_ee: np.ndarray, p_cam: np.ndarray) -> np.ndarray: - """工件三维点(相机系)→ base 系 XYZ。保持 XYZ 一致。""" - return cam_point_to_base( - p_cam, self.T_cam_to_gripper, T_ee, self.handeye_mode - ) - - def _hover_vs_feature( - self, T_ee: np.ndarray, p_cam: np.ndarray - ) -> Optional[tuple]: - """把法兰(以及同轴的夹爪中心)的 XY 停在 base 系里的工件 XY 上。 - - hover_offset_ee_xy_m 会在法兰坐标系里平移被跟踪点 - (当爪中心不在法兰原点时用它)。RGI 是同轴的:保持 [0,0] 即可。 - 绝不能拿实时的 T_ee 去重复乘一个过期的 p_cam。 - """ - p_ee = np.asarray(T_ee[:3, 3], dtype=float) - off = self.hover_offset_ee_xy - if abs(float(off[0])) > 1e-6 or abs(float(off[1])) > 1e-6: - p_tool = p_ee + T_ee[:3, :3] @ off - else: - p_tool = p_ee - with self._lock: - frozen = None if self._p_feat_base is None else self._p_feat_base.copy() - last_seen = float(self._last_seen_time) - v_kf = self._feat_kf.velocity if self._feat_kf.initialized else np.zeros(3) - p_feat = frozen if frozen is not None else self._feature_in_base(T_ee, p_cam) - lead = 0.0 - if self.predict_enable and frozen is not None and last_seen > 0.0: - age = max(0.0, time.monotonic() - last_seen) - lead = float(np.clip(age + self.predict_sec, 0.0, max(0.04, self.max_extrap))) - v_xy = np.array([float(v_kf[0]), float(v_kf[1])], dtype=float) - n = float(np.hypot(v_xy[0], v_xy[1])) - if n > self.predict_v_max > 0.0: - v_xy *= self.predict_v_max / n - if n > 0.01: - p_feat = p_feat.copy() - p_feat[0] += v_xy[0] * lead - p_feat[1] += v_xy[1] * lead - err = p_feat[:2] - p_tool[:2] - return err, p_feat, p_tool - - def _xy_track_vs_feature( - self, T_ee: np.ndarray, p_cam: np.ndarray - ) -> Optional[tuple]: - if self.xy_track == "lookat": - return self._lookat_vs_feature(T_ee, p_cam) - return self._hover_vs_feature(T_ee, p_cam) - - def _lookup_T(self, parent: str, child: str) -> Optional[np.ndarray]: - try: - tf = self._tf.lookup_transform( - parent, child, rclpy.time.Time(), - timeout=rclpy.duration.Duration(nanoseconds=20_000_000), - ) - except Exception: # noqa: BLE001 - return None - t = tf.transform.translation - o = tf.transform.rotation - T = np.eye(4) - T[:3, :3] = quat_xyzw_to_R([o.x, o.y, o.z, o.w]) - T[:3, 3] = [t.x, t.y, t.z] - return T - - def _current_joints(self) -> Optional[np.ndarray]: - js = self._last_js - if js is None: - return None - m = {n: p for n, p in zip(js.name, js.position)} - try: - return np.array([float(m[n]) for n in self.joint_names], dtype=float) - except KeyError: - return None - - def _xy_deadzone(self, r_xy: float, *, update: bool = True) -> bool: - """滞回:在 deadzone_m 处进入,在 1.6 倍处退出,避免噪声来回抖。""" - enter = max(0.002, float(self.deadzone_m)) - leave = enter * 1.6 - if self._xy_in_dead: - dead = float(r_xy) <= leave - else: - dead = float(r_xy) <= enter - if update: - self._xy_in_dead = dead - return dead - - def _jacobian_at(self, p_ee: np.ndarray): - link_R: List[np.ndarray] = [] - link_p: List[np.ndarray] = [] - for fr in self.link_frames: - Tl = self._lookup_T(self.base_frame, fr) - if Tl is None: - return None - link_R.append(Tl[:3, :3]) - link_p.append(Tl[:3, 3]) - return geometric_jacobian(link_R, link_p, p_ee, RIZON_LINK_AXES) - - def _d435_oneshot_holds_the_arm(self) -> bool: - """D435 粗定位只走厂家 MoveL。停稳后先钉住,等 D405 框心接上再放开。 - - 这段不许再用流式伺服去追 D435 那个点。D405 点被 ``_on_point`` 接上后 - 跟踪源变成腕部,这里返回 False,框心才开始带臂。 - """ - if self._hybrid and self._track_source == "overhead" and self._d435_settled: - return True - if not (self._hybrid and self._track_source == "overhead" and not self._d435_settled): - return False - if not self._d435_plan_lock.acquire(blocking=False): - return True - try: - return self._d435_oneshot_holds_locked() - finally: - self._d435_plan_lock.release() - - def _d435_pin_and_stop_hops(self, why: str) -> None: - if not self._d435_pinned: - self._send_hold() - self._d435_pinned = True - self._d435_give_up = True - self.get_logger().error(why) - - def _sanitize_d435_traj(self, traj: JointTrajectory, min_dt: float = 0.02) -> JointTrajectory: - """与二阶段 ``_sanitize_traj`` 同一条:time_from_start 必须严格递增。""" - last = -min_dt - for p in traj.points: - t = float(p.time_from_start.sec) + float(p.time_from_start.nanosec) * 1e-9 - if t < last + min_dt: - t = last + min_dt - ns = int(round(t * 1e9)) - p.time_from_start.sec = ns // 1_000_000_000 - p.time_from_start.nanosec = ns % 1_000_000_000 - last = t - return traj - - def _d435_send_action( - self, - sched, - tag: str, - hop_m: float, - leftover_m: float, - v_peak: float, - T_move: float, - *, - ee_z: float, - tilt_deg: float, - max_dq: float, - ) -> None: - """先占住 in-flight 再 ``send_goal_async``。话题插点会把这条掐掉。""" - traj = JointTrajectory() - traj.header.stamp.sec = 0 - traj.header.stamp.nanosec = 0 - traj.joint_names = list(self.joint_names) - for qi, qdot, t_sec in sched: - pt = JointTrajectoryPoint() - pt.positions = [float(v) for v in np.asarray(qi).tolist()] - pt.velocities = [float(v) for v in np.asarray(qdot).tolist()] - ns = int(round(max(0.0, float(t_sec)) * 1e9)) - pt.time_from_start.sec = ns // 1_000_000_000 - pt.time_from_start.nanosec = ns % 1_000_000_000 - traj.points.append(pt) - traj = self._sanitize_d435_traj(traj) - goal = FollowJointTrajectory.Goal() - goal.trajectory = traj - self._d435_inflight = True - self._d435_sent = True - self._d435_pinned = False - fut = self._jtc.send_goal_async(goal) - fut.add_done_callback(self._d435_on_goal) - self.get_logger().info( - f"D435 action 下发 {len(sched)} 点 tag={tag} 本跳={hop_m*1000:.0f}mm " - f"剩={leftover_m*1000:.0f}mm v={v_peak*1000:.0f}mm/s T={T_move:.1f}s " - f"ee_z={ee_z:.3f} tilt={tilt_deg:.2f}deg max|Δq|={max_dq:.4f}rad " - f"—— 结果回来之前不再发下一条" - ) - - def _d435_on_goal(self, fut) -> None: - try: - handle = fut.result() - except Exception as exc: - self.get_logger().error(f"D435 JTC 目标回调失败:{exc}") - self._d435_inflight = False - self._d435_give_up = True - return - if handle is None or not bool(getattr(handle, "accepted", False)): - self.get_logger().error("JTC 拒绝了 D435 轨迹") - self._d435_inflight = False - self._d435_give_up = True - return - handle.get_result_async().add_done_callback(self._d435_on_result) - - def _d435_on_result(self, fut) -> None: - ok = True - try: - r = fut.result() - inner = getattr(r, "result", None) - code = getattr(inner, "error_code", 0) if inner is not None else 0 - if code not in (0, None): - ok = False - msg = getattr(inner, "error_string", "") - self.get_logger().error(f"D435 JTC 执行失败 error_code={code} {msg}") - except Exception as exc: - ok = False - self.get_logger().error(f"D435 JTC 结果失败:{exc}") - self._d435_inflight = False - self._d435_settle_until = time.monotonic() + float(D435_SETTLE_S) - self._d435_remeasure_log = True - if not ok: - self._d435_give_up = True - - def _switch_arm_controller(self, activate: bool) -> bool: - """停或重新打开关节轨迹控制器。关节状态广播留着,硬件接口不下线。 - - 用节点里的客户端,不走 ``ros2 service call``:那条命令自己就要一两秒, - 停稳锁定的预算会被它吃掉。 - """ - from controller_manager_msgs.srv import SwitchController - - if self._sw_cli is None: - self._sw_cli = self.create_client( - SwitchController, - "/controller_manager/switch_controller", - callback_group=ReentrantCallbackGroup(), - ) - t0 = time.monotonic() - while not self._sw_cli.service_is_ready(): - if time.monotonic() - t0 > 3.0: - self.get_logger().error("switch_controller 服务不在") - return False - time.sleep(0.02) - req = SwitchController.Request() - if activate: - req.activate_controllers = ["rizon_arm_controller"] - req.deactivate_controllers = [] - else: - req.activate_controllers = [] - req.deactivate_controllers = ["rizon_arm_controller"] - req.strictness = SwitchController.Request.STRICT - req.activate_asap = True - req.timeout.sec = 3 - req.timeout.nanosec = 0 - fut = self._sw_cli.call_async(req) - while not fut.done(): - if time.monotonic() - t0 > 8.0: - self.get_logger().error( - "switch_controller 超时," - + ("没能重新激活" if activate else "没能停掉") - + " rizon_arm_controller" - ) - return False - time.sleep(0.02) - try: - resp = fut.result() - except Exception as exc: - self.get_logger().error(f"switch_controller 失败:{exc}") - return False - if resp is None or not bool(resp.ok): - self.get_logger().error( - "switch_controller 返回失败," - + ("控制器没回来" if activate else "控制器还占着关节") - ) - return False - return True - - def _wait_movel_file(self, seq: int, timeout_s: float, want_done: bool): - lib = ros2_root() / "scripts" / "lib" - if str(lib) not in sys.path: - sys.path.insert(0, str(lib)) - from flexiv_movel_ipc import read_ack, read_done - - t0 = time.monotonic() - while time.monotonic() - t0 < timeout_s: - if want_done: - got = read_done() - if got is not None and int(got[0]) == int(seq): - return bool(got[1]), str(got[2]) - elif read_ack() == int(seq): - return True, "" - time.sleep(0.02) - return False, "" - - def _d435_vendor_movel(self) -> bool: - """D435 这一点:进程内厂家 MoveL,不杀控制栈。 - - 目标 = 当前厂家 TCP + (K0−法兰) 的 ROS XY,``keep_z``。硬件在 MoveL - 期间不灌关节指令,D405 被 ``d435_commanding`` 挡住。不许退回杀栈 - (那会冷启动十几秒,而且两套控制会互抢晃臂)。 - """ - lib = ros2_root() / "scripts" / "lib" - if str(lib) not in sys.path: - sys.path.insert(0, str(lib)) - from flexiv_movel_ipc import write_request - - with self._lock: - goal = None if self._p_feat_base is None else np.asarray( - self._p_feat_base, dtype=float - ).reshape(3).copy() - if goal is None or not np.all(np.isfinite(goal)): - self.get_logger().error("没有 D435 基座点,厂家 MoveL 不下发") - return False - tcp_now = self._fresh_tcp_world() - if tcp_now is None: - self.get_logger().error( - "没有厂家 tcp_pose(话题 " - f"{getattr(self, 'robot_states_topic', '?')} 不新鲜)," - "拒绝杀栈凑 MoveL" - ) - return False - T_ee = self._lookup_T(self.base_frame, self.ee_frame) - if T_ee is None: - self.get_logger().error("没有法兰 TF,D435 相对位移算不出,不下发") - return False - tgt = d435_movel_from_tcp(tcp_now, T_ee[:2, 3], goal[:2]) - if tgt is None: - self.get_logger().error("D435 厂家 TCP 加上相对位移算不出,不下发") - return False - seq = int(time.monotonic() * 1000.0) % 1_000_000_000 - write_request( - seq, - float(tgt[0]), - float(tgt[1]), - float(tgt[2]), - True, - float(D435_VENDOR_MOVEL_VEL_MPS), - ) - self.get_logger().info( - f"D435 进程内 MoveL XY=({goal[0]:.3f},{goal[1]:.3f}) " - f"厂家TCP现=({tcp_now[0]:.4f},{tcp_now[1]:.4f},{tcp_now[2]:.4f}) " - f"MoveL=({tgt[0]:.4f},{tgt[1]:.4f},keep_z) " - f"vel={D435_VENDOR_MOVEL_VEL_MPS * 1000:.0f}mm/s " - "—— 不杀栈;期间不下发 D405" - ) - t0 = time.monotonic() - acked, _why = self._wait_movel_file(seq, 2.0, want_done=False) - if not acked: - self.get_logger().error( - "厂家 MoveL 2s 内没 ack —— 硬件没接 /tmp/flexiv_movel_req。" - "真机环境重建 install/ 后再跑,不许改走杀栈假装成功" - ) - return False - ok, detail = self._wait_movel_file(seq, 90.0, want_done=True) - dt = time.monotonic() - t0 - self.get_logger().info( - f"D435 进程内 MoveL {'完成' if ok else '失败'},耗时 {dt:.2f}s" - + (f" {detail}" if detail else "") - ) - return bool(ok) - - def _d435_oneshot_holds_locked(self) -> bool: - # 混合流程这一段只走厂家 MoveL。下面留下的关节折线不再执行: - # 那条路径会在真机上一段一段启停。 - if self._d435_vendor_failed or self._d435_vendor_busy: - return True - if not self._d435_vendor_done: - if time.monotonic() < float(self._d435_retry_after): - return True - if int(self._d435_vendor_tries) >= int(D435_MOVEL_RETRY): - self._d435_vendor_failed = True - self.get_logger().error( - f"{D435_MOVEL_GAVE_UP} —— 一阶段中止,D405 也不带臂" - ) - return True - # busy 先于调用置位:另一条控制回调不能再开一次 MoveL,也不能提前锁定。 - self._d435_vendor_busy = True - ok = self._d435_vendor_movel() - self._d435_vendor_busy = False - if not ok: - self._d435_vendor_tries = int(self._d435_vendor_tries) + 1 - self._d435_retry_after = time.monotonic() + float(D435_MOVEL_RETRY_S) - self.get_logger().error( - f"厂家 MoveL 第{self._d435_vendor_tries}次没走成," - f"{D435_MOVEL_RETRY_S:.1f}s 后再试" - ) - else: - self._d435_vendor_done = True - self._arrive.reset() - # MoveL 切回关节后 JTC 还握着出发前的悬停。不钉住的话 - # 硬件 3 s 窗口一过,臂会按悬停关节走回去(比交回 D405 的 10 cm 更远)。 - self._send_hold() - self._d435_pinned = True - return True - return True - - def _d435_oneshot_holds_locked_joint(self) -> bool: - """旧的关节折线。混合流程不再调用,源码留着给负向测试对字符串。""" - now = time.monotonic() - if self._d435_inflight: - return True - if now < self._d435_settle_until: - return True - T_ee = self._lookup_T(self.base_frame, self.ee_frame) - q = self._current_joints() - if T_ee is None or q is None: - return True - # 只更新锁高标志。这一段不许把控制权交给回锁高流式。 - self._update_xy_arm(float(T_ee[2, 3])) - with self._lock: - goal = None if self._p_feat_base is None else self._p_feat_base[:2].copy() - if goal is None: - return True - p = np.asarray(T_ee[:3, 3], dtype=float) - dist = float(np.hypot(float(goal[0]) - p[0], float(goal[1]) - p[1])) - arrive = float(self.lock_still_move_m) - z_lock = float(self.ee_z_m) - tilt = flange_tilt_rad(T_ee[:3, :3]) - at = at_lock_height(float(p[2]), z_lock, self.approach_xy_gate_m) - if self._d435_remeasure_log: - self._d435_remeasure_log = False - self.get_logger().info( - f"D435 重测 leftover={dist*1000:.0f}mm " - f"dxy=({(p[0]-goal[0])*1000:+.0f},{(p[1]-goal[1])*1000:+.0f})mm " - f"ee_xy=({p[0]:.3f},{p[1]:.3f}) goal=({goal[0]:.3f},{goal[1]:.3f}) " - f"ee_z={p[2]:.3f} tilt={math.degrees(tilt):.2f}deg" - ) - if self._d435_give_up: - self._d435_pinned = True - return True - hop_max, _cruise_unused = oneshot_hop_limits( - dist, hybrid_cruise_vxy(self.v_slow_xy) - ) - if at and dist <= arrive: - if oneshot_needs_verticalize( - tilt, dist, arrive, already_done=self._d435_vert_done - ): - return self._d435_send_verticalize(q, T_ee, leftover=dist, tilt=tilt) - # action 已经 rest-to-rest。到位成功不许再往话题插 hold,那会再抖一下。 - self._d435_pinned = True - return True - if self._d435_full_done and self._d435_fix_done: - self._d435_pin_and_stop_hops( - f"D435 整段+补刀后还差 {dist*1000:.0f}mm —— 钉住不再补刀" - ) - return True - if at and not oneshot_may_send_another( - dist, self._d435_last_dist, arrive_m=arrive, hop_max_m=hop_max - ): - self._d435_pin_and_stop_hops( - f"D435 上一跳几乎没走近,剩差还是 {dist*1000:.0f}mm " - f"—— 钉住不再补刀,等停稳后锁定进二阶段" - ) - return True - if not at: - z_err = abs(float(p[2]) - z_lock) - if self._d435_last_z_err is not None and z_err > self._d435_last_z_err * 0.8: - self._d435_z_stall += 1 - else: - self._d435_z_stall = 0 - self._d435_last_z_err = z_err - if self._d435_z_stall >= 2: - self._d435_pin_and_stop_hops( - f"D435 收锁高连续无进展 当前={p[2]:.3f}m 期望={z_lock:.3f}m" - ) - return True - if not self._jtc.server_is_ready(): - self.get_logger().warn("D435 等 JTC action 就绪", throttle_duration_sec=1.0) - return True - J = self._jacobian_at(p) - if J is None: - self.get_logger().warn("D435 平移缺 link TF,等下一拍", throttle_duration_sec=1.0) - return True - segs = oneshot_full_segments( - p, goal, z_lock, gate_m=self.approach_xy_gate_m - ) - if not segs: - return True - # XY / 收 Z 都不许夹收垂直:冻结 J 会把腕部转动漏成 Y 过冲。 - wps, planned, asked, tag = oneshot_concat_hold_ori( - q, J, segs, R=T_ee[:3, :3] - ) - if self._d435_full_done: - tag = "fix" - if len(wps) < 2 or asked < 1e-5 or planned < 0.75 * asked: - self._d435_pin_and_stop_hops( - f"D435 平移规划停滞 {planned*1000:.0f}/{asked*1000:.0f}mm —— 钉住不瞎发" - ) - return True - max_dq = float(np.max(np.abs(wps[-1] - q))) - if max_dq > 1.0: - self._d435_pin_and_stop_hops("D435 平移关节行程 >1 rad,拒绝执行") - return True - cruise = oneshot_full_cruise_mps(dist, hybrid_cruise_vxy(self.v_slow_xy)) - sched, T_move, v_peak = smooth_joint_schedule(wps, asked, cruise) - if tag in ("full", "fix", "xy"): - self._d435_last_dist = dist - if not self._d435_full_done: - self._d435_full_done = True - else: - self._d435_fix_done = True - self._d435_send_action( - sched, - tag, - asked, - dist, - v_peak, - T_move, - ee_z=float(p[2]), - tilt_deg=float(np.degrees(tilt)), - max_dq=max_dq, - ) - return True - - def _d435_send_verticalize(self, q, T_ee, *, leftover: float, tilt: float) -> bool: - """XY 已到位后单独收法兰朝下。和平移拆开,避免 Y 过冲。""" - if not self._jtc.server_is_ready(): - self.get_logger().warn("D435 收垂直等 JTC action 就绪", throttle_duration_sec=1.0) - return True - p = np.asarray(T_ee[:3, 3], dtype=float) - J = self._jacobian_at(p) - if J is None: - self.get_logger().warn("D435 收垂直缺 link TF,等下一拍", throttle_duration_sec=1.0) - return True - wps, _remain = translate_hold_ori_waypoints( - q, J, np.zeros(3, dtype=float), R=T_ee[:3, :3], verticalize=True - ) - if len(wps) < 2: - self._d435_vert_done = True - self.get_logger().info( - f"D435 收垂直无需再动 tilt={math.degrees(tilt):.2f}deg" - ) - return True - max_dq = float(np.max(np.abs(wps[-1] - q))) - if max_dq < 1e-4: - self._d435_vert_done = True - return True - if max_dq > 1.0: - self._d435_pin_and_stop_hops("D435 收垂直关节行程 >1 rad,拒绝执行") - return True - hop = max(0.008, float(tilt) * 0.05) - cruise = D435_NEAR_CRUISE_MPS - sched, T_move, v_peak = smooth_joint_schedule(wps, hop, cruise) - self._d435_vert_done = True - self._d435_send_action( - sched, - "vert", - hop, - leftover, - v_peak, - T_move, - ee_z=float(p[2]), - tilt_deg=float(np.degrees(tilt)), - max_dq=max_dq, - ) - return True - - def _tick_d435_arrive(self) -> None: - """厂家 MoveL 已结束:看法兰还在不在动。连续停稳后才打开 D405 框心。""" - if not self._hybrid: - return - if ( - self._d435_inflight - or self._d435_vendor_busy - or not self._d435_vendor_done - or time.monotonic() < self._d435_settle_until - ): - self._arrive.reset() - return - with self._lock: - if self._track_source != "overhead" or self._d435_settled: - return - goal = None if self._p_feat_base is None else self._p_feat_base[:2].copy() - if goal is None: - return - T = self._lookup_T(self.base_frame, self.ee_frame) - if T is None: - return - xy = np.asarray(T[:2, 3], dtype=float) - dist = float(np.hypot(float(xy[0]) - goal[0], float(xy[1]) - goal[1])) - # 到位看法兰是否还在动,不看离视觉点还差几毫米。 - settled = self._arrive.update(xy, time.monotonic(), tracking_ok=True) - if not settled: - self.get_logger().info( - f"D435 厂家 MoveL 已结束,法兰还在动或未满 " - f"{self.d435_handback_sec:.1f}s(离点 {dist*1000:.0f}mm)," - "D405 输出仍截断", - throttle_duration_sec=1.0, - ) - return - with self._lock: - self._d435_settled = True - self._d435_exec_until = 0.0 - if self.d435_move_only: - # 保持 d435_commanding=True,感知不会重拍;D405 被 move_only 挡住。 - # locked 只让 pipeline 结束一阶段,后面会 skip_stage2。 - # action 已 rest-to-rest,到位不再往话题插 hold。 - now_m = time.monotonic() - if not self._locked: - self._locked = True - self.get_logger().info( - f"已到 D435 位置(还差 {dist*1000:.0f}mm)并停稳 " - f"{self.d435_handback_sec:.1f}s —— D435 位移测试结束," - "不交 D405、不进二阶段" - ) - self._lock_pub.publish(Bool(data=True)) - self._lock_pub_t = now_m - elif now_m - self._lock_pub_t > 1.0: - self._lock_pub_t = now_m - self._lock_pub.publish(Bool(data=True)) - return - # 法兰已停稳:打开 D405。不在这里锁定;框心对准停稳后才精拍下臂。 - self._publish_d435_commanding(False) - self.get_logger().info( - f"法兰已连续停稳 {self.d435_handback_sec:.1f}s" - f"(离 D435 点 {dist*1000:.0f}mm)" - " —— 打开 D405 输出,追工件框矩形中心;对准后才精拍下臂" - ) - - def _tick_still_lock(self) -> None: - """D405 跟住且法兰 XY 连续 still_sec 秒没大幅动 → 锁定进二阶段。 - - 顶视一次性迁臂不算。门槛与位移上限只从 site 来,这里不再写死 3 / 15mm。 - """ - if not self._hybrid or self.d435_move_only: - return - if self._locked: - # 框心对准并且停稳这一拍已经抓住。后面的实时点不再解开,也不再带臂。 - return - T = self._lookup_T(self.base_frame, self.ee_frame) - xy = None if T is None else np.asarray(T[:2, 3], dtype=float) - with self._lock: - have = self._have_target - lost = self._target_lost_flag - source = self._track_source - conf = self._wrist_conf - tracking_ok = ( - source == "wrist" - and have - and not lost - and (not wrist_needs_handoff(conf, self.wrist_handoff_conf)) - and self._xy_armed - ) - locked_now = self._still.update( - xy, time.monotonic(), tracking_ok=tracking_ok - ) - now_m = time.monotonic() - if locked_now and self.enable_control: - if not self._locked: - self._locked = True - self.get_logger().info( - f"=== 一阶段已锁定(D405 框心对准且臂静止 {self.wrist_align_sec:.1f}s," - f"位移≤{self.lock_still_move_m*1000:.0f}mm)" - " → /visual_servo/locked ===" - ) - self._lock_pub.publish(Bool(data=True)) - self._lock_pub_t = now_m - elif now_m - self._lock_pub_t > 1.0: - self._lock_pub_t = now_m - self._lock_pub.publish(Bool(data=True)) - else: - if self._locked: - self._lock_pub.publish(Bool(data=False)) - self._locked = False - self._lock_since = None - - def _lock_feedback(self, converged: bool) -> None: - """串联锁定信号:持续收敛 lock_hold_sec → /visual_servo/locked=True。 - - 混合模式由 ``_tick_still_lock`` 独占,这里直接返回,避免死区 0.6s 抢先锁定。 - """ - if self._hybrid: - return - now_m = time.monotonic() - if converged and self.enable_control: - if self._lock_since is None: - self._lock_since = now_m - if not self._locked and (now_m - self._lock_since >= self.lock_hold_sec): - self._locked = True - self.get_logger().info( - f"=== 一阶段已锁定(死区驻留 {self.lock_hold_sec:.1f}s)" - " → /visual_servo/locked ===" - ) - self._lock_pub.publish(Bool(data=True)) - elif self._locked and now_m - self._lock_pub_t > 1.0: - self._lock_pub_t = now_m - self._lock_pub.publish(Bool(data=True)) - else: - if self._locked: - self._lock_pub.publish(Bool(data=False)) - self._locked = False - self._lock_since = None - - def _w_align_flange_down(self, R_ee: np.ndarray) -> np.ndarray: - """base 系下的角速度,用来把法兰 +Z 转到世界 −Z 方向(工具朝下)。""" - z_now = np.asarray(R_ee, dtype=float).reshape(3, 3)[:, 2] - z_des = np.array([0.0, 0.0, -1.0], dtype=float) - c = float(np.clip(np.dot(z_now, z_des), -1.0, 1.0)) - ang = float(np.arccos(c)) - if ang < 0.015: - return np.zeros(3, dtype=float) - axis = np.cross(z_now, z_des) - n = float(np.linalg.norm(axis)) - if n < 1e-9: - axis = np.array([1.0, 0.0, 0.0], dtype=float) - else: - axis = axis / n - mag = float(np.clip(self.ee_hold_kp * ang, -self.ee_w_max, self.ee_w_max)) - return axis * mag - - def _shape_xy_vel(self, v_des_xy: np.ndarray, dt: float) -> np.ndarray: - """真正驱动机械臂的那条悬停指令,外加变化率限制 + 低通滤波。""" - v_des = np.asarray(v_des_xy, dtype=float).reshape(2) - prev = self._v_xy_cmd - dv = v_des - prev - n = float(np.linalg.norm(dv)) - dv_max = max(1e-4, float(self.a_max) * max(float(dt), 1e-3)) - if n > dv_max: - dv = dv * (dv_max / n) - raw = prev + dv - a = self.vel_lpf_alpha - out = a * raw + (1.0 - a) * prev - nxy = float(np.hypot(out[0], out[1])) - lim = float(self.v_max_xy) - if nxy > lim > 0.0: - out = out * (lim / nxy) - self._v_xy_cmd = out - return out - - def _update_xy_arm(self, ee_z: float) -> bool: - """只有法兰落在锁高带内才做 XY。低于锁高要先抬回去,不算到位。""" - if self.ee_z_m <= 0.0: - self._xy_armed = True - self._publish_z_locked(True) - return True - z = float(ee_z) - at = at_lock_height(z, self.ee_z_m, self.approach_xy_gate_m) - if at and not self._xy_armed: - self._xy_armed = True - self._v_xy_cmd[:] = 0.0 - self.pid_x.reset() - self.pid_y.reset() - self.get_logger().info( - f"锁高到位 ee_z={z:.3f}m(期望 {self.ee_z_m:.3f})" - " —— 开始 XY;腕部无目标时 D435 可以拍一张" - ) - elif (not at) and self._xy_armed: - self._xy_armed = False - self._v_xy_cmd[:] = 0.0 - self.get_logger().info( - f"离开锁高 ee_z={z:.3f}m(期望 {self.ee_z_m:.3f})" - " —— 先回高度,XY 暂停", - throttle_duration_sec=1.0, - ) - self._publish_z_locked(at) - return self._xy_armed - - def _seek_velocity(self, p_ee: np.ndarray) -> Optional[np.ndarray]: - """base 系下的 XY 速度,用来扫描寻找工件:以「机械臂到达锁定高度时的位置」 - 为中心向外螺旋,让 eye-in-hand 相机扫过桌面。超时后返回 None(由调用方保持)。""" - now = time.monotonic() - if self._seek_t0 <= 0.0: - self._seek_t0 = now - self._seek_theta = 0.0 - self._seek_origin = (float(p_ee[0]), float(p_ee[1])) # 在下降点附近搜索 XY - if (now - self._seek_t0) > self.seek_timeout: - return None - ox, oy = self._seek_origin - self._seek_theta += 0.7 * self._ctrl_dt - r = min( - self.seek_radius_max, - 0.02 + 0.5 * self.seek_speed * (now - self._seek_t0), - ) - tx = ox + r * math.cos(self._seek_theta) - ty = oy + r * math.sin(self._seek_theta) - dx = tx - float(p_ee[0]) - dy = ty - float(p_ee[1]) - dist = math.hypot(dx, dy) - v = np.zeros(3, dtype=float) - if dist > 0.012: - speed = min(self.seek_speed, float(self.v_max_xy)) - v[0] = speed * dx / dist - v[1] = speed * dy / dist - return v - - def _clip_workspace_vel( - self, p_ee: np.ndarray, v_base: np.ndarray, T: float - ) -> np.ndarray: - """把指令限制在盒子里;如果本来就在盒子外,允许它往回恢复。""" - v = np.asarray(v_base, dtype=float).copy() - dt = max(float(T), 1e-3) - for i in range(3): - lo = float(self.ws_min[i]) - hi = float(self.ws_max[i]) - p = float(p_ee[i]) - if p < lo: - v[i] = max(v[i], 0.0) - elif p > hi: - v[i] = min(v[i], 0.0) - else: - p_n = p + v[i] * dt - if p_n < lo: - v[i] = (lo - p) / dt - elif p_n > hi: - v[i] = (hi - p) / dt - return v - - def _execute_twist( - self, - v_cam: np.ndarray, - p_cam: Optional[np.ndarray] = None, - hold_xy: bool = False, - v_base_override: Optional[np.ndarray] = None, - ) -> None: - # 如果看门狗在本周期中途已经触发,就硬冻结 - if self._target_lost_flag: - self._dq_hist.clear() - return - - now_m = time.monotonic() - dt_cmd = now_m - self._last_traj_mono - min_dt = 1.0 / self.traj_stream_hz - if self._last_traj_mono > 0.0 and dt_cmd < min_dt: - return - dt_use = float(np.clip(dt_cmd if self._last_traj_mono > 0.0 else 0.04, 0.015, 0.08)) - - q = self._current_joints() - T_ee = self._lookup_T(self.base_frame, self.ee_frame) - if q is None or T_ee is None: - self.get_logger().warn( - "execute 跳过:缺少 joint_states 或 base→ee 的 TF", - throttle_duration_sec=1.0, - ) - return - R_ee = T_ee[:3, :3] - p_ee = T_ee[:3, 3] - R_bc = self._R_cam_to_base(T_ee) - if hold_xy: - v_base = np.zeros(3, dtype=float) - elif v_base_override is not None: - v_base = np.asarray(v_base_override, dtype=float).reshape(3).copy() - else: - v_base = R_bc @ v_cam - T = max(0.08, self.exec_horizon) - kp = self.ee_hold_kp - v_xy = self.v_max_xy - if self._reacq_mono > 0.0 and (now_m - self._reacq_mono) < 0.12: - v_xy *= 0.85 - - # hover:在任意锁定高度上把法兰 XY 停在三维特征点上。 - # lookat:把光轴命中点(图像中心)驱到特征点上。 - xy_ok = self._update_xy_arm(float(p_ee[2])) - cruise = hybrid_cruise_vxy(self.v_slow_xy) - if ( - xy_ok - and (not hold_xy) - and (not self.ee_hold_xy) - and self.ee_z_m > 0.0 - and p_cam is not None - ): - look = self._xy_track_vs_feature(T_ee, p_cam) - if look is not None: - err, p_feat, p_ref = look - nerr = float(np.linalg.norm(err)) - clip_xy = max(0.03, float(self.e_xy_clip)) - if nerr > clip_xy: - err = err * (clip_xy / nerr) - nerr = clip_xy - # 锁定前整段同一巡航速度。不再用 50mm 远近两档: - # 远处本来就慢,近处一放开就按 kp×误差冲,越近越抖。 - if self._hybrid and not self._locked: - v_xy = min(float(v_xy), cruise) - if self._xy_deadzone(nerr, update=False): - v_base[0] = 0.0 - v_base[1] = 0.0 - self._hover_ixy[:] = 0.0 - else: - # 在死区附近做渐变,避免 P 控制来回 bang-bang。 - enter = max(0.002, float(self.deadzone_m)) - taper = float(np.clip((nerr - enter) / max(enter, 1e-3), 0.0, 1.0)) - # 积分项(抗积分饱和 ±4cm)用来突破关节指令死区, - # 否则 XY 收敛的最后几毫米就会停滞。 - self._hover_ixy[0] = float(np.clip( - self._hover_ixy[0] + float(err[0]) * dt_use, -0.04, 0.04)) - self._hover_ixy[1] = float(np.clip( - self._hover_ixy[1] + float(err[1]) * dt_use, -0.04, 0.04)) - v_base[0] = float(np.clip( - self.kp_xy * float(err[0]) * taper + self.ki_hover * self._hover_ixy[0], - -v_xy, v_xy)) - v_base[1] = float(np.clip( - self.kp_xy * float(err[1]) * taper + self.ki_hover * self._hover_ixy[1], - -v_xy, v_xy)) - self.get_logger().info( - f"{self.xy_track} dxy={nerr*1000:.0f}mm " - f"feat_xy=({p_feat[0]:.3f},{p_feat[1]:.3f}) " - f"ee_xy=({p_ee[0]:.3f},{p_ee[1]:.3f}) " - f"feat_z={p_feat[2]:.3f} ee_z={p_ee[2]:.3f} " - f"p_cam=({p_cam[0]:.3f},{p_cam[1]:.3f},{p_cam[2]:.3f})", - throttle_duration_sec=0.5, - ) - - nxy = float(np.hypot(v_base[0], v_base[1])) - cap_xy = cruise if (self._hybrid and not self._locked) else v_xy - if nxy > cap_xy > 0.0: - v_base[0] *= cap_xy / nxy - v_base[1] *= cap_xy / nxy - - # 在 base 系里保持法兰 XYZ(可配置,默认约 250 mm)。当 ee_hold_xy - # 为真时,视觉算出的 XY 会被覆盖。 - if self.ee_hold_xy: - v_base[0] = float(np.clip(kp * (self.ee_x_m - p_ee[0]), -self.v_max_xy, self.v_max_xy)) - v_base[1] = float(np.clip(kp * (self.ee_y_m - p_ee[1]), -self.v_max_xy, self.v_max_xy)) - if abs(self.ee_x_m - p_ee[0]) < 0.004: - v_base[0] = 0.0 - if abs(self.ee_y_m - p_ee[1]) < 0.004: - v_base[1] = 0.0 - # 有目标:XY 平移,Z 钉在这一段开始的高度。没目标才回锁高。 - translating = (not hold_xy) and self._have_target - if (not translating) and ((not xy_ok) or hold_xy): - v_base[0] = 0.0 - v_base[1] = 0.0 - self._v_xy_cmd[:] = 0.0 - if self.ee_z_m > 0.0: - self.get_logger().info( - f"回锁高 {self.ee_z_m:.3f}m 当前={p_ee[2]:.3f}m XY 保持", - throttle_duration_sec=1.0, - ) - shaped = self._shape_xy_vel(v_base[:2], dt_use) - v_base[0] = float(shaped[0]) - v_base[1] = float(shaped[1]) - if translating: - if self._z_hold is None: - self._z_hold = float(p_ee[2]) - v_base[2] = hold_translation_vz( - float(p_ee[2]), self._z_hold, kp=kp, v_lim=float(self.v_max_z) - ) - else: - self._z_hold = None - if self.ee_z_m > 0.0: - vz_lim = max(float(self.v_max_z), 0.08) - v_base[2] = lock_z_velocity( - float(p_ee[2]), self.ee_z_m, kp=kp, v_lim=vz_lim - ) - - w_base = ( - self._w_align_flange_down(R_ee) - if self.ee_vertical_down - else None - ) - - p_next = p_ee + v_base * T - if self.ee_z_m > 0.0 and not translating: - # 向下只许到锁高死区内。已经低于锁高时 v_z>0,这条不挡上抬。 - floor = float(self.ee_z_m) - 0.004 - if p_next[2] < floor and v_base[2] < 0.0: - v_base[2] = 0.0 - p_next = p_ee + v_base * T - elif p_next[2] < self.min_ee_z and v_base[2] < 0: - v_base[2] = 0.0 - p_next = p_ee + v_base * T - v_base = self._clip_workspace_vel(p_ee, v_base, T) - p_next = p_ee + v_base * T - link_R: List[np.ndarray] = [] - link_p: List[np.ndarray] = [] - for fr in self.link_frames: - Tl = self._lookup_T(self.base_frame, fr) - if Tl is None: - self.get_logger().warn( - f"execute 跳过:TF 缺 {fr}", - throttle_duration_sec=1.0, - ) - return - link_R.append(Tl[:3, :3]) - link_p.append(Tl[:3, 3]) - J = geometric_jacobian(link_R, link_p, p_ee, RIZON_LINK_AXES) - qdot = dls_twist( - J, v_base, w_base=w_base, damping=self.damping, max_qdot=self.max_qdot - ) - dq = qdot * T - - # ----- 第 5 项:对关节位移做滑动窗口平均 ----- - self._dq_hist.append(dq.copy()) - dq_avg = np.mean(np.stack(list(self._dq_hist), axis=0), axis=0) - # 让末端速度与平均后的步长保持一致 - qdot_avg = dq_avg / T - - mag = float(np.max(np.abs(dq_avg))) - v_lin = float(np.linalg.norm(v_base[:3])) - w_lin = 0.0 if w_base is None else float(np.linalg.norm(w_base)) - if mag < 1e-6 or (v_lin < 0.006 and w_lin < 0.04): - if self._xy_in_dead or hold_xy: - self._send_hold() - return - if mag < self.min_cmd_delta and v_lin < 0.012: - return - - q1 = q + dq_avg - traj = JointTrajectory() - traj.header.stamp.sec = 0 - traj.header.stamp.nanosec = 0 - traj.joint_names = list(self.joint_names) - pt = JointTrajectoryPoint() - pt.positions = [float(v) for v in q1.tolist()] - pt.velocities = [float(v) for v in qdot_avg.tolist()] - ns = int(round(T * 1e9)) - pt.time_from_start.sec = ns // 1_000_000_000 - pt.time_from_start.nanosec = ns % 1_000_000_000 - traj.points = [pt] - self._traj_pub.publish(traj) - self._last_traj_mono = now_m - self.get_logger().info( - f"traj Δq_avg_max={float(np.max(np.abs(dq_avg))):.4f} rad " - f"win={len(self._dq_hist)} |v_base|={float(np.linalg.norm(v_base)):.3f} " - f"ee_z={p_ee[2]:.3f}/{self.ee_z_m:.3f}", - throttle_duration_sec=0.5, - ) - - def _send_hold(self) -> None: - self._dq_hist.clear() - q = self._current_joints() - if q is None: - return - traj = JointTrajectory() - traj.header.stamp.sec = 0 - traj.header.stamp.nanosec = 0 - traj.joint_names = list(self.joint_names) - pt = JointTrajectoryPoint() - pt.positions = [float(v) for v in q.tolist()] - pt.velocities = [0.0] * int(q.size) - pt.time_from_start.nanosec = 120_000_000 - traj.points = [pt] - self._traj_pub.publish(traj) - - -def main(args=None) -> None: - rclpy.init(args=args) - node = ServoNode() - executor = MultiThreadedExecutor(num_threads=4) - executor.add_node(node) - try: - executor.spin() - except KeyboardInterrupt: - pass - finally: - node._e_stop("节点关闭") - executor.shutdown() - node.destroy_node() - if rclpy.ok(): - rclpy.shutdown() - - -if __name__ == "__main__": - main() diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/site_io.py b/install/arm_application/lib/python3.11/site-packages/arm_application/site_io.py deleted file mode 100644 index 9243123..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/site_io.py +++ /dev/null @@ -1,216 +0,0 @@ -"""供应用节点加载 ``~/ros2/config/site.yaml``。""" - -from __future__ import annotations - -import os -from pathlib import Path -from typing import Any - -import yaml - - -def ros2_root() -> Path: - for key in ("SITE_ROS2_ROOT", "ROS2_WS"): - v = os.environ.get(key, "").strip() - if v: - return Path(v).expanduser() - return Path.home() / "ros2" - - -def site_path() -> Path: - env = os.environ.get("SITE_CONFIG", "").strip() - if env: - return Path(env).expanduser() - return ros2_root() / "config" / "site.yaml" - - -def load_site_dict(path: str | Path | None = None) -> dict[str, Any]: - p = Path(path).expanduser() if path else site_path() - if not p.is_file(): - return {} - data = yaml.safe_load(p.read_text(encoding="utf-8")) or {} - return data if isinstance(data, dict) else {} - - -def deep_merge(base: dict[str, Any], overlay: dict[str, Any]) -> dict[str, Any]: - out = dict(base) - for key, val in overlay.items(): - if isinstance(val, dict) and isinstance(out.get(key), dict): - out[key] = deep_merge(out[key], val) - else: - out[key] = val - return out - - -def joint_prefix_default() -> str: - """当前臂的关节名前缀(``Rizon4-XXXXXX_``),用作 ROS 参数的默认值。 - - 来源顺序: - - 1. ``SITE_JOINT_PREFIX`` —— ``scripts/env.sh`` → ``load_site_config.sh`` 从 - site.yaml 导出,这就是**权威值**; - 2. 由 ``SITE_ROBOT_SN`` 现算(``Rizon4-063989`` → ``Rizon4-063989_``); - 3. 都没有 → 空字符串。 - - **绝不写死某个具体 SN。** 以前这里的默认值是 ``"Rizon4-063989_"``, - 于是换台机器人后 ``ros2 run`` 直接起的节点会去订**上一台臂**的关节话题, - 表现为"节点起来了、什么都不动、也不报错"(R1.1)。 - """ - prefix = os.environ.get("SITE_JOINT_PREFIX", "").strip() - if prefix: - return prefix - sn = os.environ.get("SITE_ROBOT_SN", "").strip() - return f"{sn}_" if sn else "" - - -def base_frame_default() -> str: - """当前臂的基座坐标系(``_base_link``),用作 ROS 参数默认值。""" - frame = os.environ.get("SITE_BASE_FRAME", "").strip() - if frame: - return frame - sn = os.environ.get("SITE_ROBOT_SN", "").strip() - return f"{sn}_base_link" if sn else "" - - -def ee_frame_default() -> str: - """当前臂的法兰坐标系(``_flange``),用作 ROS 参数默认值。""" - frame = os.environ.get("SITE_EE_FRAME", "").strip() - if frame: - return frame - sn = os.environ.get("SITE_ROBOT_SN", "").strip() - return f"{sn}_flange" if sn else "" - - -def overhead_camera( - site: dict[str, Any], robot: dict[str, Any] | None = None -) -> tuple[dict[str, Any], list[str]]: - """手外(固定)相机 → ``(相机配置字典, 同样合格但未被选中的相机名)``。 - - 手外相机 = ``cameras.*`` 里 ``role`` 以 ``overhead`` 开头的那台(眼在手外时 - 相机固定在工位外,不随臂动)。 - - **为什么必须有唯一实现**:这份"按 role 找,再按 arm 收敛"的规则有两个调用方—— - S03 粗定位取命名空间(本模块给节点用)、手眼标定脚本取相机名。两边各写一份的 - 后果不是报错,而是"标定用的相机"和"推理用的相机"悄悄不是同一台,且没人发现。 - 所以规则只写在这里,两边都调它(`export_site_env.overhead_camera` 也走这里)。 - - 收敛规则(确定性的三级): - 1. ``arm`` 与当前臂相同的优先(仿真 ``sim_d435`` 靠这级选中); - 2. 都没有 ``arm``(= 双臂共用的那台)时回落到它; - 3. 还是多个 → 取第一个,并把其余名字放进第二个返回值,让调用方**出声告警**。 - """ - cams = [ - cfg - for cfg in (site.get("cameras") or {}).values() - if isinstance(cfg, dict) - and str(cfg.get("role") or "").strip().lower().startswith("overhead") - ] - if not cams: - return {}, [] - arm = str((robot or {}).get("arm") or "").strip() - mine = [c for c in cams if str(c.get("arm") or "").strip() == arm] if arm else [] - hits = mine or [c for c in cams if not str(c.get("arm") or "").strip()] or cams - chosen = dict(hits[0]) - others = [str(c.get("name") or "?") for c in hits[1:]] - return chosen, others - - -def eye_to_hand_result_name(short: str, camera_name: str) -> str: - """眼在手外结果文件的**文件名**(不含目录)。 - - 外参绑定「这条臂的基座 + 这台相机」:换条臂或换台相机都不通用, - 所以名字必须同时带上臂号与相机。调用方只许调这里,不许自己拼 - (launch / export_site_env / S03 找文件都走这一处)。 - """ - short = str(short or "").strip() - cam = str(camera_name or "").strip().strip("/") - if short and cam: - return f"{short}_{cam}_eye_to_hand.yaml" - if cam: - return f"{cam}_eye_to_hand.yaml" - if short: - return f"{short}_eye_to_hand.yaml" - return "eye_to_hand.yaml" - - -def resolve_eye_to_hand_file( - root: Path, - *, - explicit: str = "", - camera_name: str = "", -) -> Path | None: - """找手外相机的手眼文件。没有就返回 None。 - - 路径一律按 ``root`` 解析,不跟当前工作目录走——相对 CWD 的路径会在 - "换个目录启动"时静默失效(文件找不到 → S03 直接降级),而人只会怀疑标定。 - - 候选顺序: - 1. ``explicit`` —— launch 按 site.yaml 派生的确切路径 - (``<臂号>_<相机>_eye_to_hand.yaml``); - 2. ``<相机名>_eye_to_hand.yaml`` —— 旧命名 / 仿真(``sim_d435_...``); - 3. ``eye_to_hand.yaml`` —— 再兜底。 - """ - candidates: list[Path] = [] - if explicit: - p = Path(explicit).expanduser() - candidates.append(p if p.is_absolute() else root / p) - cam = str(camera_name or "").strip().strip("/") - if cam: - candidates.append(root / "handeye" / "results" / f"{cam}_eye_to_hand.yaml") - candidates.append(root / "handeye" / "results" / "eye_to_hand.yaml") - for cand in candidates: - if cand.is_file(): - return cand - return None - - -TRACK_CAMERA_ROLES = ("wrist", "overhead") - - -def track_camera_role(site: dict[str, Any] | None) -> str: - """一阶段跟踪用哪台相机:``wrist``(腕部 D405)或 ``overhead``(顶置 D435)。 - - 写错**当场报错**,不会退回腕部 —— 退回会让人以为在验 D435,其实还在用 D405。 - 缺省 ``wrist``:没写这个键时行为与改之前一致(腕部追踪)。 - """ - perc = (site or {}).get("perception") - perc = perc if isinstance(perc, dict) else {} - raw = perc.get("track_camera") - if raw is None or str(raw).strip() == "": - return "wrist" - role = str(raw).strip().lower() - if role not in TRACK_CAMERA_ROLES: - raise ValueError( - f"perception.track_camera 只能是 wrist 或 overhead,收到 {raw!r}。" - "写错不会退回腕部 —— 退回会让人以为在用 D435 其实还在用 D405。" - ) - return role - - -def track_handeye_mode(role: str) -> str: - """跟踪相机角色 → 手眼装法。overhead 必须用 cam→基座,不能用 cam→法兰。""" - if str(role or "").strip().lower() == "overhead": - return "eye_to_hand" - return "eye_in_hand" - - -def handeye_static_tf_frames( - *, - mode: str, - ee_frame: str, - base_frame: str, - cam_frame: str, -) -> tuple[str, str]: - """手眼静态 TF 的 ``(父系, 子系)``。 - - 两种装法的父子关系**不同**,不能混: - * ``eye_in_hand``:法兰 ← 相机(相机跟着臂动) - * ``eye_to_hand``:基座 ← 相机(相机固定,不随臂动) - - 把眼在手外的文件按"法兰 ← 相机"发出去,会得到一条**看着合理**的错 TF —— - 定位总能到附近、永远差一截,而人只会去怀疑标定精度。 - """ - if str(mode or "").strip().lower() == "eye_to_hand": - return str(base_frame), str(cam_frame) - return str(ee_frame), str(cam_frame) - diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/stage2_locate_node.py b/install/arm_application/lib/python3.11/site-packages/arm_application/stage2_locate_node.py deleted file mode 100644 index a3575d2..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/stage2_locate_node.py +++ /dev/null @@ -1,3490 +0,0 @@ -#!/usr/bin/env python3 -"""Stage-2 one-shot hole localization + gauge alignment (left arm 89 first). - -与一阶段(实时跟踪)不同:到位悬停后「拍一张照」一次性解算 k1/k2 孔坐标, -不做连续推理。流程: - - 1. verticalize — 法兰 +Z 严格朝世界 -Z(垂直朝下),XY/Z 不动 - 2. hover — 闭环升到/降到 robots[].servo.hole_hover_z_m(悬停锁高) - 3. coarse — 拍照,工件(pose 模型给框;k1/k2 用关键点)粗移到 bbox 中心上方 - 4. fine — 拍照,two_stage(YOLO+HoughCircles)解 k1/k2 孔心像素 - 5. align — 像素射线交工件面 + 内参 + 手眼,把规尖移到目标孔正上方。 - ``hole_keypoint_once`` 时只走一次,核验拍只记账; - ``hole_once_lock_xy_descend`` 时按视线前馈一条 MoveL 贴面; - 否则复拍迭代到 align_tol_m - 6. hold — 锁定关节,发布 /stage2/result(JSON) + /tmp/stage2_result.json - -高度调试(不动 XY、不拍照定位): - bash ~/ros2/scripts/run_stage2_locate.sh --arm 89 --hover-only -""" - -from __future__ import annotations - -import json -import math -import os -import sys -import time -from pathlib import Path -from typing import Any, Dict, List, Optional, Tuple - -import numpy as np -import rclpy -from control_msgs.action import FollowJointTrajectory -from rclpy.action import ActionClient -from rclpy.node import Node -from rclpy.qos import qos_profile_sensor_data -from geometry_msgs.msg import WrenchStamped -from sensor_msgs.msg import CameraInfo, Image, JointState -from std_msgs.msg import String -from tf2_ros import Buffer, TransformListener -from trajectory_msgs.msg import JointTrajectory, JointTrajectoryPoint - -from arm_application.geom_ik import ( - RIZON_LINK_AXES, - dls_translate_hold_ori, - dls_twist, - geometric_jacobian, - quat_xyzw_to_R, -) -from arm_application.path_profile import ( - FROZEN_J_HOP_MAX_M, - path_interp as _path_interp, - trap_params as _trap_params, - trap_sv as _trap_sv, -) -from arm_application.overhead_oneshot import ( - ONCE_APPROACH_STEP_M, - ONCE_FF_LOOK_PER_M, - ONCE_FF_MOVEL_VEL_MPS, - ONCE_TRIM_MAX_STEP_M, - ONCE_TRIM_REFUSE_M, - cam_xy_bias_axes, - decompose_base_xy, - flange_z_for_gap_m, - final_gap_refusal, - hole_pair_span_m, - hole_pair_span_ok, - once_ff_movel_from_tcp, - once_ff_tcp_xyz, - oneshot_align_step_m, - pixel_on_base_plane, - retract_goal_z, -) -from arm_application.handeye_realsense import resolve_realsense_topics -from arm_application.gauge_boot import perception_source_of -from arm_application.gauge_fsm import drag_verdict, resolve_hover_z, wrench_all_zero -from arm_application.hole_detect_hough import detect_holes -from arm_application.hole_detector import config_from_site, weights_from_site -from arm_application.site_io import deep_merge, load_site_dict, ros2_root -from arm_application.ros_node import TolerantNode - -try: - from flexiv_msgs.msg import RobotStates -except ImportError: # pragma: no cover - RobotStates = None # type: ignore - -def contact_armed_gap_m(observe_gap_m: float, final_gap_m: float = 0.002) -> float: - """轻降力接触门槛对应的几何间隙。离面更远时腕部力会漂几牛,不能当碰到。 - - 2026-10-13 远场:法兰 0.384、间隙 138mm、ΔFz=+2.87N。 - 2026-10-13 近场仍假:间隙 9.5mm、ΔFz=+2.77N,尖几何上还在面上约 1cm, - 碰不到板。观察间隙 15mm 会把这一档武装起来,所以门控只收到 - ``final_gap_m + 4mm``(贴面 2mm 时 = 6mm)。``observe_gap_m`` 仍从调用方 - 传入,避免两处签名分叉,但不放宽门控。 - """ - _ = observe_gap_m - return float(final_gap_m) + 0.004 - - -def contact_armed_by_gap( - gap_m: float, observe_gap_m: float, final_gap_m: float = 0.002 -) -> bool: - """当前几何间隙够近,才许把腕部力突变当成碰到工件。""" - return float(gap_m) <= contact_armed_gap_m(observe_gap_m, final_gap_m) - - -# 一次 hop 之后实测关节变化小于这个值,就认为「臂根本没跟随指令」。 -# -# 真机踩到过(2026-09-28):一次 hover hop 计划要动 `max|Δq|=0.17378rad`,实测 -# `0.00000rad`,而控制器照样打印 "Goal reached, success!"。原因不在几何/对位, -# 而是 RDK 断连后 `operational()` 仍为 true、`read()` 一直返回最后一帧缓存, -# 关节状态永久冻结(`robot_timestamp` 推进量为 0),而控制器是本地插值、不校验反馈。 -# 真机上报成"垂直化或悬停失败"会把人往"倾角/悬停高度"上带,故单独拎出来报。 -_NO_FOLLOW_EPS_RAD = 1e-4 - - -def _as_bool(val: Any, default: bool = False) -> bool: - if val is None: - return default - if isinstance(val, str): - return val.strip().lower() in ("1", "true", "yes", "on") - return bool(val) - - -def _pt(q: np.ndarray, qdot: np.ndarray, t_sec: float) -> JointTrajectoryPoint: - pt = JointTrajectoryPoint() - pt.positions = [float(v) for v in q.tolist()] - pt.velocities = [float(v) for v in qdot.tolist()] - # 不填 accelerations:全 0 会和样条速度冲突,终点附近抖/过冲。 - ns = int(round(max(0.0, float(t_sec)) * 1e9)) - pt.time_from_start.sec = ns // 1_000_000_000 - pt.time_from_start.nanosec = ns % 1_000_000_000 - return pt - - -def _sanitize_traj(traj: JointTrajectory, min_dt: float = 0.02) -> JointTrajectory: - """JTC 要求 time_from_start 严格递增;短 hop 保持点曾经倒退导致拒轨。""" - last = -min_dt - for p in traj.points: - t = float(p.time_from_start.sec) + float(p.time_from_start.nanosec) * 1e-9 - if t < last + min_dt: - t = last + min_dt - ns = int(round(t * 1e9)) - p.time_from_start.sec = ns // 1_000_000_000 - p.time_from_start.nanosec = ns % 1_000_000_000 - last = t - return traj - - -def _bgr_copy(msg: Image) -> np.ndarray: - h, w = int(msg.height), int(msg.width) - enc = (msg.encoding or "").lower() - buf = np.frombuffer(msg.data, dtype=np.uint8) - if enc == "bgr8": - return buf.reshape(h, w, 3).copy() - if enc == "rgb8": - return buf.reshape(h, w, 3)[:, :, ::-1].copy() - raise RuntimeError(f"Unsupported color encoding {msg.encoding!r}") - - -class Stage2Locate(TolerantNode): - def __init__(self, node_name: str = "stage2_locate") -> None: - super().__init__(node_name) - - self.declare_parameter("robot_sn", os.environ.get("SITE_ROBOT_SN") or "") - self.declare_parameter("hover_only", False) - self.declare_parameter("target_hole", "") # 空字符串 → 用 site 的 stage2.target_hole - self.declare_parameter("hover_z_m", -1.0) # 大于 0 → 覆盖 site 里的值 - # 贴面规尖离面 [mm]。≥0 → 覆盖 site ``final_gap_mm``。-1=用 site。 - # 笛卡尔锁 XY 时法兰 Z = 工具长 + 工件面 + 间隙,XY 不动。 - self.declare_parameter("final_gap_mm", -1.0) - # 工具尖端在法兰下方多少 [m];大于 0 → 覆盖 site。 - # 仿真里由 run_gauge_assembly.sh --sim 传**实测值**(每次上料都可能不同), - # 真机不传(走 site.yaml)。悬停高度与 S07 下探预算都按它算。 - self.declare_parameter("tool_tip_below_flange_m", -1.0) - # 调试开关:只验证**精对准**、不轻降(避免"对准还没confirmed就把规往孔里带")。 - # 用 int 不用 bool —— `ros2 launch` 传 bool 参数容易踩到 CLI 解析的坑。 - # -1=按 site 的 stage2.final_descent_enable;0=强制不降;1=强制降。 - self.declare_parameter("final_descent_enable", -1) - self.declare_parameter("preview", True) - self.declare_parameter("action_name", "rizon_arm_controller/follow_joint_trajectory") - # 真值孔位(perception.source=truth)要把 scene.yaml 的物体位姿投影成像, - # 场景位姿在 Gazebo 的 world 系里,所以要有世界系的名字。 - self.declare_parameter("world_frame", "world") - - # ---------------- site.yaml 解析(和脚本同一套) ---------------- - site = load_site_dict() - sn = str(self.get_parameter("robot_sn").value or "").strip() - robots = (site.get("robot") or {}).get("robots") or [] - robot: Dict[str, Any] = {} - for r in robots: - if isinstance(r, dict) and str(r.get("sn") or "").strip() == sn: - robot = dict(r) - break - if not robot: - self.get_logger().warn(f"robot.sn {sn!r} 不在 site robots[],用全局默认") - - servo = deep_merge(site.get("servo") or {}, robot.get("servo") or {}) - paths = deep_merge(site.get("paths") or {}, robot.get("paths") or {}) - cam_cfg = deep_merge(site.get("camera") or {}, robot.get("camera") or {}) - stage2 = dict((site.get("hole_detect") or {}).get("stage2") or {}) - - self.prefix = str(robot.get("joint_prefix") or f"{sn}_") - self.base_frame = str(robot.get("base_frame") or f"{sn}_base_link") - self.ee_frame = str(robot.get("ee_frame") or f"{sn}_flange") - cam = str(cam_cfg.get("name") or "d405").strip().strip("/") - self.image_topic, self.info_topic = resolve_realsense_topics(cam, image_topic="") - self.depth_topic = f"/{cam}/aligned_depth_to_color/image_raw" - self.cam_frame = f"{cam}_color_optical_frame" - self.handeye_file = str(paths.get("handeye_file") or "") - - # 悬停锁高:launch 覆盖 > robots[].servo.hole_hover_z_m > stage2.hover_z_m - hover_override = float(self.get_parameter("hover_z_m").value) - self.hover_z_user_set = hover_override > 0.0 - self._hover_refused = "" - self.hover_z = ( - hover_override if self.hover_z_user_set - else float(servo.get("hole_hover_z_m") or stage2.get("hover_z_m") or 0.30) - ) - self.min_ee_z = float(servo.get("min_ee_z_m") or 0.20) - self.safe_z = float(servo.get("safe_z_m") or 0.45) - self.ws_min = np.array(servo.get("workspace_xyz_min") or [0.08, -0.55, 0.18], dtype=float) - self.ws_max = np.array(servo.get("workspace_xyz_max") or [0.85, 0.55, 0.65], dtype=float) - self.hover_offset = np.array( - servo.get("hover_offset_ee_xy_m") or [0.0, 0.0], dtype=float - ).reshape(2) - - # ---- 感知来源:本节点的孔位是"检测出来的"还是"场景真值算出来的" ---- - # 与 gauge_assembly_node 用**同一个解析函数**(gauge_boot.perception_source_of): - # 两处各自读一遍 site,迟早会出现"流程以为在用真值、检测节点还在跑模型"。 - perception = deep_merge(site.get("perception") or {}, robot.get("perception") or {}) - self.perception_source = perception_source_of(perception) - self._truth_object = str((perception.get("truth") or {}).get("object") or "") - self._truth_warn_t = 0.0 - # 真值路径的"实测位姿"订阅与场景缓存(懒建,见 _truth_scene/_truth_live_pose) - self._truth_live = None - self._truth_spec = None - - self.target_hole = ( - str(self.get_parameter("target_hole").value or "").strip().lower() - or str(stage2.get("target_hole") or "k1").strip().lower() - ) - self.k1_label = str(stage2.get("k1_label") or "left").strip().lower() - self.align_tol = float(stage2.get("align_tol_m") or 0.0007) - self.align_max_iters = int(stage2.get("align_max_iters") or 8) - self.coarse_max_moves = int(stage2.get("coarse_max_moves") or 2) - self.align_speed = float(stage2.get("align_speed") or 0.03) - self.move_speed = float(stage2.get("move_speed") or 0.05) - # 粗居中的两条**误检守卫**(2026-10-08 真机 arm 89 的 exit=4,见 - # _coarse_target_reject / _bbox_on_border 的注释):粗居中的目的是把臂 - # 挪到工件正上方,**挪错比不挪危险得多** —— 一挪错精定位就再也看不到 - # k1/k2,而流程会把它当"孔检测失败",现场根本想不到是粗居中把臂带走的。 - self.coarse_max_offset_m = float(stage2.get("coarse_max_offset_m") or 0.08) - self.coarse_border_px = int(stage2.get("coarse_border_px") or 2) - # 最后轻降到孔面上方 final_gap_mm(不接触)。启动参数 ≥0 覆盖 site。 - self._final_gap_refused = "" - _gap_override_mm = float(self.get_parameter("final_gap_mm").value) - self.final_gap_user_set = _gap_override_mm >= 0.0 - if self.final_gap_user_set: - self.final_gap_m = _gap_override_mm / 1000.0 - else: - self.final_gap_m = float(stage2.get("final_gap_mm") or 1.5) / 1000.0 - # 观测下降:对准后降到这个间隙就停,方便看规尖是不是对着孔。 - # 比 final_gap(贴面 2mm)高一截,对偏了也不会把规压上孔沿。 - self.observe_gap_m = float(stage2.get("observe_gap_mm") or 15.0) / 1000.0 - if self.observe_gap_m < self.final_gap_m: - self.get_logger().warn( - f"observe_gap_mm={self.observe_gap_m*1000:.1f} 比贴面目标 " - f"{self.final_gap_m*1000:.1f}mm 还近 —— 收到贴面高度,避免观测下降钻进孔" - ) - self.observe_gap_m = self.final_gap_m - # 悬停高度**必须**让工具尖端留在工件面上方(2026-09-24 的教训,完整说明见 - # gauge_fsm.hover_z_guard):悬停高是按相机视距定的,而工具(夹爪+通止规) - # 比相机长 —— 实测悬停时尖端已经钻进工件 25mm,于是 S05 的横向对准把工件 - # 拖走 92mm,而真值孔位按工件的**实测**位姿算 ⇒ 孔位跟着工具走、残差恒定 - # 13mm 永不收敛(现场看着像手眼标定坏了)。这里按几何兜住并喊出原因。 - _ga = deep_merge(site.get("gauge_assembly") or {}, robot.get("gauge_assembly") or {}) - # 工具长优先取**启动参数**(launch 覆盖 > site):仿真里上料脚本会实测它 - # 并落盘(sim_load_gauge → sim_tool_geometry.yaml → run_gauge_assembly.sh), - # 因为仿真里规会在指间下滑、下滑量随装夹变化(实测见过 243 / 254mm)。 - # 真机不给这个参数,走 site.yaml 的实测值 —— 与 hover_z_m 同一套优先级。 - _tool_len = float(self.get_parameter("tool_tip_below_flange_m").value) - if _tool_len <= 0.0: - _tool_len = float(_ga.get("tool_tip_below_flange_m") or 0.0) - _surface_z = float(_ga.get("workpiece_surface_z_m") or 0.0) - # 记成成员:轻降的几何夹逼(_descend_above_hole)要用同一套数字, - # 不能各推一遍 —— 否则改了一处另一处就悄悄失配。 - self.tool_tip_below_flange_m = _tool_len - self.surface_z_m = _surface_z - # 对小孔只用关键点像素和已知工件面,不读深度图。缺了就按旧的深度路径。 - self.hole_visual_only = _as_bool(stage2.get("hole_visual_only"), False) - # 本分支实验:悬停拍一次 k1/k2,走一次,复拍只记账不改 XY。 - # 键必须接线——写了 true 却仍多走多拍,等于没做实验。 - self.hole_keypoint_once = _as_bool(stage2.get("hole_keypoint_once"), False) - # 悬停走完后一条厂家 MoveL 收到贴面。k=0:笛卡尔锁 XY 只降 Z。 - # 缺键 = 仍走观察高补交(37b85aa)。 - self.hole_once_lock_xy_descend = _as_bool( - stage2.get("hole_once_lock_xy_descend"), False - ) - _ff = stage2.get("once_ff_look_per_m") - if _ff is None: - self.once_ff_look_per_m = float(ONCE_FF_LOOK_PER_M) - else: - self.once_ff_look_per_m = float(_ff) - self._ws_clipped = False - self._hole_snaps: List[Dict[str, Any]] = [] - if self.hover_z_user_set and (_tool_len <= 0.0 or _surface_z <= 0.0): - self._hover_refused = ( - "写了 --hover-z,但工具长度或工件面未知,无法确认尖端在面之上,拒绝执行" - ) - self.get_logger().error(self._hover_refused) - elif _tool_len > 0.0: - _used, _refused = resolve_hover_z( - self.hover_z, _surface_z, _tool_len, self.final_gap_m, self.hover_z_user_set - ) - if _refused: - self._hover_refused = _refused - self.get_logger().error( - "启动参数指定的悬停高度不安全,拒绝执行,不会改成别的高度:\n " - + _refused - ) - elif abs(_used - self.hover_z) > 1e-9: - self.get_logger().warn( - f"二阶段悬停高度自检不通过 —— 用几何修正值 {_used:.4f}m" - "(这次没写 --hover-z,沿用 site 的几何抬高)" - ) - self.hover_z = _used - # 轻降**最多能降多少**:从悬停高度降到"规尖停在工件面上方 final_gap"为止。 - # 这是纯几何量,与深度测量无关 —— 测量的唯一职责是让下降**提前**收工, - # 绝不允许它把下降量**放大**(2026-09-29 实测就是这么撞的:测量出的 - # gap0=141mm 比几何真值大 ~86mm,于是多降 86mm 把规撞进孔)。 - # 工具长/工件面未知(<=0)时给 None = 不启用夹逼,行为与改动前一致。 - self.descent_budget_m: Optional[float] = None - if _tool_len > 0.0 and _surface_z > 0.0: - self.descent_budget_m = max( - 0.0, self.hover_z - _tool_len - _surface_z - self.final_gap_m - ) - # 轻降结束后**按几何**算出的真实间隙 [m],供收尾日志如实汇报(不是把目标值 - # 当结果念一遍 —— 那会让"停在离面 50mm"也显示成"~2.0mm",R1.1 的静默失效)。 - self.descent_final_gap_m: Optional[float] = None - self.final_descent_speed = float(stage2.get("final_descent_speed") or 0.006) - self.final_descent_enable = _as_bool(stage2.get("final_descent_enable"), True) - _fd = int(self.get_parameter("final_descent_enable").value) - if _fd in (0, 1): # -1 = 按 site;0/1 = 启动参数强制(调试用) - self.final_descent_enable = bool(_fd) - self.get_logger().warn( - f"final_descent_enable 被启动参数覆盖为 {self.final_descent_enable} " - f"(site 里是 {stage2.get('final_descent_enable')})—— 只在调试时这么用" - ) - if self.final_gap_user_set and not self.final_descent_enable: - self._final_gap_refused = ( - "同时写了 --final-gap 和 --no-descent,不知道听谁的,拒绝开跑" - ) - self.get_logger().error(self._final_gap_refused) - elif self.final_gap_user_set and (_tool_len <= 0.0 or _surface_z <= 0.0): - self._final_gap_refused = ( - "写了 --final-gap,但工具长度或工件面未知,无法确认尖端在面之上,拒绝执行" - ) - self.get_logger().error(self._final_gap_refused) - elif _tool_len > 0.0 and _surface_z > 0.0: - _why_gap = final_gap_refusal( - self.final_gap_m, - _tool_len, - _surface_z, - self.hover_z, - float(self.ws_min[2]), - float(self.ws_max[2]), - ) - if _why_gap: - self._final_gap_refused = _why_gap - self.get_logger().error(_why_gap) - self.vert_tol_rad = math.radians(float(stage2.get("verticalize_tol_deg") or 0.8)) - self.settle_sec = float(stage2.get("settle_sec") or 0.45) - self.snap_frames = int(stage2.get("snap_frames") or 5) - self.min_depth = float(stage2.get("min_depth_m") or 0.06) - self.max_depth = float(stage2.get("max_depth_m") or 0.60) - self.linger_sec = float(stage2.get("linger_sec") or 8.0) - - # ---- 精对准的「工具位置」:视觉量规尖(默认)还是法兰+固定偏置 ---- - # 为什么必须能视觉量(2026-10-08 真机 arm 89): - # 规是**夹在爪里**的零件,它相对法兰轴线可以整体偏出约 10mm(实测规杆 - # 轴线相对法兰 = (+10.7, −0.1)mm)。二阶段原来把**法兰轴线**对到孔上 - # (hover_offset_ee_xy_m 写死 [0,0]),于是规尖实际离孔心 ~10mm, - # 轻降一压,φ6 规尖就骑在 φ7 孔的**孔沿**上、力从 −1N 蹦到 63N 卡死。 - # 现场看到的是"轻降在离面 4mm 停住",离真正原因(规偏了)很远。 - # 改成在同一帧里同时解「规尖基座 XY」和「孔基座 XY」,两者走同一条手眼链, - # 链路误差/装夹变动一起抵消 —— 这才是"用视觉把孔对正"。 - # 规尖偏移**逐帧实测+一致性校验**(见 _tip_offset_from_depth):偏移是刚体量, - # 竖直朝下姿态下在基座 XY 里恒定,所以可以用"上一拍的偏移"剔掉偶发误检。 - # 规尖偏移**逐帧实测 + 一致性校验后冻结**(见 _refresh_tip_offset):偏移是刚体量, - # 竖直朝下姿态下在基座 XY 里恒定。为什么要冻结而不是逐拍重算: - # 2026-10-08 真机实测,逐拍重算时残差在 0.44~0.85mm 之间来回荡、收不进 0.25mm —— - # 元凶是**规杆略微倾斜**(<1°):每拍取到的"最深像素"高度不同(工具长在 - # 192~223mm 之间跳),同一根杆在不同高度上的基座 XY 差 ~0.4mm。 - # 偏移既然是刚体量,量准一份冻结住,那 0.4mm 的抖动就没了。 - self.tip_vision = _as_bool(stage2.get("align_tip_vision"), True) - self.tip_near_m = float(stage2.get("tip_near_m") or 0.15) - self.tip_min_m = float(stage2.get("tip_min_m") or 0.04) - self.tip_max_m = float(stage2.get("tip_max_m") or 0.60) - self.tip_band_frac = float(stage2.get("tip_search_band_frac") or 0.25) - self.tip_min_px = int(stage2.get("tip_min_px") or 150) - self.tip_off_tol = float(stage2.get("tip_offset_tol_m") or 0.003) - self.tip_len_min = float(stage2.get("tip_len_min_m") or 0.15) - self.tip_len_max = float(stage2.get("tip_len_max_m") or 0.32) - self.tip_calib_n = int(stage2.get("tip_calib_n") or 4) - self._tip_off: Optional[np.ndarray] = None # 规尖相对法兰的基座 XY 偏移(冻结后不变) - self._tip_samp: list = [] # 校准期攒下的 (偏移, 工具长) 样本 - self._tip_len_m: Optional[float] = None # 定偏移时并记下的工具长(用于交叉核对配置) - - self.hover_only = _as_bool(self.get_parameter("hover_only").value, False) - self.preview = _as_bool(self.get_parameter("preview").value, True) - - # 孔检测参数(hole_detect.yaml + site 覆盖) - self._hole_cfg = config_from_site(site) - self._weights = weights_from_site(site) - self._weights_fb = str(paths.get("yolo_weights") or "") - - self.joint_names = [f"{self.prefix}joint{i}" for i in range(1, 8)] - self.link_frames = [f"{self.prefix}link{i}" for i in range(1, 8)] - - # ---------------- ROS 接口 ---------------- - self._js: Optional[JointState] = None - self.create_subscription(JointState, "joint_states", self._on_js, 10) - self._tf = Buffer() - self._tfl = TransformListener(self._tf, self, spin_thread=False) - self._cli = ActionClient( - self, FollowJointTrajectory, - str(self.get_parameter("action_name").value), - ) - - self._color: Optional[Image] = None - self._depth: Optional[Image] = None - self._info: Optional[CameraInfo] = None - self.create_subscription(Image, self.image_topic, self._on_color, qos_profile_sensor_data) - self.create_subscription(Image, self.depth_topic, self._on_depth, qos_profile_sensor_data) - self.create_subscription(CameraInfo, self.info_topic, self._on_info, qos_profile_sensor_data) - # 腕部六维力(轻降安全兜底:规尖一碰工件 force.z 突变,立即停)。 - # 它**同时是 S07 柔顺下压的首选接触判据**(见 gauge_fsm.wrench_touch): - # 通止规靠夹持摩擦抱住,轴向力传不到指垫触觉,只有腕部 FT 测得准。 - self._ft_fz: Optional[float] = None - #: 最近一帧的收到时刻(单调钟)。判"有没有活的数据"用它,**不用数值大小** —— - #: 静止时轴向力本来就接近 0,拿数值判活会把"安静的传感器"误判成掉线。 - self._t_ft: Optional[float] = None - #: "FT 全零"守卫的状态(见 _on_wrench):零值起始时刻 + 是否已喊过一次。 - self._ft_zero_since: Optional[float] = None - self._ft_zero_warned: bool = False - robot_ns = str(self.get_parameter("robot_sn").value).replace("-", "_") - # 话题可配:默认按 sn 推导,与真机 flexiv_robot_states_broadcaster 一致。 - # 换 FT 来源(换个厂家、或走 external_wrench_in_tcp)时不用改代码。 - self.ft_wrench_topic = str( - servo.get("ft_wrench_topic") or f"/{robot_ns}/ft_sensor_wrench" - ) - self.create_subscription( - WrenchStamped, self.ft_wrench_topic, self._on_wrench, qos_profile_sensor_data - ) - # 厂家 tcp_pose(WORLD)。视线前馈 MoveL 必须在这上面加相对位移, - # 不许拿 ROS 法兰+规尖当绝对目标。回调名避开 stage3 的 `_on_robot_states`。 - self._tcp_world: Optional[Tuple[float, float, float]] = None - self._t_tcp: Optional[float] = None - self.robot_states_topic = f"/{robot_ns}/flexiv_robot_states" - if RobotStates is not None: - self.create_subscription( - RobotStates, - self.robot_states_topic, - self._on_stage2_robot_states, - qos_profile_sensor_data, - ) - elif self.hole_once_lock_xy_descend: - self.get_logger().error( - "没有 flexiv_msgs.RobotStates,视线前馈不能读厂家 tcp_pose," - "不许退回 ROS 绝对坐标" - ) - - self._state_pub = self.create_publisher(String, "/stage2/state", 10) - self._result_pub = self.create_publisher(String, "/stage2/result", 10) - self._overlay_pub = self.create_publisher(Image, "/stage2/overlay", 10) - - self._detector = None # 懒加载,hover_only 不需要 GPU/ORT - self._detector_fb = None - self._last_overlay: Optional[np.ndarray] = None - - self.get_logger().info( - f"stage2 arm={robot.get('label') or sn} ee={self.ee_frame} cam={cam}\n" - f" hover_z={self.hover_z:.3f}m (site: robots[].servo.hole_hover_z_m) " - f"safe_z={self.safe_z:.2f} min_z={self.min_ee_z:.2f}\n" - f" weights={self._weights}\n" - f" image={self.image_topic} depth={self.depth_topic}\n" - f" target={self.target_hole} (k1={self.k1_label}) tol={self.align_tol*1000:.1f}mm " - f"hover_only={self.hover_only} hole_visual_only={self.hole_visual_only} " - f"hole_keypoint_once={self.hole_keypoint_once} " - f"lock_xy_descend={self.hole_once_lock_xy_descend} " - f"ff_look={self.once_ff_look_per_m:.3f} " - f"final_gap={self.final_gap_m * 1000:.1f}mm" - + ( - f"→法兰Z={flange_z_for_gap_m(self.tool_tip_below_flange_m, self.surface_z_m, self.final_gap_m):.4f}m" - if self.tool_tip_below_flange_m > 0.0 and self.surface_z_m > 0.0 - else "" - ) - + "\n" - f" 工具长={self.tool_tip_below_flange_m:.4f}m(法兰到尖,下臂不得低于面+间隙)" - ) - if self.hole_keypoint_once and self.hole_once_lock_xy_descend: - k = float(self.once_ff_look_per_m) - if k <= 1e-9: - self.get_logger().warn( - "对孔方案=单次精拍·笛卡尔锁 XY(实验)。悬停走完后不补拍," - "厂家 MoveL 只降 Z、ΔXY=0。k>0 会沿 -look 再加前馈。" - "对照 37b85aa 把 hole_once_lock_xy_descend 改回 false。" - ) - else: - self.get_logger().warn( - "对孔方案=单次精拍·视线前馈斜线(实验)。悬停走完后不补拍," - f"ΔXY=-look×{k:.3f}×剩余下降,一条 MoveL 到贴面。" - "对照 37b85aa 把 hole_once_lock_xy_descend 改回 false。" - ) - elif self.hole_keypoint_once: - self.get_logger().warn( - "对孔方案=单次精拍(实验分支)。拍一次→走一次,复拍和下降后只记账不改 XY。" - "残差以核验拍为准,不许用 hop 到位冒充。看 /tmp/stage2_result.json 的 snaps。" - ) - - # ==================== 状态/运动原语(闭环 hop,同 goto_ee_plane) ==================== - - def _on_js(self, msg: JointState) -> None: - self._js = msg - - def _on_color(self, msg: Image) -> None: - self._color = msg - - def _on_depth(self, msg: Image) -> None: - self._depth = msg - - def _on_info(self, msg: CameraInfo) -> None: - self._info = msg - - def _on_stage2_robot_states(self, msg) -> None: - """缓存厂家 ``tcp_pose``(WORLD)。名字必须与 stage3 ``_on_robot_states`` 分开。""" - p = msg.tcp_pose.pose.position - xyz = (float(p.x), float(p.y), float(p.z)) - if not all(math.isfinite(v) for v in xyz): - return - self._tcp_world = xyz - self._t_tcp = time.monotonic() - - def _fresh_tcp_world(self): - """最近 0.5s 的厂家 TCP [m]。过期/没有 → None,不许用旧值凑。""" - if self._tcp_world is None or self._t_tcp is None: - return None - if time.monotonic() - float(self._t_tcp) > 0.5: - return None - return self._tcp_world - - def _on_wrench(self, msg: WrenchStamped) -> None: - """缓存腕部 FT 的**轴向力**(`geometry_msgs/WrenchStamped`,法兰系)。 - - ⚠️ 名字**必须**与 `Stage3Search._on_robot_states` 区分开。2026-09-24 踩到: - 两者原先都叫 `_on_ft`,子类定义静默覆盖父类的,于是本订阅的 WrenchStamped - 被塞进了 stage3 的 RobotStates 缓存,`_ft_fz` 永远不写 —— 现象是 - "S07 腕部 FT 没有数据",而话题数据完全正常(在 shell 里 echo 得到)。 - 真实原因与"阈值/话题名"都无关,纯粹是**同名覆盖**。""" - self._ft_fz = float(msg.wrench.force.z) - # 记收到时刻:下游(尤其 S07)要区分"收到过但读数为 0"(活)与 - # "一帧都没收到"(话题名/网络/传感器的问题)。 - self._t_ft = time.monotonic() - # —— "全零"守卫(2026-10-08 加):上面那个"收到过就算活"的口径有个盲区 —— - # 数据源没出数时,话题照样在发、回调照样在跑、读数恒为 (0,0,0),于是 - # `wrench_live` 报"活",而"abs(fz−基线)>2.5N 判接触"的兜底**永远不触发**。 - # 真机就踩到了(ft_sensor_wrench 恒零,external_wrench_in_tcp 才有数)。 - # 判据见 wrench_all_zero:带负载的 FT 不可能六个分量同时恰好为 0。 - w = msg.wrench - if wrench_all_zero( - w.force.x, w.force.y, w.force.z, w.torque.x, w.torque.y, w.torque.z - ): - if self._ft_zero_since is None: - self._ft_zero_since = self._t_ft - elif not self._ft_zero_warned and self._t_ft - self._ft_zero_since > 5.0: - self._ft_zero_warned = True - self.get_logger().error( - f"腕部 FT 话题 {self.ft_wrench_topic} 连续 >5s 六个分量**全为 0** —— " - "这不是'安静'(带负载的 FT 不可能全零),是**数据源没有出数**。" - "后果:轻降/下压的接触兜底 abs(fz−基线)>2.5N **永远判不到接触**" - "(静默失效)。真机请指向有数的话题,例如 " - "//external_wrench_in_tcp(site.yaml 的 servo.ft_wrench_topic)。" - ) - else: - self._ft_zero_since = None - - def _contact_detected(self, baseline_fz: float, thresh_n: float = 2.5) -> bool: - """腕部力 Z 偏离基线 thresh_n 牛以上 → 判为规尖碰工件(接触)。""" - if self._ft_fz is None: - return False - return abs(self._ft_fz - baseline_fz) > thresh_n - - def _spin(self, dt: float = 0.05) -> None: - try: - rclpy.spin_once(self, timeout_sec=dt) - except Exception as exc: # noqa: BLE001 - if type(exc).__name__ == "ExternalShutdownException": - return - raise - - def _shutdown_tf(self) -> None: - tfl = getattr(self, "_tfl", None) - self._tfl = None - if tfl is None: - return - try: - tfl.unregister() - except Exception: - pass - - def _state(self, s: str) -> None: - self.get_logger().info(f"[stage2] === {s} ===") - msg = String() - msg.data = s - self._state_pub.publish(msg) - - def _lookup(self, parent: str, child: str) -> Optional[np.ndarray]: - try: - tf = self._tf.lookup_transform( - parent, child, rclpy.time.Time(), - timeout=rclpy.duration.Duration(nanoseconds=80_000_000), - ) - except Exception: - return None - t = tf.transform.translation - o = tf.transform.rotation - T = np.eye(4) - T[:3, :3] = quat_xyzw_to_R([o.x, o.y, o.z, o.w]) - T[:3, 3] = [t.x, t.y, t.z] - return T - - def _q(self) -> Optional[np.ndarray]: - if self._js is None: - return None - m = {n: p for n, p in zip(self._js.name, self._js.position)} - try: - return np.array([float(m[n]) for n in self.joint_names], dtype=float) - except KeyError: - return None - - def _jacobian(self, p_ee: np.ndarray) -> Optional[np.ndarray]: - link_R: List[np.ndarray] = [] - link_p: List[np.ndarray] = [] - for fr in self.link_frames: - Tl = self._lookup(self.base_frame, fr) - if Tl is None: - return None - link_R.append(Tl[:3, :3]) - link_p.append(Tl[:3, 3]) - return geometric_jacobian(link_R, link_p, p_ee, RIZON_LINK_AXES) - - def _w_down(self, R: np.ndarray) -> Tuple[np.ndarray, float]: - """让法兰 +Z 指向世界 -Z。公式只在 ``path_profile.flange_down_w``。""" - from arm_application.path_profile import flange_down_w - - return flange_down_w(R) - - def _wait_state(self, timeout_s: float) -> Tuple[Optional[np.ndarray], Optional[np.ndarray]]: - t0 = time.monotonic() - q = Tee = None - while time.monotonic() - t0 < timeout_s: - self._spin(0.05) - q = self._q() - Tee = self._lookup(self.base_frame, self.ee_frame) - if q is not None and Tee is not None and self._jacobian(Tee[:3, 3]) is not None: - return q, Tee - return q, Tee - - def _send_action(self, traj: JointTrajectory, wait_s: float) -> bool: - traj = _sanitize_traj(traj) - goal = FollowJointTrajectory.Goal() - goal.trajectory = traj - handle = None - for attempt in range(3): - fut = self._cli.send_goal_async(goal) - t0 = time.monotonic() - while not fut.done() and time.monotonic() - t0 < 4.0: - self._spin(0.05) - handle = fut.result() if fut.done() else None - if handle is not None and bool(getattr(handle, "accepted", False)): - break - self.get_logger().warn( - f"JTC 未接受轨迹(attempt {attempt + 1}/3),0.25s 后重发" - ) - t_wait = time.monotonic() + 0.25 - while time.monotonic() < t_wait: - self._spin(0.05) - handle = None - if handle is None or not bool(getattr(handle, "accepted", False)): - self.get_logger().error("JTC 拒绝了轨迹(控制器未激活?先跑 T1 run_real.sh)") - return False - res = handle.get_result_async() - t0 = time.monotonic() - while not res.done() and time.monotonic() - t0 < wait_s: - self._spin(0.05) - if not res.done(): - self.get_logger().warn("JTC 结果超时——按 TF 继续核验") - return False - try: - r = res.result() - inner = getattr(r, "result", None) - code = getattr(inner, "error_code", 0) if inner is not None else 0 - if code not in (0, None): - msg = getattr(inner, "error_string", "") - self.get_logger().error(f"JTC 执行失败 error_code={code} {msg}") - return False - except Exception: - pass - return True - - def _clamp_ws(self, target: np.ndarray) -> np.ndarray: - lo = self.ws_min + 0.005 - hi = self.ws_max - 0.005 - clamped = np.clip(np.asarray(target, dtype=float).reshape(3), lo, hi) - self._ws_clipped = bool(not np.allclose(clamped, target, atol=1e-6)) - if self._ws_clipped: - self.get_logger().warn( - f"目标超出工作盒,已截断: ({target[0]:.3f},{target[1]:.3f},{target[2]:.3f}) → " - f"({clamped[0]:.3f},{clamped[1]:.3f},{clamped[2]:.3f})" - ) - return clamped - - def _plan_and_send( - self, - q0: np.ndarray, - Tee: np.ndarray, - target: np.ndarray, - verticalize: bool, - tag: str, - max_seg: float = FROZEN_J_HOP_MAX_M, - v: float = 0.05, - min_dur: float = 1.6, - ) -> bool: - """规划并执行一段 ≤max_seg 的笛卡尔 hop(J 冻结在当前位姿)。""" - p = Tee[:3, 3].copy() - R = Tee[:3, :3] - dp_full = np.asarray(target, dtype=float).reshape(3) - p - _, ang = self._w_down(R) if verticalize else (np.zeros(3), 0.0) - dp = dp_full.copy() - dist = float(np.linalg.norm(dp)) - if dist > max_seg: - dp = dp * (max_seg / dist) - dist = max_seg - self.get_logger().info( - f" plan {tag} Δ=({dp[0]*1000:+.0f},{dp[1]*1000:+.0f},{dp[2]*1000:+.0f})mm " - f"tilt={math.degrees(ang):.2f}deg" - ) - J = self._jacobian(p) - if J is None: - self.get_logger().error("缺 link TF,无法算雅可比") - return False - - q = q0.copy() - waypoints = [q.copy()] - remain = dp.copy() - w_step, _ = (self._w_down(R) if verticalize else (np.zeros(3), 0.0)) - # 入口倾角:**纯旋转 hop 的进度判据必须用它**(见下面 progressed 的说明) - ang0 = float(ang) - # 旋转-only hop 需要更多内部步数;角度模型按实际步长递减 - # 内层收敛下限随请求距离缩放:stage3 的微步只有 0.3~1mm, - # 固定 1.5mm 下限会让亚毫米微步第一步就退出(planned=0 → 规划停滞) - inner_tol = min(0.00012, max(0.00005, 0.05 * dist)) - n_max = int(np.ceil(dist / 0.008)) + 16 - for _ in range(n_max): - if float(np.linalg.norm(remain)) < inner_tol and ((not verticalize) or ang < 0.006): - break - nseg = max(1, int(np.ceil(float(np.linalg.norm(remain)) / 0.012))) - step = remain / nseg - if verticalize and ang > 0.008: - qdot = dls_twist(J, step / 0.12, w_base=w_step, damping=0.08, max_qdot=0.45) - dq = np.clip(qdot * 0.12, -0.06, 0.06) - else: - dq = dls_translate_hold_ori(J, step, damping=0.08, max_dq=0.06) - if float(np.max(np.abs(dq))) < 1e-5: - break - q = q + dq - waypoints.append(q.copy()) - remain = remain - (J[:3, :] @ dq) - ang = max(0.0, ang - float(np.linalg.norm(w_step)) * 0.12) - - planned = dist - float(np.linalg.norm(remain)) - min_frac = 0.75 if dist >= 0.0008 else 0.45 - # 进度判据分两种情形 —— 混用会**静默整段跳过**(2026-09-24 踩到): - # · 平移 hop(dist > 0):按"走完了请求距离的多少"(planned/dist)。 - # · **纯旋转 hop**(verticalize 且目标位置≈当前位置 ⇒ dist≈0): - # 必须按**倾角**判。此时 planned = 0 − |remain|,而绕腕旋转本来就会让 - # 法兰/TCP 漂移一点(实测 2.78mm)⇒ planned 变成负数 ⇒ 立刻判"规划停滞"、 - # 整段垂直化被跳过。现场症状:日志只说"规划停滞"(看起来像 IK 解不出来), - # 真相是 S05 带着 6.2° 倾角去压孔 —— 工具斜着顶在工件面上,重则撞件(E2)。 - if dist > 1e-6: - progressed = planned >= min_frac * dist - else: - progressed = (ang0 - float(ang)) >= min_frac * max(ang0, 1e-9) - if len(waypoints) < 2 or not progressed: - self.get_logger().warn( - f" {tag}: 规划停滞 (planned {planned*1000:.2f}/{dist*1000:.2f}mm, " - f"倾角 {math.degrees(ang0):.2f}→{math.degrees(float(ang)):.2f}deg) — 跳过" - ) - return False - if float(np.max(np.abs(waypoints[-1] - q0))) > 1.0: - self.get_logger().error(f" {tag}: 关节行程 >1 rad,拒绝执行") - return False - - if dist < 0.008: - # 纯旋转 hop 的 dist=0:用它算时间是 0.14s 的硬下限,对 6.2°(手腕要转 - # 0.11rad)来说太快 —— JTC 追不上速度上限就会欠到位,现象是"发了没动"。 - # 把倾角按 0.10m 力臂折算成等效弧长再交给微步的时间规划。 - equiv_m = max(dist, 0.10 * (ang0 - float(ang))) - return self._send_micro(waypoints, equiv_m, v, q0, tag) - - # 巡航速度保持 v,头尾平滑加减速。刹车距拉长、加速度下限放低—— - # 夹爪持规时急加速/急停会把规震脱,柔顺剖面(长刹车、低加速度)消除过冲和震动。 - v_cmd = max(min(float(v), 0.08), 1e-3) - d_brake = min(0.030, max(0.006, 0.32 * dist)) - a_cmd = max(v_cmd * v_cmd / (2.0 * d_brake), 0.030) - T_move, v_peak, t_acc, t_cruise, a_use = _trap_params(dist, v_cmd, a_cmd) - t0 = 0.06 - dt = 0.04 - zeros = np.zeros(7) - times = [0.0] - n_samp = max(8, int(math.ceil(T_move / dt))) - for k in range(1, n_samp + 1): - times.append(T_move * k / n_samp) - traj = JointTrajectory() - traj.header.stamp.sec = 0 - traj.header.stamp.nanosec = 0 - traj.joint_names = list(self.joint_names) - for t_local in times: - s, vs = _trap_sv(t_local, dist, v_peak, t_acc, t_cruise, a_use) - u = s / dist - qi, dq_du = _path_interp(waypoints, u) - qdot = dq_du * (vs / dist) if dist > 1e-9 else zeros - qdot = np.clip(qdot, -0.40, 0.40) - if t_local >= T_move - 1e-9: - qi = waypoints[-1] - qdot = zeros - traj.points.append(_pt(qi, qdot, t0 + t_local)) - t_hold = 0.12 + 0.40 * min(1.0, dist / 0.08) - if dist >= 0.03: - t_hold = max(t_hold, float(min_dur) - T_move) - t_hold = float(min(max(t_hold, 0.20), 1.2)) - q_end = waypoints[-1] - t_end = t0 + T_move - last_t = t_end - for frac in (0.40, 0.70, 1.00): - t = t_end + t_hold * frac - if t < last_t + 0.05: - t = last_t + 0.05 - traj.points.append(_pt(q_end, zeros, t)) - last_t = t - self.get_logger().info( - f" send {tag}: {len(traj.points)} pts T={T_move:.2f}s hold={t_hold:.2f}s " - f"v={v_peak*1000:.0f}mm/s brake={t_acc*1000:.0f}ms " - f"max|Δq|={float(np.max(np.abs(q_end - q0))):.5f}rad" - ) - return self._send_action(traj, wait_s=t0 + T_move + t_hold + 5.0) - - def _send_micro( - self, - waypoints: List[np.ndarray], - dist: float, - v: float, - q0: np.ndarray, - tag: str, - ) -> bool: - """亚厘米步进:3 点 + 短保持。12 点梯形在 1mm 上又慢又晃。""" - v_cmd = max(min(float(v), 0.04), 0.01) - T = max(0.14, dist / v_cmd) - t0 = 0.05 - zeros = np.zeros(7) - q_end = waypoints[-1] - q_mid, _ = _path_interp(waypoints, 0.5) - qdot = np.clip((q_end - waypoints[0]) / max(T, 1e-3), -0.35, 0.35) - traj = JointTrajectory() - traj.header.stamp.sec = 0 - traj.header.stamp.nanosec = 0 - traj.joint_names = list(self.joint_names) - t_hold = 0.16 - traj.points.append(_pt(waypoints[0], zeros, t0)) - traj.points.append(_pt(q_mid, qdot, t0 + 0.5 * T)) - traj.points.append(_pt(q_end, zeros, t0 + T)) - traj.points.append(_pt(q_end, zeros, t0 + T + t_hold)) - self.get_logger().info( - f" send {tag}: micro 4pts T={T:.2f}s hold={t_hold:.2f}s v={v_cmd*1000:.0f}mm/s " - f"max|Δq|={float(np.max(np.abs(q_end - q0))):.5f}rad" - ) - return self._send_action(traj, wait_s=t0 + T + t_hold + 2.5) - - def _goto( - self, - q: np.ndarray, - Tee: np.ndarray, - target: np.ndarray, - verticalize: bool, - tol_m: float, - tol_tilt: float, - tag: str, - v: float, - max_hops: int = 8, - settle_s: float = 0.25, - min_dur: float = 1.6, - hold_xy: bool = False, - strict_xy: bool = False, - z_up_only: bool = False, - ) -> Tuple[bool, np.ndarray, np.ndarray]: - """闭环点到点:规划短 hop → 执行 → 重新看 TF → 重复,直到容差内。 - - hold_xy=True:只收 Z/姿态(悬停降锁高),不把下降中漂出的 XY 再拽回去。 - z_up_only=True:当前已经高于目标 Z 就停,不许为了追 5 mm 往下补 - (贴面 MoveL 后收臂 hop1 抬过头、hop2 回压进孔,2026-10-16)。 - """ - target = self._clamp_ws(target) - last_dist: Optional[float] = None - last_ang: Optional[float] = None - stall = 0 - for hop in range(max_hops): - p = Tee[:3, 3] - z_tgt = float(target[2]) - if z_up_only: - if float(p[2]) >= z_tgt - float(tol_m): - return True, q, Tee - z_tgt = retract_goal_z(float(p[2]), z_tgt) - goal = np.array([p[0], p[1], z_tgt]) if hold_xy else np.array( - [target[0], target[1], z_tgt], dtype=float - ) - if hold_xy: - goal = self._clamp_ws(goal) - dp = goal - p - _, ang = self._w_down(Tee[:3, :3]) if verticalize else (np.zeros(3), 0.0) - dist = float(np.linalg.norm(dp)) - if dist < tol_m and ((not verticalize) or ang < tol_tilt): - return True, q, Tee - # 关节死区内反复 hop 不动:无进展且在放宽容差内 → 提前接受 - if last_dist is not None and last_ang is not None: - progress = (dist < last_dist * 0.8) or (ang < last_ang * 0.8) - stall = 0 if progress else stall + 1 - if stall >= 2: - lim = tol_m * 1.25 if strict_xy else tol_m * 2.5 - accept = dist < lim and ((not verticalize) or ang < tol_tilt * 1.5) - self.get_logger().warn( - f" {tag}: 连续 {stall} hop 无进展(remain={dist*1000:.1f}mm " - f"tilt={math.degrees(ang):.2f}deg)→ {'按容差接受' if accept else '放弃'}" - ) - return accept, q, Tee - last_dist, last_ang = dist, ang - self.get_logger().info( - f" {tag} hop{hop + 1} remain={dist*1000:.1f}mm tilt={math.degrees(ang):.2f}deg" - ) - if not self._plan_and_send(q, Tee, goal, verticalize, tag, v=v, min_dur=min_dur): - self.get_logger().warn(f" {tag}: hop 发送失败,复测后继续") - q2, Tee2 = self._wait_state(1.0) - if q2 is not None and Tee2 is not None: - q, Tee = q2, Tee2 - continue - t_end = time.monotonic() + settle_s - while time.monotonic() < t_end: - self._spin(0.05) - q2, Tee2 = self._wait_state(2.0) - if q2 is None or Tee2 is None: - self.get_logger().error("运动途中丢了 joint_states/TF") - return False, q, Tee - d_moved = float(np.max(np.abs(q2 - q))) - self.get_logger().info( - f" {tag} hop{hop + 1} 实际 max|Δq|={d_moved:.5f}rad " - f"Δxy=({(Tee2[0, 3] - Tee[0, 3]) * 1000:+.2f}," - f"{(Tee2[1, 3] - Tee[1, 3]) * 1000:+.2f})mm " - f"Δz={float((Tee2[2, 3] - Tee[2, 3]) * 1000):+.2f}mm" - ) - if d_moved < _NO_FOLLOW_EPS_RAD: - # 轨迹发出去了、控制器也报成功,臂却一步没动 —— 别往几何/对位上找。 - self.get_logger().error( - f" {tag} hop{hop + 1}:关节状态**毫无变化**(实测 max|Δq|={d_moved:.5f}rad," - f"指令计划见上一条 send 日志)—— 臂没有跟随指令。这**不是**倾角/悬停高度的问题," - "而是关节状态没在更新:RDK 断连后 operational() 仍为 true,read() 只会一直" - "返回最后一帧缓存,而控制器是本地插值、不校验反馈,所以照样报 success。" - "先查网络:ping 机器人 IP 是否丢包、两台臂是否同 MAC 抢 L2 转发。" - ) - q, Tee = q2, Tee2 - p = Tee[:3, 3] - goal = np.array([p[0], p[1], target[2]]) if hold_xy else target - dp = goal - p - _, ang = self._w_down(Tee[:3, :3]) if verticalize else (np.zeros(3), 0.0) - lim = tol_m * 1.3 if strict_xy else tol_m * 2.0 - ok = float(np.linalg.norm(dp)) < lim and ( - (not verticalize) or ang < (tol_tilt * (1.4 if strict_xy else 2.0)) - ) - return ok, q, Tee - - def _pin(self, q: np.ndarray) -> None: - if not self._cli.wait_for_server(timeout_sec=1.0): - return - traj = JointTrajectory() - traj.header.stamp.sec = 0 - traj.header.stamp.nanosec = 0 - traj.joint_names = list(self.joint_names) - traj.points = [_pt(q, np.zeros(7), 0.08), _pt(q, np.zeros(7), 0.45)] - self._send_action(traj, wait_s=3.0) - - # ==================== 拍照与解算 ==================== - - def _grab(self, timeout_s: float = 4.0) -> Tuple[np.ndarray, np.ndarray, Dict[str, float]]: - """抓一帧彩图 + 一帧对齐深度 + 内参(要新鲜帧,等待 settle 后再调)。""" - t0 = time.monotonic() - while time.monotonic() - t0 < timeout_s: - self._spin(0.05) - if self._color is None or self._depth is None or self._info is None: - continue - now = self.get_clock().now().nanoseconds * 1e-9 - c_age = now - self._color.header.stamp.sec - self._color.header.stamp.nanosec * 1e-9 - d_age = now - self._depth.header.stamp.sec - self._depth.header.stamp.nanosec * 1e-9 - if c_age < 1.0 and d_age < 1.0: - break - else: - raise RuntimeError( - f"相机帧超时:{self.image_topic} / {self.depth_topic}。" - " 先开相机: bash ~/ros2/scripts/run_camera_d405.sh --arm <本臂> --preview" - ) - if self._info is None: - raise RuntimeError(f"没有 camera_info: {self.info_topic}") - bgr = _bgr_copy(self._color) # type: ignore[arg-type] - dmsg = self._depth # type: ignore[assignment] - if (dmsg.encoding or "").lower() != "16uc1": - raise RuntimeError(f"深度编码应为 16UC1(mm),实际 {dmsg.encoding!r}") - depth_mm = np.frombuffer(dmsg.data, dtype=np.uint16).reshape(int(dmsg.height), int(dmsg.width)) - depth_m = depth_mm.astype(np.float32) * 1e-3 - if depth_m.shape[:2] != bgr.shape[:2]: - raise RuntimeError(f"深度/彩色尺寸不一致 {depth_m.shape} vs {bgr.shape}") - k = self._info.k # type: ignore[union-attr] - intr = {"fx": float(k[0]), "fy": float(k[4]), "cx": float(k[2]), "cy": float(k[5])} - if intr["fx"] <= 1.0: - raise RuntimeError("camera_info 内参无效") - return bgr, depth_m, intr - - def _surface_depth( - self, - depth_m: np.ndarray, - bbox: Tuple[int, int, int, int], - holes: Optional[List[Tuple[float, float, float]]] = None, - ) -> float: - """工作面深度:bbox 内有效像素中值;排除孔盘(孔底/桌面会拉偏 XY)。""" - h, w = depth_m.shape - x1, y1, x2, y2 = bbox - pad_x = int(0.10 * (x2 - x1)) - pad_y = int(0.10 * (y2 - y1)) - x1 = max(0, x1 + pad_x); x2 = min(w, x2 - pad_x) - y1 = max(0, y1 + pad_y); y2 = min(h, y2 - pad_y) - roi = depth_m[y1:y2, x1:x2] - mask = (roi > self.min_depth) & (roi < self.max_depth) - if holes: - yy, xx = np.mgrid[y1:y2, x1:x2] - for cx, cy, r in holes: - rr = max(4.0, 1.8 * float(r)) - mask &= ((xx - cx) ** 2 + (yy - cy) ** 2) > rr * rr - vals = roi[mask] - if vals.size < 50: - vals = roi[(roi > self.min_depth) & (roi < self.max_depth)] - if vals.size < 20: - raise RuntimeError("工作面有效深度太少(孔/桌面占比过大或距离超界)") - z = float(np.median(vals)) - if z > 2.0: - raise RuntimeError(f"深度中值 {z:.2f}m 异常——深度尺度不对(应为 16UC1 毫米)") - return z - - def _ring_depth( - self, - depth_m: np.ndarray, - cx: float, - cy: float, - r: float, - ) -> Optional[float]: - """孔周围环形工作面深度。倾斜相机下左右孔的 camera-Z 不同,不能共用一个中值。""" - h, w = depth_m.shape - rad = max(4.0, float(r)) - x0 = max(0, int(round(cx - 2.6 * rad))) - y0 = max(0, int(round(cy - 2.6 * rad))) - x1 = min(w, int(round(cx + 2.6 * rad))) - y1 = min(h, int(round(cy + 2.6 * rad))) - if x1 - x0 < 6 or y1 - y0 < 6: - return None - yy, xx = np.mgrid[y0:y1, x0:x1] - d2 = (xx.astype(float) - cx) ** 2 + (yy.astype(float) - cy) ** 2 - r1, r2 = (1.15 * rad) ** 2, (2.5 * rad) ** 2 - roi = depth_m[y0:y1, x0:x1] - mask = (d2 >= r1) & (d2 <= r2) & (roi > self.min_depth) & (roi < self.max_depth) - vals = roi[mask] - if vals.size < 20: - return None - z = float(np.percentile(vals, 50)) - if z > 2.0: - return None - return z - - def _px_to_cam(self, u: float, v: float, z: float, intr: Dict[str, float]) -> np.ndarray: - return np.array( - [(u - intr["cx"]) * z / intr["fx"], (v - intr["cy"]) * z / intr["fy"], z], - dtype=float, - ) - - def _cam_to_base(self, p_cam: np.ndarray) -> np.ndarray: - T = self._lookup(self.base_frame, self.cam_frame) - if T is None: - raise RuntimeError("TF 缺 base→camera(手眼静态 TF 没起来)") - p = np.ones(4) - p[:3] = p_cam - return (T @ p)[:3] - - def _project_holes( - self, - depth_m: np.ndarray, - pts: Any, - radii: Any, - bbox: Any, - intr: Dict[str, float], - ) -> Optional[Dict[str, Any]]: - """单帧:孔心像素 → 基座系 XYZ。 - - ``hole_visual_only`` 时射线交到已知工件面,不读深度图。 - 否则仍用环形深度(旧路径)。 - """ - if self.hole_visual_only: - return self._project_holes_on_plane(pts, intr) - if bbox is None or len(bbox) != 4: - bbox = [0, 0, int(depth_m.shape[1]), int(depth_m.shape[0])] - holes_px = [ - (float(pts[0][0]), float(pts[0][1]), float(radii[0])), - (float(pts[1][0]), float(pts[1][1]), float(radii[1])), - ] - try: - z_wp = self._surface_depth(depth_m, tuple(int(v) for v in bbox), holes=holes_px) - except Exception: - return None - # 两孔统一用工件表面深度 z_wp(中值,稳健)。 - # 不用每孔的环形深度:通止规逼近时环上会采到更近的规(~88mm vs 面 ~115mm), - # 孔的基座坐标就跟着臂飘、精对准追不动。 - # 法兰相对竖直大约 0.4°,但相机光轴相对法兰大约 30°。深度误差会进 XY: - # 2026-10-09 观测高度实测 dXY/dz ≈ 0.46 mm/mm。z_wp 必须是工件面, - # 不能是规。同一孔在悬停和观测高度上反投影,基座 XY 可以差约 2mm, - # 所以下降之后还要在当前高度再对一次(见 _trim_xy_after_descent)。 - z_left = z_right = z_wp - try: - left_b = self._cam_to_base(self._px_to_cam(pts[0][0], pts[0][1], z_left, intr)) - right_b = self._cam_to_base(self._px_to_cam(pts[1][0], pts[1][1], z_right, intr)) - except Exception: - return None - return { - "left_b": left_b, - "right_b": right_b, - "z_left": float(z_left), - "z_right": float(z_right), - "z_wp": float(z_wp), - } - - def _project_holes_on_plane(self, pts, intr: Dict[str, float]) -> Optional[Dict[str, Any]]: - """小孔关键点像素交到工件面上。深度图不参与。""" - if float(self.surface_z_m) <= 0.0: - self.get_logger().error( - "对孔不用深度图,但 workpiece_surface_z_m 没有配 —— 拒绝反投影" - ) - return None - T = self._lookup(self.base_frame, self.cam_frame) - if T is None: - self.get_logger().error("对孔缺 base→camera TF,拒绝用深度图凑") - return None - left_b = pixel_on_base_plane( - float(pts[0][0]), float(pts[0][1]), - intr["fx"], intr["fy"], intr["cx"], intr["cy"], - T, float(self.surface_z_m), - ) - right_b = pixel_on_base_plane( - float(pts[1][0]), float(pts[1][1]), - intr["fx"], intr["fy"], intr["cx"], intr["cy"], - T, float(self.surface_z_m), - ) - if left_b is None or right_b is None: - self.get_logger().error("孔心射线没交到工件面(相机朝向或工件面高度不对)") - return None - z = float(self.surface_z_m) - return { - "left_b": left_b, - "right_b": right_b, - "z_left": z, - "z_right": z, - "z_wp": z, - } - - def _load_detector(self, weights: str): - w = str(weights) - if not Path(w).is_file(): - raise RuntimeError(f"工件权重不存在: {w}") - from arm_application.pose_detector import is_pose_model - from arm_application.yolo_detector import YoloDetector, build_detector, resolve_weights - - conf = float(self._hole_cfg.get("conf", 0.25)) - iou = float(self._hole_cfg.get("iou", 0.7)) - imgsz = int(self._hole_cfg.get("imgsz", 640)) - if is_pose_model(w): - # pose 模型同时给工件框 + k1/k2 关键点。走自解码实现 —— - # ultralytics 解不了 pose 的 TensorRT engine(见 pose_detector 模块头), - # OnnxWorkpieceDetector 同样只认检测输出。 - det = build_detector( - resolve_weights(w, "auto"), - conf=conf, - iou=iou, - imgsz=imgsz, - ) - elif w.lower().endswith(".onnx"): - from arm_application.onnx_workpiece import OnnxWorkpieceDetector - - det = OnnxWorkpieceDetector( - w, - conf=conf, - imgsz=imgsz, - ) - else: - det = YoloDetector( - resolve_weights(w, "auto"), - device="cpu", - conf=conf, - iou=iou, - imgsz=imgsz, - ) - self.get_logger().info(f"工件检测器已加载: {w}") - return det - - def _det(self): - if self._detector is None: - self._detector = self._load_detector(str(self._weights)) - return self._detector - - def _det_fb(self): - w = str(self._weights_fb or "") - if not w or w == str(self._weights) or not Path(w).is_file(): - return None - if self._detector_fb is None: - self._detector_fb = self._load_detector(w) - return self._detector_fb - - def _iter_dets(self): - yield self._det() - fb = self._det_fb() - if fb is not None: - yield fb - - def _truth_enabled(self) -> bool: - """本节点该不该走"真值孔位"。 - - 只看 ``perception.source``(site.yaml 的 robots[].perception.source 也会 - 合进来):``truth`` = 仿真真值;``yolo``/``external`` = 老老实实跑检测器。 - 真机上永远是后者 —— 这条分支在真机不可达。 - """ - return str(getattr(self, "perception_source", "yolo")) == "truth" - - def _truth_hole_result(self, bgr: np.ndarray, depth_m=None, intr=None) -> Optional[dict]: - """真值孔位(像素 + ROI 框)。拿不到就返回 status=False 的结果并说明原因。 - - 为什么失败也**不**退回检测器:既然明确配了 ``perception.source=truth``, - 说明这台机器上"检测器给不出可信结果"(仿真里合成图过不了真机模型)。 - 退回检测器的后果是**用整幅画面当 ROI**,于是 HoughCircles 在夹爪/通规/ - 台面上找出一对"假孔"(实测间距 108mm,真值 58mm),再被门槛丢掉 —— - 现象是"每拍都丢、最后超时",比直接说"TF 没到"难查得多。 - - ⚠️ 几何用**实测**位姿(``sim_live_pose``)而不是 scene.yaml 的名义位姿: - 工件落地/蠕动后就偏 2~3mm,而规尖(φ6)进 φ7 的孔只有 0.5mm 余量 —— - 按名义位姿算的孔位会把这一整条链指偏两毫米(现象是"S07 压到工件面、 - 孔却没进去",看起来像柔顺参数不对)。真机上的视觉量的也是"实际在哪"。 - """ - try: - from arm_sim_gazebo import sim_live_pose, sim_scene, truth_holes - except ImportError: - # 真机上没有仿真包,perception.source 也不会是 truth —— 到这里只可能是 - # 有人把 source 配成 truth 却没装仿真包,直接报清楚。 - return None - T = self._lookup(self.cam_frame, str(self.get_parameter("world_frame").value or "world")) - if intr is None and self._info is not None: - k = self._info.k - intr = {"fx": float(k[0]), "fy": float(k[4]), "cx": float(k[2]), "cy": float(k[5])} - i3 = None - if intr is not None: - i3 = (intr.get("fx"), intr.get("fy"), intr.get("cx"), intr.get("cy")) - spec = self._truth_scene(sim_scene) - live = self._truth_live_pose(spec, sim_live_pose) - if live is not None: - spec = live.apply(spec, [str(self._truth_object or spec.operating.part_object)]) - res = truth_holes.locate_holes( - T, i3, (int(bgr.shape[0]), int(bgr.shape[1])), - spec=spec, object_name=self._truth_object, root=None, - ) - if not res.ok: - now = time.monotonic() - if now - self._truth_warn_t > 5.0: - self._truth_warn_t = now - self.get_logger().warn(f"真值孔位不可用:{res.why}") - return { - "status": False, - "msg": f"真值孔位不可用:{res.why}", - "hole_points": [], - "hole_radii": [], - "bbox": None, - "draw_img": truth_holes.draw(bgr, res), - } - # 真值三维 → 基座系(TF 查不到时返回空列表,调用方会退回深度反投影) - base = self._truth_to_base(res.hole_world) - center = self._truth_to_base([res.part_center_world] if res.part_center_world else []) - return { - "status": True, - "msg": f"真值孔位({res.note})", - "hole_points": [[float(p[0]), float(p[1])] for p in res.hole_points], - "hole_radii": [float(r) for r in res.hole_radii], - # ---- 真值的三维:**直接给**,不让调用方再去反投影 -------------- - # 为什么必须这样(2026-09-24 的教训,详见 truth_holes.HoleTruth): - # 孔是贯通孔,孔位正下方是台面通槽,深度相机在孔位看到的是槽底/地面 - # (0.62m)而不是工件面(0.21m)。用深度图反投影会把 58mm 的孔距 - # 算成 169mm、被间距门槛丢掉 —— 现象像"检测坏了",其实真值本来就知道。 - "hole_base": base, - "hole_z": [float(v[2]) for v in base] if base else [0.0, 0.0], - # 工件上表面的世界 z 与基准面:S07 的悬停几何要用它判断 - # "悬停时规尖到底入没入工件",缺了它那项自检只能按 0 算(会误报)。 - "z_wp": float(res.part_top_z or 0.0), - "part_center_base": center, - "bbox": [int(v) for v in res.bbox], - "label": "workpiece(truth)", - "draw_img": truth_holes.draw(bgr, res), - } - - def _truth_scene(self, sim_scene): - """真值路径的场景配置(读一次,缓存)。 - - 为什么缓存:S05 会连着算很多拍,而 scene.yaml 是**静态配置** - (物体位姿那种会变的东西走 ``sim_live_pose``,不从这里读)。 - """ - if self._truth_spec is None: - self._truth_spec = sim_scene.load_scene(None, None) - return self._truth_spec - - def _truth_live_pose(self, spec, sim_live_pose): - """真值路径的"实测位姿"订阅(懒建一次)。没配 pose_info 就返回 None。 - - 为什么这里也要(不只是真值感知节点):二阶段的**孔位**是这条链上 - 精度要求最高的一处(规尖 φ6 进 φ7 的孔),而它和真值感知共用同一份 - "物体现在在哪"的实现(``sim_live_pose``,R5.8)。 - """ - if self._truth_live is None: - pi = getattr(spec, "pose_info", None) - topic = str(getattr(pi, "ros_topic", "") or "") - self._truth_live = sim_live_pose.LiveScenePose(self, topic) if topic else False - if self._truth_live: - self.get_logger().info( - f"真值孔位按**实测**位姿算(订阅 {topic})—— " - f"按名义位姿算会偏 2~3mm,而规尖进孔只有 0.5mm 余量。" - ) - return self._truth_live or None - - def _truth_to_base(self, pts_world: Any) -> list: - """世界系点列 → 基座系点列(TF 查不到时返回空列表,调用方会退回深度反投影)。 - - 为什么不在 truth_holes 里做:那里是**纯几何**模块(没有 ROS、因此能脱机测), - 变换必须由持有 TF 的节点来查。这条分工是刻意的。 - """ - p = [list(map(float, v)) for v in (pts_world or [])] - if not p: - return [] - T = self._lookup(self.base_frame, str(self.get_parameter("world_frame").value or "world")) - if T is None: - self.get_logger().warn( - "查不到 TF 基座→世界 —— 真值三维用不了,本拍退回深度反投影" - "(仿真里那一步会因孔下方是通槽而算错孔距)。" - ) - return [] - out = [] - for v in p: - q = np.ones(4) - q[:3] = v[:3] - out.append([float(x) for x in (T @ q)[:3]]) - return out - - def _detect_holes_img(self, bgr: np.ndarray, *, skip_center_gate: bool, - depth_m: np.ndarray = None, intr: dict = None) -> dict: - """跑一次孔检测。第二次调用(``skip_center_gate=True``)允许整幅画面当 ROI。 - - 为什么第二次要放宽到整幅:走到那一步时调用方的处境是"**没找到工件框**, - 但可能已经看得见孔了"。不放宽的话会停在"未检测到工件"上 —— 而这恰恰是 - "模型没出框、孔明明在画面里"的情形(换相机/换画面域、或模型漏检时会出现)。 - 放宽不等于乱认:环半径区间、两孔间距、居中门控这些判据都还在。 - """ - if self._truth_enabled(): - res = self._truth_hole_result(bgr, depth_m=depth_m, intr=intr) - if res is not None: - return res - last = {} - for det in self._iter_dets(): - res = detect_holes( - bgr, det, config=self._hole_cfg, skip_center_gate=skip_center_gate, - depth_m=depth_m, intr=intr, - ) - last = res - if res.get("status"): - return res - if (not res.get("status")) and res.get("gate_block") and not skip_center_gate: - res = detect_holes( - bgr, det, config=self._hole_cfg, skip_center_gate=True, - depth_m=depth_m, intr=intr, allow_full_frame_roi=True, - ) - last = res - if res.get("status"): - return res - elif (not res.get("status")) and skip_center_gate: - res = detect_holes( - bgr, det, config=self._hole_cfg, skip_center_gate=True, - depth_m=depth_m, intr=intr, allow_full_frame_roi=True, - ) - last = res - if res.get("status"): - return res - return last - - def _best_bbox(self, bgr: np.ndarray, conf: Optional[float] = None) -> Optional[Tuple[int, int, int, int]]: - if self._truth_enabled(): - # 真值模式:工件框由场景几何投出来。**必须走这条路**,不能落到检测器上: - # 检测器在仿真里出不了框,S05 的"粗居中"就会拿整幅画面当工件, - # 于是把"画面中心 ≠ 工件中心"算成 58.8mm 偏差,白白横移。 - res = self._truth_hole_result(bgr) - if res is not None and res.get("status") and res.get("bbox"): - return tuple(int(v) for v in res["bbox"]) # type: ignore[return-value] - return None - thr = float(conf if conf is not None else min(0.12, float(self._hole_cfg.get("conf", 0.25)))) - min_area = 4000.0 - best = None - best_area = -1.0 - for det in self._iter_dets(): - dets = det.detect( - bgr, - conf=thr, - iou=float(self._hole_cfg.get("iou", 0.7)), - imgsz=int(self._hole_cfg.get("imgsz", 640)), - ) - for d in dets: - area = float(getattr(d, "area", 0.0) or 0.0) - if area < min_area: - continue - if area > best_area: - best, best_area = d, area - if best is None: - return None - bbox = tuple(int(v) for v in best.xyxy) # type: ignore[assignment] - h, w = bgr.shape[:2] - if self._bbox_on_border(bbox, w, h): - return None - return bbox # type: ignore[return-value] - - def _bbox_on_border( - self, bbox: Any, w: int, h: int, margin_px: Optional[int] = None - ) -> bool: - """框是否被画面边缘切到(= 只看到工件的一部分,不是整个工件)。 - - 为什么这种框一个都不能用(2026-10-08 真机 arm 89 实测) - -------------------------------------------------------- - 粗居中要的是**框中心落在工件的哪个位置**,再对那个点做深度反投影。 - 框被边缘切掉时,框中心根本不在工件上 —— 真机那一帧:: - - snap_coarse_0: 工件 bbox=(0, 142, 97, 222) 中心=(48,182) - base=(0.280,-0.747)[深度] 偏差=211.5mm - - ``x0=0`` 就是左边缘切的。反投影出来的 (0.280,-0.747) 落在工作盒外 - 197mm,而下一步**没有判误检,而是"截断到盒边"照样横移** 56mm, - 把臂带离工件 ⇒ 精定位再也看不到 k1/k2 ⇒ ``exit=4``。 - - 同一个判据顺手挡掉另一种退化输入:YOLO 空框时兜底用的"孔检测器 bbox" - 在真机那帧是 ``[0, 0, 847, 479]``(整幅画面,四边全贴边)。 - """ - if margin_px is None: - margin_px = int(getattr(self, "coarse_border_px", 2)) - if bbox is None or len(bbox) < 4 or w <= 0 or h <= 0: - return True - x0, y0, x1, y1 = (float(v) for v in bbox[:4]) - m = float(margin_px) - return x0 <= m or y0 <= m or x1 >= (w - 1) - m or y1 >= (h - 1) - m - - def _coarse_target_reject( - self, - p_base: np.ndarray, - gxy: np.ndarray, - max_offset_m: Optional[float] = None, - ) -> Optional[str]: - """粗居中的目标点是不是**误检**。返回 None = 可信;否则返回拒绝原因。 - - 为什么必须能在**移动前**否掉(2026-10-08 真机 arm 89,exit=4) - -------------------------------------------------------------- - 真机那一帧:: - - snap_coarse_0: base=(0.280,-0.747)[深度] 偏差=211.5mm - 目标超出工作盒,已截断: (0.280,-0.747,0.320) → (0.280,-0.545,0.320) - coarse Δ=(-56,-2,-0)mm ← 臂被带离工件 56mm - snap_fine_*: 两孔基座间距 210.0/213.2/212.2mm 不像 k1/k2,丢弃本拍 - 二阶段失败 exit=4 - - 工件其实在 (0.5,-0.12) 一带 —— 也就是说这个"截断"不是安全兜底, - 而是**把一次误检变成了对机械臂的一条真实横移指令**:越界只是被夹到盒边, - 臂照样走出去。这就是规矩里禁的"宽容降级":把"没检查"伪装成"检查通过"。 - - 两条判据(都是"盒外/离谱 ⇒ 判误检",不是"夹到盒边继续"): - - 1. 目标点落在 ``workspace_xyz_*`` 的 XY 之外(含 5mm 余量)—— 一阶段刚锁 - 定时臂就在工件上方,工件**不该**在盒外; - 2. 目标点离当前夹爪轴线超过 ``coarse_max_offset_m``(缺省 0.08m)—— 粗居中 - 是"把臂挪到工件正上方",合理位移是厘米级;十几厘米只可能是坏读数 - (2026-10-16 三次 110mm 回撤,0.12 放行了)。 - - 注意:判误检后**原地不动**,由精定位(直接量 k1/k2)继续。不动的代价只是 - "少挪一次",而挪错的代价是精定位彻底看不到孔 —— 所以这里必须选不动。 - """ - if max_offset_m is None: - max_offset_m = float(getattr(self, "coarse_max_offset_m", 0.08)) - p = np.asarray(p_base, dtype=float).reshape(3) - if not np.all(np.isfinite(p[:2])): - return "目标点非有限值(深度/三角化失败)" - lo = np.asarray(getattr(self, "ws_min", None), dtype=float).reshape(-1) - hi = np.asarray(getattr(self, "ws_max", None), dtype=float).reshape(-1) - if lo.size >= 2 and hi.size >= 2: - margin = 0.005 - for i, name in ((0, "x"), (1, "y")): - if p[i] < lo[i] - margin or p[i] > hi[i] + margin: - return ( - f"目标 {name}={p[i]:.3f} 在工作盒 [{lo[i]:.3f},{hi[i]:.3f}] 外 " - f"⇒ 反投影/检测坏了" - ) - g = np.asarray(gxy, dtype=float).reshape(-1) - if g.size >= 2: - d = float(np.hypot(p[0] - g[0], p[1] - g[1])) - if d > max_offset_m: - return ( - f"目标离夹爪轴线 {d*1000:.1f}mm > 上限 {max_offset_m*1000:.0f}mm " - f"⇒ 不像'臂已在工件上方'的粗居中量" - ) - return None - - def _gauge_xy(self, Tee: np.ndarray) -> np.ndarray: - """夹爪/通止规轴线(法兰原点 + hover_offset)在基座系 XY。 - - 退路用(视觉规尖不可用时)。注意它假设"规和法兰同轴"——2026-10-08 真机实测 - 该假设不成立(规偏出 ~10mm),所以**不是**首选,见 _tip_offset_from_depth。 - """ - p = Tee[:3, 3] - R = Tee[:3, :3] - off = R @ np.array([self.hover_offset[0], self.hover_offset[1], 0.0]) - return np.array([p[0] + off[0], p[1] + off[1]]) - - def _tip_offset_from_depth( - self, - depth_m: np.ndarray, - intr: Dict[str, float], - Tee: np.ndarray, - z_wp_cam: Optional[float] = None, - ) -> Tuple[Optional[np.ndarray], Optional[float], str]: - """从一帧深度里找**规尖**,返回 (规尖相对法兰的基座 XY 偏移, 工具长, 说明)。 - - 找不到/不可信时返回 (None, None, 原因)。判据(每条都能真的失败): - 1. 只看法兰轴线附近的**中央竖带**——规就夹在爪里,不会跑到画面边上; - 2. 多个连通域里取画面**更靠下**(v 更大)的那一个,不按面积、也不按 - 「最接近配置工具长」——按面积会选爪子;贴配置长会选法兰轴上的假深点 - (2026-10-09 真机工具长 225mm、偏移约 0,残差 0.14mm 但孔偏了); - 3. 有同一帧工件面深度时,只留**比工件面至少近 8mm** 的像素。相机前倾 - ~30°,规尖沿光轴只比面近十来毫米(2026-10-09 观测高度:面 127mm、 - 尖 115mm)。再往前砍 15mm 会把尖切掉,只剩更近的夹爪/杆身(~80mm), - 反投影偏移 ~2mm,残差 0.2mm 看着达标,针却偏在孔沿上。 - 没给工件面深度时,退回固定近端(默认 150mm); - 4. 反投出的"法兰 z − 规尖 z"必须落在 [tip_len_min, tip_len_max], - 并且基座 z 要比工件面高出一截 —— 挡住"深度读到台面/工件"。 - - ⚠️ 工具长这一项**只在单帧内**可信;实测它会跳(192~223mm)——规尖细、反光, - 掠射角下深度容易丢,丢了以后"最深有效像素"就往上跑、工具长只会**变短**。 - XY 偏移对这件事不敏感(杆细且接近竖直),见 _refresh_tip_offset。 - """ - import cv2 - - h, w = depth_m.shape - # 8mm:3mm 挡不住深度噪声(工件漏进来,工具长测成 296–315mm); - # 15mm 又把真规尖切掉(面 127mm、尖 115mm,只剩夹爪)。两条都在真机上红过。 - wp_gap = 0.008 - # z_wp 只在像相机深度时才当上限(真机孔 ~0.13–0.18m)。基座 z~0.03 会把近端切空。 - _z_wp = float(z_wp_cam) if z_wp_cam is not None else 0.0 - if 0.08 <= _z_wp <= 0.45: - ceiling = min(_z_wp - wp_gap, self.tip_max_m) - ceil_s = f"比工件面{_z_wp*1000:.0f}近{wp_gap*1000:.0f}" - else: - ceiling = self.tip_near_m - ceil_s = f"固定近端{self.tip_near_m*1000:.0f}" - valid = (depth_m > self.tip_min_m) & (depth_m < self.tip_max_m) - near = (valid & (depth_m < ceiling)).astype(np.uint8) - band = np.zeros_like(near) - half = max(1, int(self.tip_band_frac * w)) - c0, c1 = int(intr["cx"]) - half, int(intr["cx"]) + half - band[:, max(0, c0):min(w, c1)] = 1 - near = near & band - if int(near.sum()) < self.tip_min_px: - return None, None, ( - f"近端(<{ceiling*1000:.0f}mm,{ceil_s})中央竖带内像素 " - f"{int(near.sum())} < {self.tip_min_px}" - ) - n, lab, stats, _ = cv2.connectedComponentsWithStats(near, 8) - if n <= 1: - return None, None, "近端无连通域(规不见了吗)" - - # 掩膜已经丢掉贴着工件面的像素。基座 z 再挡一层:反投影落在面上的 - # 仍不是规尖。裕量 8mm 而不是 20mm——观测高度规尖离面只有约 15mm, - # 20mm 会把真尖一起丢掉(2026-10-09)。悬停时尖离面约 75mm,8mm 仍够。 - surf = float(getattr(self, "surface_z_m", 0.0) or 0.0) - above_surface_m = 0.008 - cands = [] - stuck = 0 - for i in range(1, n): - if int(stats[i, 4]) < self.tip_min_px: - continue - ys, xs = np.where(lab == i) - dv = depth_m[ys, xs] - k = float(np.percentile(dv, 97)) - sel = dv >= k - 1e-6 - u = float(np.median(xs[sel])) - v = float(np.median(ys[sel])) - # 用连通域自己的近端深度,不用周围 5×5:规尖只有几像素宽, - # 邻域中值会落到工件面上,尖又被当成面丢掉。 - z_tip = float(np.median(dv[sel])) - try: - p_tip = self._cam_to_base(self._px_to_cam(u, v, z_tip, intr)) - except Exception as exc: # noqa: BLE001 - return None, None, f"规尖反投影失败(手眼 TF 缺?): {exc}" - tool_len = float(Tee[2, 3]) - float(p_tip[2]) - if not (self.tip_len_min <= tool_len <= self.tip_len_max): - continue - if surf > 0.0 and float(p_tip[2]) < surf + above_surface_m: - stuck += 1 - continue - off = np.array( - [float(p_tip[0]) - float(Tee[0, 3]), float(p_tip[1]) - float(Tee[1, 3])] - ) - cands.append((off, tool_len, u, v)) - if not cands: - if stuck: - return None, None, ( - f"近端点贴着工件面(高出不足 {above_surface_m*1000:.0f}mm),不是规尖" - ) - return None, None, ( - f"反投影出的工具长不在 " - f"[{self.tip_len_min*1000:.0f},{self.tip_len_max*1000:.0f}]mm —— " - f"近端那个物体不是规" - ) - # v 优先:画面更靠下的才是伸向工件的那一端。工具长只作同分时的次序, - # 不拿去贴近 site.yaml —— 贴配置长会把法兰轴上的点当成规尖。 - off, tool_len, u, v = max(cands, key=lambda c: (c[3], c[1])) - return off, tool_len, f"px=({u:.0f},{v:.0f}) 工具长 {tool_len*1000:.0f}mm {ceil_s}" - - def _refresh_tip_offset(self) -> None: - """攒够**一致**样本后,定下并**冻结**「规尖相对法兰」的偏移。 - - 判据只有一条:取中位数剔掉外点后,还要剩 ``tip_calib_n`` 个样本落在 - ``tip_offset_tol_m`` 内。**不再要求"工具长分簇"** —— 实测那样太严: - 规尖像素时有时无,工具长在 203/222mm 之间跳,"工具长最长那一簇"往往只有 - 1~2 拍,永远凑不满 4 拍 ⇒ 永远冻不住 ⇒ 退回"法兰+偏置"(那就白改了)。 - 而"规杆细且接近竖直"⇒ 杆上任一像素反投回基座 XY 都在杆轴 ~3mm 内, - 所以**工具长差不影响偏移**,一致性校验就够。 - 工具长只用来跟 site.yaml 交叉核对(见下面的告警),不参与对准。 - - 为什么必须冻结:偏移是刚体量;逐拍重算会把"规杆略有倾斜"引入的 ±0.2~0.4mm - 抖动带进残差(2026-10-08 真机残差 0.44~0.85mm 来回荡、收不进 0.25mm)。 - """ - if self._tip_off is not None or len(self._tip_samp) < self.tip_calib_n: - return - arr = np.stack([o for o, _t in self._tip_samp]) - med = np.median(arr, axis=0) - inl = np.linalg.norm(arr - med, axis=1) <= self.tip_off_tol - if int(inl.sum()) < self.tip_calib_n: - self.get_logger().warn( - f" 规尖样本 {len(self._tip_samp)} 拍、一致的只有 {int(inl.sum())}/" - f"{self.tip_calib_n}(tol={self.tip_off_tol*1000:.0f}mm)—— 还冻不住,继续采" - ) - return - idx = np.where(inl)[0] - self._tip_off = arr[idx].mean(0) - tl = np.array([self._tip_samp[i][1] for i in idx], dtype=float) - self._tip_len_m = float(np.median(tl)) - cfg = float(self.tool_tip_below_flange_m or 0.0) - agree = "" if cfg <= 0 else ( - ",与 site.yaml 的工具长一致" - if abs(self._tip_len_m - cfg) <= 0.003 - else f" ⚠️ 与 site.yaml 的工具长 {cfg*1000:.0f}mm 差 " - f"{(self._tip_len_m-cfg)*1000:+.0f}mm —— 夹持变动?" - "下降量按 site 的几何走,这时要人工核对(别让规撞进孔)" - ) - self.get_logger().info( - f" 规尖偏移已冻结 = ({self._tip_off[0]*1000:+.1f},{self._tip_off[1]*1000:+.1f})mm" - f"({int(inl.sum())} 拍一致,最大散布 " - f"{float(np.max(np.linalg.norm(arr[idx]-self._tip_off, axis=1)))*1000:.2f}mm," - f"工具长 {self._tip_len_m*1000:.0f}mm{agree})" - " —— 刚体量,对准期间只量这一份" - ) - - def _grab_median_depth(self, n: int) -> Optional[np.ndarray]: - """拍 n 帧深度取时间中值(稳)。""" - deps = [] - for _ in range(max(3, n)): - _, d, _ = self._grab() - if d is not None: - deps.append(np.asarray(d, dtype=np.float32)) - time.sleep(0.025) - if len(deps) < 3: - return None - return np.median(np.stack(deps), axis=0).astype(np.float32) - - def _measure_gauge_state(self): - """悬停时测一次:通止规尖深度 tip_d(恒定,规固定在臂上)、规杆掩码 rod_mask、 - 局部工件面深度 z_wp(规尖周围)。返回 (tip_d, rod_mask, z_wp),相机系米。 - - 金属规杆反光、尖端深度会失效,所以用「杆顶最近深度+固定跨度」阈值分离规杆和工件, - 规尖取杆深度的 97 分位(杆最接近工件的一端);工件面取规杆周围环形的局部中值。""" - import cv2 - depth = self._grab_median_depth(10) - if depth is None: - return None, None, None - h, w = depth.shape - valid = (depth > 0.05) & (depth < 0.30) - if int(valid.sum()) < 200: - return None, None, None - rod_top = float(np.percentile(depth[valid], 2)) # 规杆顶=全图最近 2% - # 规杆掩码:深度 < 杆顶+42mm(规杆深度跨度~40mm),限在中央竖带(规在画面中央) - band = np.zeros_like(valid) - band[:, int(w * 0.40):int(w * 0.62)] = True - thr = rod_top + 0.042 - rod = valid & band & (depth < thr) - if int(rod.sum()) < 200: - return None, None, None - ys, xs = np.where(rod) - tip_d = float(np.percentile(depth[ys, xs], 97)) # 规尖=杆最深处 - z_wp = self._local_wp_depth(depth, rod) # 局部工件面(与下降闭环同一方法) - return tip_d, rod, z_wp - - @staticmethod - def _local_wp_depth(depth: np.ndarray, rod_mask: np.ndarray) -> Optional[float]: - """规杆周围环形(19~61px)的工件面深度中值。规杆图像位置恒定(固定在臂上), - 纯 Z 下降时环形处的工件面深度即 z_wp,随下降 1:1 减小。""" - import cv2 - valid = (depth > 0.05) & (depth < 0.30) - rod_out = cv2.dilate(rod_mask.astype(np.uint8), np.ones((61, 61), np.uint8)).astype(bool) - rod_in = cv2.dilate(rod_mask.astype(np.uint8), np.ones((19, 19), np.uint8)).astype(bool) - ring = rod_out & ~rod_in & valid - if int(ring.sum()) < 30: - return None - return float(np.median(depth[ring])) - - def _descend_above_hole(self, q, Tee, *, target_gap_m=None, step_m=None): - """对准后柔顺轻降,把规尖悬在孔面上方 final_gap_m(不接触)。 - - **下降量只由几何决定**(这条是 2026-10-08 真机修出来的):: - - 规尖到工件面的间隙 = 法兰 Z(正运动学) − 工具长 − 工件面 Z - 需下降 = 该间隙 − final_gap - - 三个量都是确定的:法兰 Z 来自 FK(0.1mm 量级),工具长是标定值,工件面 Z - 是现场实测值(``gauge_assembly.workpiece_surface_z_m``)。 - - ⚠️ 为什么**不再**让深度测量决定下降量(或叫停)—— - 2026-09-29:``z_wp``("规杆外环形"深度中值)报 141mm,几何真值 53mm, - 于是多降 86mm 把规撞进工件(工件被推走 5mm)。 - 2026-10-08:同一个读数又反着错 —— 悬停时报 144mm(几何真值 75mm), - 只降 24mm 后又翻成 **−7mm**,触发 ``SAFE_FLOOR`` 把轻降停在离面 ~50mm 处, - 永远到不了 2mm。同一套读数在两个方向上各错一次、幅度 150mm 量级、还随位姿 - 乱跳 —— 它对"能降多少"和"该不该停"都没有发言权。 - - 所以现在深度读数**只做交叉核对**:与几何对不上就喊出来(把"测距方法待修" - 摆在日志里),但不再参与任何决策。真正的安全由三条**物理/几何**机制保证: - - 1. 几何预算上限 ``descent_budget_m``(与 ``gauge_fsm.hover_z_guard`` 同源)—— - FK/配置异常时也压不下去; - 2. 腕部 FT 接触检测:``force.z`` 相对悬空基线突变 ⇒ 立即停 + 回退 1mm; - 3. 任一步 ``_goto`` 没走到位(多半是碰到东西/被挡)⇒ 停止,保持当前高度。 - """ - # final_descent_enable:多走多拍降到贴面 final_gap(约 2mm)。 - # 关掉时(--no-descent)仍做**观测下降**,停在 observe_gap(约 15mm)。 - # 单次精拍补交路径传入观察高;锁 XY 实验传入贴面 final_gap。 - if target_gap_m is None: - target_gap = ( - self.final_gap_m if self.final_descent_enable else self.observe_gap_m - ) - else: - target_gap = float(target_gap_m) - step_cap = 0.004 if step_m is None else float(step_m) - kind = ( - "贴面轻降" - if target_gap <= float(self.final_gap_m) + 1e-6 - else "观测下降" - ) - self._state("descend_above_hole") - tip_len = float(self.tool_tip_below_flange_m) - surf = float(self.surface_z_m) - if tip_len <= 0.0 or surf <= 0.0 or self.descent_budget_m is None: - # 缺几何就没法算安全下降量 —— 停在悬停高,**绝不**拿测距去赌 - # (2026-09-29 撞工件就是"没有几何、只有测距"时发生的)。配置缺键 - # 必须当失败处理(R1.1),不能静默降级成"按测量降"。 - self.get_logger().error( - "轻降缺少几何:tool_tip_below_flange_m / workpiece_surface_z_m / " - "descent_budget 至少一个没配 —— 停在悬停高,不下降。" - "请补 site.yaml 的 robots[].gauge_assembly 两把尺子。" - ) - return False, q, Tee - - gap0 = float(Tee[2, 3]) - tip_len - surf # 几何间隙(唯一决定下降量的量) - descent = gap0 - target_gap - if descent > self.descent_budget_m + 5e-4: - self.get_logger().warn( - f"轻降超过配置几何预算:按 FK 算需降 {descent * 1000:.1f}mm > " - f"预算 {self.descent_budget_m * 1000:.1f}mm" - f"(当前法兰 {Tee[2, 3]:.4f} 与配置悬停 {self.hover_z:.4f} 不符)" - "—— 收到预算(宁高勿撞)" - ) - descent = self.descent_budget_m - - # ---- 深度读数只做交叉核对(无权叫停、无权加码)---- - tip_d, _rod_mask, z_wp = self._measure_gauge_state() - if tip_d is not None and z_wp is not None: - gap_meas = float(z_wp) - float(tip_d) - if abs(gap_meas - gap0) > 0.010: - self.get_logger().warn( - f"深度测距与几何不符:测量间隙 {gap_meas * 1000:.1f}mm vs " - f"几何 {gap0 * 1000:.1f}mm(差 {(gap_meas - gap0) * 1000:+.1f}mm)" - "—— 本次**按几何下降**,深度读数不参与决策" - "(测距方法待修,见 site.yaml 的 final_descent_enable 注释)" - ) - else: - self.get_logger().warn( - "未测到通止规/工件(规可能不在视野)—— 深度核对跳过,仍按几何下降" - "(下降量不依赖规是否可见)" - ) - - self.get_logger().info( - f"{kind}准备: 几何间隙 {gap0 * 1000:.1f}mm → 目标 {target_gap * 1000:.1f}mm," - f"需下降 {descent * 1000:.1f}mm(法兰 {Tee[2, 3]:.4f} − 工具长 {tip_len * 1000:.0f}mm" - f" − 工件面 {surf:.4f};很慢,XY 保持)" - ) - if descent <= 0.001: - self.get_logger().info("规尖已在目标间隙附近,无需下降") - self.descent_final_gap_m = gap0 - return True, q, Tee - # 腕部力基线(规尖悬空时的 force.z),用于接触检测兜底 - base_fz = self._ft_fz - if base_fz is None: - self.get_logger().warn( - "轻降开始前还没收到腕部 FT —— 接触兜底不生效(只剩几何预算与 _goto 两道)" - ) - # 步数上限:预算 ≤~80mm、单步 ≤4mm ⇒ 20 步足够;给 60 步余量,真正收工靠 - # 几何预算(下面的 remaining),不靠步数。 - for step_i in range(60): - if not rclpy.ok(): - return False, q, Tee - # 每步把 FT 轴向力打进日志:这是"停住到底是碰到了还是没跟上"的**唯一** - # 直接证据(2026-10-08 排查轻降在离面 ~4mm 处停住时,就靠这一行区分 - # "接触"与"驱动没跟上"——没有它只能靠猜)。 - if self._ft_fz is None: - ft_txt = "FT_fz=None" - elif base_fz is None: - ft_txt = f"FT_fz={self._ft_fz:+.2f}N(无基线)" - else: - ft_txt = ( - f"FT_fz={self._ft_fz:+.2f}N(基线 {base_fz:+.2f}," - f"Δ{self._ft_fz - base_fz:+.2f})" - ) - self.get_logger().info( - f" 轻降第 {step_i + 1} 步: 法兰 Z={Tee[2, 3]:.4f} {ft_txt}" - ) - # 力觉兜底:规尖一碰工件 force.z 突变,立即停并回退 1mm。 - # 离面还远时力会漂几牛,不能当碰到。 - gap_now = float(Tee[2, 3]) - tip_len - surf - if ( - base_fz is not None - and self._contact_detected(base_fz) - and not contact_armed_by_gap( - gap_now, self.observe_gap_m, self.final_gap_m - ) - ): - if not getattr(self, "_ft_gap_disarmed_logged", False): - self._ft_gap_disarmed_logged = True - armed_m = contact_armed_gap_m( - self.observe_gap_m, self.final_gap_m - ) - self.get_logger().info( - f" ΔFz 超门槛但间隙 {gap_now * 1000:.1f}mm > 接触门控 " - f"{armed_m * 1000:.1f}mm,不当作碰到" - ) - if ( - base_fz is not None - and contact_armed_by_gap( - gap_now, self.observe_gap_m, self.final_gap_m - ) - and self._contact_detected(base_fz) - ): - self.get_logger().warn("腕部力突变(规尖触到工件),立即停止并回退 1mm(安全优先)") - p = Tee[:3, 3].copy() - ok, q, Tee = self._goto( - q, Tee, np.array([p[0], p[1], p[2] + 0.001]), verticalize=True, - tol_m=0.0005, tol_tilt=self.vert_tol_rad * 2.0, tag="descend_backoff", - v=self.final_descent_speed, max_hops=3, hold_xy=True, settle_s=0.25, - ) - self._pin(q) - self.descent_final_gap_m = float(Tee[2, 3]) - tip_len - surf - return True, q, Tee - # 用 FK 现算剩余下降量(不是累加指令)—— 单步没走到也不会积累误差。 - remaining = (float(Tee[2, 3]) - tip_len - surf) - target_gap - if remaining <= 1e-4: - break - step = min(remaining, step_cap) # 贴面默认 ≤4mm;观察高 20mm,见 step_m - p = Tee[:3, 3].copy() - target = np.array([p[0], p[1], p[2] - step]) - ok, q, Tee = self._goto( - q, Tee, target, verticalize=True, - tol_m=0.0004, tol_tilt=self.vert_tol_rad * 2.0, tag="descend_gentle", - v=self.final_descent_speed, max_hops=4, hold_xy=True, settle_s=0.30, - ) - self._pin(q) - if not ok: - self.get_logger().warn("轻降中途未到位,停止(保持当前高度,安全优先)") - self.descent_final_gap_m = float(Tee[2, 3]) - tip_len - surf - return False, q, Tee - # 收尾:按几何如实汇报最终间隙(不再用那个错 150mm 的深度读数当结论) - gap_f = float(Tee[2, 3]) - tip_len - surf - self.descent_final_gap_m = gap_f - lvl = self.get_logger().info if gap_f >= 0.0 else self.get_logger().warn - lvl( - f"=== {kind}完成: 规尖悬在孔面上方 ≈{gap_f * 1000:.1f}mm(几何:法兰 " - f"{Tee[2, 3]:.4f} − 工具长 {tip_len * 1000:.0f}mm − 工件面 {surf:.4f};" - f"目标 {target_gap * 1000:.1f}mm,不接触)===" - ) - return True, q, Tee - - def _stamp_bias( - self, - rec: Dict[str, Any], - *, - tgt_b: np.ndarray, - gxy: np.ndarray, - tag: str, - ) -> Dict[str, Any]: - """把基座残差拆成视线 / 画面右,写入记录。投影退化时键仍在、值为 None。""" - rec = dict(rec) - rec["tag"] = tag - if self.hole_keypoint_once and getattr(self, "hole_once_lock_xy_descend", False): - rec["scheme"] = "keypoint_once_look_ff" - elif self.hole_keypoint_once: - rec["scheme"] = "keypoint_once" - else: - rec["scheme"] = "multi_snap" - rec["cam_frame"] = self.cam_frame - rec["image_topic"] = self.image_topic - err_vec = np.array( - [float(tgt_b[0]) - float(gxy[0]), float(tgt_b[1]) - float(gxy[1])], - dtype=float, - ) - rec["err_xy_m"] = [round(float(err_vec[0]), 5), round(float(err_vec[1]), 5)] - rec["workspace_clipped"] = bool(self._ws_clipped) - T_cam = self._lookup(self.base_frame, self.cam_frame) - rec["along_look_mm"] = None - rec["along_right_mm"] = None - rec["look_xy"] = None - rec["right_xy"] = None - rec["cam_origin_base_m"] = None - if T_cam is None: - self.get_logger().warn(f"{tag}:没有 cam TF,残差分解缺轴") - return rec - rec["cam_origin_base_m"] = [ - round(float(T_cam[0, 3]), 5), - round(float(T_cam[1, 3]), 5), - round(float(T_cam[2, 3]), 5), - ] - decomp = decompose_base_xy(err_vec, T_cam) - if decomp is None: - self.get_logger().warn(f"{tag}:光轴水平投影退化,残差分解缺轴") - return rec - rec["along_look_mm"] = round(float(decomp["along_look_m"]) * 1000.0, 2) - rec["along_right_mm"] = round(float(decomp["along_right_m"]) * 1000.0, 2) - rec["look_xy"] = [round(float(v), 5) for v in decomp["look_xy"]] - rec["right_xy"] = [round(float(v), 5) for v in decomp["right_xy"]] - self.get_logger().info( - f"[{tag}] 残差分解 视线={rec['along_look_mm']:+.2f}mm " - f"画面右={rec['along_right_mm']:+.2f}mm " - f"ΔXY=({err_vec[0]*1000:+.2f},{err_vec[1]*1000:+.2f})mm\n" - f" 画面右为正:孔在规的画面右侧(目视就是规偏左)。" - f"视线为正:孔在光轴水平投影前方(工件面写低 / 交深了会往这偏)。" - ) - return rec - - def _observe_holes(self, q, Tee, final: Dict[str, Any], *, tag: str): - """核验拍:只记账,不改 XY。拍不到就保持原 final,并标明没复测。""" - try: - _bgr, _depth_m, _intr, res = self._snap_holes(skip_center_gate=True) - except Exception as exc: # noqa: BLE001 - self.get_logger().error(f"{tag}失败,残差仍是开环指令值:{exc}") - final = dict(final) - final["residual_remeasured"] = False - return q, Tee, final - if not res.get("status"): - self.get_logger().error( - f"{tag}丢孔({res.get('msg')}),残差仍是开环指令值,不是 hop 到位" - ) - final = dict(final) - final["residual_remeasured"] = False - return q, Tee, final - hb = res.get("hole_base") - z_wp = float(res.get("z_wp") or 0.0) - if hb is None or len(hb) != 2 or z_wp <= 0.0: - self.get_logger().error(f"{tag}没有孔的基座坐标,残差未复测") - final = dict(final) - final["residual_remeasured"] = False - return q, Tee, final - left_b = np.asarray(hb[0], dtype=float) - right_b = np.asarray(hb[1], dtype=float) - k1_b, k2_b = (left_b, right_b) if self.k1_label == "left" else (right_b, left_b) - tgt_b = k1_b if self.target_hole == "k1" else k2_b - Tee_now = self._lookup(self.base_frame, self.ee_frame) - if Tee_now is not None: - Tee = Tee_now - pts = res.get("hole_points") or [] - if self._tip_off is not None: - gxy = np.array( - [float(Tee[0, 3]) + float(self._tip_off[0]), - float(Tee[1, 3]) + float(self._tip_off[1])] - ) - tip_src = "视觉规尖(开环本步)" - else: - gxy = self._gauge_xy(Tee) - tip_src = "法兰+偏置" - err = float(np.hypot(float(tgt_b[0]) - gxy[0], float(tgt_b[1]) - gxy[1])) - rec = { - "ok": err <= self.align_tol, - "arm": self.prefix.rstrip("_"), - "target_hole": self.target_hole, - "k1_base_m": [round(float(v), 5) for v in k1_b], - "k2_base_m": [round(float(v), 5) for v in k2_b], - "k1_px": ( - [round(float(pts[0][0]), 1), round(float(pts[0][1]), 1)] - if len(pts) >= 2 else None - ), - "k2_px": ( - [round(float(pts[1][0]), 1), round(float(pts[1][1]), 1)] - if len(pts) >= 2 else None - ), - "workpiece_surface_z_m": round(z_wp, 4), - "gauge_xy_m": [round(float(gxy[0]), 5), round(float(gxy[1]), 5)], - "gauge_source": tip_src, - "tip_offset_m": ( - [round(float(self._tip_off[0]), 5), round(float(self._tip_off[1]), 5)] - if self._tip_off is not None else None - ), - "residual_mm": round(err * 1000.0, 2), - "hover_z_m": round(float(Tee[2, 3]), 4), - "residual_remeasured": True, - "align_trusted": self._tip_off is not None, - } - rec = self._stamp_bias(rec, tgt_b=tgt_b, gxy=gxy, tag=tag) - snaps = list(final.get("snaps") or []) - snaps.append({k: rec[k] for k in ( - "tag", "residual_mm", "err_xy_m", "along_look_mm", "along_right_mm", - "k1_base_m", "k2_base_m", "k1_px", "k2_px", "gauge_xy_m", - "gauge_source", "tip_offset_m", "hover_z_m", "workspace_clipped", - ) if k in rec}) - merged = dict(final) - merged.update(rec) - merged["snaps"] = snaps - merged["ok"] = bool(rec["ok"] and rec["align_trusted"]) - draw = res.get("draw_img") - if draw is None: - draw = _bgr - if draw is not None: - self._publish_overlay(draw) - self._publish_result(merged) - self.get_logger().info( - f"[{tag}] k1=({k1_b[0]:.4f},{k1_b[1]:.4f}) " - f"工具=({gxy[0]:.4f},{gxy[1]:.4f})[{tip_src}] " - f"复测残差={err*1000:.2f}mm(此拍不改 XY)" - ) - return q, Tee, merged - - def _oneshot_align_move(self, q, Tee, tgt_b, gxy, err): - """单次精拍只走这一步。返回 (q, Tee, 是否走了)。""" - if err <= self.align_tol: - self.get_logger().info( - f"单次精拍开环残差 {err*1000:.2f}mm 已在容差内,这一步不横移" - ) - return q, Tee, False - raw = np.array([float(tgt_b[0]) - float(gxy[0]), float(tgt_b[1]) - float(gxy[1])]) - n_raw = float(np.linalg.norm(raw)) - max_step = oneshot_align_step_m(n_raw) - step = raw - if n_raw > max_step + 1e-9: - step = raw * (max_step / n_raw) - self.get_logger().warn( - f" 单次精拍步长 {n_raw*1000:.1f}mm 超过 " - f"{max_step*1000:.0f}mm(不像框心到 k1 的半孔距),截断。" - "截断后下降补 XY 也补不完,会留下厘米级残差" - ) - else: - self.get_logger().info( - f" 单次精拍这一步走完 {n_raw*1000:.1f}mm(框心到目标孔,不再用 12mm 封顶)" - ) - move = np.array([ - float(Tee[0, 3]) + float(step[0]), - float(Tee[1, 3]) + float(step[1]), - self.hover_z, - ]) - hop_tol = 0.00022 if err < 0.003 else max(0.0003, min(0.0005, 0.25 * err)) - hop_v = self.align_speed if err > 0.005 else min(self.align_speed, 0.016) - self._state("align_move_once") - ok, q, Tee = self._goto( - q, Tee, move, verticalize=True, - tol_m=hop_tol, tol_tilt=self.vert_tol_rad * 2.0, - tag="align_once", v=hop_v, - max_hops=8, settle_s=max(0.35, self.settle_sec), - min_dur=0.35, strict_xy=True, - ) - self._pin(q) - if not ok: - self.get_logger().warn( - "单次精拍这一步没走到位;残差以随后核验拍为准,不把 hop 容差当对上" - ) - return q, Tee, True - - def _vendor_movel_tcp(self, xyz, vel: float) -> bool: - """进程内厂家 MoveL:TCP 目标,不杀控制栈。""" - lib = ros2_root() / "scripts" / "lib" - if str(lib) not in sys.path: - sys.path.insert(0, str(lib)) - from flexiv_movel_ipc import read_ack, read_done, write_request - - seq = int(time.monotonic() * 1000.0) % 1_000_000_000 - write_request( - seq, float(xyz[0]), float(xyz[1]), float(xyz[2]), False, float(vel) - ) - t0 = time.monotonic() - acked = False - while time.monotonic() - t0 < 90.0: - if not rclpy.ok(): - return False - self._spin(0.02) - if not acked: - if read_ack() == seq: - acked = True - elif time.monotonic() - t0 > 2.0: - self.get_logger().error( - "厂家 MoveL 2s 内没 ack —— 硬件没接 /tmp/flexiv_movel_req。" - "真机环境重建 install/ 后再跑,不许改走关节折线假装成功" - ) - return False - continue - got = read_done() - if got is not None and int(got[0]) == seq: - if not got[1]: - self.get_logger().error(f"厂家 MoveL 失败:{got[2]}") - return bool(got[1]) - self.get_logger().error("厂家 MoveL 90s 内没有 done") - return False - - def _once_ff_diagonal_to_gap(self, q, Tee, *, target_gap_m): - """悬停点一条 MoveL 收到 ``target_gap_m``。k=0 只降 Z;k>0 再沿 -look 收 XY。""" - self._state("ff_diagonal_movel") - tip_len = float(self.tool_tip_below_flange_m) - surf = float(self.surface_z_m) - if tip_len <= 0.0 or surf <= 0.0: - self.get_logger().error("贴面下降缺工具长/工件面,停在悬停高") - return False, q, Tee - if self._tip_off is None: - self.get_logger().error("贴面下降需要悬停规尖偏移,没有就不许用法兰凑") - return False, q, Tee - k = float(self.once_ff_look_per_m) - look_xy = np.array([0.0, 0.0], dtype=float) - T_cam = self._lookup(self.base_frame, self.cam_frame) - if k > 1e-9: - if T_cam is None: - self.get_logger().error("没有 cam TF,视线轴算不出,不下发") - return False, q, Tee - axes = cam_xy_bias_axes(T_cam) - if axes is None: - self.get_logger().error("光轴水平投影退化,不下发") - return False, q, Tee - look_xy, _right = axes - elif T_cam is not None: - axes = cam_xy_bias_axes(T_cam) - if axes is not None: - look_xy, _right = axes - gap0 = float(Tee[2, 3]) - tip_len - surf - descent = gap0 - float(target_gap_m) - packed = once_ff_tcp_xyz( - [Tee[0, 3], Tee[1, 3]], - self._tip_off, - look_xy, - descent, - k, - surf, - target_gap_m, - ) - if packed is None: - if descent <= 0.001: - self.get_logger().info("规尖已在目标间隙附近,无需斜线") - self.descent_final_gap_m = gap0 - return True, q, Tee - self.get_logger().error("视线前馈算不出 ΔXY,停在悬停高") - return False, q, Tee - tcp, dxy = packed - n_xy = float(np.hypot(float(dxy[0]), float(dxy[1]))) - if n_xy > ONCE_TRIM_REFUSE_M + 1e-9: - self.get_logger().error( - f"视线前馈 {n_xy * 1000:.1f}mm 超过 {ONCE_TRIM_REFUSE_M * 1000:.0f}mm," - "不像交平面那几毫米,停在悬停高" - ) - return False, q, Tee - z_flange = flange_z_for_gap_m(tip_len, surf, target_gap_m) - flange_tgt = np.array( - [ - float(Tee[0, 3]) + float(dxy[0]), - float(Tee[1, 3]) + float(dxy[1]), - z_flange, - ] - ) - self._ws_clipped = False - self._clamp_ws(flange_tgt) - if self._ws_clipped: - self.get_logger().error( - "视线前馈目标被工作盒截断,不下发(不许把孔位改到盒沿)" - ) - return False, q, Tee - self._spin(0.05) - tcp_now = self._fresh_tcp_world() - if tcp_now is None: - self.get_logger().error( - "没有厂家 tcp_pose(话题 " - f"{getattr(self, 'robot_states_topic', '?')} 不新鲜)," - "拒绝用 ROS 规尖绝对坐标发 MoveL" - ) - return False, q, Tee - movel_xyz = once_ff_movel_from_tcp(tcp_now, dxy, descent) - if movel_xyz is None: - self.get_logger().error("厂家 TCP 加上相对位移算不出,停在悬停高") - return False, q, Tee - off_xy = ( - (float(tcp_now[0]) - float(tcp[0]) + float(dxy[0])) * 1000.0, - (float(tcp_now[1]) - float(tcp[1]) + float(dxy[1])) * 1000.0, - ) - scheme = "笛卡尔锁XY只降Z" if n_xy < 1e-6 else "视线前馈斜线" - self.get_logger().info( - f"{scheme}:look=({look_xy[0]:+.3f},{look_xy[1]:+.3f}) " - f"k={k:.3f} 降 {descent * 1000:.1f}mm → " - f"ΔXY=({dxy[0] * 1000:+.2f},{dxy[1] * 1000:+.2f})mm " - f"厂家TCP现=({tcp_now[0]:.4f},{tcp_now[1]:.4f},{tcp_now[2]:.4f}) " - f"MoveL=({movel_xyz[0]:.4f},{movel_xyz[1]:.4f},{movel_xyz[2]:.4f}) " - f"ROS尖目标=({tcp[0]:.4f},{tcp[1]:.4f},{tcp[2]:.4f}) " - f"WORLD相对ROS XY差≈({off_xy[0]:+.1f},{off_xy[1]:+.1f})mm " - f"vel={ONCE_FF_MOVEL_VEL_MPS * 1000:.0f}mm/s" - ) - fl0 = (float(Tee[0, 3]), float(Tee[1, 3]), float(Tee[2, 3])) - ok = self._vendor_movel_tcp(movel_xyz, ONCE_FF_MOVEL_VEL_MPS) - # MoveL 刚切回关节模式:JTC 还握着贴面前的悬停关节。等 2 s 再钉 - # 等于让 vmax=0.05 往悬停留 0.1 rad(2026-10-16 收臂实测多抬 13–20 mm)。 - q2, Tee2 = self._wait_state(0.3) - if q2 is not None and Tee2 is not None: - q, Tee = q2, Tee2 - self._pin(q) - self.descent_final_gap_m = float(Tee[2, 3]) - tip_len - surf - dax = (float(Tee[0, 3]) - fl0[0]) * 1000.0 - day = (float(Tee[1, 3]) - fl0[1]) * 1000.0 - daz = (float(Tee[2, 3]) - fl0[2]) * 1000.0 - self.get_logger().info( - f"贴面走后:法兰 ΔXYZ=({dax:+.2f},{day:+.2f},{daz:+.2f})mm " - f"指令 ΔXY=({dxy[0] * 1000:+.2f},{dxy[1] * 1000:+.2f})mm " - f"间隙 {self.descent_final_gap_m * 1000:.1f}mm " - f"{'到位' if ok else 'MoveL未完成'}" - ) - return bool(ok), q, Tee - - def _trim_xy_keep_hover_tip(self, q, Tee, final: Dict[str, Any], z_target_m=None): - """观察高重交孔,规尖沿用悬停冻住的偏移。只许一跳、XY ≤3mm。 - - 2026-10-13 真机两遍:走后核验 0.4~0.7mm,降后交平面漂 4~5mm;观测高度 - 深度把夹爪当尖,两拍差 8~36mm,重测守卫把该补的 4mm 也拒掉了。悬停规尖 - 只有 0.1mm 量级,沿用它,只补孔 XY。没有冻住的偏移就不许用法兰凑。 - - 同日第二次:两跳合计 +4.3mm X 把近距检测带崩(k1 像素 446→403,间距 - 60→45mm,残差 2.6→14.8mm),流水线还把走之前的 2.61mm 当终值。所以 - 只许一跳、步长 ≤3mm;超过 8mm 根本不动。 - - ``z_target_m`` 有值时这一跳同时收到贴面法兰高(观察高测补偿,斜线一步 - 贴面)。贴面复拍只记账:近了画面更容易漂,不按近距那一拍撤回观察高的解。 - """ - if self._tip_off is None: - self.get_logger().error( - "下降后补 XY 需要悬停冻住的规尖偏移;没有就不许用法兰凑,保持原地" - ) - return q, Tee, final - off = np.asarray(self._tip_off, dtype=float).reshape(2) - final_in = final - z_hold = float(Tee[2, 3]) - - def _measure(src: Dict[str, Any], tag: str): - nonlocal Tee - try: - _bgr, _depth_m, _intr, res = self._snap_holes(skip_center_gate=True) - except Exception as exc: # noqa: BLE001 - self.get_logger().warn(f"{tag}复拍失败,保持原地:{exc}") - return None - if not res.get("status"): - self.get_logger().warn(f"{tag}丢孔({res.get('msg')}),不再改 XY") - return None - hb = res.get("hole_base") - z_wp = float(res.get("z_wp") or 0.0) - if hb is None or len(hb) != 2 or z_wp <= 0.0: - self.get_logger().warn(f"{tag}没有孔的基座坐标,不再改 XY") - return None - left_b = np.asarray(hb[0], dtype=float) - right_b = np.asarray(hb[1], dtype=float) - k1_b, k2_b = ( - (left_b, right_b) if self.k1_label == "left" else (right_b, left_b) - ) - tgt = k1_b if self.target_hole == "k1" else k2_b - Tee_now = self._lookup(self.base_frame, self.ee_frame) - if Tee_now is not None: - Tee = Tee_now - gxy = np.array( - [float(Tee[0, 3]) + float(off[0]), float(Tee[1, 3]) + float(off[1])] - ) - raw = np.array([float(tgt[0]) - gxy[0], float(tgt[1]) - gxy[1]]) - err = float(np.linalg.norm(raw)) - pair = hole_pair_span_m(k1_b, k2_b) - rec = dict(src) - rec["residual_mm"] = round(err * 1000.0, 2) - rec["tip_offset_m"] = [round(float(off[0]), 5), round(float(off[1]), 5)] - rec["gauge_xy_m"] = [round(float(gxy[0]), 5), round(float(gxy[1]), 5)] - rec["gauge_source"] = "视觉规尖(悬停冻结,下降后只重交孔)" - rec["k1_base_m"] = [round(float(v), 5) for v in k1_b] - rec["k2_base_m"] = [round(float(v), 5) for v in k2_b] - rec["hover_z_m"] = round(float(Tee[2, 3]), 4) - rec["pair_span_mm"] = round(pair * 1000.0, 2) - rec["residual_remeasured"] = True - rec["align_trusted"] = True - rec = self._stamp_bias(rec, tgt_b=tgt, gxy=gxy, tag=tag) - snaps = list(src.get("snaps") or []) - snaps.append({ - "tag": rec.get("tag"), - "residual_mm": rec.get("residual_mm"), - "err_xy_m": rec.get("err_xy_m"), - "along_look_mm": rec.get("along_look_mm"), - "along_right_mm": rec.get("along_right_mm"), - "k1_base_m": rec.get("k1_base_m"), - "gauge_xy_m": rec.get("gauge_xy_m"), - "gauge_source": rec.get("gauge_source"), - "tip_offset_m": rec.get("tip_offset_m"), - "hover_z_m": rec.get("hover_z_m"), - "pair_span_mm": rec.get("pair_span_mm"), - }) - rec["snaps"] = snaps - rec["ok"] = err <= self.align_tol - rec["trim_reverted"] = False - self._publish_result(rec) - self.get_logger().info( - f"[{tag}] 工具=({gxy[0]:.4f},{gxy[1]:.4f})" - f"[悬停冻结] 残差={err * 1000:.2f}mm 间距={pair * 1000:.1f}mm —— 不重测规尖" - ) - return rec, err, raw, pair - - def _revert(xy_flange) -> None: - nonlocal q, Tee - back = np.array([float(xy_flange[0]), float(xy_flange[1]), z_hold]) - okb, q, Tee = self._goto( - q, Tee, back, verticalize=True, - tol_m=0.0004, tol_tilt=self.vert_tol_rad * 2.0, - tag="trim_xy_revert", v=min(float(self.align_speed), 0.010), - max_hops=4, settle_s=0.30, strict_xy=True, - ) - self._pin(q) - if not okb: - self.get_logger().error("下降后补孔撤回没走到,位置以当前 FK 为准") - - if not rclpy.ok(): - return q, Tee, final_in - measured = _measure(final_in, "下降后补孔 0") - if measured is None: - return q, Tee, final_in - rec, err, raw, pair = measured - z_goal = z_hold - blend_z = False - if z_target_m is not None: - z_goal = min(z_hold, float(z_target_m)) - blend_z = (z_hold - z_goal) > 0.0005 - if not hole_pair_span_ok(pair): - self.get_logger().error( - f"下降后两孔间距 {pair * 1000:.1f}mm 不在 50–70mm,检测漂了,不动" - ) - return q, Tee, final_in - if err > ONCE_TRIM_REFUSE_M: - self.get_logger().error( - f"下降后要对 {err * 1000:.1f}mm,超过 {ONCE_TRIM_REFUSE_M * 1000:.0f}mm " - "—— 不像交平面漂移,停在原地" - ) - return q, Tee, final_in - need_xy = err > self.align_tol - if (not need_xy) and (not blend_z): - self.get_logger().info( - f"下降后 XY 已在容差内({err * 1000:.2f}mm),高度保持 {z_hold:.4f}" - ) - return q, Tee, rec - step = np.zeros(2, dtype=float) if not need_xy else np.asarray(raw, dtype=float) - if need_xy and err > ONCE_TRIM_MAX_STEP_M: - step = raw * (ONCE_TRIM_MAX_STEP_M / err) - xy_before = np.array([float(Tee[0, 3]), float(Tee[1, 3])]) - move = np.array([ - float(Tee[0, 3]) + float(step[0]), - float(Tee[1, 3]) + float(step[1]), - z_goal, - ]) - hop_tag = "trim_blend_to_final" if blend_z else "trim_xy_keep_tip" - hop_v = ( - min(float(getattr(self, "final_descent_speed", 0.005) or 0.005), 0.008) - if blend_z - else min(float(self.align_speed), 0.010) - ) - if blend_z: - self.get_logger().info( - f"观察高斜线贴面 Δxy=({step[0] * 1000:+.1f},{step[1] * 1000:+.1f})mm " - f"Δz={(z_goal - z_hold) * 1000:+.1f}mm → 法兰 Z {z_goal:.4f}" - ) - ok, q, Tee = self._goto( - q, Tee, move, verticalize=True, - tol_m=0.0004, tol_tilt=self.vert_tol_rad * 2.0, - tag=hop_tag, v=hop_v, - max_hops=4, settle_s=0.30, strict_xy=True, - ) - self._pin(q) - if not ok: - self.get_logger().warn("下降后 XY 修正没走到,停;残差以走前重测为准") - return q, Tee, rec - if abs(float(Tee[2, 3]) - z_goal) > 0.002: - self.get_logger().error( - f"下降后修正把高度从 {z_hold:.4f} 带到了 {float(Tee[2, 3]):.4f}" - f"(目标 {z_goal:.4f}),撤回" - ) - _revert(xy_before) - rec["trim_reverted"] = True - rec["ok"] = err <= self.align_tol - return q, Tee, rec - after = _measure(rec, "下降后补孔核验") - if blend_z: - if after is None or (not hole_pair_span_ok(after[3])) or after[1] > ONCE_TRIM_REFUSE_M: - self.get_logger().warn( - "贴面复拍不可信,斜线位姿保留(补偿按观察高那一拍)" - ) - rec["close_snap_untrusted"] = True - rec["hover_z_m"] = round(float(Tee[2, 3]), 4) - rec["ok"] = err <= self.align_tol - self._publish_result(rec) - return q, Tee, rec - rec2, err2, _raw2, _pair2 = after - rec2["ok"] = err2 <= self.align_tol - rec2["trim_reverted"] = False - rec2["close_snap_untrusted"] = False - self._publish_result(rec2) - return q, Tee, rec2 - if after is None: - self.get_logger().error("下降后补孔走完复拍失败,撤回这一跳") - _revert(xy_before) - rec["trim_reverted"] = True - rec["ok"] = err <= self.align_tol - return q, Tee, rec - rec2, err2, _raw2, pair2 = after - worse_pair = (not hole_pair_span_ok(pair2)) or (pair2 < pair - 0.002) - worse_res = err2 > err + 1e-6 - if worse_pair or worse_res: - self.get_logger().error( - f"下降后补了 {float(np.linalg.norm(step)) * 1000:.1f}mm 后变差" - f"(残差 {err * 1000:.2f}→{err2 * 1000:.2f}mm," - f"间距 {pair * 1000:.1f}→{pair2 * 1000:.1f}mm),撤回这一跳" - ) - _revert(xy_before) - rec["trim_reverted"] = True - rec["ok"] = err <= self.align_tol - rec["snaps"] = rec2.get("snaps") or rec.get("snaps") - self._publish_result(rec) - return q, Tee, rec - rec2["ok"] = err2 <= self.align_tol - rec2["trim_reverted"] = False - self._publish_result(rec2) - return q, Tee, rec2 - - def _trim_xy_after_descent(self, q, Tee, final: Dict[str, Any]): - """下降之后、保持当前高度,用这一高度的规尖和孔再对一次 XY。 - - 悬停残差不能拿来当下降后的孔位。相机光轴相对法兰约 30°,孔的基座 XY - 对深度大约 0.5 mm/mm。2026-10-09:同一孔在悬停(相机深度 180mm,残差 - 0.22mm)和观测高度(127mm)上反投影,基座 XY 差约 2mm;法兰 XY 下降时 - 只动了 0.2mm。画面里针在孔的上方一截,主要是 15mm 间隙的透视,横着的 - 那 2mm 才是要补的。 - - 多走多拍:只用本高度新量的规尖,不沿用悬停时冻住的偏移。总修正超过 8mm - 就不动 —— 那一档是夹爪/杆身,不是针。量不到规尖也不动,悬停对准的结果留着。 - 单次精拍:观测高度深度会把夹爪当尖(2026-10-13 两拍差 8~36mm),改走 - ``_trim_xy_keep_hover_tip``。 - """ - if getattr(self, "hole_keypoint_once", False): - # 打桩测试把 stub 当 self 传入未绑定方法,必须点到类上的实现。 - z_target = None - if bool(getattr(self, "final_descent_enable", False)): - tip = float(getattr(self, "tool_tip_below_flange_m", 0.0) or 0.0) - surf = float(getattr(self, "surface_z_m", 0.0) or 0.0) - if tip > 0.0 and surf > 0.0: - z_target = flange_z_for_gap_m( - tip, surf, getattr(self, "final_gap_m", 0.002) - ) - return Stage2Locate._trim_xy_keep_hover_tip( - self, q, Tee, final, z_target_m=z_target - ) - if not self.tip_vision: - return q, Tee, final - final_in = final - z_hold = float(Tee[2, 3]) - saved = self._tip_off - budget = 0.008 - moved = 0.0 - prev: Optional[np.ndarray] = None - for it in range(4): - if not rclpy.ok(): - break - try: - _bgr, depth_m, intr, res = self._snap_holes(skip_center_gate=True) - except Exception as exc: # noqa: BLE001 - self.get_logger().warn(f"下降后复拍失败,保持悬停对准的位置:{exc}") - self._tip_off = saved - return q, Tee, final - if not res.get("status"): - self.get_logger().warn(f"下降后丢孔({res.get('msg')}),不再改 XY") - self._tip_off = saved - return q, Tee, final - hb = res.get("hole_base") - z_wp = float(res.get("z_wp") or 0.0) - if hb is None or len(hb) != 2 or z_wp <= 0.0: - self.get_logger().warn("下降后没有孔的基座坐标,不再改 XY") - self._tip_off = saved - return q, Tee, final - left_b = np.asarray(hb[0], dtype=float) - right_b = np.asarray(hb[1], dtype=float) - k1_b, k2_b = (left_b, right_b) if self.k1_label == "left" else (right_b, left_b) - tgt = k1_b if self.target_hole == "k1" else k2_b - Tee_now = self._lookup(self.base_frame, self.ee_frame) - if Tee_now is not None: - Tee = Tee_now - off, tlen, why = self._tip_offset_from_depth( - depth_m, intr, Tee, z_wp_cam=z_wp - ) - if off is None or tlen is None: - self.get_logger().warn(f"下降后没量到规尖({why}),不再改 XY") - self._tip_off = saved - return q, Tee, final - if prev is not None and float(np.linalg.norm(off - prev)) > 0.003: - self.get_logger().warn( - f"下降后规尖两拍差 {float(np.linalg.norm(off - prev))*1000:.1f}mm,这一拍不动" - ) - prev = np.array(off, dtype=float) - continue - prev = np.array(off, dtype=float) - if it == 0: - continue - gxy = np.array([ - float(Tee[0, 3]) + float(off[0]), float(Tee[1, 3]) + float(off[1]) - ]) - raw = np.array([float(tgt[0]) - gxy[0], float(tgt[1]) - gxy[1]]) - err = float(np.linalg.norm(raw)) - final = dict(final) - final["residual_mm"] = round(err * 1000.0, 2) - final["tip_offset_m"] = [round(float(off[0]), 5), round(float(off[1]), 5)] - final["tip_len_m"] = round(float(tlen), 5) - final["gauge_xy_m"] = [round(float(gxy[0]), 5), round(float(gxy[1]), 5)] - final["gauge_source"] = "视觉规尖(下降后重测)" - self._tip_off = np.array(off, dtype=float) - self.get_logger().info( - f"[下降后 {it}] 工具=({gxy[0]:.4f},{gxy[1]:.4f}) " - f"残差={err*1000:.2f}mm {why}" - ) - if err <= self.align_tol: - self.get_logger().info( - f"下降后 XY 已在容差内({err*1000:.2f}mm),高度保持 {z_hold:.4f}" - ) - return q, Tee, final - if moved + err > budget: - self.get_logger().error( - f"下降后要对 {err*1000:.1f}mm(已走 {moved*1000:.1f}mm)," - f"超过 {budget*1000:.0f}mm —— 不像针,停在原地" - ) - self._tip_off = saved - return q, Tee, final_in - - step = raw - if err > 0.004: - step = raw * (0.004 / err) - move = np.array([ - float(Tee[0, 3]) + float(step[0]), - float(Tee[1, 3]) + float(step[1]), - z_hold, - ]) - ok, q, Tee = self._goto( - q, Tee, move, verticalize=True, - tol_m=0.0004, tol_tilt=self.vert_tol_rad * 2.0, - tag="trim_xy", v=min(float(self.align_speed), 0.010), - max_hops=4, settle_s=0.30, strict_xy=True, - ) - self._pin(q) - moved += float(np.linalg.norm(step)) - if not ok: - self.get_logger().warn("下降后 XY 修正没走到,停") - return q, Tee, final - if abs(float(Tee[2, 3]) - z_hold) > 0.002: - self.get_logger().error( - f"下降后修正把高度从 {z_hold:.4f} 带到了 {float(Tee[2, 3]):.4f},停下" - ) - return q, Tee, final - return q, Tee, final - - def _snap_holes(self, *, skip_center_gate: bool) -> Tuple[np.ndarray, np.ndarray, Dict[str, float], dict]: - """多帧拍孔:先对 N 帧做时间中值得到干净图,再在其上检测螺纹嵌件对。 - - 工件在拍照期间静止,中值图几乎无噪声 → 嵌件亮环峰稳定 → 孔对不跳变。 - 精对准时跳过居中门控。退路:中值图检测失败则逐帧检测取首个成功。 - """ - n = max(1, int(self.snap_frames)) - frames: List[np.ndarray] = [] - depths: List[np.ndarray] = [] - last_intr: Optional[Dict[str, float]] = None - seen: set = set() - time.sleep(self.settle_sec) - t_end = time.monotonic() + 5.0 + 0.40 * n - while len(frames) < n and time.monotonic() < t_end: - bgr, depth_m, intr = self._grab() - stamp = None - if self._color is not None: - stamp = ( - int(self._color.header.stamp.sec), - int(self._color.header.stamp.nanosec), - ) - if stamp is not None and stamp in seen: - self._spin(0.03) - continue - if stamp is not None: - seen.add(stamp) - frames.append(bgr) - depths.append(depth_m) - last_intr = intr - self._spin(0.02) - if not frames or last_intr is None: - raise RuntimeError("精拍未拿到图像") - med_bgr = ( - np.median(np.stack(frames), axis=0).astype(np.uint8) if len(frames) > 1 else frames[0] - ) - med_depth = ( - np.median(np.stack(depths), axis=0).astype(np.float32) if len(depths) > 1 else depths[0] - ) - # 对孔只认像素关键点。把深度图传进去,嵌件对会用深度换像素半径,等于又用上了深度。 - det_depth = None if self.hole_visual_only else med_depth - res = self._detect_holes_img(med_bgr, skip_center_gate=skip_center_gate, - depth_m=det_depth, intr=last_intr) - if not res.get("status"): - for bgr in frames: - r2 = self._detect_holes_img(bgr, skip_center_gate=skip_center_gate, - depth_m=det_depth, intr=last_intr) - if r2.get("status"): - res = r2 - med_bgr = bgr - break - res = dict(res) - pts = res.get("hole_points") or [] - rad = res.get("hole_radii") or [] - if res.get("status") and len(pts) == 2 and len(rad) >= 2: - # **只在调用方还没给三维时**才反投影。 - # 真值路径(perception.source=truth)已经把孔的世界系精确位置带出来了 - # (见 _truth_hole_result → _truth_to_base),再拿深度图反投影一遍 - # 只会把它换成一个**更差**的数:孔位正下方是贯通孔 + 台面通槽, - # 深度相机在孔位看到的是槽底/地面(0.62m)而不是工件面(0.21m), - # 三角化出的孔距会从 58mm 变成 169mm。2026-09-24 就是栽在这里。 - if not res.get("hole_base"): - proj = self._project_holes(med_depth, pts, rad, res.get("bbox"), last_intr) - if proj is not None: - res["hole_base"] = [ - [float(proj["left_b"][0]), float(proj["left_b"][1]), float(proj["left_b"][2])], - [float(proj["right_b"][0]), float(proj["right_b"][1]), float(proj["right_b"][2])], - ] - res["hole_z"] = [float(proj["z_left"]), float(proj["z_right"])] - res["z_wp"] = float(proj["z_wp"]) - res["snap_frames"] = int(len(frames)) - # 把"三维是哪来的"也打出来:这一项错了(真值被当成深度、或反过来) - # 会让孔距从 58mm 变成 169mm,而现象看起来只是"检测不认"。 - if self._truth_enabled() and res.get("hole_base"): - _src = "真值" - elif self.hole_visual_only: - _src = "像素交工件面" - else: - _src = "深度反投影" - self.get_logger().info( - f"精拍 {len(frames)}帧中值图 " - f"L=({pts[0][0]:.1f},{pts[0][1]:.1f}) R=({pts[1][0]:.1f},{pts[1][1]:.1f})" - f" 三维来源={_src}" - ) - return med_bgr, med_depth, last_intr, res - - # ==================== 叠图/结果输出 ==================== - - def _publish_overlay(self, bgr: np.ndarray) -> None: - if not self.preview: - return - self._last_overlay = bgr - try: - import cv2 - - cv2.imwrite("/tmp/stage2_overlay.png", bgr) - except Exception: - pass - msg = Image() - msg.header.stamp = self.get_clock().now().to_msg() - msg.header.frame_id = self.cam_frame - msg.height, msg.width = int(bgr.shape[0]), int(bgr.shape[1]) - msg.encoding = "bgr8" - msg.step = int(bgr.shape[1] * 3) - msg.data = bgr.tobytes() - self._overlay_pub.publish(msg) - - def _publish_result(self, payload: Dict[str, Any]) -> None: - msg = String() - msg.data = json.dumps(payload, ensure_ascii=False) - self._result_pub.publish(msg) - try: - Path("/tmp/stage2_result.json").write_text( - json.dumps(payload, ensure_ascii=False, indent=2), encoding="utf-8" - ) - except Exception: - pass - - # ==================== 主流程 ==================== - - def run(self) -> int: - self._state("wait_state") - q, Tee = self._wait_state(10.0) - if q is None or Tee is None: - self.get_logger().error( - "拿不到 joint_states/TF —— 先确认 T1: bash ~/ros2/scripts/run_real.sh --arm 89" - ) - return 2 - if not self._cli.wait_for_server(timeout_sec=5.0): - self.get_logger().error("JTC action 不在 —— 控制器没起来(T1 run_real.sh --arm 89)") - return 2 - - if self._hover_refused: - self.get_logger().error(self._hover_refused) - return 2 - if self._final_gap_refused: - self.get_logger().error(self._final_gap_refused) - return 2 - - if self.hover_z_user_set: - z_lo = float(self.ws_min[2]) - z_hi = float(self.ws_max[2]) - if not (z_lo - 1e-6) <= self.hover_z <= (z_hi + 1e-6): - self.get_logger().error( - f"--hover-z {self.hover_z:.3f} 超出工作盒 Z [{z_lo:.3f}, {z_hi:.3f}],拒绝执行" - ) - return 2 - elif not (self.min_ee_z - 1e-6) <= self.hover_z <= (self.safe_z + 0.05): - self.get_logger().error( - f"hole_hover_z_m={self.hover_z:.3f} 越界 [{self.min_ee_z:.2f}, {self.safe_z + 0.05:.2f}],拒绝执行" - ) - return 2 - - code, q, Tee, final = self._run_locate(q, Tee) - if code != 0: - return code - self._linger_hold(final) - return 0 - - def _run_locate( - self, q: np.ndarray, Tee: np.ndarray - ) -> Tuple[int, np.ndarray, np.ndarray, Dict[str, Any]]: - """从当前位姿完成垂直/悬停/拍照对准。不 linger——串联时立刻交三阶段。""" - self.get_logger().warn("请确认:左臂夹爪已夹持通止规,且通止规轴线≈法兰轴线") - - # ---- 1) 垂直朝下(已垂直则跳过,避免串联时原地扭一下) ---- - _, ang = self._w_down(Tee[:3, :3]) - if ang > self.vert_tol_rad: - self._state("verticalize") - ok, q, Tee = self._goto( - q, Tee, Tee[:3, 3].copy(), verticalize=True, - tol_m=0.002, tol_tilt=self.vert_tol_rad, tag="verticalize", v=0.04, - max_hops=12, - ) - _, ang = self._w_down(Tee[:3, :3]) - if not ok: - self.get_logger().warn("垂直化未完全收敛,继续但请注意") - self.get_logger().info( - f"垂直度: 残余倾角 {math.degrees(ang):.2f} deg(阈值 {math.degrees(self.vert_tol_rad):.2f})" - ) - - # ---- 2) 悬停到锁高(已在 ±3mm 内则跳过) ---- - p0 = Tee[:3, 3].copy() - if abs(float(p0[2]) - self.hover_z) > 0.003: - self._state("hover") - target = np.array([p0[0], p0[1], self.hover_z]) - ok, q, Tee = self._goto( - q, Tee, target, verticalize=True, - tol_m=0.002, tol_tilt=self.vert_tol_rad * 1.5, tag="hover", v=self.move_speed, - max_hops=12, hold_xy=True, settle_s=0.30, - ) - self._pin(q) - self._spin(0.2) - Tee_now = self._lookup(self.base_frame, self.ee_frame) - if Tee_now is not None: - Tee = Tee_now - z_now = float(Tee[2, 3]) - _, ang2 = self._w_down(Tee[:3, :3]) - z_err = abs(z_now - self.hover_z) - self.get_logger().info( - f"悬停到位: 法兰 Z={z_now:.3f}m(目标 {self.hover_z:.3f},差 {(z_now - self.hover_z)*1000:+.0f}mm)" - f" 残余倾角 {math.degrees(ang2):.2f}deg" - ) - if z_err > 0.004: - self.get_logger().error( - f"悬停未达容差(Z 差 {(z_now - self.hover_z)*1000:+.0f}mm,倾角 {math.degrees(ang2):.2f}deg),终止" - ) - return 2, q, Tee, {} - if not ok: - self.get_logger().warn( - f"悬停闭环未完全收敛,但 Z 差 {z_err*1000:.1f}mm 可接受,继续拍照定位" - ) - else: - self._state("hover") - self._pin(q) - self._spin(0.2) - Tee_now = self._lookup(self.base_frame, self.ee_frame) - if Tee_now is not None: - Tee = Tee_now - z_now = float(Tee[2, 3]) - if abs(z_now - self.hover_z) > 0.004: - self.get_logger().error( - f"悬停未达容差(Z={z_now:.3f},目标 {self.hover_z:.3f}),终止" - ) - return 2, q, Tee, {} - self.get_logger().info( - f"已在悬停高 Z={z_now:.3f}m(目标 {self.hover_z:.3f}),跳过升降" - ) - - if self.hover_only: - self._state("hover_only_hold") - self.get_logger().info( - f"=== 悬停锁定调试:当前法兰 Z={z_now:.3f}m ===\n" - " 看通止规尖到工件的距离是否合适;改 site.yaml:\n" - " robots[89].servo.hole_hover_z_m (或 robots[91] 对应段)\n" - " Ctrl-C 结束(机械臂保持当前位姿)。" - ) - try: - while rclpy.ok(): - self._spin(0.5) - Tee2 = self._lookup(self.base_frame, self.ee_frame) - if Tee2 is not None: - _, ang2 = self._w_down(Tee2[:3, :3]) - self.get_logger().info( - f"hold: ee=({Tee2[0,3]:.3f},{Tee2[1,3]:.3f},{Tee2[2,3]:.3f}) " - f"tilt={math.degrees(ang2):.2f}deg", - throttle_duration_sec=1.5, - ) - except KeyboardInterrupt: - pass - q_end = self._q() - self._pin(q_end if q_end is not None else q) - return 0, q_end if q_end is not None else q, Tee, {"ok": True, "hover_only": True} - - # ---- 3) 粗居中:工件 bbox 中心移到图像中心一带 ---- - for move_i in range(self.coarse_max_moves + 1): - self._state(f"snap_coarse_{move_i}") - bbox = None - truth: Optional[dict] = None - bgr = depth_m = intr = None - # 本拍是否"跳过粗居中"(精定位已看到 k1/k2)—— 见下面 holes 分支 - skip_coarse = False - time.sleep(self.settle_sec if move_i == 0 else min(0.20, self.settle_sec)) - for attempt in range(8): - if attempt: - self._spin(0.12) - bgr, depth_m, intr = self._grab() - # 真值三维(有就带上):粗居中的目标点优先用它,别绕深度图。 - truth = self._truth_hole_result(bgr) if self._truth_enabled() else None - bbox = self._best_bbox(bgr) - if bbox is not None: - break - holes = self._detect_holes_img(bgr, skip_center_gate=True) - if holes.get("status"): - # 精定位已经能看到 k1/k2(它是**直接量孔**,比粗居中可靠), - # 所以不居中、不移动,直接交给精定位。 - # 旧写法在这里把孔检测器的整幅 bbox 拿来当工件目标,然后**照样算 - # 偏差横移**:真机那帧 bbox=[0,0,847,479](整幅画面)⇒ 偏差 - # 55.9mm ⇒ 又挪一次。一句话:"跳过居中"就必须真的不动。 - self.get_logger().info( - "粗定位 YOLO 无可信框(空框/被边缘切),但已看到 k1/k2 " - "—— 跳过粗居中、原地直进精对准" - ) - self._publish_overlay(holes.get("draw_img", bgr)) - skip_coarse = True - break - self.get_logger().warn(f"粗定位第 {attempt + 1}/8 帧未见工件,复拍") - if skip_coarse: - break - if bbox is None: - if bgr is not None: - self._publish_overlay(bgr) - self.get_logger().error( - "视野里检测不到工件。把臂移到工件上方再来,或先跑一阶段对准。" - ) - return 3, q, Tee, {} - h, w = bgr.shape[:2] - bx, by = 0.5 * (bbox[0] + bbox[2]), 0.5 * (bbox[1] + bbox[3]) - # 收敛判据用"基座系下夹爪轴→工件中心距离",与相机偏置无关 - # (旧版用图像中心,相机偏置时图像居中≠夹爪对准,会误判/白动)。 - # - # 目标点优先用**真值三维**(truth 模式):工件中心是一个已知点, - # 没必要绕"像素 → 深度图 → 三角化"。仿真里那一步还会因为孔下方是 - # 通槽而把深度取到槽底/地面,算出个偏出好几厘米的"中心" - # (实测第二轮 coarse 偏差反而从 53.7mm 涨到 97.7mm —— 越走越偏)。 - p_base, src = None, "深度" - if truth is not None and truth.get("part_center_base"): - p_base = np.asarray(truth["part_center_base"][0], dtype=float) - src = "真值" - # 对孔走平面交点时,框心必须同一条射线∩面。深度框心沿 30° 视线 - # 偏 1~2mm,符号随站位翻(D435 送到夹具位 vs 纯 D405 停在别处), - # 精拍再把这截当 K1.x−规尖.x 走掉,前馈又沿同轴加一次。 - if p_base is None and self.hole_visual_only: - if float(self.surface_z_m) <= 0.0: - self.get_logger().error( - "粗居中要对孔同一平面,但 workpiece_surface_z_m 没有配," - "拒绝用深度图凑框心" - ) - break - T_cam = self._lookup(self.base_frame, self.cam_frame) - if T_cam is None: - self.get_logger().error("粗居中缺 cam TF,拒绝用深度图凑框心") - break - hit = pixel_on_base_plane( - float(bx), - float(by), - float(intr["fx"]), - float(intr["fy"]), - float(intr["cx"]), - float(intr["cy"]), - T_cam, - float(self.surface_z_m), - ) - if hit is None: - self.get_logger().error( - "粗居中框心射线没交到工件面,拒绝用深度图凑" - ) - break - p_base = hit - src = "像素交工件面" - if p_base is None: - z_wp = self._surface_depth(depth_m, bbox) - p_base = self._cam_to_base(self._px_to_cam(bx, by, z_wp, intr)) - T_now = self._lookup(self.base_frame, self.ee_frame) - if T_now is not None: - Tee = T_now - gxy = self._gauge_xy(Tee) - err_xy = float(np.hypot(p_base[0] - gxy[0], p_base[1] - gxy[1])) - # 目标点先过**误检守卫**:宁可原地不动交给精定位,也不许按一个坏点横移。 - # 一阶段刚锁定时臂已经在工件上方,粗居中的合理位移是厘米级;出现 - # 十几厘米以上的"偏差"或盒外目标,只可能是反投影/检测坏了。 - why = self._coarse_target_reject(p_base, gxy) - if why: - self.get_logger().warn( - f"粗定位目标判误检({why})—— **不移动**,原地直进精定位:" - f"base=({p_base[0]:.3f},{p_base[1]:.3f})[{src}] " - f"夹爪=({gxy[0]:.3f},{gxy[1]:.3f}) 偏差={err_xy*1000:.1f}mm" - ) - break - coarse_tol = float(self._hole_cfg.get("coarse_tol_m", 0.006)) - self.get_logger().info( - f"工件 bbox={bbox} 中心=({bx:.0f},{by:.0f}) " - f"base=({p_base[0]:.3f},{p_base[1]:.3f})[{src}] " - f"夹爪=({gxy[0]:.3f},{gxy[1]:.3f}) " - f"偏差={err_xy*1000:.1f}mm" - ) - try: - import cv2 - - coarse_draw = bgr.copy() - cv2.rectangle(coarse_draw, (bbox[0], bbox[1]), (bbox[2], bbox[3]), (0, 255, 0), 2) - cv2.drawMarker(coarse_draw, (int(bx), int(by)), (0, 255, 0), cv2.MARKER_CROSS, 22, 2) - cv2.putText( - coarse_draw, f"coarse err={err_xy*1000:.1f}mm", - (16, 36), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 0), 2, - ) - self._publish_overlay(coarse_draw) - except Exception: - pass - if err_xy <= coarse_tol or move_i >= self.coarse_max_moves: - break - tgt = np.array([ - Tee[0, 3] + (p_base[0] - gxy[0]), - Tee[1, 3] + (p_base[1] - gxy[1]), - self.hover_z, - ]) - self._state(f"coarse_move_{move_i}") - ok, q, Tee = self._goto( - q, Tee, tgt, verticalize=True, - tol_m=0.004, tol_tilt=self.vert_tol_rad * 2.0, tag="coarse", v=self.move_speed, - ) - self._pin(q) - if not ok: - self.get_logger().warn("粗居中未完全到位,继续精定位") - - # ---- 4) 精定位 k1/k2 + 对准目标孔 ---- - final: Dict[str, Any] = {} - xy_gain = 1.0 - last_good: Optional[Tuple[np.ndarray, np.ndarray, float, Dict[str, Any]]] = None - # 两孔中点的历史(本拍 = [-1],上一拍 = [-2],上上拍 = [-3]): - # 对准时工具在动、孔位也会被"追"着动,唯一**不该动**的是两孔中点 —— - # 它一动就说明工件在动,而工件只会被工具推走(见 gauge_fsm.drag_verdict)。 - mids: List[Tuple[float, float]] = [] - for it in range(self.align_max_iters + 1): - self._state(f"snap_fine_{it}") - bgr, depth_m, intr, res = self._snap_holes(skip_center_gate=True) - draw = res.get("draw_img", bgr) - if not res.get("status"): - self._publish_overlay(draw) - if last_good is not None and last_good[2] <= 0.00085: - self.get_logger().warn( - f"复拍丢孔({res.get('msg')}),通止规可能挡住目标孔,沿用上一拍残差 {last_good[2]*1000:.2f}mm" - ) - q, Tee = last_good[0], last_good[1] - final = dict(last_good[3]) - final["ok"] = True - self._pin(q) - self._state("aligned") - break - self.get_logger().error(f"k1/k2 检测失败: {res.get('msg')}") - if it >= self.align_max_iters: - return 4, q, Tee, final if final else {} - continue - pts = res["hole_points"] # 按图像 x 排序: [左, 右] - radii = res["hole_radii"] - bbox_l = res.get("bbox") or [0, 0, bgr.shape[1], bgr.shape[0]] - proj = None - hb = res.get("hole_base") - hz = res.get("hole_z") or [None, None] - z_wp_s = float(res.get("z_wp") or 0.0) - if hb is not None and len(hb) == 2 and hz[0] is not None and hz[1] is not None and z_wp_s > 0.0: - proj = { - "left_b": np.asarray(hb[0], dtype=float), - "right_b": np.asarray(hb[1], dtype=float), - "z_left": float(hz[0]), - "z_right": float(hz[1]), - "z_wp": z_wp_s, - } - if proj is None: - proj = self._project_holes(depth_m, pts, radii, bbox_l, intr) - if proj is None: - self.get_logger().error( - "孔心像素没交到工件面" if self.hole_visual_only else "孔深度/手眼投影失败" - ) - if it >= self.align_max_iters: - return 4, q, Tee, {} - continue - left_b, right_b = proj["left_b"], proj["right_b"] - z_left, z_right, z_wp = proj["z_left"], proj["z_right"], proj["z_wp"] - k1_b, k2_b = (left_b, right_b) if self.k1_label == "left" else (right_b, left_b) - pair_d = float(np.hypot(k1_b[0] - k2_b[0], k1_b[1] - k2_b[1])) - if pair_d < 0.032 or pair_d > 0.085: - self.get_logger().warn( - f"两孔基座间距 {pair_d*1000:.1f}mm 不像 k1/k2(期望 32–85mm),丢弃本拍" - ) - if it >= self.align_max_iters: - return 4, q, Tee, final if final else {} - continue - tgt_b = k1_b if self.target_hole == "k1" else k2_b - - Tee_now = self._lookup(self.base_frame, self.ee_frame) - if Tee_now is not None: - Tee = Tee_now - # ---- 工具位置取"视觉规尖",不是"法兰轴线"-------------------- - # 见 _tip_offset_from_depth / _refresh_tip_offset:规可偏出法兰轴线 ~10mm, - # 把法兰对到孔上等于把规偏着对过去。偏移量准一次后冻结(刚体量)。 - tip_src = "法兰+偏置" - if self.tip_vision and self._tip_off is None: - off, tlen, why = self._tip_offset_from_depth( - depth_m, intr, Tee, z_wp_cam=float(z_wp) - ) - if off is not None and tlen is not None: - self._tip_samp.append((off, tlen)) - self._refresh_tip_offset() - if self.hole_keypoint_once and self._tip_off is None: - self._tip_off = np.asarray(off, dtype=float).reshape(2) - self._tip_len_m = float(tlen) - self.get_logger().warn( - f"单次精拍凑不满 tip_calib_n={self.tip_calib_n},本帧规尖偏移 " - f"({off[0]*1000:+.1f},{off[1]*1000:+.1f})mm 仅用于这一步,未冻结" - ) - tip_src = ( - f"视觉规尖(校准中 n={len(self._tip_samp)} {why})" - if (self._tip_off is None or ( - self.hole_keypoint_once and len(self._tip_samp) < self.tip_calib_n - )) - else "视觉规尖(已冻结)" - ) - if self.hole_keypoint_once and self._tip_off is not None: - tip_src = ( - "视觉规尖(已冻结)" - if len(self._tip_samp) >= self.tip_calib_n - else "视觉规尖(单次精拍·本帧)" - ) - else: - self.get_logger().warn(f" 规尖视觉量取失败:{why}") - elif self._tip_off is not None: - tip_src = "视觉规尖(已冻结)" - if self._tip_off is not None: - gxy = np.array( - [Tee[0, 3] + self._tip_off[0], Tee[1, 3] + self._tip_off[1]] - ) - else: - gxy = self._gauge_xy(Tee) - if self.tip_vision and self._tip_off is None and len(self._tip_samp) == 0: - self.get_logger().warn( - " 规尖还没量到,本拍先用法兰+偏置兜着 —— 此时可能对的是法兰不是规" - ) - err = float(np.hypot(tgt_b[0] - gxy[0], tgt_b[1] - gxy[1])) - - final = { - "ok": err <= self.align_tol, - "arm": self.prefix.rstrip("_"), - "target_hole": self.target_hole, - "k1_base_m": [round(float(v), 5) for v in k1_b], - "k2_base_m": [round(float(v), 5) for v in k2_b], - "k1_px": [round(float(pts[0][0]), 1), round(float(pts[0][1]), 1)], - "k2_px": [round(float(pts[1][0]), 1), round(float(pts[1][1]), 1)], - "workpiece_surface_z_m": round(z_wp, 4), - "hole_z_m": [round(z_left, 4), round(z_right, 4)], - "gauge_xy_m": [round(float(gxy[0]), 5), round(float(gxy[1]), 5)], - "gauge_source": tip_src, - "tip_offset_m": ( - [round(float(self._tip_off[0]), 5), round(float(self._tip_off[1]), 5)] - if self._tip_off is not None - else None - ), - "tip_len_m": (round(self._tip_len_m, 5) if self._tip_len_m else None), - "residual_mm": round(err * 1000.0, 2), - "hover_z_m": round(float(Tee[2, 3]), 4), - "iter": it, - "snap_frames": int(res.get("snap_frames") or 1), - "residual_remeasured": False, - } - final = self._stamp_bias(final, tgt_b=tgt_b, gxy=gxy, tag=f"fine {it}") - snap0 = { - "tag": final.get("tag"), - "residual_mm": final.get("residual_mm"), - "err_xy_m": final.get("err_xy_m"), - "along_look_mm": final.get("along_look_mm"), - "along_right_mm": final.get("along_right_mm"), - "k1_base_m": final.get("k1_base_m"), - "k2_base_m": final.get("k2_base_m"), - "k1_px": final.get("k1_px"), - "k2_px": final.get("k2_px"), - "gauge_xy_m": final.get("gauge_xy_m"), - "gauge_source": final.get("gauge_source"), - "tip_offset_m": final.get("tip_offset_m"), - "hover_z_m": final.get("hover_z_m"), - "workspace_clipped": final.get("workspace_clipped"), - } - snaps = list(final.get("snaps") or []) - snaps.append(snap0) - final["snaps"] = snaps - self.get_logger().info( - f"[fine {it}] k1=({k1_b[0]:.4f},{k1_b[1]:.4f}) k2=({k2_b[0]:.4f},{k2_b[1]:.4f}) " - f"zL={z_left*1000:.0f} zR={z_right*1000:.0f}mm " - f"工具=({gxy[0]:.4f},{gxy[1]:.4f})[{tip_src}] " - f"残差={err*1000:.2f}mm (tol {self.align_tol*1000:.1f})" - ) - - # ---- 工件被推走的看门狗 ----------------------------------------- - # 为什么放在"打印之后、动手之前":这一拍的数据已经完整,判出来就 - # 立刻停,不再多推一下(每多推一下工件就多走十几毫米,而它已经 - # 离开孔位了,后面的每一拍都在追一个被自己推着走的目标)。 - mid_now = ( - float(k1_b[0] + k2_b[0]) / 2.0, - float(k1_b[1] + k2_b[1]) / 2.0, - ) - dragged, d_mid = drag_verdict( - mid_now, - mids[-1] if len(mids) >= 1 else None, - mids[-2] if len(mids) >= 2 else None, - ) - mids.append(mid_now) - if dragged: - tool_mm = 0.0 - if last_good is not None: - _g0 = last_good[3].get("gauge_xy_m") or [] - if len(_g0) == 2: - tool_mm = math.hypot(gxy[0] - float(_g0[0]), gxy[1] - float(_g0[1])) * 1000.0 - self.get_logger().error( - f"工件被工具推走了:两孔中点两拍之间挪了 {d_mid*1000:.1f}mm" - f"(同期工具只走了 {tool_mm:.1f}mm)—— 对准闭环追的孔位长在工件上," - f"工件一走,孔位就跟着工具走、残差恒定不收敛。\n" - f" 这**不是**手眼标定/检测的问题(那两样坏了不会让工件移动)。" - f"按下面顺序查:\n" - f" ① 悬停时工具尖端是不是已经进了工件:法兰 z={Tee[2, 3]:.4f} − " - f"工具长(site.yaml 的 gauge_assembly.tool_tip_below_flange_m)" - f" 要高于工件上表面 z={z_wp:.4f};\n" - f" ② 工具长是**实测**的吗(真机夹上规后读 TF;仿真里 " - f"scripts/sim_load_gauge.py 会打印实测值);装夹位置一变它就变;\n" - f" ③ 装夹后规有没有下滑(仿真里合爪后规会落到落座位置," - f"下滑量直接加在工具长上)。" - ) - self._publish_overlay(draw) - self._publish_result(final) - return 6, q, Tee, final - - # 在叠图上标目标孔 + 写基座坐标 - try: - import cv2 - - tgt_px = pts[0] if (self.target_hole == "k1") == (self.k1_label == "left") else pts[1] - cv2.drawMarker( - draw, (int(tgt_px[0]), int(tgt_px[1])), (255, 0, 255), - cv2.MARKER_TILTED_CROSS, 26, 3, - ) - cv2.putText( - draw, - f"{self.target_hole} res={err*1000:.2f}mm z={z_wp:.3f}m", - (16, int(draw.shape[0]) - 20), - cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 0, 255), 2, - ) - except Exception: - pass - self._publish_overlay(draw) - self._publish_result(final) - - if self.hole_keypoint_once: - commanded_mm = round(err * 1000.0, 2) - if self._tip_off is None and self.tip_vision: - self.get_logger().error( - "单次精拍没量到规尖,这一步对的是法兰。align_trusted=false," - "仍走一次并下降,方便目视;不把法兰对上说成成功" - ) - final["ok"] = False - final["align_trusted"] = False - final["fail_reason"] = "未量到规尖偏移,工具位置退化为法兰轴线" - q, Tee, _moved = self._oneshot_align_move(q, Tee, tgt_b, gxy, err) - final["commanded_residual_mm"] = commanded_mm - if self.hole_once_lock_xy_descend: - final["residual_remeasured"] = False - final["lock_xy_descend"] = True - if self._tip_off is not None: - final["ok"] = True - self.get_logger().warn( - f"视线前馈斜线:悬停指令 {commanded_mm:.2f}mm 已走," - "不补拍。下一步按 k×下降收 XY,一条 MoveL 到贴面。" - "residual_mm 仍是走之前那一拍,不是贴面复测" - ) - else: - q, Tee, final = self._observe_holes( - q, Tee, final, tag="走后核验" - ) - if not final.get("residual_remeasured"): - self.get_logger().error( - f"走后核验没复测到。开环指令残差 {commanded_mm:.2f}mm," - "不是 hop 到位,不把这次当对准成功" - ) - final["ok"] = False - self.get_logger().info( - f"单次精拍悬停走完:指令 {commanded_mm:.2f}mm → " - f"复测 {final.get('residual_mm')}mm;下降后还要补交平面漂的那几毫米" - ) - self._state("aligned") - break - - if err <= self.align_tol: - if self.tip_vision and self._tip_off is None: - # 容差达标了,但这一拍的"工具位置"其实是**法兰**(退路了)—— - # 对的是法兰不是规,δ 就是那个 ~10mm 的装夹偏置。2026-10-08 真机 - # 就出现过:tip_offset_m=None、残差 0.15mm 看着漂亮,其实法兰 - # 压在 k1 上、规尖偏出 ~11mm。**不许把没做到说成做到**。 - self.get_logger().error( - f"残差 {err*1000:.2f}mm 达标,但规尖偏移一直没量到(用的是法兰轴线)" - " —— 这个结果不可信:对的可能是法兰、不是规。" - "判失败,摆到能看清规尖再跑(别按这个结果下降)" - ) - final["ok"] = False - final["align_trusted"] = False - final["fail_reason"] = "未量到规尖偏移,工具位置退化为法兰轴线" - self._publish_result(final) - return 8, q, Tee, final - self._state("aligned") - break - if last_good is not None: - q_g, tee_g, prev_err, prev_final = last_good - if err > prev_err + 0.00025 and prev_err <= 0.0010: - self.get_logger().warn( - f"残差变差 {prev_err*1000:.2f}→{err*1000:.2f}mm,退回上一拍" - ) - self._pin(q_g) - q, Tee = q_g, tee_g - final = dict(prev_final) - final["ok"] = prev_err <= max(self.align_tol, 0.0008) - self._state("aligned") - break - last_good = (q.copy(), Tee.copy(), err, dict(final)) - if it >= self.align_max_iters: - if err <= 0.00085: - final["ok"] = True - self.get_logger().warn( - f"残差 {err*1000:.2f}mm 略大于 tol {self.align_tol*1000:.1f}mm,按到位接受" - ) - self._state("aligned") - break - self.get_logger().error( - f"迭代 {it + 1} 次后残差仍 {err*1000:.2f}mm > tol。检查手眼/相机安装,或放宽 align_tol_m。" - ) - return 5, q, Tee, final - - raw = np.array([tgt_b[0] - gxy[0], tgt_b[1] - gxy[1]]) - n_raw = float(np.linalg.norm(raw)) - max_step = 0.012 if n_raw > 0.025 else 0.018 - step = raw * xy_gain - n_step = float(np.linalg.norm(step)) - if n_step > max_step and n_step > 1e-9: - step = step * (max_step / n_step) - self.get_logger().info( - f" 对准步长封顶 {n_raw*1000:.1f}→{max_step*1000:.0f}mm,避免冲出视野" - ) - move = np.array([ - Tee[0, 3] + step[0], - Tee[1, 3] + step[1], - self.hover_z, - ]) - hop_tol = 0.00022 if err < 0.003 else max(0.0003, min(0.0005, 0.25 * err)) - hop_v = self.align_speed if err > 0.005 else min(self.align_speed, 0.016) - self._state(f"align_move_{it}") - gxy_before = gxy.copy() - ok, q, Tee = self._goto( - q, Tee, move, verticalize=True, - tol_m=hop_tol, tol_tilt=self.vert_tol_rad * 2.0, - tag="align", v=hop_v, - max_hops=8, settle_s=max(0.35, self.settle_sec), - min_dur=0.35, strict_xy=True, - ) - self._pin(q) - gxy_after = self._gauge_xy(Tee) - ach = gxy_after - gxy_before - n_cmd = float(np.linalg.norm(step)) - n_ach = float(np.linalg.norm(ach)) - if n_ach > 0.00025 and n_cmd > 0.00025: - ratio = n_cmd / n_ach - # 允许增益<1:实测过移动(ratio<1)时降增益收敛不冲;欠移动时升增益补到位 - xy_gain = float(np.clip(0.55 * xy_gain + 0.45 * ratio, 0.60, 1.40)) - self.get_logger().info( - f" xy_gain={xy_gain:.2f} 指令 {n_cmd*1000:.2f}mm 实走 {n_ach*1000:.2f}mm" - ) - if not ok: - self.get_logger().warn("对准移动未完全到位,复拍核验") - - # ---- 4.5) 柔顺轻降到孔面上方 1-2mm(不接触)---- - # 下降量由**几何**决定(法兰 FK − 工具长 − 工件面 − final_gap),深度读数只 - # 做交叉核对,见 _descend_above_hole 的说明。 - if self.hole_keypoint_once and self.hole_once_lock_xy_descend: - # 视线前馈斜线:不经过观察高、不补交。一条 MoveL 收到贴面。 - lock_gap = ( - self.final_gap_m if self.final_descent_enable else self.observe_gap_m - ) - okd, q, Tee = self._once_ff_diagonal_to_gap( - q, Tee, target_gap_m=lock_gap - ) - elif self.hole_keypoint_once: - # 先降到观察高(约 15mm)再交孔;贴面由补孔斜线一步完成,不再 4mm 切到 2mm。 - okd, q, Tee = self._descend_above_hole( - q, Tee, - target_gap_m=self.observe_gap_m, - step_m=ONCE_APPROACH_STEP_M, - ) - else: - okd, q, Tee = self._descend_above_hole(q, Tee) - if not okd: - self.get_logger().warn("轻降未完全到位,保持当前高度(安全优先)") - if self.hole_keypoint_once and self.hole_once_lock_xy_descend: - tip_len = float(self.tool_tip_below_flange_m) - surf = float(self.surface_z_m) - if tip_len > 0.0 and surf > 0.0: - self.descent_final_gap_m = float(Tee[2, 3]) - tip_len - surf - elif self.hole_keypoint_once: - # 悬停那一拍的基座 XY 不能带到观测高:前倾 30°,降 50mm 交点会漂约 4mm。 - # 核验记账后补 XY;规尖沿用悬停冻结值,不在观测高度重测。 - q, Tee, final = self._observe_holes(q, Tee, final, tag="降后核验") - q, Tee, final = self._trim_xy_after_descent(q, Tee, final) - tip_len = float(self.tool_tip_below_flange_m) - surf = float(self.surface_z_m) - if tip_len > 0.0 and surf > 0.0: - self.descent_final_gap_m = float(Tee[2, 3]) - tip_len - surf - elif okd: - # 悬停残差在下降 60mm 之后会变大约 2mm(相机 30°,同一孔两个高度 - # 反投影对不齐)。在观测高度重测规尖,只补 XY。 - q, Tee, final = self._trim_xy_after_descent(q, Tee, final) - # 如实汇报**实际**间隙(几何量)——不是把目标值念一遍。停在离面 50mm 时 - # 也显示 ~50mm,现场才看得出"轻降没做到"(R1.1:不许把没做到说成做到)。 - gap_txt = ( - f"{self.descent_final_gap_m * 1000:.1f}" - if self.descent_final_gap_m is not None - else f">{self.final_gap_m * 1000:.1f}(未能测得/未下降)" - ) - - # ---- 5) 锁定保持 ---- - # 贴面之后就停在这个法兰 Z。没有接触传感器,到位只认 final_gap_mm - # (规尖离面)。三阶段开局会抬回悬高,这里标明已经插到位,流水线不再上抬。 - if ( - self.descent_final_gap_m is not None - and self.final_descent_enable - and not self.hover_only - ): - final = dict(final) - final["insert_held"] = True - final["flange_z_m"] = round(float(Tee[2, 3]), 4) - final["tip_gap_mm"] = round(float(self.descent_final_gap_m) * 1000.0, 2) - final["commanded_gap_mm"] = round(float(self.final_gap_m) * 1000.0, 2) - final["insert_z_source"] = "final_gap_mm" - self._state("hold") - q_fin = self._q() - self._pin(q_fin if q_fin is not None else q) - if final.get("insert_held"): - self.get_logger().info( - f"=== 二阶段定位完成: {self.target_hole} 残差 {final.get('residual_mm', -1)}mm," - f"法兰 Z={final.get('flange_z_m')}m,规尖离面 {gap_txt}mm" - f"(final_gap {self.final_gap_m * 1000:.1f}mm,无接触传感器)。" - "停在这一高度,不抬回悬高。" - f"结果: /stage2/result, /tmp/stage2_result.json ===" - ) - else: - self.get_logger().info( - f"=== 二阶段定位完成: {self.target_hole} 残差 {final.get('residual_mm', -1)}mm," - f"规尖悬在孔面上方 ≈{gap_txt}mm(不接触)。" - f"结果: /stage2/result, /tmp/stage2_result.json ===" - ) - return 0, q_fin if q_fin is not None else q, Tee, final - - def _linger_hold(self, final: Dict[str, Any], seconds: Optional[float] = None) -> None: - """单独跑二阶段时的保持窗口;串联时跳过,立刻进三阶段。""" - sec = self.linger_sec if seconds is None else float(seconds) - if sec <= 0.0: - return - t_end = time.monotonic() + sec - while time.monotonic() < t_end and rclpy.ok(): - if final: - self._publish_result(final) - if self._last_overlay is not None: - self._publish_overlay(self._last_overlay) - self._spin(0.3) - - -def main(args=None) -> None: - rclpy.init(args=args) - node = Stage2Locate() - code = 2 - try: - code = node.run() - except KeyboardInterrupt: - pass - except Exception as exc: # noqa: BLE001 - node.get_logger().error(f"stage2 异常终止: {exc}") - code = 2 - finally: - try: - q = node._q() - if q is not None: - node._pin(q) - except Exception: - pass - try: - node._shutdown_tf() - except Exception: - pass - try: - node.destroy_node() - except Exception: - pass - try: - if rclpy.ok(): - rclpy.shutdown() - except Exception: - pass - raise SystemExit(code) - - -if __name__ == "__main__": - main() diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/stage3_search_node.py b/install/arm_application/lib/python3.11/site-packages/arm_application/stage3_search_node.py deleted file mode 100644 index acf1a50..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/stage3_search_node.py +++ /dev/null @@ -1,1127 +0,0 @@ -#!/usr/bin/env python3 -"""Stage-3 柔顺搜孔(Orisys 指垫触觉为主,腕部 F/T 看门狗,D405 可复拍)。 - -二阶段已把通止规轴线对准目标孔并悬停锁定。本阶段做**柔顺搜孔 + 对准确认**: - - 1. verify — 位姿核验(垂直朝下,必要时再垂直化);触觉话题判活 - 2. approach — 小步下降,fnormal 超过触面阈值判定触面,记 z_contact - 3. seat — Z 力闭环建立轻触(fn ≈ 触面阈值 + press_delta) - 4. spiral — 阿基米德螺旋搜孔:XY 沿螺旋走,Z 由力闭环维持轻触; - fnormal 相对接触均值跌落 drop_ratio 持续 N 帧 → 尖端入孔 - 5. center — 入孔点十字微扫,剪切力最小点 = 孔心(center_scan 可关) - 6. insert — 力限下压 insert_depth_mm;screw_pitch_mm≠0 时按螺距同步 - 绕世界 Z 旋入(螺纹通止规;>0 右旋 / <0 左旋)。0 = 只落座 - 7. hold — 锁定关节,发布 /stage3/result(JSON) - -安全(任一触发立即抬升中止): - - Orisys fnormal > 静止均值 + safe_press_delta;切向 > 静止均值 + shear_delta 自动微抬减拖 - - 腕部 F/T |F| > ft_safe_n(//flexiv_robot_states,订阅不到则只警告) - - 触觉话题断流 > tactile_timeout_s - -力单位说明:Orisys 读数是形变**任意单位**(非牛顿),且夹持基线会漂移。 -所以节点启动时自动测 ~1.2s 静止均值 μ0/方差 σ0,所有阈值都是相对 μ0 的 -增量(touch_delta / press_delta / safe_press_delta…),见 site.yaml → -hole_detect.stage3。调参先看日志里打印的「触觉基线/派生阈值」两行。 - -前置:先跑通二阶段(run_stage2_locate.sh --arm 89),臂保持悬停不动。 -用法:bash ~/ros2/scripts/run_stage3_search.sh --arm 89 [--hole k1] [--depth 2] [--pitch 1.0] -""" - -from __future__ import annotations - -import json -import math -import time -from pathlib import Path -from typing import Any, Dict, List, Optional, Sequence, Tuple - -import numpy as np -import rclpy -from std_msgs.msg import String - -from arm_application.geom_ik import dls_twist -from arm_application.site_io import load_site_dict -from arm_application.stage2_locate_node import Stage2Locate, _pt - -try: - from arm_msgs.msg import TactileStatus -except Exception: # pragma: no cover - TactileStatus = None # type: ignore - -try: - from flexiv_msgs.msg import RobotStates -except Exception: # pragma: no cover - RobotStates = None # type: ignore - -from trajectory_msgs.msg import JointTrajectory - - -# ==================== 纯逻辑(可离线单测) ==================== - -#: 触觉帧"够新"的窗口 [s]:比它更久没更新就认为这一侧没数据。 -TACTILE_MAX_AGE_S = 0.4 - - -def live_tactile( - now: float, pairs: Sequence[Any], max_age_s: float = TACTILE_MAX_AGE_S -) -> List[Any]: - """挑出这一轮**可用**的触觉帧。``pairs`` 是每侧一个 ``(收到时刻, msg)``。 - - 判据只有两条:**够新** + ``connected=true``。 - - ⚠️ 不要拿力的**幅值**当"传感器活着"的代理(曾经写的是 ``|fnormal| > 1.0``): - 静止时读数本来就是 0 —— 空手、还没接触、或者读数本身就是形变任意单位 - (Orisys 的量纲)—— 于是 S07 一进柔顺下压就报"触觉断流(左右指都无新鲜 - 数据)",而话题其实以 19Hz 在发、``connected`` 也是 true。 - 上下游的契约在 ``sim_tactile_adapter`` 里写得很清楚: - "没数据"发零 **且** ``connected=false``;"零力"是 ``connected=true``。 - """ - out: List[Any] = [] - for pair in pairs or (): - if pair is None: - continue - t, msg = pair - if now - float(t) < max_age_s and bool(getattr(msg, "connected", False)): - out.append(msg) - return out - - -def tactile_timeout_reason(pairs: Sequence[Any], timeout_s: float) -> str: - """触觉等超时了 → 给一句**照着就能修**的话。 - - 两种"没数据"现象一样(都是等不到可用帧),修法却完全不同: - · 有帧到、但 ``connected=false`` → 驱动在跑,设备/SDK 那边的问题; - · 一帧都没到 / 帧全过期 → 话题或驱动根本没在发。 - 以前共用一句"断流(左右指都无新鲜数据)",于是"设备没连上"被读成 - "话题没起来",查错方向。 - """ - seen = [p for p in (pairs or ()) if p is not None] - if seen and not any(bool(getattr(m, "connected", False)) for _t, m in seen): - return ( - f"触觉帧有到但 connected=false(驱动在跑、设备没连上;已等 {timeout_s:.1f}s)" - f"——看 /tmp/stage3_tactile.log,或先跑 " - f"bash ~/ros2/scripts/run_tactile.sh --cli 验证" - ) - return f"触觉话题断流 >{timeout_s:.1f}s(左右指都无新鲜数据)" - - -def should_lift_air_baseline( - z_now_m: float, z_air_m: float, *, tactile_live: bool -) -> bool: - """空载抬升只在触觉已经在发、并且当前低于空载高度时做。 - - 触觉没数据时先抬到 hover+50mm 再报断流,等于插孔做到一半把臂送回锁高。 - """ - if not tactile_live: - return False - return float(z_now_m) < float(z_air_m) - 0.008 - -def spiral_points( - cx: float, cy: float, pitch_mm: float, step_mm: float, r_max_mm: float -) -> List[Tuple[float, float]]: - """阿基米德螺旋 r = pitch·θ/2π,弧长步长 ≈ step_mm,覆盖半径 r_max_mm。 - cx/cy 与返回点都是【米】(基座系);pitch/step/r_max 是【毫米】,内部换算。""" - pts: List[Tuple[float, float]] = [] - if pitch_mm <= 0.0 or step_mm <= 0.0 or r_max_mm <= 0.0: - return pts - theta = step_mm / max(0.5 * pitch_mm, 1e-3) - while True: - r = pitch_mm * theta / (2.0 * math.pi) - if r > r_max_mm: - break - pts.append((cx + r / 1000.0 * math.cos(theta), cy + r / 1000.0 * math.sin(theta))) - theta += step_mm / max(r, 0.5 * pitch_mm) - return pts - - -class DropDetector: - """尖端入孔判据:接触建立后 fnormal 相对接触均值(慢EMA)跌落 drop_ratio,持续 frames 帧。 - - 判定用原始 fnormal(响应快,20Hz 下 2 帧=0.1s);接触均值用慢 EMA 跟踪, - 毛刺靠连续帧数抑制。 - """ - - def __init__(self, drop_ratio: float, frames: int, alpha: float = 0.15) -> None: - self.drop_ratio = float(drop_ratio) - self.frames = int(frames) - self.alpha = float(alpha) - self.contact_avg: Optional[float] = None - self.last: Optional[float] = None - self._low = 0 - - def update(self, fn: float, in_contact_band: bool) -> bool: - self.last = fn - if self.contact_avg is None: - if in_contact_band: - self.contact_avg = fn - return False - dropping = fn < self.contact_avg * (1.0 - self.drop_ratio) - # 接触均值只在「实接触且未跌落」时更新,避免入孔后的低力把基线拖下去。 - # 跌落相对接触均值判定,不要求掉到 touch 阈值以下(否则半入孔检测不到)。 - if in_contact_band and not dropping: - self.contact_avg = self.alpha * fn + (1.0 - self.alpha) * self.contact_avg - self._low = 0 - return False - if dropping: - self._low += 1 - else: - self._low = 0 - return self._low >= self.frames - - -class SearchAbort(Exception): - def __init__(self, msg: str, code: int = 6) -> None: - super().__init__(msg) - self.code = code - - -# ==================== 节点 ==================== - -class Stage3Search(Stage2Locate): - def __init__(self, node_name: str = "stage3_search") -> None: - super().__init__(node_name=node_name) - - self.declare_parameter("insert_depth_mm", -1.0) # >=0 覆盖 site - self.declare_parameter("screw_pitch_mm", -999.0) # ≠-999 覆盖 site - self.declare_parameter("spiral_r_max_mm", -1.0) # >0 覆盖 site - self.declare_parameter("resnap", False) # 搜孔前用 D405 复拍对准一次 - - s3 = dict((load_site_dict().get("hole_detect") or {}).get("stage3") or {}) - - def ov(name: str, key: str, default: float) -> float: - v = float(self.get_parameter(name).value) - return v if v != (-1.0 if name != "screw_pitch_mm" else -999.0) else float( - s3.get(key, default) - ) - - # Orisys 读数是形变任意单位(非牛顿),且夹持基线会漂移。 - # 所有力阈值都是「相对静止均值的增量」,节点启动时自动测静止均值/方差。 - self.touch_delta = float(s3.get("touch_delta", 250.0)) # 触面:> μ0+max(4σ0, 本值) - self.press_delta = float(s3.get("press_delta", 400.0)) # 轻触目标按压量(触面阈值之上) - self.max_press_delta = float(s3.get("max_press_delta", 900.0)) # 螺旋中超过→力闭环抬起 - self.safe_press_delta = float(s3.get("safe_press_delta", 2000.0)) # 立即中止 - self.shear_delta = float(s3.get("shear_delta", 600.0)) # 切向拖拽保护(静止切向均值之上) - self.insert_press_delta = float(s3.get("insert_press_delta", 1200.0)) # 插入力上限 - self.kp_z_mm = float(s3.get("kp_z_mm_per_unit", 0.001)) # Z 力闭环增益 mm/单位 - self.approach_step_mm = float(s3.get("approach_step_mm", 1.5)) - self.approach_max_mm = float(s3.get("approach_max_mm", 25.0)) - # 触面深于这个值 = 通止规可能直接滑进孔里(工件面不会比悬停低这么多) - self.enter_probe_mm = float(s3.get("enter_probe_mm", 2.0)) - # 直接入孔后抬这个高度到孔口倒角段定心(避免深插横探别死孔壁) - self.mouth_lift_mm = float(s3.get("mouth_lift_mm", 2.0)) - # 触觉基线健康窗(Orisys 任意单位;窗外 = tare 异常/近饱和) - self.baseline_min = float(s3.get("baseline_min", 8.0)) - self.baseline_max = float(s3.get("baseline_max", 1500.0)) - # approach 的腕部 F/T 旁路触面判据(牛顿,标定量;自由空气 |F|≈2-3N) - self.approach_ft_touch_n = float(s3.get("approach_ft_touch_n", 6.0)) - self.spiral_pitch_mm = float(s3.get("spiral_pitch_mm", 1.0)) - self.spiral_step_mm = float(s3.get("spiral_step_mm", 0.8)) - self.spiral_r_max_mm = ov("spiral_r_max_mm", "spiral_r_max_mm", 4.0) - self.spiral_expand_max = int(s3.get("spiral_expand_max", 2)) - self.spiral_expand_step_mm = float(s3.get("spiral_expand_step_mm", 2.0)) - self.drop_ratio = float(s3.get("drop_ratio", 0.45)) - self.drop_frames = int(s3.get("drop_frames", 2)) - self.center_scan = bool(s3.get("center_scan", False)) - self.center_scan_mm = float(s3.get("center_scan_mm", 0.3)) - self.insert_depth_mm = ov("insert_depth_mm", "insert_depth_mm", 2.0) - self.insert_retry = int(s3.get("insert_retry", 3)) - self.screw_pitch_mm = ov("screw_pitch_mm", "screw_pitch_mm", 0.0) - self.search_speed = float(s3.get("search_speed", 0.03)) - self.settle3 = float(s3.get("settle_sec", 0.25)) - self.tac_timeout = float(s3.get("tactile_timeout_s", 3.0)) - self.ft_watchdog = bool(s3.get("ft_watchdog", True)) - self.ft_safe_n = float(s3.get("ft_safe_n", 20.0)) - self.linger3 = float(s3.get("linger_sec", 8.0)) - self.resnap = bool(self.get_parameter("resnap").value) - - # 运行时自适应阈值(tactile_check 时测量填充) - self._fn_rest = 0.0 - self._fn_sigma = 0.0 - self._shear_rest = 0.0 - self._th_touch = 0.0 - self._th_target = 0.0 - self._th_max = 0.0 - self._th_safe = float("inf") - self._th_shear = float("inf") - self._th_insert = 0.0 - - tac = load_site_dict().get("tactile") or {} - self.tac_topic_l = str(tac.get("topic_left") or "/tactile/left/status") - self.tac_topic_r = str(tac.get("topic_right") or "/tactile/right/status") - - # ---------------- ROS 接口 ---------------- - self._tac_l: Optional[Tuple[float, Any]] = None - self._tac_r: Optional[Tuple[float, Any]] = None - self._ft: Optional[Tuple[float, Any]] = None - if TactileStatus is not None: - self.create_subscription(TactileStatus, self.tac_topic_l, self._on_tac_l, 10) - self.create_subscription(TactileStatus, self.tac_topic_r, self._on_tac_r, 10) - sn_us = self.prefix.rstrip("_").replace("-", "_") - self.ft_topic = str(s3.get("ft_topic") or f"/{sn_us}/flexiv_robot_states") - if self.ft_watchdog and RobotStates is not None: - self.create_subscription( - RobotStates, self.ft_topic, self._on_robot_states, 10 - ) - - self._state_pub = self.create_publisher(String, "/stage3/state", 10) - self._result_pub = self.create_publisher(String, "/stage3/result", 10) - - self.get_logger().info( - f"stage3 arm_ee={self.ee_frame} target={self.target_hole}\n" - f" 触觉: {self.tac_topic_l} + {self.tac_topic_r} 看门狗: {self.ft_topic}\n" - f" 阈值(相对静止均值增量): touch=+{self.touch_delta:.0f} press=+{self.press_delta:.0f} " - f"max=+{self.max_press_delta:.0f} safe=+{self.safe_press_delta:.0f} shear=+{self.shear_delta:.0f}\n" - f" 螺旋: pitch={self.spiral_pitch_mm}mm step={self.spiral_step_mm}mm " - f"r_max={self.spiral_r_max_mm}mm expand×{self.spiral_expand_max}\n" - f" 插入: depth={self.insert_depth_mm}mm press=+{self.insert_press_delta:.0f} " - f"pitch={self.screw_pitch_mm}mm resnap={self.resnap}" - ) - - # ---------------- 传感器 ---------------- - - def _on_tac_l(self, msg: Any) -> None: - self._tac_l = (time.monotonic(), msg) - - def _on_tac_r(self, msg: Any) -> None: - self._tac_r = (time.monotonic(), msg) - - def _on_robot_states(self, msg: Any) -> None: - """缓存 ``flexiv_msgs/RobotStates``(腕部力看门狗的输入)。 - - ⚠️ 这个方法名**必须**与 ``Stage2Locate`` 里那个腕部 FT 的回调区分开。 - 2026-09-24 踩到:两者原先都叫 ``_on_ft``,子类的定义**静默覆盖**了父类的, - 而两个订阅都在 ``__init__`` 里建好了 —— 于是: - Stage2Locate 建的 WrenchStamped 订阅 → 实际进了这个 RobotStates 缓存; - ``_ft_fz`` 永远不写 → S07 打"腕部 FT 没有数据"(而话题数据是好的)。 - 真机上更阴:两个话题都存在,``self._ft`` 里 RobotStates 与 WrenchStamped - 交替被覆盖 → ``_ft_mag()`` 时有时无 → 看门狗时灵时不灵。 - 这类"同名覆盖 + 不报错"的坑,只要名字区分开就根除。 - """ - self._ft = (time.monotonic(), msg) - - def _tac_fresh(self, timeout_s: float = 1.0) -> Tuple[float, float, float, bool]: - """等新鲜触觉帧 → (fn_avg, fn_max, shear_max, contact_any)。 - 单侧可用即可(另一指掉线/未插时用健在侧继续,阈值相对同侧基线仍自洽)。 - - "可用"= **帧到了(0.4s 内)且 connected=true**,与幅值无关。 - 曾经这里写的是 ``|fnormal| > 1.0``(拿力的大小当"传感器活着"的代理), - 那条判据在**静止读数≈0** 时必然误判:空手、还没接触、或者读数本身就是 - 形变任意单位(Orisys 的量纲)—— 于是 S07 一进柔顺下压就报 - "触觉断流 >3.0s(左右指都无新鲜数据)",而话题其实以 19Hz 在发、 - ``connected`` 也是 true。仿真适配器早就把这两个概念分开了 - (没数据时发零 + ``connected=false``,见 sim_tactile_adapter), - 下游必须按同一条契约判"有没有数据"。 - """ - t0 = time.monotonic() - while time.monotonic() - t0 < timeout_s: - self._spin(0.02) - live = live_tactile(time.monotonic(), (self._tac_l, self._tac_r)) - if live: - fns = [float(m.fnormal) for m in live] - shear = max( - math.hypot(float(m.fshearx), float(m.fsheary)) for m in live - ) - return ( - sum(fns) / len(fns), max(fns), shear, - any(bool(m.contact) for m in live), - ) - # 超时了 —— 归因写在纯函数里(两条判据、两种修法,能被测试钉住) - raise SearchAbort( - tactile_timeout_reason((self._tac_l, self._tac_r), timeout_s), code=7 - ) - - def _ft_mag(self) -> Optional[float]: - if self._ft is None: - return None - t, msg = self._ft - if time.monotonic() - t > 0.5: - return None - try: - f = msg.ext_wrench_in_tcp.wrench.force - return math.sqrt(float(f.x) ** 2 + float(f.y) ** 2 + float(f.z) ** 2) - except Exception: - return None - - def _in_hole_probe( - self, q: np.ndarray, Tee: np.ndarray, z: float - ) -> Tuple[bool, np.ndarray, np.ndarray]: - """深触面后验证是否已直接滑进孔里:抬 0.8mm 卸载,±0.4mm 四向微探, - ≥2 个方向切向力飙升(顶到孔壁)= 在孔中。探完回到原位原深度。""" - cx, cy = float(Tee[0, 3]), float(Tee[1, 3]) - th = self._shear_rest + self.shear_delta - ok, q, Tee = self._step_to( - q, Tee, np.array([cx, cy, z + 0.0008]), "probe_lift", tol_m=0.0003 - ) - if not ok: - return False, q, Tee - hits = 0 - for dx, dy in ((0.4, 0.0), (-0.4, 0.0), (0.0, 0.4), (0.0, -0.4)): - ok, q, Tee = self._step_to( - q, Tee, - np.array([cx + dx / 1000.0, cy + dy / 1000.0, z + 0.0008]), - "probe", tol_m=0.0003, - ) - if not ok: - continue - _, _, sh, _ = self._tac_fresh(self.tac_timeout) - self.get_logger().info( - f" 微探 Δ=({dx:+.1f},{dy:+.1f})mm shear={sh:.0f}(壁阈 {th:.0f})" - ) - if sh > th: - hits += 1 - ok, q, Tee = self._step_to(q, Tee, np.array([cx, cy, z]), "probe_back", tol_m=0.0003) - self.get_logger().info(f" 微探命中 {hits}/4 向") - return hits >= 2, q, Tee - - def _guard(self, fn_max: float) -> None: - if fn_max > self._th_safe: - raise SearchAbort( - f"Orisys fnormal {fn_max:.0f} > 安全线 {self._th_safe:.0f}" - f"(静止 {self._fn_rest:.0f}+{self.safe_press_delta:.0f})" - ) - # 腕部 F/T 硬上限:连续 3 拍超限才中止(单拍毛刺/定心探边瞬态不敏感) - ft = self._ft_mag() - if ft is not None and ft > self.ft_safe_n: - self._ft_over = getattr(self, "_ft_over", 0) + 1 - if self._ft_over >= 3: - raise SearchAbort( - f"腕部F/T |F|={ft:.1f}N > 安全上限 {self.ft_safe_n}N(连续3拍)" - ) - else: - self._ft_over = 0 - - # ---------------- 输出 ---------------- - - def _state(self, s: str) -> None: # 覆盖:发到 /stage3/state - self.get_logger().info(f"[stage3] === {s} ===") - msg = String() - msg.data = s - self._state_pub.publish(msg) - - def _publish_result(self, payload: Dict[str, Any]) -> None: - # pipeline 继承本类:二阶段精对准也会走到这里,必须仍写 stage2 文件。 - if "k1_base_m" in payload or "residual_mm" in payload: - Stage2Locate._publish_result(self, payload) - return - msg = String() - msg.data = json.dumps(payload, ensure_ascii=False) - self._result_pub.publish(msg) - try: - Path("/tmp/stage3_result.json").write_text( - json.dumps(payload, ensure_ascii=False, indent=2), encoding="utf-8" - ) - except Exception: - pass - - def _publish_overlay(self, bgr: np.ndarray) -> None: - Stage2Locate._publish_overlay(self, bgr) - if not self.preview: - return - try: - import cv2 - - cv2.imwrite("/tmp/stage3_overlay.png", bgr) - except Exception: - pass - - # ---------------- 运动 ---------------- - - def _step_to( - self, - q: np.ndarray, - Tee: np.ndarray, - target: np.ndarray, - tag: str, - tol_m: float = 0.0005, - max_hops: int = 2, - ) -> Tuple[bool, np.ndarray, np.ndarray]: - return self._goto( - q, Tee, target, verticalize=True, tol_m=tol_m, - tol_tilt=self.vert_tol_rad * 2.5, tag=tag, v=self.search_speed, - max_hops=max_hops, settle_s=max(0.06, self.settle3 * 0.3), min_dur=0.16, - ) - - def _unload_z( - self, - q: np.ndarray, - Tee: np.ndarray, - z_contact: float, - fn_limit: float, - ) -> Tuple[np.ndarray, np.ndarray, float]: - """纯 Z 上抬直到力回到轻触带,避免卡在工件里接着横扫。""" - z = float(Tee[2, 3]) - for _ in range(8): - fn_avg, _, _, _ = self._tac_fresh(self.tac_timeout) - if fn_avg <= fn_limit and z >= float(z_contact) - 0.0002: - return q, Tee, z - z = min(float(z_contact) + 0.0012, z + 0.0005) - ok, q, Tee = self._goto( - q, Tee, np.array([float(Tee[0, 3]), float(Tee[1, 3]), z]), - verticalize=True, tol_m=0.0004, tol_tilt=self.vert_tol_rad * 2.5, - tag="unload", v=self.search_speed, max_hops=1, hold_xy=True, - settle_s=0.08, min_dur=0.16, - ) - z = float(Tee[2, 3]) - if not ok: - break - return q, Tee, z - - def _clip_search_z(self, z: float, z_contact: float) -> float: - """搜孔法兰 Z 钉在触面附近:禁止切向抬升把规抬离工件空扫。""" - lo = float(z_contact) - 0.0025 - hi = float(z_contact) + 0.0010 - return float(min(hi, max(lo, z))) - - def _xy_to_ref( - self, q: np.ndarray, Tee: np.ndarray, ref_xy: Any - ) -> Tuple[bool, np.ndarray, np.ndarray, float]: - """把通止规 XY 平移到二阶段孔心,Z/姿态保持。""" - gxy = self._gauge_xy(Tee) - dx = float(ref_xy[0]) - float(gxy[0]) - dy = float(ref_xy[1]) - float(gxy[1]) - dist = float(math.hypot(dx, dy)) - if dist < 0.00025: - return True, q, Tee, dist - tgt = np.array([Tee[0, 3] + dx, Tee[1, 3] + dy, Tee[2, 3]]) - ok, q, Tee = self._goto( - q, Tee, tgt, verticalize=True, tol_m=0.0004, - tol_tilt=self.vert_tol_rad * 2.0, tag="goto_hole_xy", - v=0.03, max_hops=6, settle_s=0.18, min_dur=0.35, - ) - return ok, q, Tee, dist - - def _screw_hop( - self, q: np.ndarray, Tee: np.ndarray, dz_m: float, pitch_m: float - ) -> Tuple[bool, np.ndarray, np.ndarray]: - """螺纹旋入微步:Z 平移 dz 同时绕世界 Z 转 2π·dz/pitch(dz<0 下压=右旋拧入)。""" - p = Tee[:3, 3] - J = self._jacobian(p) - if J is None: - self.get_logger().error("缺 link TF,无法旋入") - return False, q, Tee - dpsi = 2.0 * math.pi * dz_m / pitch_m # dz<0 → 绕世界 -Z(俯视顺时针,右旋入) - w = np.array([0.0, 0.0, 1.0]) * (dpsi / 0.12) - v = np.array([0.0, 0.0, dz_m / 0.12]) - qdot = dls_twist(J, v, w_base=w, damping=0.08, max_qdot=0.35) - dq = np.clip(qdot * 0.12, -0.06, 0.06) - if float(np.max(np.abs(dq))) < 1e-5: - self.get_logger().warn("screw hop 规划停滞") - return False, q, Tee - traj = JointTrajectory() - traj.joint_names = list(self.joint_names) - traj.points = [_pt(q, np.zeros(7), 0.08), _pt(q + dq, np.zeros(7), 0.8)] - if not self._send_action(traj, wait_s=4.0): - return False, q, Tee - t_end = time.monotonic() + self.settle3 - while time.monotonic() < t_end: - self._spin(0.05) - q2, Tee2 = self._wait_state(2.0) - if q2 is None or Tee2 is None: - return False, q, Tee - return True, q2, Tee2 - - def _retract(self, q: np.ndarray, Tee: np.ndarray, dz_m: float = 0.005) -> None: - try: - tgt = Tee[:3, 3].copy() - tgt[2] += dz_m - self._goto(q, Tee, tgt, verticalize=True, tol_m=0.001, - tol_tilt=self.vert_tol_rad * 3.0, tag="retract", - v=0.03, max_hops=2, settle_s=0.2, min_dur=0.6, - hold_xy=True, z_up_only=True) - except Exception: - pass - - # ---------------- D405 复拍对准(可选) ---------------- - - def _resnap_align(self, q: np.ndarray, Tee: np.ndarray) -> Tuple[np.ndarray, np.ndarray]: - from arm_application.hole_detect_hough import detect_holes - - self._state("resnap") - time.sleep(self.settle_sec) - bgr, depth_m, intr = self._grab() - res = detect_holes(bgr, self._det(), config=self._hole_cfg) - draw = res.get("draw_img", bgr) - self._publish_overlay(draw) - if not res.get("status"): - self.get_logger().warn(f"复拍检测失败({res.get('msg')}),按当前位姿继续搜孔") - return q, Tee - pts = res["hole_points"] - radii = res["hole_radii"] - bbox_l = res.get("bbox") or [0, 0, bgr.shape[1], bgr.shape[0]] - holes_px = [(pts[0][0], pts[0][1], radii[0]), (pts[1][0], pts[1][1], radii[1])] - z_wp = self._surface_depth(depth_m, tuple(bbox_l), holes=holes_px) - left_b = self._cam_to_base(self._px_to_cam(pts[0][0], pts[0][1], z_wp, intr)) - right_b = self._cam_to_base(self._px_to_cam(pts[1][0], pts[1][1], z_wp, intr)) - k1_b, k2_b = (left_b, right_b) if self.k1_label == "left" else (right_b, left_b) - tgt_b = k1_b if self.target_hole == "k1" else k2_b - gxy = self._gauge_xy(Tee) - err = float(np.hypot(tgt_b[0] - gxy[0], tgt_b[1] - gxy[1])) - self.get_logger().info(f"复拍: {self.target_hole}=({tgt_b[0]:.4f},{tgt_b[1]:.4f}) 残差={err*1000:.1f}mm") - if err > 0.001: - move = np.array([ - Tee[0, 3] + (tgt_b[0] - gxy[0]), - Tee[1, 3] + (tgt_b[1] - gxy[1]), - Tee[2, 3], - ]) - ok, q, Tee = self._goto( - q, Tee, move, verticalize=True, tol_m=0.0008, - tol_tilt=self.vert_tol_rad * 2.0, tag="resnap_align", v=self.align_speed, - max_hops=4, settle_s=0.3, - ) - self._pin(q) - if not ok: - self.get_logger().warn("复拍对准未完全到位,按当前位姿继续") - return q, Tee - - # ---------------- 主流程 ---------------- - - def run(self) -> int: - self._state("wait_state") - q, Tee = self._wait_state(10.0) - if q is None or Tee is None: - self.get_logger().error("拿不到 joint_states/TF —— 先跑 T1: run_real.sh --arm 89") - return 2 - if not self._cli.wait_for_server(timeout_sec=5.0): - self.get_logger().error("JTC action 不在 —— 控制器没起来") - return 2 - return self._run_search(q, Tee, linger=True) - - def _run_search( - self, q: np.ndarray, Tee: np.ndarray, linger: bool = True, - stage2_final: Optional[Dict[str, Any]] = None, - ) -> int: - t_start = time.monotonic() - result: Dict[str, Any] = {"ok": False, "stage": "stage3", "target_hole": self.target_hole} - try: - # 基线必须悬空测。二阶段结束在 hover≈触面+1mm,带载会把阈值抬飞。 - # 触觉没在发就原地中止,不许先抬到锁高再报断流。 - z_now = float(Tee[2, 3]) - z_air = float(self.hover_z) + 0.05 - self._spin(0.05) - tac_live = bool( - live_tactile(time.monotonic(), (self._tac_l, self._tac_r)) - ) - if not tac_live: - raise SearchAbort( - tactile_timeout_reason( - (self._tac_l, self._tac_r), float(self.tac_timeout) - ), - code=7, - ) - if should_lift_air_baseline(z_now, z_air, tactile_live=True): - self._state("air_baseline") - self.get_logger().info( - f"抬到 {z_air:.3f}m 测触觉空载基线(当前 Z={z_now:.3f})" - ) - ok, q, Tee = self._goto( - q, Tee, - np.array([float(Tee[0, 3]), float(Tee[1, 3]), z_air]), - verticalize=True, hold_xy=True, tag="air_baseline", - v=self.move_speed, max_hops=6, settle_s=0.20, min_dur=0.5, - tol_m=0.003, tol_tilt=self.vert_tol_rad * 2.0, - ) - if not ok: - self.get_logger().warn("空载抬升未完全到位,仍按当前高度测基线") - - self._state("tactile_check") - l_ok = r_ok = False - samples: List[Tuple[float, float]] = [] - t0 = time.monotonic() - while time.monotonic() - t0 < 2.2: - fn_avg, _, shear, _ = self._tac_fresh(self.tac_timeout) - if fn_avg > 1.0: - samples.append((fn_avg, shear)) - self._spin(0.05) - if len(samples) >= 10 and time.monotonic() - t0 >= 0.8: - break - if len(samples) < 6: - raise SearchAbort( - f"触觉有效样本不足 ({len(samples)}) —— 传感器刚重启或 tare 为 0,稍后再跑", - code=7, - ) - l_ok = bool(self._tac_l and getattr(self._tac_l[1], "connected", False)) - r_ok = bool(self._tac_r and getattr(self._tac_r[1], "connected", False)) - if not (l_ok or r_ok): - raise SearchAbort( - "触觉传感器未真正连接(SDK/设备异常)——看 /tmp/stage3_tactile.log," - "或先跑 bash ~/ros2/scripts/run_tactile.sh --cli 验证", code=7, - ) - if not (l_ok and r_ok): - self.get_logger().warn( - f"单指触觉模式:左={'OK' if l_ok else '掉线'} 右={'OK' if r_ok else '掉线'}" - "——力反馈只来自健在侧,阈值相对该侧基线,功能可用但灵敏度减半" - ) - fn_arr = np.array([s[0] for s in samples], dtype=float) - sh_arr = np.array([s[1] for s in samples], dtype=float) - # 中位数 + MAD:自由空气中偶发的夹持振动尖峰不再污染基线 - # (均值/标准差对尖峰敏感,曾把 touch 阈值推到真实触面之上) - self._fn_rest = float(np.median(fn_arr)) - self._fn_sigma = float(1.4826 * np.median(np.abs(fn_arr - self._fn_rest))) - self._shear_rest = float(np.median(sh_arr)) - # 基线合理性闸:Orisys 每次连接 tare 的零点是随机的—— - # μ≈0 是带载 tare(真实接触力被吃掉),μ>1500 是近饱和(接触余量不够)。 - # 两种都会让后续相对阈值失效,必须在下臂前拦住。 - if not (self.baseline_min <= self._fn_rest <= self.baseline_max): - raise SearchAbort( - f"触觉基线异常 μ={self._fn_rest:.0f}(健康范围 " - f"{self.baseline_min:.0f}~{self.baseline_max:.0f})——" - "零点漂移/带载 tare。请让通止规完全悬空后重启触觉服务再跑:" - "pkill -f tactile; pkill orisys_tac_w; ros2 launch arm_application tactile.launch.py", - code=7, - ) - self._th_touch = self._fn_rest + max(4.0 * self._fn_sigma, self.touch_delta) - self._th_target = self._th_touch + self.press_delta - self._th_max = self._th_touch + 2.0 * self.press_delta + max(4.0 * self._fn_sigma, 300.0) - self._th_safe = self._fn_rest + self.safe_press_delta - self._th_shear = self._shear_rest + self.shear_delta - self._th_insert = self._th_touch + self.insert_press_delta - self.get_logger().info( - f"触觉基线: fn μ={self._fn_rest:.0f} σ={self._fn_sigma:.0f} shear μ={self._shear_rest:.0f}\n" - f" 派生阈值: touch={self._th_touch:.0f} target={self._th_target:.0f} " - f"max={self._th_max:.0f} safe={self._th_safe:.0f} shear={self._th_shear:.0f} " - f"insert={self._th_insert:.0f}" - ) - if self.ft_watchdog and self._ft_mag() is None: - self.get_logger().warn(f"腕部F/T话题 {self.ft_topic} 无数据,仅用 Orisys 看门狗") - - # 垂直度核验 - _, ang = self._w_down(Tee[:3, :3]) - if ang > self.vert_tol_rad: - self._state("verticalize") - ok, q, Tee = self._goto( - q, Tee, Tee[:3, 3].copy(), verticalize=True, - tol_m=0.002, tol_tilt=self.vert_tol_rad, tag="verticalize", - v=0.04, max_hops=12, - ) - if not ok: - raise SearchAbort("垂直化未收敛", code=2) - _, ang = self._w_down(Tee[:3, :3]) - self.get_logger().info(f"垂直度 OK: 残余倾角 {math.degrees(ang):.2f}deg") - - # 参考:二阶段结果(内存优先,避免 /tmp 读写失败把孔位丢掉) - ref_xy = None - src = stage2_final if isinstance(stage2_final, dict) else None - if src is None: - try: - src = json.loads(Path("/tmp/stage2_result.json").read_text(encoding="utf-8")) - except Exception: - src = None - residual_mm: Optional[float] = None - if src: - ref_xy = src.get(f"{self.target_hole}_base_m") or src.get("k1_base_m") - try: - rv = src.get("residual_mm") - residual_mm = float(rv) if rv is not None else None - except (TypeError, ValueError): - residual_mm = None - if ref_xy: - extra = f" 残差 {residual_mm:.2f}mm" if residual_mm is not None else "" - self.get_logger().info( - f"二阶段参考: {self.target_hole}=({float(ref_xy[0]):.4f},{float(ref_xy[1]):.4f}){extra}" - ) - if ref_xy is None: - self.get_logger().warn("没有二阶段孔坐标 —— 以当前通止规 XY 为搜索中心") - else: - self._state("goto_hole_xy") - ok_xy, q, Tee, dist_xy = self._xy_to_ref(q, Tee, ref_xy) - self.get_logger().info( - f"平移到孔 XY:偏差 {dist_xy*1000:.2f}mm" - + (",到位" if ok_xy else ",未完全到位,按下压点搜") - ) - - if self.resnap: - q, Tee = self._resnap_align(q, Tee) - - # XY 已在空中对准:纯 Z 降回悬停高,再小步触面(避免贴面横移刮擦) - z_now = float(Tee[2, 3]) - if z_now > self.hover_z + 0.008: - self._state("rehover") - ok, q, Tee = self._goto( - q, Tee, - np.array([float(Tee[0, 3]), float(Tee[1, 3]), self.hover_z]), - verticalize=True, hold_xy=True, tag="rehover", - v=self.move_speed, max_hops=8, settle_s=0.20, min_dur=0.5, - tol_m=0.002, tol_tilt=self.vert_tol_rad * 1.5, - ) - if not ok: - self.get_logger().warn("回悬停高未完全到位,继续下压") - - # ---- approach:小步下降找面 ---- - self._state("approach") - x0, y0, z0 = [float(v) for v in Tee[:3, 3]] - z = z0 - descended = 0.0 - z_contact: Optional[float] = None - found: Optional[Tuple[float, float]] = None - fn_peak = 0.0 - while True: - fn_avg, fn_max, _, contact = self._tac_fresh(self.tac_timeout) - self._guard(fn_max) - fn_peak = max(fn_peak, fn_max) - # 注意:SDK 的 contact 标志在夹爪夹着通止规时恒为 True(夹持形变), - # 触面只能看 fnormal 超阈值;腕部 F/T(标定牛顿)做独立旁路判据 - ft_now = self._ft_mag() - ft_touch = ft_now is not None and ft_now > self.approach_ft_touch_n - if fn_avg >= self._th_touch or ft_touch: - z_contact = z - how = f"fn={fn_avg:.0f}≥{self._th_touch:.0f}" if fn_avg >= self._th_touch else ( - f"腕部F/T={ft_now:.1f}N>{self.approach_ft_touch_n:.0f}N(Orisys 未越阈 {self._th_touch:.0f})" - ) - self.get_logger().info( - f"触面: Z={z:.4f}m {how}(下降 {descended:.1f}mm)" - ) - if descended >= self.enter_probe_mm: - # 触面异常深——通止规很可能已经直接滑进孔(工件面不会这么低) - in_hole, q, Tee = self._in_hole_probe(q, Tee, z) - if in_hole: - gxy = self._gauge_xy(Tee) - found = (float(gxy[0]), float(gxy[1])) - # 抬到孔口倒角段再定心:深插状态直接横探会别死孔壁 - z += self.mouth_lift_mm / 1000.0 - self.get_logger().info( - f"★ 直接入孔: gauge=({found[0]:.4f},{found[1]:.4f})," - f"抬 {self.mouth_lift_mm:.1f}mm 到孔口定心,跳过 seat/螺旋" - ) - else: - self.get_logger().info("微探无孔壁特征——按普通触面处理(工件面偏低)") - break - descended += self.approach_step_mm - if descended > self.approach_max_mm: - raise SearchAbort( - f"下降 {self.approach_max_mm:.0f}mm 未触面——孔位/工件不对,回二阶段检查", code=3 - ) - z = z0 - descended / 1000.0 - if z < self.min_ee_z: - raise SearchAbort(f"触面搜索 Z={z:.3f} 低于 min_ee_z={self.min_ee_z:.2f}", code=3) - ok, q, Tee = self._step_to(q, Tee, np.array([x0, y0, z]), "approach", max_hops=1) - if not ok: - raise SearchAbort("approach 运动失败", code=3) - - # ---- seat + 螺旋(直接入孔时跳过) ---- - if found is None: - # ---- seat:建立轻触 ---- - self._state("seat") - for _ in range(8): - fn_avg, fn_max, _, _ = self._tac_fresh(self.tac_timeout) - self._guard(fn_max) - if self._th_target * 0.95 <= fn_avg <= self._th_max: - break - # err>0 = 压力不足 → 下压(z 减小);err<0 = 超压 → 微抬。z 向上为正。 - dz_mm = float(np.clip(-self.kp_z_mm * (self._th_target - fn_avg), -0.6, 0.4)) - z += dz_mm / 1000.0 - ok, q, Tee = self._step_to(q, Tee, np.array([x0, y0, z]), "seat", tol_m=0.0003) - if not ok: - raise SearchAbort("seat 运动失败", code=3) - self.get_logger().info(f"轻触建立: z={z:.4f}m fn={fn_avg:.0f}(目标 {self._th_target:.0f})") - if z_contact is None: - z_contact = float(z) - - # 单步轻探 0.6mm。多 hop 会在力检查前把规顶进工件。 - seat_fn = float(fn_avg) - self._state("press_probe") - z_now = float(Tee[2, 3]) - z_probe = z_now - 0.0006 - ok, q, Tee = self._step_to( - q, Tee, np.array([x0, y0, z_probe]), "press_probe", - tol_m=0.0005, max_hops=1, - ) - fn_p, fn_max, _, _ = self._tac_fresh(self.tac_timeout) - fn_peak = max(fn_peak, fn_max) - dropped = fn_p < seat_fn * (1.0 - self.drop_ratio) or fn_p < self._th_touch - jammed = fn_p > self._th_max or fn_max > self._th_max - if jammed or not dropped: - if jammed: - self.get_logger().warn( - f"轻探力 {fn_p:.0f} 偏高(未入孔),卸载回触面" - ) - else: - self.get_logger().info( - f"轻探未入孔 fn {seat_fn:.0f}→{fn_p:.0f},卸载回触面螺旋" - ) - q, Tee, z = self._unload_z(q, Tee, float(z_contact), self._th_target) - fn_avg, fn_max, _, _ = self._tac_fresh(self.tac_timeout) - if fn_avg > self._th_max: - self.get_logger().warn( - f"卸载后力仍 {fn_avg:.0f},继续螺旋并在步间卸载" - ) - else: - gxy = self._gauge_xy(Tee) - found = (float(gxy[0]), float(gxy[1])) - z = float(Tee[2, 3]) - self.get_logger().info( - f"★ 轻探入孔: gauge=({found[0]:.4f},{found[1]:.4f}) " - f"fn {seat_fn:.0f}→{fn_p:.0f}" - ) - - # 拖拽基线:接触静止时的切向读数作为螺旋期切向阈值的基准 - # (自由空气基线不含夹持/姿态负载,拖拽时的摩擦尖峰会误触发减拖) - if found is None: - shear_seat: List[float] = [] - for _ in range(8): - _, _, sh, _ = self._tac_fresh(self.tac_timeout) - shear_seat.append(sh) - self._spin(0.04) - shear_drag = float(np.median(np.array(shear_seat, dtype=float))) - self._th_shear = shear_drag + self.shear_delta - self.get_logger().info( - f"拖拽切向基线: μ={shear_drag:.0f} → 螺旋减拖阈值 {self._th_shear:.0f}" - ) - - # ---- spiral:力闭环螺旋搜孔 ---- - if found is None: - gxy0 = self._gauge_xy(Tee) - if ref_xy is not None: - cx, cy = float(ref_xy[0]), float(ref_xy[1]) - else: - cx, cy = float(gxy0[0]), float(gxy0[1]) - det = DropDetector(self.drop_ratio, self.drop_frames) - n_expand = int(self.spiral_expand_max) - if residual_mm is not None and residual_mm <= 1.8: - n_expand = 0 - else: - n_expand = min(n_expand, 1) - for attempt in range(n_expand + 1): - r_max = self.spiral_r_max_mm + attempt * self.spiral_expand_step_mm - self._state(f"spiral_r{r_max:.0f}mm") - pts = spiral_points(cx, cy, self.spiral_pitch_mm, self.spiral_step_mm, r_max) - self.get_logger().info(f"螺旋点数={len(pts)} (r_max={r_max:.1f}mm)") - for i, (px, py) in enumerate(pts): - gxy = self._gauge_xy(Tee) - z = self._clip_search_z(z, float(z_contact)) - tgt = np.array([ - Tee[0, 3] + (px - gxy[0]), - Tee[1, 3] + (py - gxy[1]), - z, - ]) - hop_dist = float(np.linalg.norm(tgt - Tee[:3, 3])) - if hop_dist > 0.008: - raise SearchAbort( - f"螺旋目标异常跳变 {hop_dist*1000:.1f}mm > 8mm(坐标/单位错误),立即中止", - code=4, - ) - ok, q, Tee = self._step_to(q, Tee, tgt, f"spiral{i}", tol_m=0.0004) - if not ok: - raise SearchAbort(f"螺旋运动失败 @r={r_max:.1f}mm idx={i}", code=4) - fn_avg, fn_max, shear, _ = self._tac_fresh(self.tac_timeout) - if fn_max > self._th_max: - self.get_logger().warn( - f"螺旋力 {fn_max:.0f} > max {self._th_max:.0f},卸载回触面" - ) - q, Tee, z = self._unload_z( - q, Tee, float(z_contact), self._th_target - ) - continue - self._guard(fn_max) - fn_peak = max(fn_peak, fn_max) - # Z 力闭环维持轻触(err>0 压力不足 → 下压 z 减小;z 向上为正) - dz_mm = float(np.clip( - -self.kp_z_mm * (self._th_target - fn_avg), -0.3, 0.25 - )) - z += dz_mm / 1000.0 - # 切向大只在仍贴着触面时微抬 0.15mm,禁止累计抬离工件 - if shear > self._th_shear and z <= float(z_contact) + 0.0004: - z += 0.00015 - self.get_logger().warn( - f"切向力 {shear:.0f} 偏大,微抬 0.15mm 减拖" - ) - if fn_avg < self._th_touch: - z = min(z, float(z_contact)) - z = self._clip_search_z(z, float(z_contact)) - if det.update(fn_avg, in_contact_band=fn_avg >= self._th_touch): - found = (px, py) - self.get_logger().info( - f"★ 入孔: gauge=({px:.4f},{py:.4f}) " - f"r={math.hypot(px-cx, py-cy)*1000:.1f}mm " - f"fn {det.contact_avg:.0f}→{fn_avg:.0f}" - ) - break - if i % 15 == 0: - self.get_logger().info( - f" spiral {i}/{len(pts)} " - f"r={math.hypot(px-cx, py-cy)*1000:.1f}mm " - f"fn={fn_avg:.0f} shear={shear:.0f} z={z:.4f}" - ) - if found is not None: - break - self.get_logger().warn(f"r_max={r_max:.1f}mm 未入孔,扩大搜索半径") - if found is None: - raise SearchAbort( - f"螺旋搜孔未找到孔(r_max={self.spiral_r_max_mm + self.spiral_expand_max * self.spiral_expand_step_mm:.0f}mm)。" - "回二阶段复对准,或加大 spiral_r_max_mm", code=4, - ) - result["hole_xy_base_m"] = [round(found[0], 5), round(found[1], 5)] - result["z_contact_m"] = round(float(z_contact if z_contact is not None else z), 4) - - # ---- center:十字微扫定心 ---- - if self.center_scan: - self._state("center_scan") - d = self.center_scan_mm / 1000.0 - probes = [(0.0, 0.0), (d, 0.0), (-d, 0.0), (0.0, d), (0.0, -d)] - best_xy, best_metric = found, float("inf") - for dx, dy in probes: - gxy = self._gauge_xy(Tee) - tgt = np.array([ - Tee[0, 3] + (found[0] + dx - gxy[0]), - Tee[1, 3] + (found[1] + dy - gxy[1]), - z, - ]) - ok, q, Tee = self._step_to(q, Tee, tgt, "scan", tol_m=0.0003) - if not ok: - continue - fn_avg, fn_max, shear, _ = self._tac_fresh(self.tac_timeout) - self._guard(fn_max) - metric = shear + 0.3 * fn_avg - self.get_logger().info( - f" scan Δ=({dx*1000:+.1f},{dy*1000:+.1f})mm shear={shear:.2f} fn={fn_avg:.2f} m={metric:.2f}" - ) - if metric < best_metric: - best_metric, best_xy = metric, (found[0] + dx, found[1] + dy) - gxy = self._gauge_xy(Tee) - ok, q, Tee = self._step_to( - q, Tee, - np.array([Tee[0, 3] + (best_xy[0] - gxy[0]), Tee[1, 3] + (best_xy[1] - gxy[1]), z]), - "center", tol_m=0.0003, - ) - found = best_xy - self.get_logger().info(f"定心: ({best_xy[0]:.4f},{best_xy[1]:.4f}) metric={best_metric:.2f}") - result["hole_xy_base_m"] = [round(best_xy[0], 5), round(best_xy[1], 5)] - - # ---- 轻压:找到孔后轻轻按在孔口,不拧入(拧入是后续阶段) ---- - self._state("press") - xh, yh = [float(v) for v in Tee[:3, 3][:2]] - for _ in range(8): - fn_avg, fn_max, _, _ = self._tac_fresh(self.tac_timeout) - self._guard(fn_max) - fn_peak = max(fn_peak, fn_max) - if self._th_target * 0.9 <= fn_avg <= self._th_max: - break - dz_mm = float(np.clip(-self.kp_z_mm * (self._th_target - fn_avg), -0.4, 0.3)) - z += dz_mm / 1000.0 - ok, q, Tee = self._step_to( - q, Tee, np.array([xh, yh, z]), "press", tol_m=0.0003, - ) - if not ok: - self.get_logger().warn("轻压步进未完全到位,按当前力保持") - break - self.get_logger().info( - f"轻压到位: z={z:.4f}m fn={fn_avg:.0f}(目标 {self._th_target:.0f})——不拧入" - ) - result["press_fn"] = round(float(fn_avg), 1) - - # ---- insert:仅 --depth >0 才拧入/下压;默认 0 留给后续拧入阶段 ---- - inserted_mm = 0.0 - if self.insert_depth_mm > 0.0: - self._state("insert") - retries = 0 - while inserted_mm < self.insert_depth_mm - 1e-6: - dz_mm = min(0.5, self.insert_depth_mm - inserted_mm) - if abs(self.screw_pitch_mm) > 1e-6: - ok, q, Tee = self._screw_hop(q, Tee, -dz_mm / 1000.0, self.screw_pitch_mm / 1000.0) - else: - ok, q, Tee = self._step_to( - q, Tee, np.array([Tee[0, 3], Tee[1, 3], z - dz_mm / 1000.0]), - "insert", tol_m=0.0003, - ) - if not ok: - raise SearchAbort("插入运动失败", code=5) - fn_avg, fn_max, _, _ = self._tac_fresh(self.tac_timeout) - self._guard(fn_max) - fn_peak = max(fn_peak, fn_max) - if fn_max > self._th_insert: - retries += 1 - self.get_logger().warn( - f"插入力 {fn_max:.0f} > {self._th_insert:.0f},回退微抖重试 {retries}/{self.insert_retry}" - ) - if retries > self.insert_retry: - raise SearchAbort( - f"插入受阻({fn_max:.0f})——孔位仍有偏差或螺纹咬死", code=5 - ) - self._retract(q, Tee, 0.0004) - q2, Tee2 = self._wait_state(2.0) - if q2 is not None and Tee2 is not None: - q, Tee = q2, Tee2 - wig = 0.0003 * (1.0 if retries % 2 else -1.0) - ok, q, Tee = self._step_to( - q, Tee, np.array([Tee[0, 3] + wig, Tee[1, 3], Tee[2, 3]]), - "wiggle", tol_m=0.0003, - ) - continue - inserted_mm += dz_mm - z -= dz_mm / 1000.0 - self.get_logger().info( - f" insert {inserted_mm:.1f}/{self.insert_depth_mm:.1f}mm fn={fn_avg:.0f}" - ) - self._state("inserted") - result["inserted_mm"] = round(inserted_mm, 2) - - # ---- hold ---- - self._state("hold") - self._pin(q) - result.update( - ok=True, - fn_peak_n=round(fn_peak, 2), - elapsed_s=round(time.monotonic() - t_start, 1), - note="搜孔+轻压完成" + ( - f",插入 {inserted_mm:.1f}mm" if inserted_mm > 0 else "(未拧入,保持轻压)" - ), - ) - self._publish_result(result) - self.get_logger().info( - f"=== 三阶段搜孔完成: {result['note']} 峰值力 {fn_peak:.0f}," - f"耗时 {result['elapsed_s']}s。结果: /stage3/result, /tmp/stage3_result.json ===" - ) - if linger and self.linger3 > 0.0: - t_end = time.monotonic() + self.linger3 - while time.monotonic() < t_end and rclpy.ok(): - self._publish_result(result) - self._spin(0.3) - return 0 - - except SearchAbort as exc: - self.get_logger().error(f"搜孔中止: {exc}") - self._state("abort") - result.update(ok=False, note=str(exc)) - self._publish_result(result) - if q is not None and Tee is not None: - self._retract(q, Tee, 0.005) - q2 = self._q() - self._pin(q2 if q2 is not None else q) - return exc.code - - -def main(args=None) -> None: - rclpy.init(args=args) - node = Stage3Search() - code = 2 - try: - code = node.run() - except KeyboardInterrupt: - pass - except Exception as exc: # noqa: BLE001 - node.get_logger().error(f"stage3 异常终止: {exc}") - code = 2 - finally: - try: - q = node._q() - if q is not None: - node._pin(q) - except Exception: - pass - try: - node._shutdown_tf() - except Exception: - pass - try: - node.destroy_node() - except Exception: - pass - try: - if rclpy.ok(): - rclpy.shutdown() - except Exception: - pass - raise SystemExit(code) - - -if __name__ == "__main__": - main() diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/tactile_cli.py b/install/arm_application/lib/python3.11/site-packages/arm_application/tactile_cli.py deleted file mode 100644 index f9dc5ad..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/tactile_cli.py +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env python3 -"""Orisys 视触觉命令行工具。端口 / 配置来自 ``site.yaml`` 的 ``tactile`` 段。""" - -from __future__ import annotations - -import argparse -import sys -import time - -from arm_application.orisys_tactile import make_tactile, resolve_orisys_config -from arm_application.site_io import load_site_dict, site_path - - -def main() -> int: - parser = argparse.ArgumentParser(description="Orisys 触觉命令行工具(site.yaml)") - parser.add_argument("--duration", type=float, default=10.0) - parser.add_argument("--site", default="") - args = parser.parse_args() - data = load_site_dict(args.site or None) - t = data.get("tactile") or {} - cfg_name = resolve_orisys_config(str(t.get("config") or "dd03"), str(t.get("config_file") or "")) - print( - f"site={site_path() if not args.site else args.site} " - f"backend={t.get('backend') or 'orisys'} " - f"left={t.get('left_video', 0)} right={t.get('right_video', 2)} " - f"config={cfg_name}" - ) - tactile = make_tactile(data) - try: - tactile.connect() - except Exception as exc: - print(f"错误:{exc}", file=sys.stderr) - return 1 - t0 = time.time() - n = 0 - try: - while time.time() - t0 < args.duration: - sample = tactile.read_sample() - n += 1 - raw = sample.raw or {} - left = raw.get("left") or {} - right = raw.get("right") or {} - if n % 10 == 0: - print( - f"n={n:4d} contact={int(sample.contact)} " - f"L F={float(left.get('fnormal') or 0):8.2f} " - f"R F={float(right.get('fnormal') or 0):8.2f} " - f"Fz={float(sample.force_xyz[0]):8.2f}" - ) - time.sleep(0.01) - except KeyboardInterrupt: - print("已中断") - finally: - tactile.disconnect() - print(f"完成 frames={n}") - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/tactile_interface.py b/install/arm_application/lib/python3.11/site-packages/arm_application/tactile_interface.py deleted file mode 100644 index 6c121ee..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/tactile_interface.py +++ /dev/null @@ -1,84 +0,0 @@ -"""触觉采样 / 指令类型。后端(Orisys / mock)可替换。""" - -from __future__ import annotations - -import time -from abc import ABC, abstractmethod -from dataclasses import dataclass -from typing import Any - -import numpy as np - - -@dataclass -class TactileSample: - timestamp: float - force_xyz: np.ndarray - torque_xyz: np.ndarray - contact: bool - embedding: np.ndarray | None = None - raw: dict[str, Any] | None = None - - -@dataclass -class TactileCommand: - delta_xyz: np.ndarray - delta_rpy: np.ndarray - gripper_pos: float | None = None - done: bool = False - ok: bool = True - message: str = "" - - -class TactileInterface(ABC): - name: str = "tactile_base" - - @abstractmethod - def connect(self) -> None: ... - - @abstractmethod - def disconnect(self) -> None: ... - - @abstractmethod - def reset(self, hole_id: int) -> None: ... - - @abstractmethod - def step(self, sample: TactileSample) -> TactileCommand: ... - - -class MockTactile(TactileInterface): - name = "mock_tactile" - - def __init__(self) -> None: - self._i = 0 - self._hole = 0 - - def connect(self) -> None: - self._i = 0 - - def disconnect(self) -> None: - pass - - def reset(self, hole_id: int) -> None: - self._hole = hole_id - self._i = 0 - - def read_sample(self) -> TactileSample: - self._i += 1 - return TactileSample( - timestamp=time.time(), - force_xyz=np.zeros(3), - torque_xyz=np.zeros(3), - contact=self._i >= 8, - ) - - def step(self, sample: TactileSample) -> TactileCommand: - self._i += 1 - done = self._i >= 15 - return TactileCommand( - delta_xyz=np.zeros(3), - delta_rpy=np.zeros(3), - done=done, - ok=True, - message=f"mock hole={self._hole} step={self._i}", - ) diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/tactile_node.py b/install/arm_application/lib/python3.11/site-packages/arm_application/tactile_node.py deleted file mode 100644 index 85a144f..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/tactile_node.py +++ /dev/null @@ -1,305 +0,0 @@ -#!/usr/bin/env python3 -"""Publish Orisys dual-finger tactile status. Config from site.yaml tactile:. - -架构(厂家示例 two_sensor_pipeline 的推荐):每个传感器一个独立 -multiprocessing 进程(独立 CUDA 上下文),ROS 主进程只做队列→话题转发。 -原因:实测单进程内双开两路传感器会互相拖垮(30→0.8fps);独立进程稳定 30fps。 -""" - -from __future__ import annotations - -import multiprocessing as mp -import signal -import time - -import numpy as np -import rclpy -from rclpy.node import Node - -from arm_application.image_utils import UnsupportedImageError, ndarray_to_image -from arm_application.orisys_tactile import load_orisys_from_site, tactile_worker -from arm_application.site_io import load_site_dict, site_path -from arm_msgs.msg import TactileStatus -from sensor_msgs.msg import Image - -from arm_application.ros_node import TolerantNode - - -class TactileNode(TolerantNode): - def __init__(self) -> None: - super().__init__("tactile") - self.declare_parameter("publish_hz", 20.0) - # 下面两个可以用 ROS 参数覆盖 site.yaml,便于不改站点文件就做验证 - # (例如 mock 后端 + 打开图像话题来确认链路通)。 - self.declare_parameter("backend", "") - self.declare_parameter("image_hz", -1.0) - data = load_site_dict() - t = data.get("tactile") or {} - hz = float(t.get("publish_hz") or self.get_parameter("publish_hz").value or 20.0) - backend_override = str(self.get_parameter("backend").value).strip() - self._backend = ( - backend_override or str(t.get("backend") or "orisys") - ).strip().lower() - self._mock = self._backend in ("mock", "mock_orisys") - - self._pub = { - side: self.create_publisher(TactileStatus, f"/tactile/{side}/status", 10) - for side in ("left", "right") - } - self._latest: dict[str, tuple[float, dict]] = {} - self._connected = {"left": False, "right": False} - self._mock_n = 0 - self._workers: list = [] - self._queues: dict[str, object] = {} - self._stop = None - - # --- 视触觉图像 / 力矢量场 --- - # 默认关闭(image_hz=0):图像每帧几百 KB,不该拖累三力的 30fps 时序。 - # 打开后走一条 maxsize=1 的独立队列,满则丢旧留新 —— 主进程来不及消费 - # 只会丢图像,三力一条不受影响。 - self._image_hz = ( - float(self.get_parameter("image_hz").value) - if float(self.get_parameter("image_hz").value) >= 0 - else float(t.get("image_hz") or 0.0) - ) - self._image_q = None - self._image_warned: set[str] = set() - self._image_pub: dict[str, object] = {} - self._vector_pub: dict[str, object] = {} - self._image_count: dict[str, int] = {} - self._last_mock_img = 0.0 - - # 图像 publisher 与后端无关 —— mock 后端也要能发。 - # 否则"图像话题到底通不通"只能等到有相机、上真机那天才发现。 - if self._image_hz > 0: - for side in ("left", "right"): - self._image_pub[side] = self.create_publisher( - Image, f"/tactile/{side}/image", 5 - ) - self._vector_pub[side] = self.create_publisher( - Image, f"/tactile/{side}/vector", 5 - ) - self.get_logger().info( - f"视触觉图像已开启: {self._image_hz:.1f}Hz " - f"→ /tactile/{{left,right}}/image 与 /vector" - ) - - if self._mock: - self._connected = {"left": True, "right": True} - self.get_logger().info("触觉使用 mock 后端(假数据,不接真实传感器)") - else: - cfg = load_orisys_from_site(data) - ctx = mp.get_context("spawn") # spawn:子进程不带 DDS 线程,CUDA 上下文干净 - self._stop = ctx.Event() - if self._image_hz > 0: - self._image_q = ctx.Queue(maxsize=1) - for side in ("left", "right"): - q = ctx.Queue(maxsize=2) - self._queues[side] = q - p = ctx.Process( - target=tactile_worker, - args=(side, cfg, q, self._stop, self._image_q), - name=f"tactile_{side}", daemon=True, - ) - p.start() - self._workers.append(p) - self.get_logger().info( - f"tactile workers spawned (left pid={self._workers[0].pid} right pid={self._workers[1].pid}) " - f"site={site_path()}" - ) - self.create_timer(1.0 / max(1e-3, hz), self._tick) - - def _drain(self, side: str) -> None: - q = self._queues.get(side) - if q is None: - return - latest = None - while True: - try: - latest = q.get_nowait() - except Exception: - break - if latest is None: - return - if latest.get("error"): - self.get_logger().error(f"[{side}] {latest['error']}", throttle_duration_sec=3.0) - return - self._connected[side] = True - self._latest[side] = (time.monotonic(), latest) - - def _drain_images(self) -> None: - """把 worker 推来的最新图像 / 力矢量场发布出去。 - - 只取最新一帧:worker 已按 ``image_hz`` 节流、队列 ``maxsize=1``, - 所以这里读到的永远是最新画面;主进程偶尔卡一下,丢掉的是中间帧 - 而不是最新帧。 - """ - if self._image_q is None: - return - latest = None - while True: - try: - latest = self._image_q.get_nowait() - except Exception: - break - if latest is None: - return - - side = str(latest.get("side") or "") - if side not in self._image_pub: - return - stamp = self.get_clock().now().to_msg() - frame_id = f"{side}_tactile" - - self._publish_array( - self._image_pub[side], latest.get("img"), frame_id, stamp, side, "image" - ) - self._publish_array( - self._vector_pub[side], latest.get("vector"), frame_id, stamp, side, "vector" - ) - - def _publish_array(self, pub, array, frame_id: str, stamp, side: str, tag: str) -> None: - """打包并发布一个数组;形状/类型不支持时跳过该话题而不是崩溃。 - - ``array is None`` 是正常情况(该侧没有矢量场输出、或本帧没算), - 不报错也不发空图 —— 发一张全零的假图会让下游以为接触到了东西。 - """ - if array is None: - return - key = f"{side}_{tag}" - try: - msg = ndarray_to_image(array, frame_id=frame_id, stamp=stamp) - except UnsupportedImageError as exc: - # 编码不支持是固定的(SDK 给的 dtype 不会变),每侧每种图只提醒一次, - # 否则 5Hz 的警告会把现场日志冲掉。 - if key not in self._image_warned: - self._image_warned.add(key) - self.get_logger().warn( - f"[{key}] 无法打包成 Image,已跳过该话题: {exc}" - ) - return - - try: - pub.publish(msg) - except Exception as exc: - if f"{key}_pub" not in self._image_warned: - self._image_warned.add(f"{key}_pub") - self.get_logger().warn(f"[{key}] 发布失败: {exc}") - return - - if self._image_count.get(key, 0) == 0: - self.get_logger().info( - f"[{key}] 首帧已发布 ({msg.width}x{msg.height} {msg.encoding})" - ) - self._image_count[key] = self._image_count.get(key, 0) + 1 - - def _publish_mock_images(self, force: float) -> None: - """mock 后端下造一张形变图 + 一张力矢量场,用来打通图像发布链路。 - - 没有传感器时也要能把 ``/tactile//image`` 与 ``/vector`` 跑起来 —— - 否则这两个话题是否真的能出图,只能等到上真机那天才知道。 - - 图像内容模仿视触觉的形变:中间一个高斯隆起(法向深度), - 连同指向中心的切向流(矢量场),接触越深幅度越大。 - """ - if not self._image_pub: - return - stamp = self.get_clock().now().to_msg() - h, w = 48, 64 - yy, xx = np.mgrid[0:h, 0:w] - cx, cy = w / 2.0, h / 2.0 - bump = np.exp(-(((xx - cx) ** 2 + (yy - cy) ** 2) / (2.0 * 9.0 ** 2))) - - depth = (bump * (0.05 + 0.5 * float(force))).astype(np.float32) - vx = ((cx - xx) / w * bump * float(force)).astype(np.float32) - vy = ((cy - yy) / h * bump * float(force)).astype(np.float32) - vector = np.dstack([vx, vy]) - - for side in ("left", "right"): - frame = f"{side}_tactile" - self._publish_array(self._image_pub[side], depth, frame, stamp, side, "image") - self._publish_array(self._vector_pub[side], vector, frame, stamp, side, "vector") - - def _tick(self) -> None: - self._drain_images() - if self._mock: - self._mock_n += 1 - force = 0.2 if self._mock_n >= 8 else 0.0 - for side in ("left", "right"): - self._publish(side, { - "fnormal": force, "fshearx": 0.0, "fsheary": 0.0, - "fps": 30.0, "is_contact": self._mock_n >= 8, - "centroid": (0.0, 0.0), - }) - # mock 的图像也按 image_hz 节流,避免比真机行为更"勤快"。 - if self._image_hz > 0: - now = time.monotonic() - if now - self._last_mock_img >= 1.0 / self._image_hz: - self._last_mock_img = now - self._publish_mock_images(force) - return - for side in ("left", "right"): - self._drain(side) - item = self._latest.get(side) - if item is None: - continue - ts, data = item - if time.monotonic() - ts > 0.6: - continue # 数据太旧(worker 卡住)不发布 - self._publish(side, data) - - def _publish(self, side: str, data: dict) -> None: - msg = TactileStatus() - msg.header.stamp = self.get_clock().now().to_msg() - msg.header.frame_id = f"{side}_tactile" - msg.side = side - msg.connected = bool(self._connected.get(side, False)) - msg.contact = bool(data.get("is_contact", False)) - msg.fnormal = float(data.get("fnormal") or 0.0) - msg.fshearx = float(data.get("fshearx") or 0.0) - msg.fsheary = float(data.get("fsheary") or 0.0) - msg.fps = float(data.get("fps") or 0.0) - c = data.get("centroid") or (0.0, 0.0) - msg.centroid_u = float(c[0]) - msg.centroid_v = float(c[1]) - msg.error_msg = "" - self._pub[side].publish(msg) - - def destroy_node(self) -> bool: - try: - if self._stop is not None: - self._stop.set() - for p in self._workers: - p.join(timeout=2.0) - if p.is_alive(): - p.terminate() - for p in self._workers: - p.join(timeout=1.5) - if p.is_alive(): - try: - p.kill() # 还赖着就 SIGKILL,绝不留孤儿占摄像头 - except Exception: - pass - finally: - return super().destroy_node() - - -def main() -> None: - rclpy.init() - node = TactileNode() - - def _sigterm(_sig, _frm) -> None: - raise KeyboardInterrupt - - signal.signal(signal.SIGTERM, _sigterm) # SIGTERM 也走干净退出,释放相机 - try: - rclpy.spin(node) - except KeyboardInterrupt: - pass - finally: - node.destroy_node() - rclpy.shutdown() - - -if __name__ == "__main__": - main() diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/weights_layout.py b/install/arm_application/lib/python3.11/site-packages/arm_application/weights_layout.py deleted file mode 100644 index 75c3a5a..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/weights_layout.py +++ /dev/null @@ -1,448 +0,0 @@ -"""权重模块的目录布局、模型发现与标签归属(纯逻辑)。 - -这个模块刻意**只依赖标准库 + model_labels**,不 import ROS、不 import -ultralytics/tensorrt。原因: - -1. 可以在没有 GPU、没有 ROS 的环境里跑单元测试; -2. ``scripts/weights.sh`` 这个命令行工具能直接用上,不必先 ``source`` 一整套环境。 - -真正干重活的转换(PyTorch → ONNX → TensorRT)在 ``scripts/weights.py`` 里, -那部分才需要 ``ros_flexiv`` 环境和 GPU。 - -## 目录约定 - - models/ - README.md ← 模块规则(要改这个模块先读它) - staging/ ← 非标准格式先丢这里,转换工具有序地消费它 - <分组>/ ← 例如 yolo/、hole_insert/ - <模型名>.onnx - <模型名>.engine - <模型名>.labels.yaml ← 标签(旁挂,可手改,进 git) - -"分组"只是一个子目录名,用来分门别类,没有语义约束。默认 ``yolo``。 -""" -from __future__ import annotations - -from dataclasses import dataclass, field -from pathlib import Path -from typing import Dict, List, Optional, Sequence, Tuple, Union - -from .model_labels import ( - SOURCE_MODEL, - SOURCE_ONNX, - SOURCE_PLACEHOLDER, - SOURCE_SIDECAR, - LabelSet, - label_file_status, - labels_path_for, - labels_from_model, - labels_from_onnx, - placeholder_labels, - read_label_file, -) - -# 会被当成"权重"的文件后缀(不带点的小写形式)。 -WEIGHT_EXTS: Tuple[str, ...] = ( - "pt", - "pth", - "onnx", - "engine", - "trt", - "plan", - "tflite", -) - -# 转换工具认识的输入格式。其它格式一律归到 staging 等人工处理。 -# 注意 pth 也收:虽然 Ultralytics 主要用 .pt,但用户手里常是 .pth。 -CONVERTIBLE_INPUT_EXTS: Tuple[str, ...] = ("pt", "pth", "onnx") - -# 已经被转换过的产物,重转没有意义。 -FINAL_EXTS: Tuple[str, ...] = ("engine", "trt", "plan") - -# 非标准格式/待转换文件放这里。 -STAGING_DIRNAME = "staging" - -# 读标签时挑格式的顺序:onnx 有内嵌 metadata 且读取代价极低(毫秒级), -# 所以排在前面;engine 排最后是因为它很可能什么都没有。 -LABEL_READ_ORDER: Tuple[str, ...] = ("onnx", "pt", "pth", "engine", "trt") - - -# --------------------------------------------------------------------------- -# 仓库根 / 权重根 -# --------------------------------------------------------------------------- - - -def find_repo_root(start: Optional[Union[str, Path]] = None) -> Optional[Path]: - """从 ``start`` 往上找仓库根(以存在 ``config/site.yaml`` 为标志)。 - - 这样无论代码是从 ``src/`` 直接跑、还是从 ``install/`` 跑, - 都能定位到同一份 ``models/``,不会出现"两份权重"。 - """ - here = Path(start).resolve() if start else Path(__file__).resolve() - for cand in [here, *here.parents]: - if (cand / "config" / "site.yaml").is_file(): - return cand - return None - - -def default_weights_root() -> Path: - """``models/`` 的默认位置。找不到仓库根时退回当前工作目录下的 models/。""" - import os - - env = os.environ.get("SITE_WEIGHTS_ROOT") - if env: - return Path(env).expanduser() - root = find_repo_root() - if root is not None: - return root / "models" - return Path.cwd() / "models" - - -# --------------------------------------------------------------------------- -# 模型条目 -# --------------------------------------------------------------------------- - - -@dataclass -class ModelEntry: - """一个"模型" = 权重目录里同名前缀的一组文件。""" - - group: str - name: str - files: Dict[str, Path] = field(default_factory=dict) - - @property - def dir(self) -> Path: - if not self.files: - return Path(".") - return next(iter(self.files.values())).parent - - @property - def labels_path(self) -> Path: - return self.dir / (self.name + ".labels.yaml") - - @property - def exts(self) -> List[str]: - """已存在的格式,按固定顺序返回,保证输出稳定。 - - 顺序就是转换流水线的顺序:``pt → onnx → engine``(源头 → 中间 → 最终)。 - 这样列表里一眼能看出这个模型走到哪一步了。 - """ - order = list(WEIGHT_EXTS) - return sorted(self.files, key=lambda e: (order.index(e) if e in order else 99, e)) - - def path(self, ext: str) -> Optional[Path]: - return self.files.get(ext.lower().lstrip(".")) - - def sorted_files(self) -> List[Path]: - """按读标签的推荐顺序给出文件列表。""" - out: List[Path] = [] - for ext in LABEL_READ_ORDER: - p = self.files.get(ext) - if p: - out.append(p) - for ext in self.exts: - p = self.files.get(ext) - if p and p not in out: - out.append(p) - return out - - def missing_of(self, wanted: Sequence[str]) -> List[str]: - return [e for e in wanted if e not in self.files] - - -# --------------------------------------------------------------------------- -# 发现 -# --------------------------------------------------------------------------- - - -def is_staging(path: Path) -> bool: - return path.name == STAGING_DIRNAME - - -def groups(root: Union[str, Path]) -> List[str]: - """列出所有权重分组目录(跳过 staging 与隐藏目录)。""" - r = Path(root) - if not r.is_dir(): - return [] - return sorted( - p.name - for p in r.iterdir() - if p.is_dir() and not p.name.startswith(".") and not is_staging(p) - ) - - -def staging_dir(root: Union[str, Path]) -> Path: - return Path(root) / STAGING_DIRNAME - - -def infer_group( - root: Union[str, Path], - source: Union[str, Path], - fallback: str = "yolo", -) -> str: - """转换产物该落到**哪个分组**:默认沿用源文件所在的分组。 - - 为什么不能一律落到 ``yolo``(2026-09-28 真机踩到,代价是一次白转) - ---------------------------------------------------------------- - 现场把 ``models/hole_insert/detect_best_1.onnx`` 转 engine,工具默认 - ``--group yolo``,于是产物落到 ``models/yolo/detect_best_1.engine`` —— - 而运行时找 engine 的规则是**同级同名**(``yolo_detector.resolve_weights``: - ``p.with_suffix(".engine")``,即 site.yaml 指的 ``.onnx`` 旁边)。两边 - 一分家,engine 就等于不存在:现象是"启动即报缺 engine",而文件明明躺着。 - 这正是本项目最忌讳的**静默失效** —— 工具没报错,位置也"合理"。 - - 规则: - - 源文件已在权重根目录下的某个分组里(例如 ``models/hole_insert/x.onnx``) - → 沿用 ``hole_insert``。这样"就地转换"永远落在原地,运行时必然找得到; - - 源文件在 ``staging/``、权重根目录之外或根目录正下方 → ``fallback`` - (默认 ``yolo``):那才是"新来的模型,还没决定分组"的正常情形。 - - Args: - root: 权重根目录(``models/``)。 - source: 输入文件。 - fallback: 无法沿用时的分组名。 - - Returns: - 分组名(不带路径)。 - """ - r = Path(root) - try: - rel = Path(source).expanduser().resolve().relative_to(r.resolve()) - except ValueError: - # 不在权重根目录下(/tmp、外部磁盘、staging 之类)→ 没有"原地"可言 - return fallback - if len(rel.parts) < 2: - # 直接躺在 models/ 正下方:没有分组信息,用默认分组 - return fallback - group = rel.parts[0] - if is_staging(r / group) or group.startswith("."): - return fallback - return group - - -def staging_files(root: Union[str, Path]) -> List[Path]: - """staging 里的待处理文件。 - - 跳过隐藏文件(``.gitkeep`` 等)和 ``.md`` 说明文档 —— 那些是给人和 git 看的, - 不是待转换的模型。否则 ``doctor`` 会把 README 报成"格式不支持"。 - """ - d = staging_dir(root) - if not d.is_dir(): - return [] - return sorted( - p - for p in d.iterdir() - if p.is_file() and not p.name.startswith(".") and p.suffix.lower() != ".md" - ) - - -def discover(root: Optional[Union[str, Path]] = None) -> List[ModelEntry]: - """扫描权重根,按"分组 + 模型名"归并出所有模型。 - - 同名不同格式(m.onnx / m.engine / m.pt)会被合成一个条目 —— 因为它们 - 共用一个模型名、一份标签。``.labels.yaml`` 本身不算权重。 - """ - r = Path(root) if root is not None else default_weights_root() - out: List[ModelEntry] = [] - if not r.is_dir(): - return out - for g in groups(r): - gdir = r / g - by_name: Dict[str, ModelEntry] = {} - for p in sorted(gdir.iterdir()): - if not p.is_file() or p.name.startswith("."): - continue - ext = p.suffix.lower().lstrip(".") - if ext not in WEIGHT_EXTS: - continue - # m.labels.yaml 的后缀是 .yaml,不会落进 WEIGHT_EXTS,天然被排除。 - stem = p.name[: -(len(ext) + 1)] - entry = by_name.get(stem) - if entry is None: - entry = ModelEntry(group=g, name=stem, files={}) - by_name[stem] = entry - entry.files[ext] = p - out.extend(by_name.values()) - return out - - -def find_model( - root: Optional[Union[str, Path]] = None, - name: str = "", - group: Optional[str] = None, -) -> Optional[ModelEntry]: - """按模型名找模型。 - - - ``name`` 是完整路径 → 直接按路径构造条目(不要求它在权重目录里) - - ``name`` 是 ``分组/模型名`` → 按分组+名字精确查找 - - ``name`` 是裸名字 → 在所有分组里找同名模型;``group`` 可缩小范围 - - 裸名字跨分组同名时会优先返回 ``group`` 指定的那个;都没指定就返回找到的第一个, - 并由调用方提示存在歧义。 - """ - p = Path(name).expanduser() - if p.suffix and (p.is_file() or p.parent.is_dir() and str(name).count("/")): - ext = p.suffix.lower().lstrip(".") - if ext in WEIGHT_EXTS: - entry = ModelEntry(group=group or p.parent.name, name=p.stem, files={}) - entry.files[ext] = p - return entry - - for e in discover(root): - if e.name != name: - continue - if group and e.group != group: - continue - return e - - # 裸名字没匹配上,再试 ``分组/模型名``。 - # ``list`` 的输出里模型是带分组一起显示的,用户照着敲 ``yolo/detect_best`` - # 非常自然;以前这里会直接报"找不到模型",而报错又只列出裸名字,很别扭。 - # 放在裸名字查找之后,是为了不把真正的相对路径(``a/b.onnx``)误判成分组名。 - if group is None and "/" in name: - head, _, tail = name.rpartition("/") - if head and tail: - return find_model(root, tail, head) - return None - - -# --------------------------------------------------------------------------- -# 标签归属 -# --------------------------------------------------------------------------- - - -def model_labels(entry: ModelEntry, *, deep: bool = False) -> LabelSet: - """给出某个模型当前生效的标签,附带来源。 - - 优先级:旁挂文件 > ONNX 内嵌 > 模型内嵌 > 占位符。 - - ``deep=False``(默认)只读旁挂文件和 ONNX metadata —— 都快。 - ``deep=True`` 才会去加载模型本身(``.pt`` / ``.engine``), - 代价是要起 Ultralytics、加载权重,秒级,所以默认不开。 - 这样 ``weights.sh list`` 能秒出结果,不因为几个 .pt 卡十几秒。 - """ - files = entry.sorted_files() - if not files: - return LabelSet(names={}, source=SOURCE_PLACEHOLDER, path=None) - - side = label_file_status(files[0])[1] - names = read_label_file(side) if side else None - if names: - return LabelSet(names=names, source=SOURCE_SIDECAR, path=side) - - for p in files: - ext = p.suffix.lower().lstrip(".") - if ext == "onnx": - got = labels_from_onnx(p) - if got: - return LabelSet(names=got[0], source=SOURCE_ONNX, path=p) - elif deep and ext in ("pt", "pth", "engine", "trt", "plan"): - # engine 在当前的 TensorRT 下读不到(没有 metadata API), - # 但万一用户是拿 Ultralytics 导出的,还是值得试一次。 - got = labels_from_model(p) - if got: - return LabelSet(names=got[0], source=SOURCE_MODEL, path=p) - - return LabelSet(names=placeholder_labels(0), source=SOURCE_PLACEHOLDER, path=None) - - -# --------------------------------------------------------------------------- -# 转换规划 -# --------------------------------------------------------------------------- - - -@dataclass(frozen=True) -class ConversionChain: - """从某个输入格式到目标格式,需要依次产出哪些文件。""" - - source_ext: str - target: str - produce: Tuple[str, ...] - - @property - def is_noop(self) -> bool: - return not self.produce - - def describe(self) -> str: - if self.is_noop: - return f"{self.source_ext} → 无需转换" - return f"{self.source_ext} → " + " → ".join(self.produce) - - -def conversion_chain(source_ext: str, target: str = "all") -> ConversionChain: - """算出转换链。 - - TensorRT 的 engine 只能由 ONNX 构建,所以任何通往 engine 的路都必须 - 先得到 ONNX。这点在这里集中表达,避免调用方各写一遍。 - - - ``target="all"``:能产出多少产出多少(.pt → ONNX + engine) - - ``target="onnx"``:只要 ONNX(engine 无法反向拆回 ONNX,返回空) - - ``target="engine"``:只要 engine(.pt 会顺带产出 ONNX 作为中间产物) - """ - src = source_ext.lower().lstrip(".") - tgt = (target or "all").lower().strip() - if tgt not in ("all", "onnx", "engine"): - raise ValueError(f"未知转换目标: {target}(可选 all/onnx/engine)") - - if src not in CONVERTIBLE_INPUT_EXTS: - # 已经是最终产物,或干脆不认识 —— 都交给调用方去报错/跳过。 - return ConversionChain(src, tgt, ()) - - if src in ("pt", "pth"): - if tgt == "onnx": - return ConversionChain(src, tgt, ("onnx",)) - # engine 需要 ONNX 做中间产物,两条路都带上它。 - return ConversionChain(src, tgt, ("onnx", "engine")) - - # src == "onnx" - if tgt == "onnx": - return ConversionChain(src, tgt, ()) - return ConversionChain(src, tgt, ("engine",)) - - -def canonical_path(root: Union[str, Path], group: str, name: str, ext: str) -> Path: - """转换产物该落在哪:``models//.``。 - - 这是"自动改名并归位"的落点。无论输入文件叫什么、放在哪 - (哪怕在 /tmp 或 staging 里叫 ``best_v3_final(1).pt``), - 产出都用调用方给的 ``name`` 和 ``group``。 - """ - return Path(root) / group / f"{name}.{ext.lstrip('.')}" - - -def validate_name(name: str) -> Optional[str]: - """检查模型名是否安全可用作文件名。返回错误信息或 None。""" - n = (name or "").strip() - if not n: - return "模型名不能为空" - if n != name: - return f"模型名首尾不能有空格: {name!r}" - if any(c.isspace() for c in n): - # 名字里有空格会让命令行、site.yaml、ROS 参数到处都要加引号, - # 早晚有人忘。直接禁掉,改用下划线或短横线。 - return "模型名不能含有空格(建议用 _ 或 - 代替)" - bad = set('/\\:*?"<>|') - hit = sorted(bad & set(n)) - if hit: - return f"模型名不能含有这些字符: {''.join(hit)}" - if n.startswith("."): - return "模型名不能以点开头" - if n.endswith(".labels"): - return "不要带 .labels 后缀,标签文件会自动生成" - return None - - -def plan_conversion( - root: Union[str, Path], - source: Union[str, Path], - *, - name: str, - group: str = "yolo", - target: str = "all", -) -> Tuple[ConversionChain, List[Path]]: - """算出一条完整的转换计划:产出链 + 每个产物的最终落点。""" - src = Path(source).expanduser() - chain = conversion_chain(src.suffix, target) - outs = [canonical_path(root, group, name, ext) for ext in chain.produce] - return chain, outs diff --git a/install/arm_application/lib/python3.11/site-packages/arm_application/yolo_detector.py b/install/arm_application/lib/python3.11/site-packages/arm_application/yolo_detector.py deleted file mode 100644 index 9276ca0..0000000 --- a/install/arm_application/lib/python3.11/site-packages/arm_application/yolo_detector.py +++ /dev/null @@ -1,618 +0,0 @@ -#!/usr/bin/env python3 -"""Ultralytics YOLO / TensorRT 封装。 - -对外接口:``resolve_weights``、``YoloDetector``、``Detection``、``pick_best``、 -``MpYoloDetector``。当 ``backend='tensorrt'`` 时,TensorRT 会加载与 -``.onnx`` / ``.pt`` 路径同级的 ``.engine`` 文件。 - -类别名(标签)由 ``model_labels`` 统一提供:优先读权重旁边的 -``<模型名>.labels.yaml``(用户可随时手改),其次读模型内嵌 metadata。 -这样做是因为 TensorRT engine 在当前的 TensorRT Python API 下**无法携带标签**, -只能靠旁挂文件;详见 ``model_labels`` 模块头。 -""" - -from __future__ import annotations - -import logging -import multiprocessing as mp -import time -from dataclasses import dataclass -from pathlib import Path -from typing import List, Optional, Sequence, Union - -import numpy as np - -from .model_labels import ( - SOURCE_PLACEHOLDER, - LabelSet, - describe, - parse_names_field, - placeholder_labels, - read_labels, -) - -logger = logging.getLogger(__name__) - -# 哨兵值:worker 还停在上一次的那帧 —— 调用方不能把它算作漏检。 -INFER_BUSY = object() - - -@dataclass -class Detection: - xyxy: np.ndarray # (4,) float:x1,y1,x2,y2 - conf: float - cls_id: int - cls_name: str - # pose 模型才有:(K, 3) = 每个关键点的 x, y, conf(**原图像素坐标**)。 - # 检测模型恒为 None —— 下游必须先判 None,别假设它有。 - kpts: Optional[np.ndarray] = None - - @property - def cx(self) -> float: - return float(0.5 * (self.xyxy[0] + self.xyxy[2])) - - @property - def cy(self) -> float: - return float(0.5 * (self.xyxy[1] + self.xyxy[3])) - - @property - def area(self) -> float: - return float(max(0.0, self.xyxy[2] - self.xyxy[0]) * max(0.0, self.xyxy[3] - self.xyxy[1])) - - -def _resolve_device(device: str) -> str: - try: - import torch - except Exception: # noqa: BLE001 - return "cpu" - d = (device or "").strip().lower() - if d in ("", "auto", "cuda", "cuda:0", "0", "gpu"): - return "0" if torch.cuda.is_available() else "cpu" - return device.strip() or "cpu" - - -def resolve_weights(weights: Union[str, Path], backend: str = "auto") -> Path: - """当 backend=auto/tensorrt 时,优先使用与 .pt 同级的 TensorRT .engine。""" - p = Path(weights).expanduser() - b = (backend or "auto").strip().lower() - engine = p.with_suffix(".engine") - onnx = p.with_suffix(".onnx") - if b in ("tensorrt", "engine"): - if engine.is_file(): - return engine - raise FileNotFoundError( - f"缺少 TensorRT engine:{engine}。" - f"导出命令:bash ~/ros2/scripts/weights.sh convert {p} --name {p.stem}" - ) - if b == "onnx": - if onnx.is_file(): - return onnx - raise FileNotFoundError(f"缺少 ONNX 文件:{onnx}") - if b in ("", "auto"): - if engine.is_file(): - return engine - if p.is_file(): - return p - if onnx.is_file(): - return onnx - return p - - -def resolve_class_labels(path: Union[str, Path], model=None) -> LabelSet: - """给出一个权重该用的类别标签(旁挂文件优先)。 - - ``model`` 是已经加载好的 Ultralytics 模型对象(可为 None)。顺序: - - 1. ``<模型名>.labels.yaml`` —— 用户可编辑的权威来源 - 2. 传入的 ``model.names`` —— 模型内嵌 metadata - 3. 占位符 ``class_0 / class_1 …`` - - 第 3 步刻意不用 ``str(cid)``。原先读不到名字时会退化成类名 `"0"`, - 和"真的有个叫 0 的类"无法区分,标签丢了都看不出来。 - 占位符 + 一条 warning 让这件事在日志里可见。 - """ - p = Path(path).expanduser() - - # 先只看旁挂文件(快,不加载模型):它必须能覆盖模型内嵌的旧值, - # 否则"我改了标签为什么不生效"会变成很难查的问题。 - labels = read_labels(p, allow_model_metadata=False) - if not labels.is_placeholder: - return labels - - raw = getattr(model, "names", None) if model is not None else None - names = parse_names_field(raw or {}) - if names: - from .model_labels import SOURCE_MODEL - - return LabelSet(names=names, source=SOURCE_MODEL, path=p) - - nc = 0 - try: - nc = int(getattr(model, "nc", 0) or 0) - except (TypeError, ValueError): - nc = 0 - labels = LabelSet(names=placeholder_labels(nc), source=SOURCE_PLACEHOLDER, path=None) - logger.warning( - "模型 %s 没有类别标签,暂时用占位名显示。补一个 %s 即可(改完重跑节点生效)。" - "命令行: bash ~/ros2/scripts/weights.sh labels %s --from-model", - p.name, - p.stem + ".labels.yaml", - p.stem, - ) - return labels - - -class YoloDetector: - def __init__( - self, - weights: Union[str, Path], - *, - conf: float = 0.5, - iou: float = 0.45, - device: str = "", - imgsz: int = 640, - class_ids: Optional[Sequence[int]] = None, - class_names: Optional[Sequence[str]] = None, - ) -> None: - try: - from ultralytics import YOLO - except Exception as exc: # noqa: BLE001 - raise RuntimeError( - "未安装 ultralytics。在 ros_flexiv 环境里执行:pip install ultralytics" - ) from exc - - path = Path(weights).expanduser() - if not path.is_file(): - raise FileNotFoundError( - f"找不到 YOLO 权重:{path}。" - f"请把你的 .pt 放到 ~/ros2/models/yolo/workpiece.pt" - ) - try: - import torch - - # 别让 PyTorch 占满所有 CPU 核心(相机 + ROS 都要用)。 - torch.set_num_threads(1) - torch.set_num_interop_threads(1) - if torch.cuda.is_available(): - torch.backends.cudnn.benchmark = True - except Exception: - pass - - self.device = _resolve_device(device) - self.conf = float(conf) - self.iou = float(iou) - self.imgsz = int(imgsz) - self._half_ok = False - self._is_engine = path.suffix.lower() in {".engine", ".trt"} - self._model = YOLO(str(path), task="detect") - if not self._is_engine: - try: - self._model.fuse() - except Exception: - pass - self.class_ids = set(int(v) for v in class_ids) if class_ids else None - self.class_names = ( - {str(n).strip().lower() for n in class_names if str(n).strip()} - if class_names - else None - ) - self._labels = resolve_class_labels(path, self._model) - self._id_to_name = dict(self._labels.names) - self._warmed = False - self._pending = None - - def warmup(self, *, half: bool = False) -> None: - if self._warmed: - return - if half and (not self._is_engine) and self.device != "cpu": - try: - self._model.to("cuda") - self._model.model.half() - self._half_ok = True - except Exception: - self._half_ok = False - dummy = np.zeros((self.imgsz, self.imgsz, 3), dtype=np.uint8) - self._predict(dummy) - self._warmed = True - - def _predict(self, image_bgr: np.ndarray): - kwargs = dict( - source=image_bgr, - conf=self.conf, - iou=self.iou, - imgsz=self.imgsz, - device=self.device, - verbose=False, - max_det=20, - ) - if self._half_ok and not self._is_engine: - kwargs["quantize"] = 16 - try: - import torch - - ctx = torch.inference_mode() - except Exception: - from contextlib import nullcontext - - ctx = nullcontext() - with ctx: - return self._model.predict(**kwargs) - - def detect( - self, - image_bgr: np.ndarray, - conf: float | None = None, - iou: float | None = None, - imgsz: int | None = None, - **_kwargs, - ) -> List[Detection]: - """给孔检测器用的别名接口(xyxy + conf)。""" - if conf is not None: - self.conf = float(conf) - if iou is not None: - self.iou = float(iou) - if imgsz is not None: - self.imgsz = int(imgsz) - return self.infer(image_bgr) - - def infer(self, image_bgr: np.ndarray, *, half: bool = False, seq: int = 0) -> List[Detection]: - del seq - if not self._warmed: - self.warmup(half=half) - results = self._predict(image_bgr) - if not results: - return [] - r0 = results[0] - boxes = getattr(r0, "boxes", None) - if boxes is None or len(boxes) == 0: - return [] - - out: List[Detection] = [] - xyxy = boxes.xyxy.detach().cpu().numpy() - confs = boxes.conf.detach().cpu().numpy() - clss = boxes.cls.detach().cpu().numpy().astype(int) - for i in range(len(xyxy)): - cid = int(clss[i]) - # 用 LabelSet.get:读不到名字时给 class_N 占位,而不是退化成裸数字 "0"。 - name = self._labels.get(cid) - if self.class_ids is not None and cid not in self.class_ids: - continue - if self.class_names is not None and name.lower() not in self.class_names: - continue - out.append( - Detection( - xyxy=xyxy[i].astype(float), - conf=float(confs[i]), - cls_id=cid, - cls_name=name, - ) - ) - out.sort(key=lambda d: d.conf, reverse=True) - return out - - def submit(self, image_bgr: np.ndarray, seq: int = 0) -> None: - self._pending = (int(seq), image_bgr) - - def wait_result(self, timeout: float = 0.045): - del timeout - if self._pending is None: - return None - seq, img = self._pending - self._pending = None - t0 = time.monotonic() - dets = self.infer(img, seq=seq) - return seq, dets, (time.monotonic() - t0) * 1000.0 - - -def build_detector( - weights: Union[str, Path], - *, - backend: str = "auto", - conf: float = 0.25, - iou: float = 0.45, - device: str = "", - imgsz: int = 640, -): - """按权重类型挑检测器:pose 模型走 ``PoseDetector``,否则走 ``YoloDetector``。 - - 为什么要这个工厂:ultralytics 解不了 pose 的 TensorRT engine(见 - ``pose_detector`` 模块头),所以 pose 必须换成自解码实现。判断依据是模型 - 是不是 ``task=pose`` —— 直接读旁边 ``.onnx`` 的 metadata,不靠调用方声明。 - - 返回对象统一有 ``detect()/infer()/warmup()/imgsz/class_names/class_ids``。 - """ - path = Path(weights).expanduser() - from .pose_detector import PoseDetector, is_pose_model - - if is_pose_model(path): - logger.info("检测到 pose 模型 %s → 用 PoseDetector(自解码关键点)", path.name) - return PoseDetector( - path, - conf=conf, - iou=iou, - device=device or "0", - imgsz=imgsz, - ) - return YoloDetector( - path, - conf=conf, - iou=iou, - device=device, - imgsz=imgsz, - ) - - -def _yolo_worker_main(q_in, q_out, cfg: dict) -> None: - """spawn 出来的子进程:只跑 GPU 上的检测。这里绝不能 import rclpy。""" - try: - path = resolve_weights(cfg["weights"], cfg.get("backend") or "auto") - det = build_detector( - path, - backend=cfg.get("backend") or "auto", - conf=float(cfg.get("conf") or 0.25), - iou=float(cfg.get("iou") or 0.45), - device=str(cfg.get("device") or "0"), - imgsz=int(cfg.get("imgsz") or 416), - ) - det.warmup(half=bool(cfg.get("half", True))) - q_out.put(("ready", str(path))) - except Exception as exc: # noqa: BLE001 - q_out.put(("error", str(exc))) - return - while True: - item = q_in.get() - if item is None: - return - # 一直排空到队列里最新的帧 —— 绝不把 GPU 浪费在过期图像上。 - try: - while True: - newer = q_in.get_nowait() - if newer is None: - return - item = newer - except Exception: - pass - seq, image = item - try: - t0 = time.monotonic() - dets = det.infer(image, half=bool(cfg.get("half", True))) - gpu_ms = (time.monotonic() - t0) * 1000.0 - packed = [ - ( - d.xyxy.astype(np.float32), - float(d.conf), - int(d.cls_id), - str(d.cls_name), - None if d.kpts is None else np.asarray(d.kpts, dtype=np.float32), - ) - for d in dets - ] - _put_drop_old(q_out, ("ok", seq, packed, gpu_ms)) - except Exception as exc: # noqa: BLE001 - _put_drop_old(q_out, ("error", str(exc))) - - -def _put_drop_old(q, item) -> None: - """绝不让 GPU 进程因为结果队列满了而阻塞。""" - try: - q.put_nowait(item) - return - except Exception: - pass - try: - q.get_nowait() - except Exception: - pass - try: - q.put_nowait(item) - except Exception: - pass - - -class YoloInferProcess: - """把 YOLO 放进 spawn() 子进程,让 ROS 回调永远不用和 PyTorch 抢 GIL。""" - - def __init__(self, cfg: dict) -> None: - self._cfg = dict(cfg) - self._p = None - self._start() - - def _start(self) -> None: - ctx = mp.get_context("spawn") - # maxsize=2 + worker 排空到最新:父进程永远不需要主动丢帧 - # (之前 Queue put_nowait/get_nowait 的竞争,正是 worker 明明活着 - # 却出现数秒“静默”冻结的根源)。 - self._q_in = ctx.Queue(maxsize=2) - self._q_out = ctx.Queue(maxsize=4) - self._p = ctx.Process( - target=_yolo_worker_main, - args=(self._q_in, self._q_out, self._cfg), - name="yolo_infer", - daemon=True, - ) - self._p.start() - msg = self._q_out.get(timeout=90.0) - if not msg or msg[0] != "ready": - err = msg[1] if msg and len(msg) > 1 else "worker failed" - raise RuntimeError(f"YOLO 工作进程:{err}") - self.weights_path = str(msg[1]) - self.imgsz = int(self._cfg.get("imgsz") or 416) - - def restart(self) -> None: - """杀掉卡死 / 挂掉的 worker,再起一个新的(重新加载 engine 约 2-5 s)。""" - self.close() - self._start() - - @property - def alive(self) -> bool: - return bool(self._p is not None and self._p.is_alive()) - - def submit(self, image_bgr: np.ndarray, seq: int = 0) -> bool: - """把最新一帧排进队列。如果 worker 正忙就跳过 —— 它在每次推理后都会 - 排空到队列里最新的帧,所以不会跑任何过期数据。 - - 返回是否真的进队。进不去必须告诉调用方,否则一次性会以为「已经在跑」 - 而空等,把 D405 也卡住。 - """ - if not self.alive: - raise RuntimeError("YOLO 工作进程已死亡") - try: - self._q_in.put((int(seq), image_bgr), timeout=0.010) - return True - except Exception: - return False - - def wait_result(self, timeout: float = 0.045): - """返回 ``(seq, list[Detection], gpu_ms)`` 或 ``None``。""" - if not self.alive: - raise RuntimeError("YOLO 工作进程已死亡") - deadline = time.monotonic() + max(0.004, float(timeout)) - latest = None - while time.monotonic() < deadline: - try: - msg = self._q_out.get( - timeout=max(0.001, deadline - time.monotonic()) - ) - except Exception: - break - latest = self._parse_out(msg) - while True: - try: - extra = self._q_out.get_nowait() - except Exception: - break - parsed = self._parse_out(extra) - if parsed is not None: - latest = parsed - if latest is not None: - break - return latest - - def _parse_out(self, msg): - if not msg: - return None - if msg[0] == "error": - raise RuntimeError(str(msg[1])) - if msg[0] != "ok": - return None - seq, packed = int(msg[1]), msg[2] - gpu_ms = float(msg[3]) if len(msg) > 3 else 0.0 - dets = [] - for row in packed: - # 兼容旧格式(4 元组,无关键点),免得子进程和父进程版本不一致时炸掉。 - xyxy, conf, cid, name = row[0], row[1], row[2], row[3] - kpts = row[4] if len(row) > 4 else None - dets.append( - Detection( - xyxy=np.asarray(xyxy, dtype=float), - conf=float(conf), - cls_id=int(cid), - cls_name=str(name), - kpts=None if kpts is None else np.asarray(kpts, dtype=float), - ) - ) - return seq, dets, gpu_ms - - def infer(self, image_bgr: np.ndarray, *, half: bool = False, seq: int = 0): - """兼容接口:提交 + 等待。要做流水线的话优先用 submit/wait_result。""" - del half - self.submit(image_bgr, seq) - got = self.wait_result(timeout=0.08) - if got is None: - return INFER_BUSY - return got[1] - - def close(self) -> None: - if self._p is None: - return - try: - self._q_in.put_nowait(None) - except Exception: - pass - self._p.join(timeout=2.0) - if self._p.is_alive(): - self._p.terminate() - self._p.join(timeout=1.0) - if self._p.is_alive(): - self._p.kill() # 卡在 CUDA 调用里出不来 —— 直接 SIGKILL - self._p.join(timeout=1.0) - self._p = None - - -def _iou_xyxy(a: np.ndarray, b: np.ndarray) -> float: - ax1, ay1, ax2, ay2 = [float(v) for v in a] - bx1, by1, bx2, by2 = [float(v) for v in b] - ix1, iy1 = max(ax1, bx1), max(ay1, by1) - ix2, iy2 = min(ax2, bx2), min(ay2, by2) - inter = max(0.0, ix2 - ix1) * max(0.0, iy2 - iy1) - ua = ( - max(0.0, ax2 - ax1) * max(0.0, ay2 - ay1) - + max(0.0, bx2 - bx1) * max(0.0, by2 - by1) - - inter - ) - return float(inter / ua) if ua > 1e-6 else 0.0 - - -def pick_best( - dets: Sequence[Detection], - *, - prefer_center: Optional[tuple] = None, - prev_uv: Optional[np.ndarray] = None, - prev_xyxy: Optional[np.ndarray] = None, - max_track_px: float = 320.0, - reacquire_conf: float = 0.18, - lock_iou: float = 0.08, - min_conf: float = 0.12, - min_area: float = 4000.0, -) -> Optional[Detection]: - """让当前工件在快速运动下也能被持续跟踪。 - - 用一个较宽的匹配门限去和**预测出的**上一帧检测框做匹配。如果 IoU 不达标、 - 但 YOLO 仍以高于 min_conf 的置信度报出了目标,就保留该检测 —— 不要返回 - None(那正是运动过程中目标丢失的主要来源)。 - 过小的框(logo / 通止规尖)会被拒掉,避免机械臂锁到垫子上。 - """ - if not dets: - return None - # 已锁定的跟踪在运动(模糊)时可能掉到 min_conf 以下;但新锁定不允许这样。 - floor = max(0.06, 0.50 * float(min_conf)) - usable = [d for d in dets if float(d.conf) >= floor and float(d.area) >= float(min_area)] - if not usable: - return None - - locked: List[Detection] = [] - if prev_xyxy is not None: - pw = max(8.0, float(prev_xyxy[2] - prev_xyxy[0])) - ph = max(8.0, float(prev_xyxy[3] - prev_xyxy[1])) - gate = max(0.90 * float(max_track_px), 1.25 * float(np.hypot(pw, ph))) - pcx = 0.5 * (float(prev_xyxy[0]) + float(prev_xyxy[2])) - pcy = 0.5 * (float(prev_xyxy[1]) + float(prev_xyxy[3])) - for d in usable: - iou = _iou_xyxy(d.xyxy, prev_xyxy) - dpx = float(np.hypot(d.cx - pcx, d.cy - pcy)) - if iou >= float(lock_iou) or dpx <= gate: - locked.append(d) - - if locked: - return max( - locked, - key=lambda d: (float(d.conf) * (float(d.area) ** 0.25), float(d.conf)), - ) - - def score_new(d: Detection) -> float: - s = float(d.conf) * 10.0 + 0.015 * np.sqrt(max(float(d.area), 1.0)) - if prefer_center is not None: - cx0, cy0 = float(prefer_center[0]), float(prefer_center[1]) - s -= 1e-6 * ((d.cx - cx0) ** 2 + (d.cy - cy0) ** 2) - if prev_uv is not None: - dpx = float(np.hypot(d.cx - float(prev_uv[0]), d.cy - float(prev_uv[1]))) - if dpx <= max_track_px: - s += 2.0 * (1.0 - dpx / max(max_track_px, 1.0)) - return s - - best = max(usable, key=score_new) - # 快速移动:即使 YOLO 报出的框离上一帧很远,也保留这个实时检测。 - need = max(float(min_conf), float(reacquire_conf)) - if float(best.conf) >= need: - return best - return None diff --git a/install/arm_application/share/ament_index/resource_index/packages/arm_application b/install/arm_application/share/ament_index/resource_index/packages/arm_application deleted file mode 100644 index e69de29..0000000 diff --git a/install/arm_application/share/ament_index/resource_index/packages/arm_application b/install/arm_application/share/ament_index/resource_index/packages/arm_application new file mode 120000 index 0000000..26ed9ce --- /dev/null +++ b/install/arm_application/share/ament_index/resource_index/packages/arm_application @@ -0,0 +1 @@ +/home/cc/ros2/build/arm_application/resource/arm_application \ No newline at end of file diff --git a/install/arm_application/share/arm_application/config/demo.yaml b/install/arm_application/share/arm_application/config/demo.yaml deleted file mode 100644 index c127573..0000000 --- a/install/arm_application/share/arm_application/config/demo.yaml +++ /dev/null @@ -1,5 +0,0 @@ -# Application-level waypoints / task parameters -demo: - poses: [home, ready, inspect, home] - velocity_scale: 0.5 - dwell_sec: 1.0 diff --git a/install/arm_application/share/arm_application/config/demo.yaml b/install/arm_application/share/arm_application/config/demo.yaml new file mode 120000 index 0000000..c675e00 --- /dev/null +++ b/install/arm_application/share/arm_application/config/demo.yaml @@ -0,0 +1 @@ +/home/cc/ros2/build/arm_application/config/demo.yaml \ No newline at end of file diff --git a/install/arm_application/share/arm_application/config/dual_grippers.yaml b/install/arm_application/share/arm_application/config/dual_grippers.yaml deleted file mode 100644 index 1bcd231..0000000 --- a/install/arm_application/share/arm_application/config/dual_grippers.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# DualArmGripperManager(load_dual_arm_gripper_config(path)) 的可选兜底配置。 -# 日常使用通过 load_from_site() 读取 ~/ros2/config/site.yaml。 -left_arm: - robot_sn: "Rizon4-063989" - gripper_port: "/dev/ttyUSB0" - gripper_slave_id: 1 - gripper_baudrate: 115200 -right_arm: - robot_sn: "Rizon4-063991" - gripper_port: "/dev/ttyUSB1" - gripper_slave_id: 1 - gripper_baudrate: 115200 -gripper: - parallel: - stroke_min: 0.0 - stroke_max: 20.0 - default_speed: 50 - default_force: 20 - auto_initialize: true - rotary: - auto_initialize: false - default_speed: 50 - default_torque: 50 - finger_open_per_mille: 1000 - finger_close_per_mille: 0 diff --git a/install/arm_application/share/arm_application/config/dual_grippers.yaml b/install/arm_application/share/arm_application/config/dual_grippers.yaml new file mode 120000 index 0000000..3b60bd3 --- /dev/null +++ b/install/arm_application/share/arm_application/config/dual_grippers.yaml @@ -0,0 +1 @@ +/home/cc/ros2/build/arm_application/config/dual_grippers.yaml \ No newline at end of file diff --git a/install/arm_application/share/arm_application/config/hole_detect.yaml b/install/arm_application/share/arm_application/config/hole_detect.yaml deleted file mode 100644 index 0c9b5f8..0000000 --- a/install/arm_application/share/arm_application/config/hole_detect.yaml +++ /dev/null @@ -1,47 +0,0 @@ -# 工件二阶段检测配置:YOLO 定位 + HoughCircles 螺纹孔 -# 供 hole_detect_hough.py / hole_detect_node(backend=two_stage)使用 -# 操作入口:bash ~/ros2/scripts/run_hole_detect.sh --arm 89|91 --preview - -# ----- YOLO ----- -conf: 0.25 -iou: 0.7 -imgsz: 640 - -# ----- 居中门控:bbox 中心接近画面中心才做二阶圆孔检测 ----- -# 精对准 k1/k2 时 stage2 会 skip 此门控(对准目标孔后工件必然离开画面中心) -center_gate_enable: true -center_max_offset_ratio_x: 0.15 # |bbox_cx - 图像中心x| <= 该比例 * 宽 -center_max_offset_ratio_y: 0.18 # |bbox_cy - 图像中心y| <= 该比例 * 高 -center_gate_draw: true # 可视化画出允许居中区域 -refine_hole_centers: true # Hough 后再用暗孔矩细化亚像素圆心 - -# ----- ROI:bbox 向外膨胀像素,裁剪时做边界保护 ----- -bbox_padding: 25 - -# ----- ROI 预处理 ----- -gaussian_ksize: 5 # 必须为奇数 -gaussian_sigma: 1.5 - -# ----- HoughCircles(全部由此读取)----- -hough_dp: 1.2 -hough_min_dist: 50 -hough_param1: 100 -hough_param2: 26 -hough_min_radius: 10 -hough_max_radius: 30 - -# ----- 工业校验 ----- -min_radius: 10 # 有效圆孔半径下限(滤掉噪点) -max_radius: 30 # 有效圆孔半径上限(滤掉中间大孔) -hole_distance_min: 150 # 两孔像素距离下限 -hole_distance_max: 700 # 两孔像素距离上限 - -# ----- 时序稳帧(抑制闪烁)----- -stabilize_hold_frames: 15 # 连续失败多少帧后才清空结果 -stabilize_ema_alpha: 0.35 # 中心点/半径 EMA,越小越稳 -stabilize_max_jump: 60 # 单帧跳变超过该像素则忽略(防闪) - -# ----- 螺纹嵌件对(亮环签名 + 关于中心对称,深度自适应)----- -insert_pair_enable: true -insert_percentile: 96 -insert_bolt_radius_mm: 29.0 # 两目标孔物理间距~58mm → 螺栓圆半径29mm;按深度换算像素,尺度不变 diff --git a/install/arm_application/share/arm_application/config/hole_detect.yaml b/install/arm_application/share/arm_application/config/hole_detect.yaml new file mode 120000 index 0000000..1cd0bb0 --- /dev/null +++ b/install/arm_application/share/arm_application/config/hole_detect.yaml @@ -0,0 +1 @@ +/home/cc/ros2/build/arm_application/config/hole_detect.yaml \ No newline at end of file diff --git a/install/arm_application/share/arm_application/config/hole_insert.yaml b/install/arm_application/share/arm_application/config/hole_insert.yaml deleted file mode 100644 index e499818..0000000 --- a/install/arm_application/share/arm_application/config/hole_insert.yaml +++ /dev/null @@ -1,37 +0,0 @@ -# 孔定位检测配置(改 conf / 内参 / 双孔间距即可,不必改代码) -# 权重来源:优先 site.yaml(hole_detect.weights / paths.hole_weights); -# 两者都缺时兜底到 models/yolo/gongjian0929.onnx。 -# 原先这里注释写的是 best.pt —— 该文件不存在,已修正。 -# backend: yolo | hough | two_stage(two_stage 请用 hole_detect.yaml) - -model_path: "" -backend: yolo # yolo | faster_rcnn | hough -num_classes: 1 # 单类孔=1;左右孔分两类=2 -expected_holes: 2 -min_hole_sep_px: 20 -max_hole_sep_px: 2000 - -conf: 0.25 -iou: 0.7 -imgsz: 640 - -gaussian_ksize: 5 -gaussian_sigma: 1.5 -hough_dp: 1.2 -hough_min_dist: 40 -hough_param1: 100 -hough_param2: 28 -hough_min_radius: 6 -hough_max_radius: 45 - -stabilize_window: 7 -stabilize_ema: 0.35 -stabilize_max_jump_px: 60 - -camera_intrinsics: - fx: 425.0 - fy: 425.0 - cx: 640.0 - cy: 360.0 - -default_depth_m: 0.10 diff --git a/install/arm_application/share/arm_application/config/hole_insert.yaml b/install/arm_application/share/arm_application/config/hole_insert.yaml new file mode 120000 index 0000000..b43b02e --- /dev/null +++ b/install/arm_application/share/arm_application/config/hole_insert.yaml @@ -0,0 +1 @@ +/home/cc/ros2/build/arm_application/config/hole_insert.yaml \ No newline at end of file diff --git a/install/arm_application/share/arm_application/config/perception.yaml b/install/arm_application/share/arm_application/config/perception.yaml deleted file mode 100644 index 5685bf9..0000000 --- a/install/arm_application/share/arm_application/config/perception.yaml +++ /dev/null @@ -1,46 +0,0 @@ -# perception_node 的默认值。launch 会用 ~/ros2/config/site.yaml 的 yolo: / paths: 覆盖。 -# 日常调参**不要改这里**,改 site.yaml。 -# -# 注意:下面 weights / conf / iou / imgsz / device / half_precision / min_conf 这几项 -# 一定被 site.yaml 覆盖,这里只是"没有 site.yaml 时的兜底"。所以它们必须和 site.yaml -# 保持一致 —— 曾经这里写死 imgsz=416 而实际模型是 640,一旦覆盖失效就会用错尺寸。 - -perception_node: - ros__parameters: - camera_source: "d405" - camera_namespace: "" - image_topic: "" - camera_info_topic: "" - depth_topic: "/d405/aligned_depth_to_color/image_raw" - weights: "/home/cc/ros2/models/yolo/gongjian0929.onnx" - conf: 0.10 - iou: 0.45 - imgsz: 640 - device: "0" - half_precision: true - min_conf: 0.12 - vision_hz: 20.0 - z_ref_m: 0.30 - # 大跳变门限 + 重新捕获:快速运动绝不能把跟踪卡死 - jump_px: 280.0 - jump_z_m: 0.20 - min_depth_m: 0.05 - max_depth_m: 2.50 - object_frame: "tracked_object" - camera_frame: "d405_color_optical_frame" - # 灵敏的 KF + 向原始观测融合 - kf_q_pos: 0.002 - kf_q_vel: 0.05 - kf_r_pos: 0.0008 - meas_blend: 0.65 - # 更快的推理 + 更紧的框跟随 - infer_max_width: 640 - box_ema_alpha: 0.85 - miss_clear_frames: 2 - # 第 4 项 — 自适应 Z 深度低通滤波 - z_alpha_min: 0.10 - z_alpha_max: 0.60 - z_alpha_gain: 2.0 - feature_mode: "plane" # stereo 为 3D 质心;box = 单目框中心的射线 - plane_inlier_m: 0.008 - plane_band_m: 0.06 diff --git a/install/arm_application/share/arm_application/config/perception.yaml b/install/arm_application/share/arm_application/config/perception.yaml new file mode 120000 index 0000000..d9557b2 --- /dev/null +++ b/install/arm_application/share/arm_application/config/perception.yaml @@ -0,0 +1 @@ +/home/cc/ros2/build/arm_application/config/perception.yaml \ No newline at end of file diff --git a/install/arm_application/share/arm_application/config/servo.yaml b/install/arm_application/share/arm_application/config/servo.yaml deleted file mode 100644 index ad71745..0000000 --- a/install/arm_application/share/arm_application/config/servo.yaml +++ /dev/null @@ -1,69 +0,0 @@ -# servo_node 的默认值。launch 会用 ~/ros2/config/site.yaml 的 servo: 覆盖。 -# 日常调参不要改这个文件。 - -servo_node: - ros__parameters: - joint_prefix: "Rizon4-063989_" - joint_names: [joint1, joint2, joint3, joint4, joint5, joint6, joint7] - base_frame: "Rizon4-063989_base_link" - ee_frame: "Rizon4-063989_flange" - camera_frame: "d405_color_optical_frame" - traj_topic: "rizon_arm_controller/joint_trajectory" - point_topic: "visual_servo/filtered_point" - handeye_file: "src/arm_application/config/handeye_result.yaml" - use_static_handeye_tf: false - handeye_child_frame: "d405_color_optical_frame" - - control_hz: 100.0 - z_ref_m: 0.30 - enable_control: false - max_extrapolate_sec: 0.08 - - # 第 1 项 — 丢失目标硬停 - watchdog_timeout_sec: 0.3 - lost_timeout_sec: 0.3 - - kp_xy: 2.00 - ki_xy: 0.02 - kd_xy: 0.50 - kp_z: 1.20 - ki_z: 0.02 - kd_z: 0.45 - i_limit_xy: 0.03 - i_limit_z: 0.025 - # 第 2 项 — 积分分离 - i_sep_pos_m: 0.005 - i_sep_ang_rad: 0.02 - - deadzone_m: 0.0015 - deadzone_z_m: 0.006 - v_max_xy: 0.15 - v_max_z: 0.07 - a_max: 0.70 - - # 第 3 项 — 速度低通滤波 - vel_lpf_alpha: 0.40 - wz_lpf_alpha: 0.40 - - # 第 5 项 — dq 滑动窗口 - dq_window_size: 5 - - min_ee_z_m: 0.20 - workspace_xyz_min: [0.08, -0.55, 0.18] - workspace_xyz_max: [0.85, 0.55, 0.65] - ee_x_m: 0.25 - ee_y_m: 0.00 - ee_z_m: 0.25 - ee_hold_xy: false - ee_vertical_down: true - ee_hold_kp: 2.0 - ee_w_max: 0.60 - damping: 0.08 - max_qdot: 0.85 - exec_horizon_sec: 0.20 - traj_stream_hz: 15.0 - min_cmd_delta_rad: 0.004 - camera_fx: 390.0 - camera_fy: 390.0 - camera_cx: 320.0 - camera_cy: 240.0 diff --git a/install/arm_application/share/arm_application/config/servo.yaml b/install/arm_application/share/arm_application/config/servo.yaml new file mode 120000 index 0000000..49253e0 --- /dev/null +++ b/install/arm_application/share/arm_application/config/servo.yaml @@ -0,0 +1 @@ +/home/cc/ros2/build/arm_application/config/servo.yaml \ No newline at end of file diff --git a/install/arm_application/share/arm_application/config/xunhuan_trajectory.yaml b/install/arm_application/share/arm_application/config/xunhuan_trajectory.yaml deleted file mode 100644 index 6ab0a4b..0000000 --- a/install/arm_application/share/arm_application/config/xunhuan_trajectory.yaml +++ /dev/null @@ -1,15 +0,0 @@ -# Auto-converted from Flexiv Elements .traj (joints: deg -> rad) -# ROS params: flat waypoint_positions + waypoint_times (no nested dicts) -run_joint_trajectory: - ros__parameters: - joint_prefix: "Rizon4-063989_" - joint_names: [joint1, joint2, joint3, joint4, joint5, joint6, joint7] - velocity_scale: 0.2 - waypoint_times: [3.0, 6.0, 9.92, 12.92, 20.54] - waypoint_positions: [ - -0.121649, 0.522726, 0.030020, 1.610764, -0.113097, -0.218864, -0.006458, # WPT0 - -0.006889, 0.050452, 0.128620, 1.823614, -0.044784, 0.338795, -0.091060, # WPT1 - -0.009020, -0.311032, 0.106302, 2.548074, -0.066892, 1.318222, -0.091348, # WPT2 - 0.014012, -0.847726, 0.074948, 2.395150, -0.251875, 1.738244, -0.091738, # WPT3 - 0.089637, 0.502090, 0.299444, 1.749088, 0.070761, -0.168363, -0.091845, # WPT4 - ] diff --git a/install/arm_application/share/arm_application/config/xunhuan_trajectory.yaml b/install/arm_application/share/arm_application/config/xunhuan_trajectory.yaml new file mode 120000 index 0000000..5683a01 --- /dev/null +++ b/install/arm_application/share/arm_application/config/xunhuan_trajectory.yaml @@ -0,0 +1 @@ +/home/cc/ros2/build/arm_application/config/xunhuan_trajectory.yaml \ No newline at end of file diff --git a/install/arm_application/share/arm_application/launch/demo.launch.py b/install/arm_application/share/arm_application/launch/demo.launch.py deleted file mode 100644 index 29d14a6..0000000 --- a/install/arm_application/share/arm_application/launch/demo.launch.py +++ /dev/null @@ -1,19 +0,0 @@ -from launch import LaunchDescription -from launch_ros.actions import Node - - -def generate_launch_description(): - return LaunchDescription([ - Node( - package='arm_application', - executable='demo_named_poses', - name='demo_named_poses', - output='screen', - parameters=[{ - 'poses': ['home', 'ready', 'inspect', 'home'], - 'velocity_scale': 0.5, - 'dwell_sec': 1.0, - 'loops': 1, - }], - ), - ]) diff --git a/install/arm_application/share/arm_application/launch/demo.launch.py b/install/arm_application/share/arm_application/launch/demo.launch.py new file mode 120000 index 0000000..78b7b86 --- /dev/null +++ b/install/arm_application/share/arm_application/launch/demo.launch.py @@ -0,0 +1 @@ +/home/cc/ros2/build/arm_application/launch/demo.launch.py \ No newline at end of file diff --git a/install/arm_application/share/arm_application/launch/dh_pgea.launch.py b/install/arm_application/share/arm_application/launch/dh_pgea.launch.py deleted file mode 100644 index 5f9203f..0000000 --- a/install/arm_application/share/arm_application/launch/dh_pgea.launch.py +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env python3 -"""启动 DH PGEA Modbus 节点。配置来自 ``~/ros2/config/site.yaml`` 的 ``gripper`` 段。""" - -from __future__ import annotations - -import os -import sys -from pathlib import Path - -from launch import LaunchDescription -from launch.actions import LogInfo, OpaqueFunction -from launch_ros.actions import Node - - -def _ws_root() -> Path: - for key in ("ROS2_WS", "SITE_ROS2_ROOT"): - v = os.environ.get(key, "").strip() - if v: - return Path(v) - here = Path(__file__).resolve() - for p in [here.parents[i] for i in range(2, 8)]: - if (p / "config" / "site.yaml").is_file(): - return p - return Path.home() / "ros2" - - -def _setup(context, *args, **kwargs): - root = _ws_root() - sys.path.insert(0, str(root / "scripts" / "lib")) - from export_site_env import gripper_overrides, load_site, site_path # type: ignore - - cfg = os.environ.get("SITE_CONFIG", "").strip() - path = Path(cfg).expanduser() if cfg else site_path() - if not path.is_file(): - path = root / "config" / "site.yaml" - data = load_site(path) - params = gripper_overrides(data) - return [ - LogInfo( - msg=( - f"[dh_pgea] {params.get('model')} SN={params.get('serial_number')} " - f"{params.get('port')} @{params.get('baud')} site={path}" - ) - ), - LogInfo( - msg=( - "[dh_pgea] Flexiv 的 load_gripper 保持 false —— 这里是 DH Modbus," - "不是 Flexiv Studio 夹爪。" - ) - ), - Node( - package="arm_application", - executable="dh_pgea", - name="dh_pgea", - output="screen", - parameters=[params], - ), - ] - - -def generate_launch_description() -> LaunchDescription: - return LaunchDescription([OpaqueFunction(function=_setup)]) diff --git a/install/arm_application/share/arm_application/launch/dh_pgea.launch.py b/install/arm_application/share/arm_application/launch/dh_pgea.launch.py new file mode 120000 index 0000000..d87dd75 --- /dev/null +++ b/install/arm_application/share/arm_application/launch/dh_pgea.launch.py @@ -0,0 +1 @@ +/home/cc/ros2/build/arm_application/launch/dh_pgea.launch.py \ No newline at end of file diff --git a/install/arm_application/share/arm_application/launch/dual_gripper.launch.py b/install/arm_application/share/arm_application/launch/dual_gripper.launch.py deleted file mode 100644 index 13831cf..0000000 --- a/install/arm_application/share/arm_application/launch/dual_gripper.launch.py +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env python3 -"""启动双路 DH 夹爪。端口来自 ``site.yaml`` 的 ``robots[].gripper``。""" - -from __future__ import annotations - -import os -from pathlib import Path - -from launch import LaunchDescription -from launch.actions import DeclareLaunchArgument, LogInfo -from launch.substitutions import LaunchConfiguration -from launch_ros.actions import Node - - -def generate_launch_description() -> LaunchDescription: - sides = LaunchConfiguration("sides") - allow_offline = LaunchConfiguration("allow_offline") - site = os.environ.get("SITE_CONFIG") or str(Path.home() / "ros2" / "config" / "site.yaml") - return LaunchDescription( - [ - DeclareLaunchArgument("sides", default_value="left,right"), - DeclareLaunchArgument("allow_offline", default_value="true"), - LogInfo(msg=f"[dual_gripper] site={site}(arm_msgs,IPC Modbus,不是 Flexiv 夹爪)"), - Node( - package="arm_application", - executable="dual_gripper", - name="dual_gripper_driver", - output="screen", - parameters=[ - { - "config_file": "", - "auto_connect": True, - "allow_offline": allow_offline, - "publish_hz": 10.0, - "sides": sides, - } - ], - ), - ] - ) diff --git a/install/arm_application/share/arm_application/launch/dual_gripper.launch.py b/install/arm_application/share/arm_application/launch/dual_gripper.launch.py new file mode 120000 index 0000000..244db65 --- /dev/null +++ b/install/arm_application/share/arm_application/launch/dual_gripper.launch.py @@ -0,0 +1 @@ +/home/cc/ros2/build/arm_application/launch/dual_gripper.launch.py \ No newline at end of file diff --git a/install/arm_application/share/arm_application/launch/gauge_assembly.launch.py b/install/arm_application/share/arm_application/launch/gauge_assembly.launch.py deleted file mode 100755 index 0c4e1ed..0000000 --- a/install/arm_application/share/arm_application/launch/gauge_assembly.launch.py +++ /dev/null @@ -1,270 +0,0 @@ -#!/usr/bin/env python3 -"""启动通止规装配主流程(看板 S00–S11)。 - -与 stage2/stage3 的 launch 差别:**这里不检查任何服务**。 -"所有服务是否就绪"是 S00 的职责(``gauge_boot`` + 节点里的探测), -在 launch/shell 里再查一遍就会出现两处判据 —— 一处改了另一处没改, -现场表现为"脚本说没问题、节点说没数据"。 - -唯一在这里做的是**发布手眼静态 TF**:腕部相机的 eye-in-hand 外参是主流程 -(S05 精拍定位)算坐标的前提,而它只能由标定产物提供(site.yaml → -paths.handeye_file)。文件不存在时不发 TF,节点会在 S05 报"查不到 TF"。 - -用法(一般由 scripts/run_gauge_assembly.sh 调用):: - - ros2 launch arm_application gauge_assembly.launch.py - ros2 launch arm_application gauge_assembly.launch.py dry_run:=true holes_total:=1 -""" - -from __future__ import annotations - -import os -import sys -from pathlib import Path - -from launch import LaunchDescription -from launch.actions import ( - DeclareLaunchArgument, - LogInfo, - OpaqueFunction, - RegisterEventHandler, - Shutdown, -) -from launch.event_handlers import OnProcessExit -from launch.substitutions import LaunchConfiguration -from launch_ros.actions import Node - - -def _ws_root() -> Path: - """工作区根目录:优先环境变量,其次向上找 config/site.yaml。""" - for key in ("ROS2_WS", "SITE_ROS2_ROOT"): - v = os.environ.get(key, "").strip() - if v: - return Path(v) - here = Path(__file__).resolve() - for i in range(2, 8): - p = here.parents[i] - if (p / "config" / "site.yaml").is_file(): - return p - return Path.home() / "ros2" - - -def _handeye_xyz_xyzw(path: str): - """读手眼文件 → ``(tx, ty, tz, qx, qy, qz, qw)``。 - - **不要在这里再写一遍四元数换算**:这段换算在别的 launch 里已各抄了一遍, - 抄错过的症状是"手眼 TF 差了 30°"(定位总能到附近,永远差一点)。 - 实现只有一份在 ``arm_application.handeye_lib``,且被回环测试钉住。 - """ - from arm_application.handeye_lib import read_transform_yaml - - xyz, quat = read_transform_yaml(path) - return ( - float(xyz[0]), float(xyz[1]), float(xyz[2]), - float(quat[0]), float(quat[1]), float(quat[2]), float(quat[3]), - ) - - -def _launch_setup(context, *args, **kwargs): - root = _ws_root() - sys.path.insert(0, str(root / "scripts" / "lib")) - from export_site_env import apply_active_arm, load_site, site_path # type: ignore - - cfg = os.environ.get("SITE_CONFIG", "").strip() - path = Path(cfg).expanduser() if cfg else site_path() - if not path.is_file(): - path = root / "config" / "site.yaml" - data = load_site(path) - merged, robot = apply_active_arm(data) - - ee_frame = str(robot.get("ee_frame") or f"{robot.get('sn')}_flange") - base_frame = str( - robot.get("base_frame") - or os.environ.get("SITE_BASE_FRAME") - or f"{robot.get('sn')}_base_link" - ) - handeye = str((merged.get("paths") or {}).get("handeye_file") or "").strip() - if not handeye: - handeye = str((robot.get("paths") or {}).get("handeye_file") or "").strip() - cam_cfg = merged.get("camera") or {} - cam = str(cam_cfg.get("name") or "d405").strip().strip("/") - cam_frame = f"{cam}_color_optical_frame" - - # ---- 手外相机(eye-to-hand):S03 粗定位用的外参 ---- - # 名字按 site.yaml 的 cameras 注册表(role=overhead*)由**唯一实现**解析 - # (site_io.overhead_camera,节点自己取命名空间也走它)。 - sys.path.insert(0, str(root / "src" / "arm_application")) - from arm_application.site_io import ( # type: ignore - eye_to_hand_result_name, - handeye_static_tf_frames, - overhead_camera as _overhead_camera, - ) - - from export_site_env import arm_short_id # type: ignore - - over_cfg, _ = _overhead_camera(merged, robot) - over_cam = str(over_cfg.get("name") or "").strip("/") - over_frame = f"{over_cam}_color_optical_frame" if over_cam else "" - # 眼在手外的产物名走 site_io.eye_to_hand_result_name(唯一口径), - # 不在这里自己拼(拼错/漏拼会让 S03 找不到刚标完的文件)。 - short = arm_short_id(str(robot.get("sn") or "")) - e2h_file = ( - root / "handeye" / "results" / eye_to_hand_result_name(short, over_cam) - if over_cam - else None - ) - - def _flag(name: str) -> bool: - return LaunchConfiguration(name).perform(context).strip().lower() in ( - "1", "true", "yes", "on", - ) - - dry_run = _flag("dry_run") - holes = LaunchConfiguration("holes_total").perform(context).strip() - # 仿真里必须 true:本节点所有 header.stamp 比对和 TF 查询都按这个时钟走。 - # 忘了开的话症状是"相机没数据/TF 查不到",看不出真正原因(脚本 --sim 会带)。 - use_sim_time = _flag("use_sim_time") - backend = LaunchConfiguration("gripper_backend").perform(context).strip() or "auto" - result_file = LaunchConfiguration("result_file").perform(context).strip() - - # 是否由本 launch 发手眼静态 TF。真机必须发(相机系与法兰之间除了标定值 - # 没有别的来源);仿真**不能**发 —— 仿真里相机在 URDF 里就挂在法兰上, - # 再发一条同父子关系的静态 TF 会出现两个父节点(TF_MULTIPLE_AUTHORITIES), - # 查出来的位姿在两条之间跳。脚本 --sim 会传 false。 - publish_handeye_tf = _flag("publish_handeye_tf") - nodes = [] - frames = [] - if publish_handeye_tf and os.path.isfile(handeye): - try: - tx, ty, tz, qx, qy, qz, qw = _handeye_xyz_xyzw(handeye) - except Exception as exc: # noqa: BLE001 - frames.append(f"[gauge] 手眼文件读不了({handeye}):{exc}") - else: - frames.append(f"[gauge] 手眼 TF {ee_frame} ← {cam_frame}({Path(handeye).name})") - nodes.append( - Node( - package="tf2_ros", - executable="static_transform_publisher", - name="gauge_handeye_static_tf", - arguments=[ - "--x", str(tx), "--y", str(ty), "--z", str(tz), - "--qx", str(qx), "--qy", str(qy), "--qz", str(qz), "--qw", str(qw), - "--frame-id", ee_frame, - "--child-frame-id", cam_frame, - ], - output="screen", - ) - ) - elif not publish_handeye_tf: - frames.append( - f"[gauge] 按参数不发手眼静态 TF(publish_handeye_tf=false):" - f"相机系 {cam_frame} 由 URDF/驱动给出(仿真就是这条路径)" - ) - else: - frames.append( - f"[gauge] 没有手眼文件({handeye or 'paths.handeye_file 为空'})" - "—— 不发布静态 TF,S05 会在查 TF 时报错。先跑 scripts/run_handeye.sh" - ) - - # ---- 手外相机外参:**基座 ← 相机**(眼在手外)---- - # 与上面那条的父子关系**不同**,两者不能混: - # 腕部(eye-in-hand):法兰 ← 相机(相机跟着臂动) - # 手外(eye-to-hand):基座 ← 相机(相机固定,不随臂动) - # S03 反投影查的正是 `{prefix}base_link ← {相机}_color_optical_frame` - #(gauge_assembly_node._coarse_workpiece_xy)。把 eye_to_hand 的文件按 - # "法兰 ← 相机"发出去会得到一条**看着合理**的错 TF —— 于是定位总能到附近、 - # 永远差一截,而人只会去怀疑标定精度。 - if over_cam and e2h_file and publish_handeye_tf: - if e2h_file.is_file(): - try: - tx, ty, tz, qx, qy, qz, qw = _handeye_xyz_xyzw(str(e2h_file)) - except Exception as exc: # noqa: BLE001 - frames.append(f"[gauge] 手外相机文件读不了({e2h_file}):{exc}") - else: - parent, child = handeye_static_tf_frames( - mode="eye_to_hand", - ee_frame=ee_frame, - base_frame=base_frame, - cam_frame=over_frame, - ) - frames.append( - f"[gauge] 手外 TF {parent} ← {child}({e2h_file.name})" - ) - nodes.append( - Node( - package="tf2_ros", - executable="static_transform_publisher", - name="gauge_coarse_handeye_static_tf", - arguments=[ - "--x", str(tx), "--y", str(ty), "--z", str(tz), - "--qx", str(qx), "--qy", str(qy), "--qz", str(qz), - "--qw", str(qw), - "--frame-id", parent, - "--child-frame-id", child, - ], - output="screen", - ) - ) - else: - frames.append( - f"[gauge] 手外相机 {over_cam} 没有 eye-to-hand 标定({e2h_file.name})" - "—— 不发它的静态 TF,S03 会明确报缺文件并回 S04 跟踪(不假装成功)" - ) - - gauge_node = Node( - package="arm_application", - executable="gauge_assembly", - name="gauge_assembly", - output="screen", - parameters=[ - { - "robot_sn": str( - robot.get("sn") or os.environ.get("SITE_ROBOT_SN") or "" - ), - "dry_run": dry_run, - "holes_total": int(holes) if holes else -1, - "gripper_backend": backend, - "result_file": result_file, - "use_sim_time": use_sim_time, - # S03 找手外外参用的确切路径(名字口径由 export_site_env 一处实现)。 - "coarse_eye_to_hand_file": str(e2h_file) if e2h_file else "", - } - ], - ) - nodes.append(gauge_node) - - return [ - LogInfo(msg=f"[gauge] site={path}"), - LogInfo(msg=f"[gauge] arm={robot.get('label') or robot.get('sn')} cam={cam}"), - LogInfo( - msg=f"[gauge] dry_run={dry_run} holes={holes or 'site'} " - f"backend={backend} use_sim_time={use_sim_time}" - ), - LogInfo(msg=f"[gauge] 结论文件 {result_file}"), - *[LogInfo(msg=m) for m in frames], - *nodes, - # 流程节点退出 → 整个 launch 退出。 - # 为什么必须显式写:静态 TF 发布者是**常驻**的(它不发完就退, - # 要一直挂着供 tf2 查询),所以主流程跑完 DONE 之后 launch 不会自己结束 —— - # 表现为"流程明明打完了,终端一直不回到提示符"(实测会一直挂到 timeout 杀掉)。 - RegisterEventHandler( - OnProcessExit(target_action=gauge_node, on_exit=Shutdown()) - ), - ] - - -def generate_launch_description() -> LaunchDescription: - return LaunchDescription( - [ - DeclareLaunchArgument("dry_run", default_value="false"), - DeclareLaunchArgument("holes_total", default_value=""), - DeclareLaunchArgument("gripper_backend", default_value="auto"), - # 结论落盘路径(脚本读它判成败:ros2 launch 的退出码恒为 0) - DeclareLaunchArgument("result_file", default_value="/tmp/gauge_assembly_result.json"), - # 仿真必须 true(真机 false)。理由见 _launch_setup 里的注释。 - DeclareLaunchArgument("use_sim_time", default_value="false"), - # 真机 true(相机系只能由标定值给出);仿真 false(URDF 已给出)。 - DeclareLaunchArgument("publish_handeye_tf", default_value="true"), - OpaqueFunction(function=_launch_setup), - ] - ) diff --git a/install/arm_application/share/arm_application/launch/gauge_assembly.launch.py b/install/arm_application/share/arm_application/launch/gauge_assembly.launch.py new file mode 120000 index 0000000..a75b05b --- /dev/null +++ b/install/arm_application/share/arm_application/launch/gauge_assembly.launch.py @@ -0,0 +1 @@ +/home/cc/ros2/build/arm_application/launch/gauge_assembly.launch.py \ No newline at end of file diff --git a/install/arm_application/share/arm_application/launch/hole_detect.launch.py b/install/arm_application/share/arm_application/launch/hole_detect.launch.py deleted file mode 100644 index 0f481d8..0000000 --- a/install/arm_application/share/arm_application/launch/hole_detect.launch.py +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env python3 -"""在当前机械臂的彩色话题上启动 hole_detect。""" - -from __future__ import annotations - -import os -from pathlib import Path - -from launch import LaunchDescription -from launch.actions import DeclareLaunchArgument, LogInfo, OpaqueFunction -from launch.substitutions import LaunchConfiguration -from launch_ros.actions import Node - - -def _ws_root() -> Path: - for key in ("ROS2_WS", "SITE_ROS2_ROOT"): - v = os.environ.get(key, "").strip() - if v: - return Path(v) - return Path.home() / "ros2" - - -def _setup(context, *args, **kwargs): - root = _ws_root() - backend = LaunchConfiguration("backend").perform(context) or os.environ.get("SITE_HOLE_BACKEND") or "two_stage" - weights = LaunchConfiguration("weights").perform(context) or os.environ.get("SITE_HOLE_WEIGHTS") or "" - cfg = LaunchConfiguration("config_file").perform(context) or os.environ.get("SITE_HOLE_CONFIG") or "" - cam = os.environ.get("SITE_CAM_NAME") or "d405" - preview = LaunchConfiguration("preview").perform(context).lower() in ("1", "true", "yes") - if not cfg: - if backend in ("two_stage", "hough_roi"): - cfg = str(root / "src" / "arm_application" / "config" / "hole_detect.yaml") - else: - cfg = str(root / "src" / "arm_application" / "config" / "hole_insert.yaml") - if not weights: - if backend in ("two_stage", "hough_roi"): - weights = os.environ.get("SITE_HOLE_WORKPIECE_WEIGHTS") or os.environ.get("SITE_YOLO_WEIGHTS") or "" - else: - weights = os.environ.get("SITE_HOLE_WEIGHTS") or str(root / "models" / "yolo" / "gongjian0929.onnx") - return [ - LogInfo(msg=f"[hole_detect] cam={cam} backend={backend} weights={weights} cfg={cfg}"), - Node( - package="arm_application", - executable="hole_detect", - name="hole_detect", - output="screen", - parameters=[ - { - "camera_source": cam, - "weights": weights, - "config_file": cfg, - "backend": backend, - "device": os.environ.get("SITE_YOLO_DEVICE") or "0", - "preview": preview, - } - ], - ), - ] - - -def generate_launch_description() -> LaunchDescription: - return LaunchDescription( - [ - DeclareLaunchArgument("backend", default_value=""), - DeclareLaunchArgument("weights", default_value=""), - DeclareLaunchArgument("config_file", default_value=""), - DeclareLaunchArgument("preview", default_value="false"), - OpaqueFunction(function=_setup), - ] - ) diff --git a/install/arm_application/share/arm_application/launch/hole_detect.launch.py b/install/arm_application/share/arm_application/launch/hole_detect.launch.py new file mode 120000 index 0000000..6fa71ed --- /dev/null +++ b/install/arm_application/share/arm_application/launch/hole_detect.launch.py @@ -0,0 +1 @@ +/home/cc/ros2/build/arm_application/launch/hole_detect.launch.py \ No newline at end of file diff --git a/install/arm_application/share/arm_application/launch/pipeline.launch.py b/install/arm_application/share/arm_application/launch/pipeline.launch.py deleted file mode 100644 index ea18aff..0000000 --- a/install/arm_application/share/arm_application/launch/pipeline.launch.py +++ /dev/null @@ -1,176 +0,0 @@ -#!/usr/bin/env python3 -"""Launch the three-stage assembly pipeline + static hand-eye TF. - -相机 / 触觉由 scripts/run_all.sh 负责拉起一次。本 launch 只起手眼 TF 和串联节点。 -一阶段跟踪由 pipeline 节点在进程内再拉 visual_servo.launch(不重复发手眼 TF)。 -""" - -from __future__ import annotations - -import os -import sys -from pathlib import Path - -from launch import LaunchDescription -from launch.actions import DeclareLaunchArgument, LogInfo, OpaqueFunction -from launch.actions import EmitEvent, RegisterEventHandler -from launch.event_handlers import OnProcessExit -from launch.events import Shutdown -from launch.substitutions import LaunchConfiguration -from launch_ros.actions import Node - - -def _ws_root() -> Path: - for key in ("ROS2_WS", "SITE_ROS2_ROOT"): - v = os.environ.get(key, "").strip() - if v: - return Path(v) - here = Path(__file__).resolve() - for p in [here.parents[i] for i in range(2, 8)]: - if (p / "config" / "site.yaml").is_file(): - return p - return Path.home() / "ros2" - - -def _handeye_xyz_xyzw(path: str): - """读手眼文件 → ``(tx, ty, tz, qx, qy, qz, qw)``。 - - 实现只有一份,在 ``arm_application.handeye_lib``(``read_transform_yaml``), - 并由回环测试钉住:``quat → R`` 必须能还原文件里的 ``T_4x4``。 - 这段换算曾经在 4 个 launch 文件里各抄了一遍,且抄错了 3 个分支 —— - 手眼姿态差几十度,定位"总能到附近、永远差一点",看起来像相机标定不准。 - """ - from arm_application.handeye_lib import read_transform_yaml - - xyz, quat = read_transform_yaml(path) - return ( - float(xyz[0]), float(xyz[1]), float(xyz[2]), - float(quat[0]), float(quat[1]), float(quat[2]), float(quat[3]), - ) - - -def _as_bool(s: str) -> bool: - return s.strip().lower() in ("1", "true", "yes") - - -def _launch_setup(context, *args, **kwargs): - root = _ws_root() - sys.path.insert(0, str(root / "scripts" / "lib")) - from export_site_env import apply_active_arm, load_site, site_path # type: ignore - - cfg = os.environ.get("SITE_CONFIG", "").strip() - path = Path(cfg).expanduser() if cfg else site_path() - if not path.is_file(): - path = root / "config" / "site.yaml" - data = load_site(path) - merged, robot = apply_active_arm(data) - - ee_frame = str(robot.get("ee_frame") or f"{robot.get('sn')}_flange") - paths = merged.get("paths") or {} - handeye = str(paths.get("handeye_file") or "").strip() - cam_cfg = merged.get("camera") or {} - cam = str(cam_cfg.get("name") or "d405").strip().strip("/") - cam_frame = f"{cam}_color_optical_frame" - - skip1 = _as_bool(LaunchConfiguration("skip_stage1").perform(context)) - skip2 = _as_bool(LaunchConfiguration("skip_stage2").perform(context)) - skip3 = _as_bool(LaunchConfiguration("skip_stage3").perform(context)) - preview = _as_bool(LaunchConfiguration("preview").perform(context)) - resnap = _as_bool(LaunchConfiguration("resnap").perform(context)) - # 调试开关:只验证精对准、不轻降。用途是"对准逻辑刚改完、还没确认它真能把规 - # 对到孔心"时先别让规往下走 —— 对不准就下压会把规顶在孔沿上(2026-10-08 真机 - # 顶到 63N)。默认关;验证对准时用 --no-descent 打开。 - no_descent = _as_bool(LaunchConfiguration("no_descent").perform(context)) - d435_only = _as_bool(LaunchConfiguration("d435_move_only").perform(context)) - init_z = LaunchConfiguration("init_z_m").perform(context).strip() - hover_z = LaunchConfiguration("hover_z_m").perform(context).strip() - final_gap = LaunchConfiguration("final_gap_mm").perform(context).strip() - target_hole = LaunchConfiguration("target_hole").perform(context).strip() - depth = LaunchConfiguration("insert_depth_mm").perform(context).strip() - pitch = LaunchConfiguration("screw_pitch_mm").perform(context).strip() - - nodes = [] - if handeye and Path(handeye).is_file(): - tx, ty, tz, qx, qy, qz, qw = _handeye_xyz_xyzw(handeye) - nodes.append( - Node( - package="tf2_ros", - executable="static_transform_publisher", - name="handeye_static_tf", - arguments=[ - "--x", str(tx), "--y", str(ty), "--z", str(tz), - "--qx", str(qx), "--qy", str(qy), "--qz", str(qz), "--qw", str(qw), - "--frame-id", ee_frame, - "--child-frame-id", cam_frame, - ], - output="screen", - ) - ) - - node = Node( - package="arm_application", - executable="assembly_pipeline", - name="assembly_pipeline", - output="screen", - parameters=[ - { - "robot_sn": str(robot.get("sn") or os.environ.get("SITE_ROBOT_SN") or ""), - "preview": preview, - "resnap": resnap, - "target_hole": target_hole, - "insert_depth_mm": float(depth) if depth else -1.0, - "screw_pitch_mm": float(pitch) if pitch else -999.0, - "skip_stage1": skip1, - "skip_stage2": skip2 or d435_only, - "skip_stage3": skip3 or d435_only, - "d435_move_only": d435_only, - "init_z_m": float(init_z) if init_z else -1.0, - "hover_z_m": float(hover_z) if hover_z else -1.0, - "final_gap_mm": float(final_gap) if final_gap else -1.0, - # -1=按 site 的 stage2.final_descent_enable;0=强制不降(调试) - "final_descent_enable": 0 if no_descent else -1, - } - ], - ) - - return [ - LogInfo(msg=f"[pipeline] site={path}"), - LogInfo(msg=f"[pipeline] arm={robot.get('label') or robot.get('sn')} cam={cam}"), - LogInfo( - msg=f"[pipeline] hole={target_hole or 'site'} depth={depth or 'site'} " - f"pitch={pitch or 'site'} final_gap={final_gap or 'site'} " - f"skip1={skip1} skip2={skip2} skip3={skip3}" - + (" [d435_only:只测 D435 位移]" if d435_only else "") - + (" [no_descent:只对准,不轻降]" if no_descent else "") - ), - *nodes, - node, - RegisterEventHandler( - OnProcessExit( - target_action=node, - on_exit=[EmitEvent(event=Shutdown(reason="pipeline 完成"))], - ) - ), - ] - - -def generate_launch_description() -> LaunchDescription: - return LaunchDescription( - [ - DeclareLaunchArgument("skip_stage1", default_value="false"), - DeclareLaunchArgument("skip_stage2", default_value="false"), - DeclareLaunchArgument("skip_stage3", default_value="false"), - DeclareLaunchArgument("target_hole", default_value=""), - DeclareLaunchArgument("insert_depth_mm", default_value=""), - DeclareLaunchArgument("screw_pitch_mm", default_value=""), - DeclareLaunchArgument("resnap", default_value="false"), - # 只验证精对准、不轻降(见 _launch_setup 里的说明) - DeclareLaunchArgument("no_descent", default_value="false"), - DeclareLaunchArgument("d435_move_only", default_value="false"), - DeclareLaunchArgument("init_z_m", default_value=""), - DeclareLaunchArgument("hover_z_m", default_value=""), - DeclareLaunchArgument("final_gap_mm", default_value=""), - DeclareLaunchArgument("preview", default_value="true"), - OpaqueFunction(function=_launch_setup), - ] - ) diff --git a/install/arm_application/share/arm_application/launch/pipeline.launch.py b/install/arm_application/share/arm_application/launch/pipeline.launch.py new file mode 120000 index 0000000..032c11f --- /dev/null +++ b/install/arm_application/share/arm_application/launch/pipeline.launch.py @@ -0,0 +1 @@ +/home/cc/ros2/build/arm_application/launch/pipeline.launch.py \ No newline at end of file diff --git a/install/arm_application/share/arm_application/launch/stage2_locate.launch.py b/install/arm_application/share/arm_application/launch/stage2_locate.launch.py deleted file mode 100644 index f7cdc5b..0000000 --- a/install/arm_application/share/arm_application/launch/stage2_locate.launch.py +++ /dev/null @@ -1,132 +0,0 @@ -#!/usr/bin/env python3 -"""Launch stage-2 one-shot hole localization (k1/k2) + static hand-eye TF. - -所有参数来自 ~/ros2/config/site.yaml(launch 参数仅做少量覆盖)。 -相机与触觉服务由 scripts/run_stage2_locate.sh 负责拉起/检查。 -""" - -from __future__ import annotations - -import os -import sys -from pathlib import Path - -from ament_index_python.packages import get_package_share_directory -from launch import LaunchDescription -from launch.actions import DeclareLaunchArgument, LogInfo, OpaqueFunction -from launch.substitutions import LaunchConfiguration -from launch_ros.actions import Node - - -def _ws_root() -> Path: - for key in ("ROS2_WS", "SITE_ROS2_ROOT"): - v = os.environ.get(key, "").strip() - if v: - return Path(v) - here = Path(__file__).resolve() - for p in [here.parents[i] for i in range(2, 8)]: - if (p / "config" / "site.yaml").is_file(): - return p - return Path.home() / "ros2" - - -def _handeye_xyz_xyzw(path: str): - """读手眼文件 → ``(tx, ty, tz, qx, qy, qz, qw)``。 - - 实现只有一份,在 ``arm_application.handeye_lib``(``read_transform_yaml``), - 并由回环测试钉住:``quat → R`` 必须能还原文件里的 ``T_4x4``。 - 这段换算曾经在 4 个 launch 文件里各抄了一遍,且抄错了 3 个分支 —— - 手眼姿态差几十度,定位"总能到附近、永远差一点",看起来像相机标定不准。 - """ - from arm_application.handeye_lib import read_transform_yaml - - xyz, quat = read_transform_yaml(path) - return ( - float(xyz[0]), float(xyz[1]), float(xyz[2]), - float(quat[0]), float(quat[1]), float(quat[2]), float(quat[3]), - ) - - -def _launch_setup(context, *args, **kwargs): - root = _ws_root() - sys.path.insert(0, str(root / "scripts" / "lib")) - from export_site_env import apply_active_arm, load_site, site_path # type: ignore - - cfg = os.environ.get("SITE_CONFIG", "").strip() - path = Path(cfg).expanduser() if cfg else site_path() - if not path.is_file(): - path = root / "config" / "site.yaml" - data = load_site(path) - merged, robot = apply_active_arm(data) - - ee_frame = str(robot.get("ee_frame") or f"{robot.get('sn')}_flange") - paths = merged.get("paths") or {} - handeye = str(paths.get("handeye_file") or "").strip() - if not handeye or not Path(handeye).is_file(): - raise FileNotFoundError( - f"hand-eye result missing: {handeye}. " - "先标定: bash ~/ros2/scripts/run_handeye.sh calibrate" - ) - cam_cfg = merged.get("camera") or {} - cam = str(cam_cfg.get("name") or "d405").strip().strip("/") - cam_frame = f"{cam}_color_optical_frame" - - hover_only = LaunchConfiguration("hover_only").perform(context).lower() in ("1", "true", "yes") - preview = LaunchConfiguration("preview").perform(context).lower() in ("1", "true", "yes") - target_hole = LaunchConfiguration("target_hole").perform(context).strip() - hover_z = LaunchConfiguration("hover_z_m").perform(context).strip() - final_gap = LaunchConfiguration("final_gap_mm").perform(context).strip() - - tx, ty, tz, qx, qy, qz, qw = _handeye_xyz_xyzw(handeye) - static_tf = Node( - package="tf2_ros", - executable="static_transform_publisher", - name="handeye_static_tf", - arguments=[ - "--x", str(tx), "--y", str(ty), "--z", str(tz), - "--qx", str(qx), "--qy", str(qy), "--qz", str(qz), "--qw", str(qw), - "--frame-id", ee_frame, - "--child-frame-id", cam_frame, - ], - output="screen", - ) - - node = Node( - package="arm_application", - executable="stage2_locate", - name="stage2_locate", - output="screen", - parameters=[ - { - "robot_sn": str(robot.get("sn") or os.environ.get("SITE_ROBOT_SN") or ""), - "hover_only": hover_only, - "target_hole": target_hole, - "hover_z_m": float(hover_z) if hover_z else -1.0, - "final_gap_mm": float(final_gap) if final_gap else -1.0, - "preview": preview, - } - ], - ) - - return [ - LogInfo(msg=f"[stage2] site={path}"), - LogInfo( - msg=f"[stage2] arm={robot.get('label') or robot.get('sn')} cam={cam} handeye={handeye}" - ), - LogInfo(msg=f"[stage2] hover_only={hover_only} target={target_hole or 'site'}"), - static_tf, - node, - ] - - -def generate_launch_description() -> LaunchDescription: - return LaunchDescription( - [ - DeclareLaunchArgument("hover_only", default_value="false"), - DeclareLaunchArgument("target_hole", default_value=""), - DeclareLaunchArgument("hover_z_m", default_value=""), - DeclareLaunchArgument("final_gap_mm", default_value=""), - DeclareLaunchArgument("preview", default_value="true"), - OpaqueFunction(function=_launch_setup), - ] - ) diff --git a/install/arm_application/share/arm_application/launch/stage2_locate.launch.py b/install/arm_application/share/arm_application/launch/stage2_locate.launch.py new file mode 120000 index 0000000..8df95cb --- /dev/null +++ b/install/arm_application/share/arm_application/launch/stage2_locate.launch.py @@ -0,0 +1 @@ +/home/cc/ros2/build/arm_application/launch/stage2_locate.launch.py \ No newline at end of file diff --git a/install/arm_application/share/arm_application/launch/stage3_search.launch.py b/install/arm_application/share/arm_application/launch/stage3_search.launch.py deleted file mode 100644 index 58e0cdd..0000000 --- a/install/arm_application/share/arm_application/launch/stage3_search.launch.py +++ /dev/null @@ -1,135 +0,0 @@ -#!/usr/bin/env python3 -"""Launch stage-3 compliant hole search (Orisys tactile + optional D405 resnap). - -所有阈值来自 ~/ros2/config/site.yaml → hole_detect.stage3(launch 参数仅做少量覆盖)。 -触觉服务由 scripts/run_stage3_search.sh 负责拉起/检查。 -前置:二阶段已完成(臂悬停在目标孔上方、垂直、夹持通止规)。 -""" - -from __future__ import annotations - -import os -import sys -from pathlib import Path - -from launch import LaunchDescription -from launch.actions import DeclareLaunchArgument, LogInfo, OpaqueFunction -from launch.substitutions import LaunchConfiguration -from launch_ros.actions import Node - - -def _ws_root() -> Path: - for key in ("ROS2_WS", "SITE_ROS2_ROOT"): - v = os.environ.get(key, "").strip() - if v: - return Path(v) - here = Path(__file__).resolve() - for p in [here.parents[i] for i in range(2, 8)]: - if (p / "config" / "site.yaml").is_file(): - return p - return Path.home() / "ros2" - - -def _handeye_xyz_xyzw(path: str): - """读手眼文件 → ``(tx, ty, tz, qx, qy, qz, qw)``。 - - 实现只有一份,在 ``arm_application.handeye_lib``(``read_transform_yaml``), - 并由回环测试钉住:``quat → R`` 必须能还原文件里的 ``T_4x4``。 - 这段换算曾经在 4 个 launch 文件里各抄了一遍,且抄错了 3 个分支 —— - 手眼姿态差几十度,定位"总能到附近、永远差一点",看起来像相机标定不准。 - """ - from arm_application.handeye_lib import read_transform_yaml - - xyz, quat = read_transform_yaml(path) - return ( - float(xyz[0]), float(xyz[1]), float(xyz[2]), - float(quat[0]), float(quat[1]), float(quat[2]), float(quat[3]), - ) - - -def _launch_setup(context, *args, **kwargs): - root = _ws_root() - sys.path.insert(0, str(root / "scripts" / "lib")) - from export_site_env import apply_active_arm, load_site, site_path # type: ignore - - cfg = os.environ.get("SITE_CONFIG", "").strip() - path = Path(cfg).expanduser() if cfg else site_path() - if not path.is_file(): - path = root / "config" / "site.yaml" - data = load_site(path) - merged, robot = apply_active_arm(data) - - ee_frame = str(robot.get("ee_frame") or f"{robot.get('sn')}_flange") - paths = merged.get("paths") or {} - handeye = str(paths.get("handeye_file") or "").strip() - cam_cfg = merged.get("camera") or {} - cam = str(cam_cfg.get("name") or "d405").strip().strip("/") - cam_frame = f"{cam}_color_optical_frame" - - preview = LaunchConfiguration("preview").perform(context).lower() in ("1", "true", "yes") - resnap = LaunchConfiguration("resnap").perform(context).lower() in ("1", "true", "yes") - target_hole = LaunchConfiguration("target_hole").perform(context).strip() - depth = LaunchConfiguration("insert_depth_mm").perform(context).strip() - pitch = LaunchConfiguration("screw_pitch_mm").perform(context).strip() - rmax = LaunchConfiguration("spiral_r_max_mm").perform(context).strip() - - nodes = [] - if handeye and Path(handeye).is_file(): - tx, ty, tz, qx, qy, qz, qw = _handeye_xyz_xyzw(handeye) - nodes.append( - Node( - package="tf2_ros", - executable="static_transform_publisher", - name="handeye_static_tf", - arguments=[ - "--x", str(tx), "--y", str(ty), "--z", str(tz), - "--qx", str(qx), "--qy", str(qy), "--qz", str(qz), "--qw", str(qw), - "--frame-id", ee_frame, - "--child-frame-id", cam_frame, - ], - output="screen", - ) - ) - - node = Node( - package="arm_application", - executable="stage3_search", - name="stage3_search", - output="screen", - parameters=[ - { - "robot_sn": str(robot.get("sn") or os.environ.get("SITE_ROBOT_SN") or ""), - "preview": preview, - "resnap": resnap, - "target_hole": target_hole, - "insert_depth_mm": float(depth) if depth else -1.0, - "screw_pitch_mm": float(pitch) if pitch else -999.0, - "spiral_r_max_mm": float(rmax) if rmax else -1.0, - } - ], - ) - - return [ - LogInfo(msg=f"[stage3] site={path}"), - LogInfo(msg=f"[stage3] arm={robot.get('label') or robot.get('sn')} cam={cam}"), - LogInfo( - msg=f"[stage3] target={target_hole or 'site'} depth={depth or 'site'} " - f"pitch={pitch or 'site'} r_max={rmax or 'site'} resnap={resnap}" - ), - *nodes, - node, - ] - - -def generate_launch_description() -> LaunchDescription: - return LaunchDescription( - [ - DeclareLaunchArgument("target_hole", default_value=""), - DeclareLaunchArgument("insert_depth_mm", default_value=""), - DeclareLaunchArgument("screw_pitch_mm", default_value=""), - DeclareLaunchArgument("spiral_r_max_mm", default_value=""), - DeclareLaunchArgument("resnap", default_value="false"), - DeclareLaunchArgument("preview", default_value="true"), - OpaqueFunction(function=_launch_setup), - ] - ) diff --git a/install/arm_application/share/arm_application/launch/stage3_search.launch.py b/install/arm_application/share/arm_application/launch/stage3_search.launch.py new file mode 120000 index 0000000..77fe356 --- /dev/null +++ b/install/arm_application/share/arm_application/launch/stage3_search.launch.py @@ -0,0 +1 @@ +/home/cc/ros2/build/arm_application/launch/stage3_search.launch.py \ No newline at end of file diff --git a/install/arm_application/share/arm_application/launch/tactile.launch.py b/install/arm_application/share/arm_application/launch/tactile.launch.py deleted file mode 100644 index 3127dbf..0000000 --- a/install/arm_application/share/arm_application/launch/tactile.launch.py +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env python3 -"""Launch Orisys tactile node(双指,多进程架构)。 - -tactile 节点内部为每侧手指各起一个独立进程(厂家推荐:独立 CUDA 上下文), -发布 /tactile/left|right/status。Device ids come from site.yaml tactile:. -""" - -from pathlib import Path -import os - -from launch import LaunchDescription -from launch.actions import LogInfo -from launch_ros.actions import Node - - -def generate_launch_description() -> LaunchDescription: - site = os.environ.get("SITE_CONFIG") or str(Path.home() / "ros2" / "config" / "site.yaml") - return LaunchDescription( - [ - LogInfo(msg=f"[tactile] site={site} (mp workers: left + right)"), - Node( - package="arm_application", - executable="tactile", - name="tactile", - output="screen", - ), - ] - ) diff --git a/install/arm_application/share/arm_application/launch/tactile.launch.py b/install/arm_application/share/arm_application/launch/tactile.launch.py new file mode 120000 index 0000000..71bd802 --- /dev/null +++ b/install/arm_application/share/arm_application/launch/tactile.launch.py @@ -0,0 +1 @@ +/home/cc/ros2/build/arm_application/launch/tactile.launch.py \ No newline at end of file diff --git a/install/arm_application/share/arm_application/launch/visual_servo.launch.py b/install/arm_application/share/arm_application/launch/visual_servo.launch.py deleted file mode 100644 index 00b0958..0000000 --- a/install/arm_application/share/arm_application/launch/visual_servo.launch.py +++ /dev/null @@ -1,365 +0,0 @@ -#!/usr/bin/env python3 -"""启动:perception_node + servo_node + 静态手眼 TF。 - -所有可调参数都来自 ``~/ros2/config/site.yaml``(必要时可用 launch 参数覆盖)。 -""" - -from __future__ import annotations - -import os -import sys -from pathlib import Path - -from ament_index_python.packages import get_package_share_directory -from launch import LaunchDescription -from launch.actions import ( - DeclareLaunchArgument, - EmitEvent, - LogInfo, - OpaqueFunction, - RegisterEventHandler, -) -from launch.event_handlers import OnProcessExit -from launch.events import Shutdown -from launch.substitutions import LaunchConfiguration -from launch_ros.actions import Node - - -def _ws_root() -> Path: - # 优先使用 env.sh / load_site_config 提供的环境变量 - for key in ("ROS2_WS", "SITE_ROS2_ROOT"): - v = os.environ.get(key, "").strip() - if v: - return Path(v) - # launch 文件可能位于 install/.../share/arm_application/launch 或 src/... - here = Path(__file__).resolve() - for p in [here.parents[i] for i in range(2, 8)]: - if (p / "config" / "site.yaml").is_file(): - return p - return Path.home() / "ros2" - - -def _load_site(): - root = _ws_root() - sys.path.insert(0, str(root / "scripts" / "lib")) - from export_site_env import ( # type: ignore - apply_active_arm, - load_site, - perception_overrides, - servo_overrides, - site_path, - ) - - cfg = os.environ.get("SITE_CONFIG", "").strip() - path = Path(cfg).expanduser() if cfg else site_path() - # site_path() 依赖脚本所在位置;这里强制使用工作区根目录下的文件 - if not path.is_file(): - path = root / "config" / "site.yaml" - data = load_site(path) - merged, robot = apply_active_arm(data) - return merged, path, perception_overrides(data), servo_overrides(data), robot - - -def _as_bool(s: str) -> bool: - return s.strip().lower() in ("1", "true", "yes") - - -def _handeye_xyz_xyzw(path: str): - """读手眼文件 → ``(tx, ty, tz, qx, qy, qz, qw)``。 - - 实现只有一份,在 ``arm_application.handeye_lib``(``read_transform_yaml``), - 并由回环测试钉住:``quat → R`` 必须能还原文件里的 ``T_4x4``。 - 这段换算曾经在 4 个 launch 文件里各抄了一遍,且抄错了 3 个分支 —— - 手眼姿态差几十度,定位"总能到附近、永远差一点",看起来像相机标定不准。 - """ - from arm_application.handeye_lib import read_transform_yaml - - xyz, quat = read_transform_yaml(path) - return ( - float(xyz[0]), float(xyz[1]), float(xyz[2]), - float(quat[0]), float(quat[1]), float(quat[2]), float(quat[3]), - ) - - -def _launch_setup(context, *args, **kwargs): - share = Path(get_package_share_directory("arm_application")) - site, site_path, perc_over, servo_over, robot = _load_site() - - # launch 参数显式传入时覆盖;空则用 servo_overrides(已按 track_camera 选文件)。 - # 不要再拿某个臂的腕部结果路径当"空"哨兵:换臂或切到 D435 后那个判断失效, - # 会把眼在手外的跟踪悄悄接上腕部 T。 - handeye = LaunchConfiguration("handeye_file").perform(context).strip() - site_he = str(servo_over.get("handeye_file") or "") - if not handeye: - handeye = site_he - if not Path(handeye).is_file(): - raise FileNotFoundError( - f"手眼标定结果缺失:{handeye}。" - "请重新运行:bash ~/ros2/scripts/run_handeye.sh calibrate" - ) - - enable = LaunchConfiguration("enable_control").perform(context).lower() in ( - "1", "true", "yes", - ) - ee_frame = LaunchConfiguration("ee_frame").perform(context).strip() - cam_frame = LaunchConfiguration("camera_frame").perform(context).strip() - yolo = site.get("yolo") or {} - # "没指定"用**空串**表示,不再拿一个具体坐标系名当哨兵: - # 之前写的是 `ee_frame == "Rizon4-063989_flange"`,换个站点以后 - # 这个判断永远不成立,于是 site.yaml 里的 ee_frame 再也不会被用上 - # (症状是静态 TF 挂到了错的坐标系上,而点还是能查到)。 - if not ee_frame: - ee_frame = str(robot.get("ee_frame") or ee_frame) - # 同 ee_frame:用空串表示"没指定",不拿具体坐标系名当哨兵。 - if not cam_frame: - cam_frame = str( - perc_over.get("camera_frame") - or yolo.get("camera_frame") - or cam_frame - ) - - detect_yaml = str(share / "config" / "perception.yaml") - servo_yaml = str(share / "config" / "servo.yaml") - - tx, ty, tz, qx, qy, qz, qw = _handeye_xyz_xyzw(handeye) - - # 跟踪相机的手眼父子:腕部=法兰←相机,顶视=基座←相机。不许写死法兰。 - from arm_application.site_io import handeye_static_tf_frames # noqa: PLC0415 - - he_mode = str(servo_over.get("handeye_mode") or "eye_in_hand") - base_frame = str(robot.get("base_frame") or "") - tf_parent, tf_child = handeye_static_tf_frames( - mode=he_mode, - ee_frame=ee_frame, - base_frame=base_frame, - cam_frame=cam_frame, - ) - - static_tf = Node( - package="tf2_ros", - executable="static_transform_publisher", - name="handeye_static_tf", - arguments=[ - "--x", str(tx), "--y", str(ty), "--z", str(tz), - "--qx", str(qx), "--qy", str(qy), "--qz", str(qz), "--qw", str(qw), - "--frame-id", tf_parent, - "--child-frame-id", tf_child, - ], - output="screen", - ) - - perc_params = dict(perc_over) - perc_params["camera_frame"] = cam_frame - - servo_params = dict(servo_over) - servo_params.update( - { - "enable_control": enable, - "ee_frame": ee_frame, - "camera_frame": cam_frame, - "handeye_child_frame": cam_frame, - "handeye_file": handeye, - } - ) - ee_z_arg = LaunchConfiguration("ee_z_m").perform(context).strip() - if ee_z_arg: - try: - z = float(ee_z_arg) - if z > 0.05: - servo_params["ee_z_m"] = z - except ValueError: - pass - lock_hold_arg = LaunchConfiguration("lock_hold_sec").perform(context).strip() - if lock_hold_arg: - try: - servo_params["lock_hold_sec"] = float(lock_hold_arg) - except ValueError: - pass - d435_only = _as_bool(LaunchConfiguration("d435_move_only").perform(context)) - perc_params["d435_move_only"] = d435_only - servo_params["d435_move_only"] = d435_only - - # ------------------------------------------------------------------ - # 感知来源:谁来产生"视觉测量"(site.yaml 的 perception.source) - # - # yolo 本体 perception_node(要 torch/ultralytics) - # truth 仿真真值节点(按场景已知位姿直接算目标点,不跑推理) - # external 外部节点按同一话题提供,本 launch 不起感知进程 - # - # 为什么要有这个开关:仿真环境(ros_gz_sim conda)没有 torch/ultralytics - # 且离线装不上,perception_node 一启动就死;而仿真里工件位姿本来就是 - # 已知的。切到 truth 后,流程能在仿真里验"控制与接口"那一半。 - # 值写错**直接报错**,不要默默当 yolo —— 那会退回到"一阶段永远不锁定"。 - # ------------------------------------------------------------------ - # 允许值与校验只有一处实现(gauge_boot.perception_source_of),S00 自检用的 - # 也是它 —— 两边各写一份的话,会出现"起了真值节点、S00 却去查 ultralytics"。 - from arm_application.gauge_boot import perception_source_of - - perc_src = perception_source_of(site.get("perception")) - # 仿真时间必须**一路传下去**:这个 launch 由装配流程(pipeline_node)在 - # S04 里以子进程拉起,父节点在仿真里带 use_sim_time=true,这里若漏传, - # perception/servo 会跑在系统时间上 —— TF 全是仿真时刻的戳,于是 - # "看得见图、算得出点,就是查不到变换",表现为一阶段永远不收敛。 - use_sim = LaunchConfiguration("use_sim_time").perform(context).lower() in ( - "1", "true", "yes", - ) - - perception = None - if perc_src == "yolo": - perception = Node( - package="arm_application", - executable="perception_node", - name="perception_node", - output="screen", - parameters=[detect_yaml, perc_params, {"use_sim_time": use_sim}], - ) - elif perc_src == "truth": - truth_cfg = (site.get("perception") or {}).get("truth") or {} - perception = Node( - package="arm_sim_gazebo", - executable="sim_truth_perception", - name="sim_truth_perception", - output="screen", - parameters=[ - { - "camera_frame": cam_frame, - "target_object": str(truth_cfg.get("object") or ""), - "offset_m": [float(v) for v in (truth_cfg.get("offset_m") or [0.0, 0.0, 0.0])], - "use_sim_time": use_sim, - } - ], - ) - - servo = Node( - package="arm_application", - executable="servo_node", - name="servo_node", - output="screen", - parameters=[servo_yaml, servo_params, {"use_sim_time": use_sim}], - ) - - weights = perc_params.get("weights", "") - nodes = [ - LogInfo(msg=f"[site] {site_path}"), - LogInfo( - msg=f"[arm] {robot.get('label') or robot.get('sn')} " - f"handeye={handeye} mode={he_mode} track_cam={cam_frame}" - ), - LogInfo(msg=f"[site] 感知来源 perception.source = {perc_src}"), - ] - if d435_only: - nodes.append( - LogInfo(msg="[d435_only] 只测 D435 单次位移:不交 D405、不进二阶段") - ) - if perc_src == "yolo": - nodes.append(LogInfo(msg=f"[site] YOLO weights: {weights}")) - nodes.append( - LogInfo( - msg="节点:perception_node(YOLO)| servo_node(100Hz)—— " - "各自独立进程,话题 /visual_servo/filtered_point" - ) - ) - elif perc_src == "truth": - nodes.append( - LogInfo( - msg="节点:sim_truth_perception(仿真真值,不跑推理)| servo_node(100Hz)\n" - " 真值只验**控制与接口**:像素噪声/遮挡/算法错判它都没有。" - "能不能在真机上看到孔,要看真机那一次(见 devices/sim/gazebo/README.md)" - ) - ) - else: - nodes.append( - LogInfo( - msg="节点:servo_node(100Hz)。感知由**外部**节点按 " - "visual_servo/filtered_point 提供(本 launch 不起感知进程)" - ) - ) - pub_tf = LaunchConfiguration("publish_handeye_tf").perform(context).lower() in ( - "1", "true", "yes", - ) - if pub_tf: - nodes.append( - LogInfo( - msg=f"静态手眼 {tf_parent} → {tf_child} t=[{tx:.3f},{ty:.3f},{tz:.3f}] " - f"({he_mode})" - ) - ) - nodes.append(static_tf) - if perception is not None: - nodes.append(perception) - nodes.append(servo) - # 感知进程一死就整段退出(truth 后端同样适用 —— 它可能因为配置/场景读 - # 不出来而退出,那时 servo 还活着,调用方只能等满 stage1_timeout_sec)。 - # 为什么必须显式写:yolo 后端是最需要 GPU/torch 的那个(缺 ultralytics/torch - # 时**启动即死**,而 servo_node 还活着继续跑)。没有这个 handler,launch 不会 - # 结束,调用方(装配流程的 S04)只能等满 stage1_timeout_sec 才报"没锁定"—— - # 现场看到的是"算法不收敛",真正原因是感知进程早就不在了。 - if perception is not None: - nodes.append( - RegisterEventHandler( - OnProcessExit( - target_action=perception, - on_exit=[ - LogInfo( - msg=f"[visual_servo] ✘ 感知进程({perc_src})退出了 —— 停止本段(" - "看它退出前最后几行:yolo 多为缺推理依赖," - "truth 多为场景/参数读不出来)" - ), - EmitEvent(event=Shutdown(reason="perception exited")), - ], - ) - ) - ) - return nodes - - -def generate_launch_description() -> LaunchDescription: - return LaunchDescription( - [ - # 默认值从环境取(scripts/env.sh → load_site_config.sh 导出的 - # SITE_HANDEYE_FILE / SITE_EE_FRAME 已经是**当前臂**的值)。 - # 不写死某个臂的文件名/坐标系:写死的话换臂后这里就悄悄指向上一台。 - DeclareLaunchArgument( - "handeye_file", - default_value=os.environ.get("SITE_HANDEYE_FILE", ""), - ), - DeclareLaunchArgument( - "ee_frame", - default_value=os.environ.get("SITE_EE_FRAME", ""), - ), - DeclareLaunchArgument( - "camera_frame", - default_value=os.environ.get("SITE_CAMERA_FRAME", ""), - ), - DeclareLaunchArgument( - "enable_control", - default_value="false", - ), - DeclareLaunchArgument( - "publish_handeye_tf", - default_value="true", - ), - # 仿真时间开关。**仿真里必须传 true**:/clock 由 Gazebo 发, - # 节点若跑在系统时间上,TF/图像时间戳全对不上(症状是"看得见图、 - # 就是查不到变换,一阶段永远不锁定")。 - # 装配流程在仿真里跑时由 pipeline_node 自动传 true(见 - # pipeline_node._run_stage1),手工跑时自己加上。 - DeclareLaunchArgument( - "use_sim_time", - default_value="false", - ), - DeclareLaunchArgument( - "ee_z_m", - default_value="", - ), - DeclareLaunchArgument( - "lock_hold_sec", - default_value="", - ), - DeclareLaunchArgument( - "d435_move_only", - default_value="false", - ), - OpaqueFunction(function=_launch_setup), - ] - ) diff --git a/install/arm_application/share/arm_application/launch/visual_servo.launch.py b/install/arm_application/share/arm_application/launch/visual_servo.launch.py new file mode 120000 index 0000000..49f9dbb --- /dev/null +++ b/install/arm_application/share/arm_application/launch/visual_servo.launch.py @@ -0,0 +1 @@ +/home/cc/ros2/build/arm_application/launch/visual_servo.launch.py \ No newline at end of file diff --git a/install/arm_application/share/arm_application/package.dsv b/install/arm_application/share/arm_application/package.dsv index c9e0574..bce7487 100644 --- a/install/arm_application/share/arm_application/package.dsv +++ b/install/arm_application/share/arm_application/package.dsv @@ -4,3 +4,6 @@ source;share/arm_application/hook/pythonpath.sh source;share/arm_application/hook/ament_prefix_path.ps1 source;share/arm_application/hook/ament_prefix_path.dsv source;share/arm_application/hook/ament_prefix_path.sh +source;../../build/arm_application/share/arm_application/hook/pythonpath_develop.ps1 +source;../../build/arm_application/share/arm_application/hook/pythonpath_develop.dsv +source;../../build/arm_application/share/arm_application/hook/pythonpath_develop.sh diff --git a/install/arm_application/share/arm_application/package.ps1 b/install/arm_application/share/arm_application/package.ps1 index 44f3ad6..c4a4018 100644 --- a/install/arm_application/share/arm_application/package.ps1 +++ b/install/arm_application/share/arm_application/package.ps1 @@ -112,5 +112,6 @@ $env:COLCON_CURRENT_PREFIX=(Get-Item $PSCommandPath).Directory.Parent.Parent.Ful colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX/share/arm_application/hook/pythonpath.ps1" colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX/share/arm_application/hook/ament_prefix_path.ps1" +colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX/../../build/arm_application/share/arm_application/hook/pythonpath_develop.ps1" Remove-Item Env:\COLCON_CURRENT_PREFIX diff --git a/install/arm_application/share/arm_application/package.sh b/install/arm_application/share/arm_application/package.sh index af58cda..cc1068e 100644 --- a/install/arm_application/share/arm_application/package.sh +++ b/install/arm_application/share/arm_application/package.sh @@ -80,6 +80,7 @@ _colcon_package_sh_source_script() { # source sh hooks _colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/arm_application/hook/pythonpath.sh" _colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/arm_application/hook/ament_prefix_path.sh" +_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/../../build/arm_application/share/arm_application/hook/pythonpath_develop.sh" unset _colcon_package_sh_source_script unset COLCON_CURRENT_PREFIX diff --git a/install/arm_application/share/arm_application/package.xml b/install/arm_application/share/arm_application/package.xml deleted file mode 100644 index a0fb83a..0000000 --- a/install/arm_application/share/arm_application/package.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - arm_application - 0.1.0 - Field nodes: D405, visual servo, hand-eye, DH grippers, hole detect. - arm_dev - Apache-2.0 - - ament_python - - rclpy - arm_msgs - geometry_msgs - sensor_msgs - std_msgs - std_srvs - trajectory_msgs - control_msgs - tf2_ros - python3-yaml - python3-serial - - arm_kinematics - - - ament_python - - diff --git a/install/arm_application/share/arm_application/package.xml b/install/arm_application/share/arm_application/package.xml new file mode 120000 index 0000000..a941e7b --- /dev/null +++ b/install/arm_application/share/arm_application/package.xml @@ -0,0 +1 @@ +/home/cc/ros2/build/arm_application/package.xml \ No newline at end of file diff --git a/install/arm_application/share/arm_application/trajectories/xunhuan.traj b/install/arm_application/share/arm_application/trajectories/xunhuan.traj deleted file mode 100755 index 0657865..0000000 --- a/install/arm_application/share/arm_application/trajectories/xunhuan.traj +++ /dev/null @@ -1,247 +0,0 @@ -traj_coord_type: "" -traj_coord_ref: "" -pattern_params { - pattern_name: "WPT0" - pattern_type: "Scatter" - scatterpoint_pattern { - pose_params { - x: "0.26072" - y: "-0.14604" - z: "0.85707" - rx: "6.58" - ry: "165.63" - rz: "-6.63" - coord_type: "WORLD" - coord_ref: "WORLD_ORIGIN" - use_quaternion: false - preferJntPos { - joint1: "-6.97" - joint2: "29.95" - joint3: "1.72" - joint4: "92.29" - joint5: "-6.48" - joint6: "-12.54" - joint7: "-0.37" - } - externalAxes { - axis1: "0" - axis2: "0" - axis3: "0" - axis4: "0" - axis5: "0" - axis6: "0" - } - } - force_params { - fx: "0" - fy: "0" - fz: "0" - mx: "0" - my: "0" - mz: "0" - } - path_profile: "line" - blend_zone: "Z10" - velocity: "0.2" - acceleration: "1" - vel_var_name: "" - wrench_var_name: "" - } -} -pattern_params { - pattern_name: "WPT1" - pattern_type: "Scatter" - scatterpoint_pattern { - pose_params { - x: "0.50244" - y: "-0.05458" - z: "0.62368" - rx: "3.30681" - ry: "173.28739" - rz: "12.76833" - coord_type: "WORLD" - coord_ref: "WORLD_ORIGIN" - use_quaternion: false - preferJntPos { - joint1: "-0.39471" - joint2: "2.89069" - joint3: "7.36936" - joint4: "104.4854" - joint5: "-2.56594" - joint6: "19.41153" - joint7: "-5.21738" - } - externalAxes { - axis1: "0" - axis2: "0" - axis3: "0" - axis4: "0" - axis5: "0" - axis6: "0" - } - } - force_params { - fx: "0" - fy: "0" - fz: "0" - mx: "0" - my: "0" - mz: "0" - } - path_profile: "line" - blend_zone: "Z10" - velocity: "0.2" - acceleration: "1" - vel_var_name: "" - wrench_var_name: "" - } -} -pattern_params { - pattern_name: "WPT2" - pattern_type: "Scatter" - scatterpoint_pattern { - pose_params { - x: "0.38216" - y: "-0.07015" - z: "0.2772" - rx: "-0.76189" - ry: "178.83063" - rz: "13.77851" - coord_type: "WORLD" - coord_ref: "WORLD_ORIGIN" - use_quaternion: false - preferJntPos { - joint1: "-0.51679" - joint2: "-17.82083" - joint3: "6.09068" - joint4: "145.99388" - joint5: "-3.83264" - joint6: "75.52854" - joint7: "-5.23384" - } - externalAxes { - axis1: "0" - axis2: "0" - axis3: "0" - axis4: "0" - axis5: "0" - axis6: "0" - } - } - force_params { - fx: "0" - fy: "0" - fz: "0" - mx: "0" - my: "0" - mz: "0" - } - path_profile: "line" - blend_zone: "Z10" - velocity: "0.2" - acceleration: "1" - vel_var_name: "" - wrench_var_name: "" - } -} -pattern_params { - pattern_name: "WPT3" - pattern_type: "Scatter" - scatterpoint_pattern { - pose_params { - x: "0.42395" - y: "-0.04059" - z: "0.135" - rx: "-4.09647" - ry: "175.59924" - rz: "22.59976" - coord_type: "WORLD" - coord_ref: "WORLD_ORIGIN" - use_quaternion: false - preferJntPos { - joint1: "0.80285" - joint2: "-48.57114" - joint3: "4.29418" - joint4: "137.232" - joint5: "-14.43138" - joint6: "99.59405" - joint7: "-5.25622" - } - externalAxes { - axis1: "0" - axis2: "0" - axis3: "0" - axis4: "0" - axis5: "0" - axis6: "0" - } - } - force_params { - fx: "0" - fy: "0" - fz: "0" - mx: "0" - my: "0" - mz: "0" - } - path_profile: "line" - blend_zone: "Z10" - velocity: "0.2" - acceleration: "1" - vel_var_name: "" - wrench_var_name: "" - } -} -pattern_params { - pattern_name: "WPT4" - pattern_type: "Scatter" - scatterpoint_pattern { - pose_params { - x: "0.2971" - y: "0.06042" - z: "0.76959" - rx: "4.64468" - ry: "173.46657" - rz: "27.06819" - coord_type: "WORLD" - coord_ref: "WORLD_ORIGIN" - use_quaternion: false - preferJntPos { - joint1: "5.13584" - joint2: "28.76765" - joint3: "17.15688" - joint4: "100.21538" - joint5: "4.05433" - joint6: "-9.64651" - joint7: "-5.26232" - } - externalAxes { - axis1: "0" - axis2: "0" - axis3: "0" - axis4: "0" - axis5: "0" - axis6: "0" - } - } - force_params { - fx: "0" - fy: "0" - fz: "0" - mx: "0" - my: "0" - mz: "0" - } - path_profile: "line" - blend_zone: "Z10" - velocity: "0.2" - acceleration: "1" - vel_var_name: "" - wrench_var_name: "" - } -} -group_params { - group_name: "RecordGroup" - pattern_start_idx: 0 - pattern_end_idx: 4 -} diff --git a/install/arm_application/share/arm_application/trajectories/xunhuan.traj b/install/arm_application/share/arm_application/trajectories/xunhuan.traj new file mode 120000 index 0000000..02d7911 --- /dev/null +++ b/install/arm_application/share/arm_application/trajectories/xunhuan.traj @@ -0,0 +1 @@ +/home/cc/ros2/build/arm_application/trajectories/xunhuan.traj \ No newline at end of file diff --git a/src/arm_application/arm_application/pipeline_node.py b/src/arm_application/arm_application/pipeline_node.py index a515033..79d21ab 100644 --- a/src/arm_application/arm_application/pipeline_node.py +++ b/src/arm_application/arm_application/pipeline_node.py @@ -511,7 +511,6 @@ class AssemblyPipeline(Stage3Search): ga = load_site_dict().get("gauge_assembly") or {} try: margin = float(ga["extreme_margin_deg"]) - speed = float(ga["extreme_speed_deg_s"]) ccw = int(ga["extreme_direction"]) lift_mm = float(ga["unwind_lift_mm"]) open_permille = int(ga["unwind_open_permille"]) @@ -536,16 +535,17 @@ class AssemblyPipeline(Stage3Search): ) return False # extreme_direction 是逆时针的符号。第一步出孔,第二步顺时针进孔。 + # 四段 A7 都走接口上限。样条峰速由 a7_move_duration_s 压在 0.90 rad/s。 first = ( (ccw, "A7 逆时针至极限(出孔)"), (-ccw, "A7 顺时针至极限(进孔)"), ) for direction, tag in first: - if not self._a7_to_limit(limits, direction, margin, speed, tag): + if not self._a7_to_limit(limits, direction, margin, A7_MAX_SPEED_DEG_S, tag): return False self._state("首轮咬合结束") self.get_logger().info("首轮咬合结束:A7 已顺时针转到限位。") - # 第三步:只张开到 unwind_open_permille,微抬 Z,最快逆时针空回,再降回同一段 Z,合爪,慢速顺时针进。 + # 第三步:只张开到 unwind_open_permille,微抬 Z,最快逆时针空回,再降回同一段 Z,合爪,最快顺时针进。 if not self._gripper_cli("pos", str(open_permille)): return False dz_up = self._shift_flange_z(lift_mm / 1000.0, "空回前微抬") @@ -574,7 +574,7 @@ class AssemblyPipeline(Stage3Search): if not self._gripper_cli("close"): return False if not self._a7_to_limit( - limits, -ccw, margin, speed, "A7 顺时针至极限(夹紧再进)" + limits, -ccw, margin, A7_MAX_SPEED_DEG_S, "A7 顺时针至极限(夹紧再进)" ): return False self.get_logger().info( @@ -809,9 +809,9 @@ class AssemblyPipeline(Stage3Search): self._pin(q) self.get_logger().info( "插孔已停在贴面高度,不进搜孔、不抬回悬高。" - "接着只转 A7:先逆时针到限位,再顺时针到限位(首轮咬合)。" + "接着只转 A7:先逆时针到限位,再顺时针到限位(首轮咬合),都用接口最快。" "然后平行爪只张开到指定开度、微抬 Z、最快逆时针回限位、" - "按记住的上抬量降回、合爪、再顺时针到限位。" + "按记住的上抬量降回、合爪、再最快顺时针到限位。" ) if not self._run_a7_seat(): self.get_logger().error( diff --git a/src/arm_application/test/test_pipeline_stage1_diag.py b/src/arm_application/test/test_pipeline_stage1_diag.py index ed09176..fb43ded 100644 --- a/src/arm_application/test/test_pipeline_stage1_diag.py +++ b/src/arm_application/test/test_pipeline_stage1_diag.py @@ -86,7 +86,6 @@ def test_insert_hold_does_not_return_to_hover(): "首轮咬合结束", '_gripper_cli("pos", str(open_permille))', "空回前微抬", - "A7_MAX_SPEED_DEG_S", "松爪回转", "空回后降回", '_gripper_cli("close")', @@ -95,6 +94,8 @@ def test_insert_hold_does_not_return_to_hover(): pos = [seat.find(m) for m in marks] assert all(i >= 0 for i in pos) assert pos == sorted(pos) + assert seat.count("A7_MAX_SPEED_DEG_S") == 3 + assert "extreme_speed_deg_s" not in seat grip = pipe[pipe.find("def _gripper_cli") : pipe.find("def _wait_gripper")] assert "run_gripper.sh" in grip assert '"--cli"' in grip