ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question
0

callback(data) not updating

asked 2022-10-28 15:40:39 -0500

akumar3.1428 gravatar image

updated 2022-10-31 04:59:37 -0500

ravijoshi gravatar image

I am using callback(data) to get the data from the subscriber, however after one iteration it's not updating. I tried trying solution of other people but that is not working for me.

#!/usr/bin/env python3
import rospy
from std_msgs.msg import String
from rospy.numpy_msg import numpy_msg
from rospy_tutorials.msg import Floats


import sys
import copy
import rospy
import time
import moveit_commander
import moveit_msgs.msg
import geometry_msgs.msg
from math import pi
from std_msgs.msg import String
from moveit_commander.conversions import pose_to_list
from tf import TransformListener


global my_data


def callback(data):

    my_data = data.data
    my_data = my_data.astype("float64")
    # rospy.loginfo(my_data)

    # moveit_commander.roscpp_initialize(sys.argv)
    rospy.init_node("move_group_python_interface_tutorial", anonymous=True)

    robot = moveit_commander.RobotCommander()
    scene = moveit_commander.PlanningSceneInterface()
    _commander = moveit_commander.move_group.MoveGroupCommander("xarm{}".format(6))
    display_trajectory_publisher = rospy.Publisher(
        "/move_group/display_planned_path",
        moveit_msgs.msg.DisplayTrajectory,
        queue_size=20,
    )

    # We can get the name of the reference frame for this robot:
    planning_frame = _commander.get_planning_frame()
    print("============ Reference frame: %s" % planning_frame)

    # We can also print the name of the end-effector link for this group:
    eef_link = _commander.get_end_effector_link()
    print("============ End effector: %s" % eef_link)

    # We can get a list of all the groups in the robot:
    group_names = robot.get_group_names()
    print("============ Robot Groups:", robot.get_group_names())

    # Sometimes for debugging it is useful to print the entire state of the
    # robot:
    print("============ Printing robot state")
    print(robot.get_current_state())
    print("")

    current_pose = _commander.get_current_pose(end_effector_link="link6").pose

    print(f"The current pose is {current_pose}")

    pose_goal = geometry_msgs.msg.Pose()

    print(f"valuesssss {my_data[0]},{my_data[1]},{my_data[2]}")

    pose_goal.position.x = my_data[0]
    pose_goal.position.y = my_data[1]
    pose_goal.position.z = my_data[2]

    pose_goal.orientation.x = 0.1375399725278269
    pose_goal.orientation.y = 0.13221897080143274
    pose_goal.orientation.z = 0.6228175168854516
    pose_goal.orientation.w = 0.7587484697697222

    print(pose_goal)
    _commander.set_pose_target(pose_goal)
    _commander.set_goal_tolerance(10e-6)

    rospy.loginfo("Planning Trajectory to Pose 1")
    plan1 = _commander.plan()
    rospy.loginfo("Done Planning Trajectory to Pose 1")
    rospy.loginfo("Executing Trajectory to Pose 1")
    success = _commander.go(wait=True)

    current_pose = _commander.get_current_pose(end_effector_link="link6").pose

    print(f"The current pose at the end is {current_pose}")

    rospy.loginfo("Done Executing Trajectory to Pose 1")

    _commander.stop()


def listener():
    rospy.init_node("move_group_python_interface_tutorial", anonymous=True)
    s = rospy.Subscriber("marker_wrt_base_pose", numpy_msg(Floats), callback)
    rospy.spin()


if __name__ == "__main__":
    listener()
edit retag flag offensive close merge delete

Comments

We don’t need rospy.init_node inside the callback. There are many more issues with the above code. I suggest posting the code which runs!

ravijoshi gravatar image ravijoshi  ( 2022-10-28 18:01:16 -0500 )edit

I have changed the dummy code to original one, please guide me to resolve this issue.

akumar3.1428 gravatar image akumar3.1428  ( 2022-10-28 19:09:15 -0500 )edit

There are many issues with the code. Thus, it is better to spend some time understanding the concepts. Nevertheless, please don't instantiate rospy.init_node, moveit_commander, and rospy.Publisher inside the callback.

ravijoshi gravatar image ravijoshi  ( 2022-10-31 04:58:35 -0500 )edit

1 Answer

Sort by » oldest newest most voted
0

answered 2022-11-01 10:49:45 -0500

akumar3.1428 gravatar image

I resolved this issue, 1. Create another function out of the class say name use_data(args) 2. Call use_data in main function and you are good to go.

One of the common problem is use of spin command,they block the main thread from exiting until ROS invokes a shutdown - via a Ctrl + C.

def use_data(args):

    ic = move_xarm()

    rospy.init_node('move_group_python_interface_tutorial',anonymous=True)

    rate = rospy.Rate(5) # ROS Rate at 5Hz

    while not rospy.is_shutdown():
     do stuff using the variable ic.my_data
     rate.sleep()
edit flag offensive delete link more

Question Tools

2 followers

Stats

Asked: 2022-10-28 15:40:39 -0500

Seen: 47 times

Last updated: Nov 01 '22