Limiting the change of arm to a button press [closed]
Hey,
I am trying to control my robot arm with an xbox controller and my python code is as follows
#!/usr/bin/env python
import sys
import copy
import rospy
import moveit_commander
from moveit_msgs.msg import *
from geometry_msgs.msg import *
from sensor_msgs.msg import *
import time
j1 = 0
a = 0
flag1 = 0
flag2 = 0
def callback(data):
global j1, a, flag1, flag2
robot = moveit_commander.RobotCommander()
group1 = moveit_commander.MoveGroupCommander("igus1")
end_effector_link = group1.get_end_effector_link()
display_trajectory_publisher = rospy.Publisher('/move_group/display_planned_path',
moveit_msgs.msg.DisplayTrajectory,queue_size=1)
print "============ Waiting for RVIZ..."
print "============ Reference frame: %s" % group1.get_planning_frame()
print "============ End effector: %s" % group1.get_end_effector_link()
print "============ Robot Groups: %s" %robot.get_group_names()
print "============ Printing robot state"
print robot.get_current_state()
print "=============="
group1_variable_values = group1.get_current_joint_values()
if ((data.buttons[0]==1) and (data.axes[6]==1)):
if (flag1 == 0):
a += 1
flag1 = 1
j1 = (int(a))*0.1
print j1
if (j1 >= 3.1):
group1_variable_values[0] = 3.1
print "Limit reached joint 1"
else:
print "changing joint 1"
group1_variable_values[0] = j1
plan2 = group1.plan()
execute2= group1.execute(plan2)
print "plan complete"
else:
flag1 = 0
if ((data.buttons[0]==1) and (data.axes[6]==-1)):
if (flag2 == 0):
a -= 1
flag2 = 1
j1 = (int(a))*0.1
print j1
if (j1 <= -3.1):
group1_variable_values[0] == -3.1
print "Limit reached joint 1"
else:
print "changing joint 1"
group1_variable_values[0] = j1
plan2 = group1.plan()
execute2= group1.execute(plan2)
print "plan complete"
else:
flag2 = 0
group1.set_joint_value_target(group1_variable_values)
def move_group_python_interface():
moveit_commander.roscpp_initialize(sys.argv)
rospy.init_node('move_group_python_interface', anonymous=True)
rospy.Subscriber("joy", Joy, callback)
rospy.spin()
if __name__=='__main__':
try:
move_group_python_interface()
except rospy.ROSInterruptException:
pass
First, I launch my RViz launch
file and then I have made a trajectory planner similar to as described in jog_arm
file that launches my python code for controlling the robot. The launch
file is as follows
<launch>
<rosparam command="load" file="$(find igus_description)/config/joint_names_igus_1.yaml" />
<node name="joy_node" pkg="joy" type="joy_node" />
<node name="igus_server" pkg="igus_trajectory_planning" type="igus_server.py" output="screen" />
</launch>
and the joint_names_igus_1.yaml file is
igus_server:
simulation: false # Whether the robot is started in simulation environment
collision_check: true # Check collisions?
command_in_topic: igus_server/joy
command_frame: base_link # TF frame that incoming cmds are given in
incoming_command_timeout: 5 # Stop jogging if X seconds elapse without a new cmd
joint_topic: joint_states
move_group_name: igus1
singularity_threshold: 5.5 # Slow down when the condition number hits this (close to singularity)
hard_stop_singularity_threshold: 12. # Stop when the condition number hits this
command_out_topic: igus_controller/igus_joint_speed
planning_frame: base_link
low_pass_filter_coeff: 1. # Larger --> trust the filtered data more, trust the measurements less.
publish_period: 0.008 # 1/Nominal publish rate [seconds]
scale:
linear: 0.0001 # Max linear velocity. Meters per publish_period. Units is [m/s]
rotational: 0.0001 # Max angular velocity. Rads per publish_period. Units is [rad/s]
# Publish boolean warnings to this topic
warning_topic: igus_server/warning
and the output displayed on the terminal is below and it keeps printing continuously even if I don't press the buttons on xbox, which causes minute changes in the 'position' values in every cycle.
[ INFO] [1527248279.789739931]: Ready to ...