Untitled

 avatar
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