想要在一个.py里调用另一个.py但是有错? 10C

主程序如下,num想给图片编号,但是调用有问题

# -*- coding: UTF-8 -*- 
#!/usr/bin/env python


#前进1m,画边长( 0.6 )m的五边形
import rospy
from geometry_msgs.msg import Twist
from math import radians

import trying



class ROUTE():
    count = 0
    num = 0
    def __init__(self):
        # 初始化节点
        rospy.init_node('route', anonymous=True)


        # ctrl + c退出    
        rospy.on_shutdown(self.shutdown)

        self.cmd_vel = rospy.Publisher('cmd_vel_mux/input/navi', Twist, queue_size=10)

    # 5 HZ更新频率
        r = rospy.Rate(5);

    # 两个不同的Twist,转,直走

        # 0.5 m/s 前进
        move_cmd = Twist()
        move_cmd.linear.x = 0.2


        #旋转18 deg/s
        turn_cmd = Twist()
        turn_cmd.linear.x = 0
        turn_cmd.angular.z = radians(18);


        # 前进1M
        rospy.loginfo("我在找位置ing")
        for x in range(0,25):
            self.cmd_vel.publish(move_cmd)
            r.sleep()
        while not rospy.is_shutdown():
            #来拍照啊
            rospy.loginfo("123,茄子!")
            for x in range(0,15):
                trying.TakePhoto( num )
                num = num + 1
                r.sleep()

        #转54度
            rospy.loginfo("好丑~我换个角度哈~")
            for x in range(0,15):
                self.cmd_vel.publish(turn_cmd)
                r.sleep()            
            # 前进0.5M
            rospy.loginfo("我在找下一个位置ing")
            for x in range(0,15):
                self.cmd_vel.publish(move_cmd)
                r.sleep()
            # 转234度
            rospy.loginfo("就在这里拍啦!")
            for x in range(0,65):
                self.cmd_vel.publish(turn_cmd)
                r.sleep()            

            count = count + 1
            if(count == 5): 
                count = 0
            if(count == 0): 
                rospy.loginfo("是不是该结束了?好累哦~~")
            if( num > 7):
                rospy.loginfo("都要没电啦……停下来吧……机器人也很累呀!")

    def shutdown(self):
        # 停啦
        rospy.loginfo("停啦,么么哒,记得充电~~")
        self.cmd_vel.publish(Twist())
        rospy.sleep(1)

if __name__ == '__main__':
    try:
        ROUTE()

    except:
        rospy.loginfo("Bye~~")

    rospy.sleep(1)


调用的trying.py如下:

# -*- coding: UTF-8 -*- 
#!/usr/bin/env python


from __future__ import print_function
import sys
import rospy
import cv2
from std_msgs.msg import String
from sensor_msgs.msg import Image
from cv_bridge import CvBridge, CvBridgeError

class TakePhoto ( num ):
    def __init__(self):

        self.bridge = CvBridge()
        self.image_received = False

        # Connect image topic
        img_topic = "/camera/rgb/image_raw"
        self.image_sub = rospy.Subscriber(img_topic, Image, self.callback)

        # Allow up to one second to connection
        rospy.sleep(1)

    def callback(self, data):

        # Convert image to OpenCV format
        try:
            cv_image = self.bridge.imgmsg_to_cv2(data, "bgr8")
        except CvBridgeError as e:
            print(e)

        self.image_received = True
        self.image = cv_image

    def take_picture(self, img_title):
        if self.image_received:
            # Save an image
            cv2.imwrite(img_title, self.image)
            return True
        else:
            return False



# Initialize
rospy.init_node('take_photo', anonymous=False)
camera = TakePhoto()

# Take a photo

# Use '_image_title' parameter from command line
# Default value is 'photo.jpg'
img_title = rospy.get_param('~image_title', num+'.jpg')

if camera.take_picture(img_title):
    rospy.loginfo("保存啦 " + img_title)
else:
    rospy.loginfo("没有吧……")

    # Sleep to give the last log messages time to be sent
    rospy.sleep(1)

报错:
Traceback (most recent call last):
File "route.py", line 10, in
import trying
File "/home/hazel/helloworld/turtlebot/trying.py", line 13, in
class TakePhoto ( num ):
NameError: name 'num' is not defined

自己感觉没有错……前两次都是缩进的问题,现在专门全部改成了Tab键,就算吧num全部删掉,它也不调用直接退出了,我觉得是函数调用的问题

2个回答

class TakePhoto ( num ) 这是便是TakePhoto类继承num累啊,
你的意识应该是num作为一个初始华参数传入的,应该这么写:
class TakePhoto ( ):
def init(self,num):

但又看了一下你在TakePhoto类里根本没有用到num,不知道你要传一个num干嘛
还有这一行 img_title = rospy.get_param('~image_title', num+'.jpg') 用到了num变量,但这个num变量从哪来?要先搞清楚

lz9797
狼筝 回复qq_39412061: 我加上了,原来是有的,然后num这个地方会报错,‘+’不行,直接在‘’外面也不行,应该怎么做才能让它成一个变量可以改变名称?通过input输入一个sum命名给它?
一年多之前 回复
qq_39412061
吃鸡王者 回复狼筝: trying.py 作为一个被导入模块,建议除了定义一些类和函数以外,尽量不要有太多的操作,trying的后半段代码有用的话尽量移到第一个脚本里,如没用就把他删掉或if__name__=='__main__'标识一下。
一年多之前 回复
lz9797
狼筝 img_title = rospy.get_param('~image_title', num+'.jpg')这一句怎么改能让这个图片命名是(num)。
一年多之前 回复
lz9797
狼筝 那把它去掉,不从前面传,就在trying自己输入num
一年多之前 回复
qq_39412061
吃鸡王者 回复狼筝: 我的意识是说你trying.py里压根就没有对num这个变量定义,直接使用肯定是未定义的。如果你是想在初始化TakePhoto是传入num变量,那么应该在__init__(self,num)传入num
一年多之前 回复
lz9797
狼筝 用num给图片标号,要不然下一张图片会把上一张顶掉,他的名字一样
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问