carm 0.0.20250807__py3-none-any.whl → 0.0.20250812__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
carm/carm.py CHANGED
@@ -261,10 +261,10 @@ class Carm:
261
261
 
262
262
  def on_open(self, ws):
263
263
  self.open_ready.set()
264
- print("连接成功")
264
+ print("Connected successfully.")
265
265
 
266
266
  def on_close(self, ws, code, close_msg):
267
- print("连接断开",code, close_msg)
267
+ print("Disconnected, please check your --addr",code, close_msg)
268
268
 
269
269
  def on_message(self, ws, message):
270
270
  msg = json.loads(message)
@@ -289,9 +289,6 @@ class Carm:
289
289
 
290
290
  if __name__ == "__main__":
291
291
  carm = Carm()
292
- print("version:",carm.version)
293
- print("limits:", carm.limit)
294
- print("state:", carm.state)
295
292
 
296
293
  carm.track_joint(carm.joint_pos)
297
294
  print(1)
@@ -0,0 +1,106 @@
1
+ #!python
2
+ import time
3
+ import os
4
+ import argparse
5
+ import svar
6
+ import numpy as np
7
+ import carm
8
+
9
+ messenger = svar.load("svar_messenger").messenger
10
+
11
+ class ArmDriver:
12
+ def __init__(self,args):
13
+ self.args = args
14
+
15
+ self.arm = carm.Carm(args.addr)
16
+ if args.mit:
17
+ self.arm.set_control_mode(3)
18
+ else:
19
+ self.arm.set_control_mode(1)
20
+
21
+ self.pub_joint = messenger.advertise(args.joint_topic, 0)
22
+ self.pub_end = messenger.advertise(args.end_topic, 0)
23
+
24
+ self.sub_joint = messenger.subscribe(args.joint_cmd_topic, 0, lambda msg:self.joint_callback(msg))
25
+ self.sub_end = messenger.subscribe(args.end_cmd_topic, 0, lambda msg:self.end_callback(msg))
26
+
27
+ def end_callback(self, msg):
28
+ position = np.frombuffer(msg["position"],dtype=np.float64).tolist()
29
+ self.arm.track_pose(position)
30
+
31
+ def joint_callback(self, msg):
32
+ position = np.frombuffer(msg["position"],dtype=np.float64).tolist()
33
+ self.arm.track_joint(position)
34
+
35
+ def loop(self):
36
+ while True:
37
+ stamp = time.time()
38
+ sec = int(stamp )
39
+ nanosec = int((stamp - sec) * 1e9)
40
+ header = {"stamp": {"sec": sec, "nanosec": nanosec},"frame_id": "base_link"}
41
+
42
+ end_msg = {"header": header, "position": self.arm.cart_pose + [self.arm.gripper_state["gripper_pos"],]}
43
+ joints_msg = {"header": header, "position": self.arm.joint_pos + [self.arm.gripper_state["gripper_pos"],]}
44
+
45
+ self.pub_joint.publish(joints_msg)
46
+ self.pub_end.publish(end_msg)
47
+
48
+ time.sleep(0.005)
49
+
50
+ def send_cmd(args):
51
+ arm = carm.Carm(args.addr,mit=args.mit)
52
+
53
+ cmd = args.cmd
54
+
55
+ if cmd == "disable":
56
+ arm.set_servo_enable(False)
57
+ if cmd == "remote":
58
+ arm.set_control_mode(3)
59
+
60
+ def driver_main(args):
61
+ print("Starting driver mode...")
62
+
63
+ driver = ArmDriver(args)
64
+
65
+ ros2 = svar.load(args.dds)
66
+ transfer = ros2.Transfer({"node": "carm_driver" + args.device,
67
+ "publishers":[[args.joint_topic, "sensor_msgs/msg/JointState",10],
68
+ [args.end_topic, "sensor_msgs/msg/JointState",10],
69
+ ],
70
+ "subscriptions":[[args.joint_cmd_topic, "sensor_msgs/msg/JointState",10],
71
+ [args.end_cmd_topic, "sensor_msgs/msg/JointState",10]]})
72
+
73
+ driver.loop()
74
+
75
+
76
+
77
+ # 测试代码
78
+ if __name__ == "__main__":
79
+ parser = argparse.ArgumentParser()
80
+ parser.add_argument("--addr", type=str, default="ws://localhost:8090", help="Device address, including ip and port")
81
+ parser.add_argument("--cmd", type=str, default="", help="Send command instead of start driver, support enable,disable,remote")
82
+ parser.add_argument("--device", type=str, default="carm", help="device name, used as topic prefix")
83
+ parser.add_argument("--dds", type=str, default="svar_messenger_ros2", help="the dds plugin, default is ros2, options: svar_zbus, svar_lcm")
84
+ parser.add_argument("--mit", action="store_true", help="Enable mit mode")
85
+ parser.add_argument("--joint_topic", type=str, default="", help="the joints status topic")
86
+ parser.add_argument("--end_topic", type=str, default="", help="the joints status topic")
87
+ parser.add_argument("--joint_cmd_topic", type=str, default="", help="the joints cmd topic")
88
+ parser.add_argument("--end_cmd_topic", type=str, default="", help="the end cmd topic")
89
+
90
+ args = parser.parse_args()
91
+
92
+ if args.joint_topic == "":
93
+ args.joint_topic = "/"+args.device + "/joints"
94
+ if args.end_topic == "":
95
+ args.end_topic = "/"+args.device + "/end"
96
+ if args.joint_cmd_topic == "":
97
+ args.joint_cmd_topic = "/"+args.device + "/joints_cmd"
98
+ if args.end_cmd_topic == "":
99
+ args.end_cmd_topic = "/"+args.device + "/end_cmd"
100
+
101
+ if args.cmd == "":
102
+ driver_main(args)
103
+ else:
104
+ send_cmd(args)
105
+
106
+
@@ -0,0 +1,94 @@
1
+ #!python
2
+ import rclpy
3
+ from rclpy.node import Node
4
+ import time
5
+ import argparse
6
+
7
+ from std_msgs.msg import String, Bool, Int16MultiArray, MultiArrayLayout, MultiArrayDimension, Int8
8
+ from geometry_msgs.msg import Point, Pose, PoseArray
9
+ from sensor_msgs.msg import JointState
10
+ from example_interfaces.srv import AddTwoInts
11
+ import carm
12
+ import threading
13
+ import numpy as np
14
+
15
+ class ArmDriver(Node):
16
+ def __init__(self,args):
17
+ super().__init__('carm_'+args.device)
18
+ self.args = args
19
+
20
+ self.arm = carm.Carm(args.addr)
21
+ if args.mit:
22
+ self.arm.set_control_mode(3)
23
+ else:
24
+ self.arm.set_control_mode(1)
25
+
26
+
27
+ print("version:",self.arm.version)
28
+ print("limits:", self.arm.limit)
29
+ print("state:", self.arm.state)
30
+
31
+ self.pub_joint = self.create_publisher(JointState, args.joint_topic, 10)
32
+ self.pub_end = self.create_publisher(JointState, args.end_topic, 10)
33
+
34
+ self.sub_joint = self.create_subscription(JointState, args.joint_cmd_topic, self.joint_callback, 10)
35
+ self.sub_end = self.create_subscription(JointState, args.end_cmd_topic, self.end_callback, 10)
36
+
37
+ self.worker = threading.Thread(target=self.loop).start()
38
+
39
+ def end_callback(self, msg):
40
+ self.arm.track_pose(list(msg.position))
41
+
42
+ def joint_callback(self, msg):
43
+ self.arm.track_joint(list(msg.position))
44
+
45
+ def loop(self):
46
+ while True:
47
+ joint_msg = JointState() # list of string
48
+ joint_msg.header.stamp = self.get_clock().now().to_msg()
49
+ joint_msg.position = self.arm.joint_pos
50
+ joint_msg.velocity = self.arm.joint_vel
51
+ joint_msg.effort = self.arm.joint_tau
52
+ joint_msg.position.append(self.arm.gripper_state["gripper_pos"])
53
+ self.pub_joint.publish(joint_msg)
54
+
55
+
56
+ end_msg = JointState() # list of string
57
+ end_msg.header.stamp = self.get_clock().now().to_msg()
58
+ end_msg.position = np.array(self.arm.cart_pose).tolist()
59
+ end_msg.position.append(self.arm.gripper_state["gripper_pos"])
60
+ self.pub_end.publish(end_msg)
61
+
62
+ time.sleep(0.005)
63
+
64
+ # 测试代码
65
+ if __name__ == "__main__":
66
+ parser = argparse.ArgumentParser()
67
+ parser.add_argument("--addr", type=str, default="ws://localhost:8090", help="Device address, including ip and port")
68
+ parser.add_argument("--device", type=str, default="carm", help="device name, used as topic prefix")
69
+ parser.add_argument("--dds", type=str, default="svar_messenger_ros2", help="the dds plugin, default is ros2, options: svar_zbus, svar_lcm")
70
+ parser.add_argument("--mit", action="store_true", help="Enable mit mode")
71
+ parser.add_argument("--joint_topic", type=str, default="", help="the joints status topic")
72
+ parser.add_argument("--end_topic", type=str, default="", help="the joints status topic")
73
+ parser.add_argument("--joint_cmd_topic", type=str, default="", help="the joints cmd topic")
74
+ parser.add_argument("--end_cmd_topic", type=str, default="", help="the end cmd topic")
75
+
76
+ args = parser.parse_args()
77
+
78
+ if args.joint_topic == "":
79
+ args.joint_topic = "/"+args.device + "/joints"
80
+ if args.end_topic == "":
81
+ args.end_topic = "/"+args.device + "/end"
82
+ if args.joint_cmd_topic == "":
83
+ args.joint_cmd_topic = "/"+args.device + "/joints_cmd"
84
+ if args.end_cmd_topic == "":
85
+ args.end_cmd_topic = "/"+args.device + "/end_cmd"
86
+
87
+
88
+ rclpy.init(args=None)
89
+ node = ArmDriver(args)
90
+ rclpy.spin(node)
91
+ node.destroy_node()
92
+ rclpy.shutdown()
93
+
94
+
@@ -1,8 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: carm
3
- Version: 0.0.20250807
3
+ Version: 0.0.20250812
4
4
  Summary: Python interface for cvte arm.
5
5
  Author: Yong Zhao
6
6
  Author-email: zhaoyong11933@cvte.com
7
7
  Requires-Dist: websocket-client
8
8
 
9
+ Python interface for cvte arm.
@@ -0,0 +1,10 @@
1
+ carm/__init__.py,sha256=lfNjXYpO8FjQVunCqiaUzjsNUnyuhcyO8Je0ixh1RJY,24
2
+ carm/carm.py,sha256=8EpL0iaWyfRWsKmmh_K2qtxqNUHHkU0uoDZRfctGSfY,10330
3
+ carm/carm_driver.py,sha256=fT6UYpJEr0kcmPQcXvbCaAw27_770iqNs64OrscwUdU,10393
4
+ carm-0.0.20250812.data/scripts/carm,sha256=kWcTgUciXtd3cMA3w__cZMVNe4QURi-xHEx8ob2vWnA,4088
5
+ carm-0.0.20250812.data/scripts/carm_ros2,sha256=MfzWv6-orDIpFJQ4ctmP1NBYg135qpc61gIraL7hPP0,3683
6
+ carm-0.0.20250812.dist-info/METADATA,sha256=ahKVvXQf-2daRSrO_k4za2spQ1yTD_sTlljskAyJxn4,214
7
+ carm-0.0.20250812.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
8
+ carm-0.0.20250812.dist-info/top_level.txt,sha256=nZ1bTssUAnAqc2CMka3erGx_2LsdZrSkqtjNf9Ce_d8,5
9
+ carm-0.0.20250812.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
10
+ carm-0.0.20250812.dist-info/RECORD,,
@@ -1,8 +0,0 @@
1
- carm/__init__.py,sha256=lfNjXYpO8FjQVunCqiaUzjsNUnyuhcyO8Je0ixh1RJY,24
2
- carm/carm.py,sha256=fT6UYpJEr0kcmPQcXvbCaAw27_770iqNs64OrscwUdU,10393
3
- carm/carm_driver.py,sha256=fT6UYpJEr0kcmPQcXvbCaAw27_770iqNs64OrscwUdU,10393
4
- carm-0.0.20250807.dist-info/METADATA,sha256=n2AkGo5RQDXR7wfxwlPfx4tsWEoVG_mWzOi4SiQaOwU,183
5
- carm-0.0.20250807.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
6
- carm-0.0.20250807.dist-info/top_level.txt,sha256=nZ1bTssUAnAqc2CMka3erGx_2LsdZrSkqtjNf9Ce_d8,5
7
- carm-0.0.20250807.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
8
- carm-0.0.20250807.dist-info/RECORD,,