Pull to refresh

:::ROS. От теории к практике

image
Некоторое время назад стал использовать ROS, CaptainTrunky написал отличную статью Основы работы с Robotic Operating System, поэтому мы приступим сразу к практике.

Введение


В примере будет использован rospy. Аппаратная часть состоит из OR-AVR-M128-DS и usb-uart моста.
Характеристики:
Микроконтроллер: ATMega128 @ 7.3728 МГц
Порты RoboGPIO: 16 (8 с АЦП)
Порты RoboI2C: 6
Порты сервоприводов: 16
Разъемы двигателей: 2
Контроллер с ORFA на борту. Ниже приведена схема, иллюстрирующая взаимодействие с портами.
image

Практика


Создаем узел serial_node и слушаем публикации в теме serial.
rospy.init_node('serial_node')
rospy.Subscriber('serial', String, sci.callback)
rospy.spin()

Когда кто-то опубликует сообщение в теме serial, будет вызван метод callback(в нашем случае).
def callback(self, data):
	if data.data[0] == 'V':
		self.getVersion()
	elif data.data[0] == 'L':
		self.setL(data.data[1:3])

Метод getVersion() запрашивает версию ORFA, метод setL() устанавливает I2C адрес контроллера.
	
def getVersion(self):
    self.write('V')
    print self.read(4)
	
def setL(self, iic):
    self.write('L' + iic)
    print self.read(3)

Для тестирования ноды был написан test.py, который публикует в топик serial введенную строку.
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import roslib; roslib.load_manifest('or_serial')
import rospy
from std_msgs.msg import String

serial = rospy.Publisher('serial', String)
rospy.init_node('serial')
r = rospy.Rate(10)
while not rospy.is_shutdown():
	cmd = raw_input('Enter cmd: ')
	serial.publish(cmd)
	r.sleep()

Запуск


Теперь надо все это запустить. Открываем терминал,
$roscore

image
Далее открываем еще один терминал, запускаем написанную ноду. У метя так:
$rosrun or_serial serial_node.py

В третьем терминале запускаем наш test.py:
$rosrun or_serial test.py

Проверяем — все работает.
image
image
Ну и напоследок граф связей.
$rxgraph

image
На нем видно, как serial_node слушает топик serial, а нода serial публикует сообщения в топик serial.
Спасибо всем дочитавшим до конца.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.