Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
G
garbage-bot
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Container Registry
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Admin message
Setting up 2FA is now mandatory for all users.
Show more breadcrumbs
Mathieu Reymond
garbage-bot
Commits
1bed8728
Commit
1bed8728
authored
7 years ago
by
Mathieu Reymond
Browse files
Options
Downloads
Patches
Plain Diff
training and running process
parent
f84a5677
No related branches found
No related tags found
No related merge requests found
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
src/baxter_agent.py
+51
-37
51 additions, 37 deletions
src/baxter_agent.py
src/decision_api/decision_tree_gr.py
+1
-1
1 addition, 1 deletion
src/decision_api/decision_tree_gr.py
src/main.py
+3
-2
3 additions, 2 deletions
src/main.py
src/planning/baxter.py
+21
-9
21 additions, 9 deletions
src/planning/baxter.py
with
76 additions
and
49 deletions
src/baxter_agent.py
+
51
−
37
View file @
1bed8728
...
...
@@ -24,61 +24,75 @@ class BaxterAgent(object):
self
.
is_train
=
config
[
'
is_train
'
]
self
.
navs
=
{
'
left
'
:
baxter_interface
.
Navigator
(
'
left
'
),
'
right
'
:
baxter_interface
.
Navigator
(
'
right
'
)}
'
right
'
:
baxter_interface
.
Navigator
(
'
right
'
),
'
torso_left
'
:
baxter_interface
.
Navigator
(
'
torso_left
'
),
'
torso_right
'
:
baxter_interface
.
Navigator
(
'
torso_right
'
)}
if
self
.
is_train
:
self
.
tree
=
DecisionTreeGR
()
self
.
train
()
else
:
self
.
tree
=
self
.
load_decision_tree
()
self
.
run
()
def
_train_sort_left
(
self
,
msg
):
if
msg
:
self
.
baxter
.
sort
(
'
left
'
)
def
extract_features
(
self
,
img
):
return
{
'
shape
'
:
'
SPHERE
'
,
'
color
'
:
'
RED
'
,
'
size
'
:
'
SMALL
'
}
def
_train_sort_right
(
self
,
msg
):
def
_train_sort
(
self
,
arm_name
,
msg
):
arm
=
getattr
(
self
.
baxter
,
arm_name
)
if
msg
:
self
.
baxter
.
sort
(
'
right
'
)
def
_train_cancel
(
self
,
msg
):
arm
.
move
(
arm
.
top
)
rospy
.
sleep
(
2
)
img
=
arm
.
take_snapshot
()
self
.
baxter
.
sort
(
arm_name
)
f
=
self
.
extract_features
(
img
)
f
[
'
direction
'
]
=
arm_name
.
upper
()
self
.
tree
.
add_training_sample
(
f
)
def
_train_end
(
self
,
msg
):
if
msg
:
self
.
is_train
=
False
self
.
tree
.
train
()
self
.
save_decision_tree
()
def
train
(
self
):
self
.
drawTrainingUI
()
self
.
navs
[
'
left
'
].
button0_changed
.
connect
(
self
.
_train_sort_left
)
self
.
navs
[
'
right
'
].
button0_changed
.
connect
(
self
.
_train_sort_right
)
self
.
navs
[
'
left
'
].
button1_changed
.
connect
(
self
.
_train_cancel
)
self
.
navs
[
'
right
'
].
button1_changed
.
connect
(
self
.
_train_cancel
)
train_left
=
lambda
m
:
self
.
_train_sort
(
'
left
'
,
m
)
train_right
=
lambda
m
:
self
.
_train_sort
(
'
right
'
,
m
)
self
.
navs
[
'
left
'
].
button0_changed
.
connect
(
train_left
)
self
.
navs
[
'
right
'
].
button0_changed
.
connect
(
train_right
)
self
.
navs
[
'
left
'
].
button1_changed
.
connect
(
self
.
_train_end
)
self
.
navs
[
'
right
'
].
button1_changed
.
connect
(
self
.
_train_end
)
# blocking call until end button is clicked
while
self
.
is_train
:
######
#TODO# take snapshot and extract features if object was added to the scene. Update scene accordingly, send image to baxte face
######
features
=
{}
pass
print
(
'
done training
'
)
#self.tree.train()
#self.save_decision_tree() #Store trained decision tree
def
_sort
(
self
,
msg
):
if
msg
:
self
.
baxter
.
left
.
move
(
self
.
baxter
.
left
.
top
)
img
=
self
.
baxter
.
left
.
take_snapshot
()
features
=
self
.
extract_features
(
img
)
direction
=
self
.
tree
.
classify
(
features
).
lower
()
if
direction
is
not
'
left
'
:
self
.
baxter
.
left
.
move
(
self
.
baxter
.
left
.
neutral
)
self
.
baxter
.
sort
(
direction
)
def
_run_end
(
self
,
m
):
if
m
:
self
.
is_run
=
False
def
run
(
self
):
self
.
drawProductionUI
()
run
=
True
while
run
:
#TODO# Check if object on table and retrieve features
features
=
{}
#Listen to navigators for both sides
left_nav
=
rospy
.
wait_for_message
(
'
/robot/navigators/left_itb/state
'
,
ITBState
,
3
)
right_nav
=
rospy
.
wait_for_message
(
'
/robot/navigators/right_itb/state
'
,
ITBState
,
3
)
if
left_nav
.
buttons
[
0
]
or
right_nav
.
buttons
[
0
]:
side
=
self
.
tree
.
classify
(
features
)
#Choose sorting side
if
side
==
'
RIGHT
'
:
self
.
sort_right
()
elif
side
==
'
LEFT
'
:
self
.
sort_left
()
elif
left_nav
.
buttons
[
1
]
or
right_nav
.
buttons
[
1
]:
run
=
False
self
.
init_move
()
self
.
is_run
=
True
self
.
navs
[
'
torso_left
'
].
button0_changed
.
connect
(
self
.
_sort
)
self
.
navs
[
'
torso_right
'
].
button0_changed
.
connect
(
self
.
_sort
)
self
.
navs
[
'
torso_left
'
].
button1_changed
.
connect
(
self
.
_run_end
)
self
.
navs
[
'
torso_right
'
].
button1_changed
.
connect
(
self
.
_run_end
)
# blocking call until end button is clicked
while
self
.
is_run
:
pass
print
(
'
done
'
)
def
load_decision_tree
(
self
):
...
...
This diff is collapsed.
Click to expand it.
src/decision_api/decision_tree_gr.py
+
1
−
1
View file @
1bed8728
...
...
@@ -28,7 +28,7 @@ BIG = 2
SHAPE
=
'
shape
'
CUBE_STR
=
'
CUBE
'
SPHERE_STR
=
'
SP
E
HRE
'
SPHERE_STR
=
'
SPH
E
RE
'
TRIANGLE_STR
=
'
TRIANGLE
'
CUBE
=
0
SPHERE
=
1
...
...
This diff is collapsed.
Click to expand it.
src/main.py
+
3
−
2
View file @
1bed8728
...
...
@@ -14,8 +14,9 @@ config = {
def
main
():
moveit_commander
.
roscpp_initialize
(
sys
.
argv
)
rospy
.
init_node
(
'
garbage_bot
'
,
anonymous
=
True
)
BaxterAgent
(
config
)
b
=
BaxterAgent
(
config
)
b
.
train
()
b
.
run
()
if
__name__
==
'
__main__
'
:
...
...
This diff is collapsed.
Click to expand it.
src/planning/baxter.py
+
21
−
9
View file @
1bed8728
...
...
@@ -47,10 +47,22 @@ class Arm(moveit_commander.MoveGroupCommander):
def
ready_camera
(
self
):
arm
=
self
.
get_name
()[:
-
4
]
#remove _arm from name
callback
=
lambda
m
:
self
.
_regular_snapshot
(
m
)
subscriber
=
rospy
.
Subscriber
(
'
cameras/
'
+
arm
+
'
_hand_camera/image
'
,
Image
,
callback
)
baxter_interface
.
CameraController
(
arm
+
'
_hand_camera
'
).
open
()
#callback = lambda m: self._regular_snapshot(m)
#subscriber = rospy.Subscriber('cameras/'+arm+'_hand_camera/image', Image, callback)
msg
=
rospy
.
wait_for_message
(
'
cameras/
'
+
arm
+
'
_hand_camera/image
'
,
Image
)
self
.
_msg_to_jpg
(
msg
,
'
snap
'
)
# no necessary in simulator
#baxter_interface.CameraController(arm+'_hand_camera').open()
def
take_snapshot
(
self
):
arm
=
self
.
get_name
()[:
-
4
]
#remove _arm from name
msg
=
rospy
.
wait_for_message
(
'
cameras/
'
+
arm
+
'
_hand_camera/image
'
,
Image
)
try
:
# Convert your ROS Image message to OpenCV2
cv2_img
=
self
.
bridge
.
imgmsg_to_cv2
(
msg
,
"
bgr8
"
)
except
cvb
.
CvBridgeError
,
e
:
print
(
e
)
return
cv2_img
class
Arms
(
object
):
def
__init__
(
self
,
name
,
*
args
):
...
...
@@ -86,7 +98,10 @@ class Arms(object):
class
Baxter
(
object
):
def
__init__
(
self
):
self
.
left
=
Arm
(
'
left_arm
'
,
neutral
=
[
0.64623441
,
0.84175585
,
0.0570087
,
-
0.3827256
,
0.92221457
,
0.02060252
,
0.05115608
])
self
.
left
=
Arm
(
'
left_arm
'
,
neutral
=
[
0.64623441
,
0.84175585
,
0.0570087
,
-
0.3827256
,
0.92221457
,
0.02060252
,
0.05115608
],
top
=
[
0.74667248
,
0.02808032
,
0.50554368
,
-
0.00295978
,
0.97005472
,
-
0.02409497
,
0.24167026
],
pick
=
[
7.54538492e-01
,
3.44879303e-04
,
-
6.50381151e-02
,
5.63301315e-03
,
9.99927904e-01
,
-
9.66346662e-03
,
-
4.36723168e-03
],
grasp
=
[
0.75390833
,
-
0.00113117
,
-
0.14
,
0.00568284
,
0.99992606
,
-
0.00980662
,
-
0.0044056
])
self
.
right
=
Arm
(
'
right_arm
'
,
neutral
=
[
0.649446
,
-
0.83735957
,
0.06168316
,
0.38299498
,
0.92211736
,
-
0.02071508
,
0.050846
],
top
=
[
0.74667248
,
0.02808032
,
0.50554368
,
-
0.00295978
,
0.97005472
,
-
0.02409497
,
0.24167026
],
...
...
@@ -120,10 +135,7 @@ class Baxter(object):
return
self
.
_commander
.
get_planning_frame
()
def
sort
(
self
,
arm
):
if
arm
is
'
left
'
:
arm
=
self
.
left
else
:
arm
=
self
.
right
arm
=
getattr
(
self
,
arm
)
arm
.
move
(
arm
.
pick
)
arm
.
gripper
.
open
()
rospy
.
sleep
(
3
)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment