joy control
parent
d1b8283c4b
commit
c18df27d7a
@ -0,0 +1,89 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import rclpy
|
||||
from rclpy.node import Node
|
||||
from wave_rover_controller.robot_controller.robot_controller import RobotController
|
||||
from geometry_msgs.msg import Twist, Point
|
||||
from builtin_interfaces.msg import Time
|
||||
from std_srvs.srv import Trigger
|
||||
from std_msgs.msg import Bool, String
|
||||
import numpy as np
|
||||
from tf2_ros import Buffer, TransformListener
|
||||
|
||||
|
||||
class WaveRoverController(RobotController):
|
||||
|
||||
def __init__(self, node):
|
||||
|
||||
|
||||
self._node = node
|
||||
|
||||
self._node.declare_parameter('max_linear_speed', 1.0)
|
||||
self._node.declare_parameter('max_angular_speed', 1.5)
|
||||
|
||||
self._node.declare_parameter('fire_ext_max_capacity', 5)
|
||||
|
||||
self._lin_max = self._node.get_parameter('max_linear_speed').value
|
||||
self._ang_max = self._node.get_parameter('max_angular_speed').value
|
||||
|
||||
fire_ext_max_capacity = self._node.get_parameter('fire_ext_max_capacity').value
|
||||
|
||||
super().__init__(fire_ext_max_capacity = fire_ext_max_capacity)
|
||||
|
||||
self._twist_pub = self._node.create_publisher(Twist, 'cmd_vel', 10)
|
||||
|
||||
self.fe_burst_srv = self._node.create_client(Trigger, 'fe_burst')
|
||||
|
||||
self.start_time = self.get_time_seconds() # TODO save it when first cmd is given
|
||||
|
||||
|
||||
def get_time_seconds(self):
|
||||
current_time = self._node.get_clock().now()
|
||||
return current_time.nanoseconds / 1e9
|
||||
|
||||
def get_relative_time(self):
|
||||
return self.get_time_seconds() - self.start_time
|
||||
|
||||
def send_speed_cmd(self, v, w):
|
||||
v, w = super(WaveRoverController, self).send_speed_cmd(v, w)
|
||||
|
||||
twist_msg = Twist()
|
||||
twist_msg.linear.x = v * self._lin_max
|
||||
twist_msg.angular.z = w * self._ang_max
|
||||
|
||||
self._twist_pub.publish(twist_msg)
|
||||
|
||||
def send_fire_ext_burst_cmd(self):
|
||||
result = super(WaveRoverController, self).send_fire_ext_burst_cmd()
|
||||
if not result:
|
||||
self._node.get_logger().error("Fire extinguisher is out of fuel!")
|
||||
return False
|
||||
|
||||
self._node.get_logger().info("Fire extingusher burst is performing")
|
||||
future = self.fe_burst_srv.call_async(Trigger.Request())
|
||||
#future.add_done_callback(self._fe_burst_done_cb)
|
||||
return True
|
||||
|
||||
# def _fe_burst_done_cb(self, future):
|
||||
# result = future.result()
|
||||
# if result.success:
|
||||
# self._register_exted_sof(self.get_relative_time(), {'id': result.message})
|
||||
# self.pub_status()
|
||||
|
||||
def send_fall_reset_cmd(self):
|
||||
pass
|
||||
|
||||
def send_lights_cmd(self):
|
||||
pass
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue