Проблема с аргументом обратного вызова Python - PullRequest
0 голосов
/ 15 декабря 2018

Я новичок в питоне.У меня есть следующий код:

#! /usr/bin/env python

import rospy
from sensor_msgs.msg import LaserScan
from geometry_msgs.msg import Twist

#defines a callback
def callback(msg):
    rospy.init_node('obstacle_avoidance')
    pub = rospy.Publisher('/cmd_vel', Twist, queue_size=10)
    rate = rospy.Rate(1)

    while not rospy.is_shutdown():
        print('==================================')

        print('CHECKING .....')
        print msg.ranges


if __name__ == '__main__':
    try:
        callback()
    except rospy.ROSInterruptException:
        pass

со следующим ответом:

TypeError: callback () принимает ровно 1 аргумент (0 дано)

Я понимаю, что говорит ошибка, но переменная msg не та, которую я определил, поэтому я не уверен, что передать.

1 Ответ

0 голосов
/ 15 декабря 2018

Вы, кажется, комбинируете 2 урока таким образом, что это не работает.Вы вызываете callback(), но не предоставляете аргумент, который приводит к сбою, поскольку callback() ожидает аргумент.

Затем вы используете msg.ranges в своей функции.(что является идеей лазерного сообщения).

Вы, вероятно, должны сделать что-то вроде этого

#! /usr/bin/env python

import rospy
from sensor_msgs.msg import LaserScan
from geometry_msgs.msg import Twist

#defines a callback
def callback(msg):
    while not rospy.is_shutdown():
        print('==================================')
        print('CHECKING .....')
        print msg.ranges


if __name__ == '__main__':
    try:
        rospy.init_node('obstacle_avoidance')
        pub = rospy.Publisher('/cmd_vel', Twist, queue_size=10)
        rospy.Subscriber('/base_scan', LaserScan, callback)
    except rospy.ROSInterruptException:
        pass
...