【问题标题】:Robotics kit - Using functions by changing variables机器人套件 - 通过更改变量使用函数
【发布时间】:2013-05-24 13:15:24
【问题描述】:

我希望我解释得足够清楚!

我正在创建一个机器人套件,它将命令从 pi 发送到 arduino。目前我只是用它控制伺服系统,我有测试代码可以工作。但是,作为儿童版,我想让它尽可能简单易用。

目前这是我的代码的模拟:

class robot(object)
    def __init___(self):
        self.servos = [0,0,0,0]

    def set_servo(self,which_servo,what_position):
        #sends serial data
        #changes servo position in servos[]

目前我必须使用函数robot().set_servo() 来设置伺服和robot().servos[0] 来读取位置。

我希望能够做到的是。为了能够设置位置并通过简单的操作来发送串行数据

robot().servo[0] = 10 

这将改变伺服[0] 的值(显然它确实如此),但也会向我的 arduino 发送串行命令。重要的是,这一切都必须包装在 Robot() 对象中,这样最终用户就不必运行任何其他函数来检查伺服列表是否发生了变化。

【问题讨论】:

    标签: python serial-port arduino raspberry-pi


    【解决方案1】:

    如果伺服由property objects 组成,这只是实现合适的设置器的问题。也就是说,您不应该使用整数而是使用合适的属性对象来初始化伺服。即:引入一个类servo像

    class Servo(object):
        def __init__(self, which_servo, angle = 0):
            self._angle = angle;
            self._servo_no = which_servo
    
        def get_angle(self):
            return self._angle
        def set_angle(self, value):
            self._angle = value
            print "replace this print statement with the code to set servo, notice that this method knows the servo number AND the desired value"
    
        def del_angle(self):
            del self._angle
        angle = property(get_angle, set_angle, del_angle, "I'm the 'angle' property.")
    

    然后像这样初始化你的机器人

    class robot(object)
        def __init___(self):
            self.servos = [Servo(0), Servo(1), Servo(2), Servo(3)]
    

    【讨论】:

    • Klien:他已经设置了功能(set_servo)。他希望在分配值时自动调用函数。理想情况下应该按照您提到的方式完成,您不能跳过调用函数。
    猜你喜欢
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多