コード例 #1
0
class BaseController(object):
    """docstring for BaseController."""

    def __init__(self):
        self.__initVars()
        self.__subscribeAll()

    def __initVars(self):
        """Subscribers vars initialisation"""
        self.sensors = Sensors()
        self.trans_listener = tf.TransformListener()
        #self.trans_listener = tf2_ros.Buffer()
        #tf2_ros.TransformListener(self.trans_listener)
        self.sensors.add("trans", None)
        self.old_trans = None
        self.sensors.add("rot", None)
        self.rate_pub_enabled = False
        self.messager = mav_msgs.RateThrust()
        self.collision = False

    def getRatePub(self):
        def callback(data):
            if self.rate_pub_enabled:
                try:
                    self.rate_pub.publish(self.messager)
                except Exception as e:
                    pass
        rospy.Timer(rospy.Duration(0.001), callback)
        return rospy.Publisher(
            "/uav/input/rateThrust", mav_msgs.RateThrust, queue_size=1
        )

    def getCollisionPub(self):
        return rospy.Publisher("/uav/collision", std_msgs.Empty, queue_size=10)

    def updateRatePub(self, ax=0, ay=0, az=0, z=9.81):
        # Tu fait tes bails de securite ici
        self.messager.thrust.z = z
        self.messager.angular_rates.x = ax
        self.messager.angular_rates.y = ay
        self.messager.angular_rates.z = az

    def __subscribeClock(self):
        self.sensors.add("secs", None)
        # self.sensors.add('nsecs', None)
        def callback(data):
            # self.sensors.secs = data.clock.secs
            # self.sensors.nsecs = data.clock.nsecs
            self.sensors.secs = data.clock.secs + data.clock.nsecs * 10e-10

        rospy.Subscriber("/clock", rosgraph_msgs.Clock, callback)

    def __subscribeDlr(self):
        self.sensors.add("dlr", None)
        def callback(data):
            self.sensors.dlr = data.range
        rospy.Subscriber(
            "/uav/sensors/downward_laser_rangefinder", sensor_msgs.Range, callback
        )

    def __subscribeIMU(self):
        self.sensors.add("angular_velocity", None)
        self.sensors.add("linear_acceleration", None)
        def callback(data):
            self.sensors.angular_velocity = data.angular_velocity
            self.sensors.linear_acceleration = data.linear_acceleration
        rospy.Subscriber("/uav/sensors/imu", sensor_msgs.Imu, callback)

    def __subscribeIRMarker(self):
        self.sensors.add("markers", None)
        self.sensors.markers = {}
        for i in range(1, 25):
            name = "Gate" + str(i)
            self.sensors.markers.update({name: {}})
        def callback(data):
            for item in self.sensors.markers.keys():
                self.sensors.markers[item] = {}
            for item in data.markers:
                self.sensors.markers[item.landmarkID.data].update(
                    {item.markerID.data: {"x": item.x, "y": item.y, "z": item.z}}
                )
        rospy.Subscriber(
            "/uav/camera/left/ir_beacons", flightgoggles_msgs.IRMarkerArray, callback
        )

    def __subscribeRateThrust(self):
        self.sensors.add("thrust", None)
        self.sensors.add("angular_rates", None)
        def callback(data):
            self.sensors.thrust = data.thrust
            self.sensors.angular_rates = data.angular_rates
        rospy.Subscriber("/uav/input/rateThrust", mav_msgs.RateThrust, callback)

    def __subscribeCollision(self):
        def callback(data):
            self.collision = True
            self.rate_pub_enabled = False
        rospy.Subscriber("/uav/collision", std_msgs.Empty, callback)

    def __subscribeAll(self):
        self.__subscribeClock()
        self.__subscribeDlr()
        self.__subscribeRateThrust()
        self.__subscribeIMU()
        self.__subscribeIRMarker()
        self.__subscribeCollision()
        self.collision_pub = self.getCollisionPub()
        self.rate_pub = self.getRatePub()