Ask Your Question
0

How to use variable's value (subscriber function) in another function

asked 2014-06-30 07:21:38 -0500

jashanvir gravatar image

updated 2014-07-01 09:27:06 -0500

Hello all !

I want to pass the variable which is set to its value when called the callback function. and then want to use the value of the variable in another function.

def where1(msg):
    global x1
    x1 = msg.data

def where2(gsm):
    global y1
    y1 = gsm.data
def ground():
    global x1
    global y1
    rospy.init_node("ground")
    rospy.Subscriber("/box_positiona", Float64, where1)
    rospy.Subscriber("/box_positionb", Float64, where2)

    print x1
    print y1
    rospy.spin() # this will block untill you hit Ctrl+C

if __name__ == '__main__':
    try:
            ground()
    except rospy.ROSInterruptException:
            rospy.loginfo("Ground  motion node is shut down.")

But i got the following error print x1 NameError: global name 'x1' is not defined

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted
1

answered 2014-06-30 08:00:42 -0500

dornhege gravatar image

You are printing values, i.e. x1, y1 before they have been assigned. The subscribers won't do anything until spin is called and messages are received.

edit flag offensive delete link more

Comments

But when i check by rostopic echo /box_positiona then it prints the data ?

jashanvir gravatar imagejashanvir ( 2014-06-30 08:45:19 -0500 )edit

how to get the values from the callback function and use them ? Can you give me the reference or a simple demo code which i can use. ! @dornhege

jashanvir gravatar imagejashanvir ( 2014-07-01 06:02:11 -0500 )edit

Try putting your spin() above the print statements.

McMurdo gravatar imageMcMurdo ( 2014-07-01 09:56:27 -0500 )edit

@McMurdo no, it doesnt help... it prints the value when i terminate the program using ctrl+c

jashanvir gravatar imagejashanvir ( 2014-07-01 10:03:16 -0500 )edit

@McMurdo no it shows the same error, but this time when i terminate the program.

jashanvir gravatar imagejashanvir ( 2014-07-01 10:07:26 -0500 )edit

Check your own comment. The spin will retrieve the messages and BLOCK. You should handle message data in the callbacks.

dornhege gravatar imagedornhege ( 2014-07-02 06:09:10 -0500 )edit

Yeah ! I know.. But I solved the problem by putting all these in one class.

jashanvir gravatar imagejashanvir ( 2014-07-03 05:55:29 -0500 )edit

@jashanvir Hi, can you explain me how do you solved that? I have the same error, other thing, how do you do for use Float64? I am new, and a few noob, in ROS.

DannyMB gravatar imageDannyMB ( 2016-10-13 18:00:18 -0500 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2014-06-30 07:21:38 -0500

Seen: 2,454 times

Last updated: Jul 01 '14