def __init__(self, context): """ Constructor """ super(CarlaControlPlugin, self).__init__(context) self.setObjectName('CARLA Control') self._widget = QWidget() self._node = CompatibleNode('rqt_carla_control_node') package_share_dir = roscomp.get_package_share_directory( 'rqt_carla_control') ui_file = os.path.join(package_share_dir, 'resource', 'CarlaControl.ui') loadUi(ui_file, self._widget) self._widget.setObjectName('CarlaControl') if context.serial_number() > 1: self._widget.setWindowTitle(self._widget.windowTitle() + (' (%d)' % context.serial_number())) self.pause_icon = QIcon( QPixmap(os.path.join(package_share_dir, 'resource', 'pause.png'))) self.play_icon = QIcon( QPixmap(os.path.join(package_share_dir, 'resource', 'play.png'))) self._widget.pushButtonStepOnce.setIcon( QIcon( QPixmap( os.path.join(package_share_dir, 'resource', 'step_once.png')))) self.carla_status = None self.carla_status_subscriber = self._node.new_subscription( CarlaStatus, "/carla/status", self.carla_status_changed, qos_profile=10) self.carla_control_publisher = self._node.new_publisher( CarlaControl, "/carla/control", qos_profile=10) self._widget.pushButtonPlayPause.setDisabled(True) self._widget.pushButtonStepOnce.setDisabled(True) self._widget.pushButtonPlayPause.setIcon(self.play_icon) self._widget.pushButtonPlayPause.clicked.connect( self.toggle_play_pause) self._widget.pushButtonStepOnce.clicked.connect(self.step_once) context.add_widget(self._widget) if roscomp.get_ros_version() == 2: spin_thread = threading.Thread(target=self._node.spin, daemon=True) spin_thread.start()
import numpy from simple_pid import PID # pylint: disable=import-error,wrong-import-order import ros_compatibility as roscomp from ros_compatibility.node import CompatibleNode from carla_ackermann_control import carla_control_physics as phys from ackermann_msgs.msg import AckermannDrive # pylint: disable=import-error,wrong-import-order from std_msgs.msg import Header # pylint: disable=wrong-import-order from carla_msgs.msg import CarlaEgoVehicleStatus # pylint: disable=no-name-in-module,import-error from carla_msgs.msg import CarlaEgoVehicleControl # pylint: disable=no-name-in-module,import-error from carla_msgs.msg import CarlaEgoVehicleInfo # pylint: disable=no-name-in-module,import-error from carla_ackermann_msgs.msg import EgoVehicleControlInfo # pylint: disable=no-name-in-module,import-error ROS_VERSION = roscomp.get_ros_version() if ROS_VERSION == 1: from carla_ackermann_control.cfg import EgoVehicleControlParameterConfig # pylint: disable=no-name-in-module,import-error,ungrouped-imports from dynamic_reconfigure.server import Server # pylint: disable=no-name-in-module,import-error if ROS_VERSION == 2: from rcl_interfaces.msg import SetParametersResult class CarlaAckermannControl(CompatibleNode): """ Convert ackermann_drive messages to carla VehicleCommand with a PID controller """ def __init__(self): """ Constructor