gpt4 book ai didi

python - 类型错误 : 'numpy.float64' object is not callable?

转载 作者:太空狗 更新时间:2023-10-30 00:26:07 27 4
gpt4 key购买 nike

我不明白为什么会出现此错误。任何帮助将不胜感激。

此代码用于小型全地形车的基本自主导航。出于某种原因,它被困在航向和方位计算功能中。我试过将其中任何一个放在运行函数中的第一个,它做同样的事情。

我对 python 相当缺乏经验,所以我可能忽略了一些简单的事情。

#!/usr/bin/env python

import rospy
from geometry_msgs.msg import Twist
from geometry_msgs.msg import Vector3Stamped
from geometry_msgs.msg import Vector3
from math import radians
from sensor_msgs.msg import NavSatFix
import time
import numpy

lat = 0.0
lon = 0.0
x = 0.0
y = 0.0
z = 0.0
head = 0.0
bear = 0.0


###########################################################
destLat = 30.210406
# Destination
destLon = -92.022914
############################################################


class sub():

def __init__(self):
rospy.init_node('Test1', anonymous=False)
rospy.Subscriber("/imu_um6/mag", Vector3Stamped, self.call_1)
rospy.Subscriber("/gps/fix", NavSatFix, self.call_2)

def call_1(self, mag):
global x
global y
global z
x = mag.vector.x
y= mag.vector.y
z= mag.vector.z

def call_2(self, gps):
global lat
global lon

lat = gps.latitude
lon = gps.longitude

def head(lat, lon):
global head
# Define heading here
head = numpy.rad2deg(numpy.arctan2(z, y)) + 90
print(head)


def bear(y,z):
global bear
# Define bearing Here
dLon = destLon - lon
vert = numpy.sin(dLon) * numpy.cos(destLat)
horiz = numpy.cos(lat)*numpy.sin(destLat) - numpy.sin(lat)*numpy.cos(destLat)*numpy.cos(dLon)
bear = (numpy.rad2deg(numpy.arctan2(vert, horiz)) + 360) % 360
print(bear)


def nav(head, bear, destLat, destLon):
# Do Navigation Here
pub = rospy.Publisher('/husky_velocity_controller/cmd_vel', Twist, queue_size=10)
move_cmd = Twist()
turn_cmd = Twist()

move_cmd.linear.x = 2
turn_cmd.angular.z = radians(45)

turn_angle = head - bear
# Prettify the angle
if (turn_angle > 180):
turn_angle -= 360
elif (turn_angle < -180):
turn_angle += 360
else:
turn_angle = turn_angle

if (abs(lat-destLat)<.0005 and abs(lon-destLon)<.0005):
pub.publish(Twist())
r.sleep()
else:
if (abs(turn_angle) < 8):
pub.publish(move_cmd)
rospy.spin()
else:
pub.publish(turn_cmd)
r = rospy.Rate(5);
r.sleep()



def shutdown(self):
rospy.loginfo("Stop Husky")
cmd_vel.publish(Twist())
rospy.sleep(1)


def run():
sub()
bear(y,z)
head(lat,lon)
nav(head, bear, destLat, destLon)
print('here')



if __name__ == '__main__':
try:
while not rospy.is_shutdown():
run()
except rospy.ROSInterruptException:
rospy.loginfo("stopped")
pass

这是整个输出:

163.11651134
90.0
here
Traceback (most recent call last):
File "classTest.py", line 117, in <module>
run()
File "classTest.py", line 107, in run
bear(y,z)
TypeError: 'numpy.float64' object is not callable

最佳答案

您不能对一个函数和一个 float 使用相同的变量名(在同一个命名空间中)。你们都定义了一个 bear 函数和一个指向 float 的 bear 变量。您需要更改两个名称之一。

关于python - 类型错误 : 'numpy.float64' object is not callable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37232872/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com