Untitled
unknown
plain_text
a year ago
3.7 kB
5
Indexable
import rospy import telebot from telebot import types # Импортируем для вызова ROS-сервисов from std_srvs.srv import Trigger from clover.srv import Navigate # Инициализация ROS node rospy.init_node('telegram_drone_control') # Создаем объект бота TOKEN = 'YOUR_TELEGRAM_BOT_TOKEN' bot = telebot.TeleBot('6939229386:AAG83iTwi_Vjb4dR79QA2RF-Vlehk3O-EVc') # Функция вызова ROS-сервиса для взлета def takeoff(): rospy.wait_for_service('/takeoff') try: takeoff_service = rospy.ServiceProxy('/takeoff', Trigger) response = takeoff_service() rospy.loginfo(f"Дрон взлетел: {response}") return True except rospy.ServiceException as e: rospy.logerr(f"Ошибка при взлете дрона: {e}") return False # Функция вызова ROS-сервиса для полета на заданную точку def navigate_to_point(x, y, z): rospy.wait_for_service('/navigate') try: navigate_service = rospy.ServiceProxy('/navigate', Navigate) response = navigate_service(x=x, y=y, z=z, auto_arm=True) rospy.loginfo(f"Дрон летит к точке ({x}, {y}, {z}): {response}") return True except rospy.ServiceException as e: rospy.logerr(f"Ошибка при полете к точке ({x}, {y}, {z}): {e}") return False # Функция вызова ROS-сервиса для посадки def land(): rospy.wait_for_service('/land') try: land_service = rospy.ServiceProxy('/land', Trigger) response = land_service() rospy.loginfo(f"Дрон сел: {response}") return True except rospy.ServiceException as e: rospy.logerr(f"Ошибка при посадке дрона: {e}") return False # Функция для создания реплей клавиатуры def get_keyboard(): keyboard = types.ReplyKeyboardMarkup(row_width=2) keyboard.add(types.KeyboardButton('Взлет'), types.KeyboardButton('Полет')) keyboard.add(types.KeyboardButton('Полет к точке'), types.KeyboardButton('Посадка')) return keyboard # Обработчик команды /start @bot.message_handler(commands=['start']) def start(message): bot.send_message(message.chat.id, f"Доброго времени суток , {message.from_user.first_name}! Добро пожаловать в тг бот для управления дронов!", reply_markup=get_keyboard()) # Обработчик текстовых сообщений @bot.message_handler(func=lambda message: True) def handle_message(message): text = message.text.lower() if text == 'взлет': if takeoff(): bot.send_message(message.chat.id, "Дрон взлетел!") elif text == 'полет': if navigate_to_point(0, 0, 1): bot.send_message(message.chat.id, "Дрон летит на заданную точку!") elif text == 'полет к точке': if navigate_to_point(4, 5, 1): bot.send_message(message.chat.id, "Дрон летит к заданной точке (4, 5, 1)!") elif text == 'посадка': if land(): bot.send_message(message.chat.id, "Дрон садится!") else: bot.send_message(message.chat.id, "Неизвестная команда. Пожалуйста, выберите команду из меню.", reply_markup=get_keyboard()) # Запускаем бота if __name__ == '__main__': bot.polling()
Editor is loading...
Leave a Comment