Skip to content

Commit e6800ef

Browse files
committed
Update graphical robot fkine to also run set_joint_poses, and save the updated angles locally.
Also fixes missing function call parenthesis (was just running equality on function itself, not result)
1 parent a7e957d commit e6800ef

File tree

3 files changed

+16
-14
lines changed

3 files changed

+16
-14
lines changed

roboticstoolbox/backends/VPython/VPython.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -171,11 +171,10 @@ def step(self, dt=None, id=None, q=None, fig_num=0):
171171
# If GraphicalRobot given
172172
if isinstance(id, GraphicalRobot):
173173
if self.canvases[fig_num].is_robot_in(id):
174-
poses = id.fkine(q)
175-
id.set_joint_poses(poses)
176-
if self.canvases[fig_num].current_mode == UImode.TEACHPANEL:
174+
id.fkine_and_set(q)
175+
if self.canvases[fig_num].current_mode() == UImode.TEACHPANEL:
177176
# Reload the joint sliders
178-
self.canvases[fig_num].teach_mode()
177+
self.canvases[fig_num].teach_mode(teach=True)
179178

180179
# If DHRobot is given (or equivalent)
181180
else:
@@ -202,11 +201,11 @@ def step(self, dt=None, id=None, q=None, fig_num=0):
202201
print("No robot found")
203202
return
204203
# Set poses of graphical robot
205-
poses = graphical_dh_robot.fkine(q)
206-
graphical_dh_robot.set_joint_poses(poses)
207-
if self.canvases[fig_num].current_mode == UImode.TEACHPANEL:
204+
graphical_dh_robot.fkine_and_set(q)
205+
206+
if self.canvases[fig_num].current_mode() == UImode.TEACHPANEL:
208207
# Reload the joint sliders
209-
self.canvases[fig_num].teach_mode()
208+
self.canvases[fig_num].teach_mode(teach=True)
210209

211210
if dt is not None:
212211
sleep(dt)

roboticstoolbox/backends/VPython/canvas.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -783,10 +783,7 @@ def __joint_slider(self, s):
783783
angles.append(self.__teachpanel_sliders[idx].value)
784784

785785
# Run fkine
786-
poses = self.__robots[self.__selected_robot].fkine(angles)
787-
788-
# Update joints
789-
self.__robots[self.__selected_robot].set_joint_poses(poses)
786+
self.__robots[self.__selected_robot].fkine_and_set(angles)
790787

791788
for joint in self.__teachpanel[self.__selected_robot]:
792789
if joint[self.__idx_text] is None:

roboticstoolbox/backends/VPython/graphicalrobot.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -786,7 +786,7 @@ def animate(self, frame_poses, fps):
786786
while t_stop - t_start < f:
787787
t_stop = perf_counter()
788788

789-
def fkine(self, joint_angles):
789+
def fkine_and_set(self, joint_angles):
790790
"""
791791
Call fkine for the robot. If it is based on a seriallink object,
792792
run it's fkine function.
@@ -796,7 +796,13 @@ def fkine(self, joint_angles):
796796
"""
797797
# If seriallink object, run it's fkine
798798
if self.robot is not None:
799-
return self.robot.fkine_all(joint_angles)
799+
poses = self.robot.fkine_all(joint_angles)
800+
if joint_angles is None:
801+
joint_angles = self.robot.q
802+
for a_idx in range(len(joint_angles)):
803+
# Ignore the base's angle (idx == 0)
804+
self.angles[a_idx+1] = joint_angles[a_idx]
805+
self.set_joint_poses(poses)
800806
# Else TODO
801807
else:
802808
pass

0 commit comments

Comments
 (0)