Используя rosrate
объект позволяет вам управлять уровнем своего выполнения кода на основе Времени ROS /clock
тема или системное время на вашем компьютере. Путем выполнения кода в постоянных интервалах вы можете точно время и планировать задачи. Эти примеры показывают различные приложения для rosrate
объект включая его использование с ROS отображает сообщения и передающие команды для управления роботом.
Для других приложений на основе системного времени рассмотрите rateControl
Объект (Navigation Toolbox).
Этот пример показывает, чтобы отправить регулярные команды в робота по фиксированной процентной ставке. Это использует Rate
объект выполнить цикл, который публикует std_msgs/Twist
сообщения к сети в равном интервале.
Сеть ROS Setup. Задайте IP-адрес, если ваша сеть ROS уже существует.
rosinit
Launching ROS Core... ...............................Done in 1.2397 seconds. Initializing ROS master on http://192.168.0.10:55733. Initializing global node /matlab_global_node_99183 with NodeURI http://bat1072001glnxa64:33207/
Издатель Setup и сообщение для отправки Twist
команды.
[pub,msg] = rospublisher('/cmd_vel','geometry_msgs/Twist'); msg.Linear.X = 0.5; msg.Angular.Z = -0.5;
Создайте Rate
объект заданными параметрами цикла.
desiredRate = 10;
rate = robotics.Rate(desiredRate);
rate.OverrunAction = 'drop'
rate = rateControl with properties: DesiredRate: 10 DesiredPeriod: 0.1000 OverrunAction: 'drop' TotalElapsedTime: 0.0403 LastPeriod: NaN
Запустите цикл и содержите каждую итерацию с помощью waitfor(rate)
. Отправьте Twist
обменивайтесь сообщениями в цикле. Сбросьте Rate
объект перед циклом, чтобы сбросить синхронизацию.
reset(rate) while rate.TotalElapsedTime < 10 send(pub,msg) waitfor(rate); end
Просмотрите статистику выполнения с фиксированной процентной ставкой. Посмотрите на AveragePeriod
проверять желаемый уровень было обеспечено.
statistics(rate)
ans = struct with fields:
Periods: [1x100 double]
NumPeriods: 100
AveragePeriod: 0.1000
StandardDeviation: 0.0016
NumOverruns: 0
Закройте сеть ROS
rosshutdown
Shutting down global node /matlab_global_node_99183 with NodeURI http://bat1072001glnxa64:33207/ Shutting down ROS master on http://192.168.0.10:55733. ........
В этом примере показано, как регулярно публиковать и получать сообщения изображений с помощью ROS и rosrate
функция. rosrate
функция создает Rate
возразите против, регулярно получают доступ к /camera/rgb/image_raw
тема в сети ROS с помощью подписчика. Изображение rgb преобразовано в шкалу полутонов с помощью rgb2gray
и переизданный в равном интервале. Параметры, такие как IP-адрес и названия темы меняются в зависимости от вашего робота и настройки.
Соединитесь с сетью ROS. Подписчик Setup, издатель и сообщение данных.
ipaddress = '192.168.203.129'; % Replace with your network address rosinit(ipaddress)
Initializing global node /matlab_global_node_10650 with NodeURI http://192.168.203.1:50899/
sub = rossubscriber('/camera/rgb/image_raw'); pub = rospublisher('/camera/gray/image_gray','sensor_msgs/Image'); msgGray = rosmessage('sensor_msgs/Image'); msgGray.Encoding = 'mono8';
Получите первое сообщение изображений. Извлеките изображение и преобразуйте в полутоновое изображение. Отобразите полутоновое изображение и опубликуйте сообщение.
msgImg = receive(sub); img = readImage(msgImg); grayImg = rgb2gray(img); imshow(grayImg)
writeImage(msgGray,grayImg) send(pub,msgGray)
Создайте ROS Rate
объект выполниться на уровне 10 Гц. Назначьте время цикла и OverrunAction
для обработки
desiredRate = 10;
loopTime = 5;
overrunAction = 'slip';
rate = rosrate(desiredRate);
r.OverrunAction = overrunAction;
Начните цикл, чтобы получить, обработать и отправить сообщениям каждые 0,1 секунды (10 Гц). Сбросьте Rate
объект перед началом.
reset(rate) for i = 1:desiredRate*loopTime msgImg = receive(sub); img = readImage(msgImg); grayImg = rgb2gray(img); writeImage(msgGray,grayImg) send(pub,msgGray) waitfor(rate); end
Просмотрите статистику для выполнения кода. AveragePeriod
и StandardDeviation
покажите, как хорошо код обеспечил desiredRate
. OverRuns
происходите, когда обработка данных займет больше времени, чем желаемая длина периода.
statistics(rate)
ans = struct with fields:
Periods: [1×50 double]
NumPeriods: 50
AveragePeriod: 0.1000
StandardDeviation: 0.0083
NumOverruns: 0
Закройте узел ROS
rosshutdown
Shutting down global node /matlab_global_node_10650 with NodeURI http://192.168.203.1:50899/
rosrate
| waitfor
| rateControl
(Navigation Toolbox)