Skip to content

Commit 86755a4

Browse files
committed
update wireless_controller example
1 parent 2991dea commit 86755a4

1 file changed

Lines changed: 114 additions & 38 deletions

File tree

Lines changed: 114 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,131 @@
11
import time
22
import sys
3+
import struct
4+
35
from unitree_sdk2py.core.channel import ChannelSubscriber, ChannelFactoryInitialize
46

5-
from unitree_sdk2py.idl.default import unitree_go_msg_dds__WirelessController_
6-
from unitree_sdk2py.idl.unitree_go.msg.dds_ import WirelessController_
7+
# Uncomment the following two lines when using Go2、Go2-W、B2、B2-W、H1 robot
8+
# from unitree_sdk2py.idl.default import unitree_go_msg_dds__LowState_
9+
# from unitree_sdk2py.idl.unitree_go.msg.dds_ import LowState_
10+
11+
# Uncomment the following two lines when using G1、H1-2 robot
12+
from unitree_sdk2py.idl.default import unitree_hg_msg_dds__LowState_
13+
from unitree_sdk2py.idl.unitree_hg.msg.dds_ import LowState_
714

15+
class unitreeRemoteController:
16+
def __init__(self):
17+
# key
18+
self.Lx = 0
19+
self.Rx = 0
20+
self.Ry = 0
21+
self.Ly = 0
822

9-
key_state = [
10-
["R1", 0],
11-
["L1", 0],
12-
["start", 0],
13-
["select", 0],
14-
["R2", 0],
15-
["L2", 0],
16-
["F1", 0],
17-
["F2", 0],
18-
["A", 0],
19-
["B", 0],
20-
["X", 0],
21-
["Y", 0],
22-
["up", 0],
23-
["right", 0],
24-
["down", 0],
25-
["left", 0],
26-
]
23+
# button
24+
self.L1 = 0
25+
self.L2 = 0
26+
self.R1 = 0
27+
self.R2 = 0
28+
self.A = 0
29+
self.B = 0
30+
self.X = 0
31+
self.Y = 0
32+
self.Up = 0
33+
self.Down = 0
34+
self.Left = 0
35+
self.Right = 0
36+
self.Select = 0
37+
self.F1 = 0
38+
self.F3 = 0
39+
self.Start = 0
40+
41+
def parse_botton(self,data1,data2):
42+
self.R1 = (data1 >> 0) & 1
43+
self.L1 = (data1 >> 1) & 1
44+
self.Start = (data1 >> 2) & 1
45+
self.Select = (data1 >> 3) & 1
46+
self.R2 = (data1 >> 4) & 1
47+
self.L2 = (data1 >> 5) & 1
48+
self.F1 = (data1 >> 6) & 1
49+
self.F3 = (data1 >> 7) & 1
50+
self.A = (data2 >> 0) & 1
51+
self.B = (data2 >> 1) & 1
52+
self.X = (data2 >> 2) & 1
53+
self.Y = (data2 >> 3) & 1
54+
self.Up = (data2 >> 4) & 1
55+
self.Right = (data2 >> 5) & 1
56+
self.Down = (data2 >> 6) & 1
57+
self.Left = (data2 >> 7) & 1
2758

59+
def parse_key(self,data):
60+
lx_offset = 4
61+
self.Lx = struct.unpack('<f', data[lx_offset:lx_offset + 4])[0]
62+
rx_offset = 8
63+
self.Rx = struct.unpack('<f', data[rx_offset:rx_offset + 4])[0]
64+
ry_offset = 12
65+
self.Ry = struct.unpack('<f', data[ry_offset:ry_offset + 4])[0]
66+
L2_offset = 16
67+
L2 = struct.unpack('<f', data[L2_offset:L2_offset + 4])[0] # Placeholder,unused
68+
ly_offset = 20
69+
self.Ly = struct.unpack('<f', data[ly_offset:ly_offset + 4])[0]
2870

29-
def WirelessControllerHandler(msg: WirelessController_):
30-
global key_state
31-
print("lx: ", msg.lx)
32-
print("lx: ", msg.ly)
33-
print("lx: ", msg.rx)
34-
print("lx: ", msg.ry)
35-
print("keys: ", msg.keys)
3671

37-
#Update key state
38-
for i in range(16):
39-
key_state[i][1] = (msg.keys & (1 << i)) >> i
72+
def parse(self,remoteData):
73+
self.parse_key(remoteData)
74+
self.parse_botton(remoteData[2],remoteData[3])
4075

41-
print(key_state)
76+
print("debug unitreeRemoteController: ")
77+
print("Lx:", self.Lx)
78+
print("Rx:", self.Rx)
79+
print("Ry:", self.Ry)
80+
print("Ly:", self.Ly)
4281

82+
print("L1:", self.L1)
83+
print("L2:", self.L2)
84+
print("R1:", self.R1)
85+
print("R2:", self.R2)
86+
print("A:", self.A)
87+
print("B:", self.B)
88+
print("X:", self.X)
89+
print("Y:", self.Y)
90+
print("Up:", self.Up)
91+
print("Down:", self.Down)
92+
print("Left:", self.Left)
93+
print("Right:", self.Right)
94+
print("Select:", self.Select)
95+
print("F1:", self.F1)
96+
print("F3:", self.F3)
97+
print("Start:", self.Start)
98+
print("\n")
99+
100+
101+
class Custom:
102+
def __init__(self):
103+
self.low_state = None
104+
self.remoteController = unitreeRemoteController()
105+
106+
def Init(self):
107+
self.lowstate_subscriber = ChannelSubscriber("rt/lf/lowstate", LowState_)
108+
self.lowstate_subscriber.Init(self.LowStateMessageHandler, 10)
109+
110+
111+
def LowStateMessageHandler(self, msg: LowState_):
112+
self.low_state = msg
113+
wireless_remote_data = self.low_state.wireless_remote
114+
self.remoteController.parse(wireless_remote_data)
43115

44116

45-
if __name__ == "__main__":
117+
if __name__ == '__main__':
118+
119+
print("WARNING: Please ensure there are no obstacles around the robot while running this example.")
120+
input("Press Enter to continue...")
121+
46122
if len(sys.argv)>1:
47123
ChannelFactoryInitialize(0, sys.argv[1])
48124
else:
49125
ChannelFactoryInitialize(0)
50-
51-
sub = ChannelSubscriber("rt/wirelesscontroller", WirelessController_)
52-
sub.Init(WirelessControllerHandler, 10)
53-
54-
while True:
55-
time.sleep(10.0)
126+
127+
custom = Custom()
128+
custom.Init()
129+
130+
while True:
131+
time.sleep(1)

0 commit comments

Comments
 (0)