Untitled
unknown
plain_text
2 years ago
3.7 kB
8
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