Orientação 1
Onboarding e Sprint Planning 1
Sprint 1
Entendimento do projeto
AGENDA
Encontro 3
- Segurança da informação
Encontro 4
- MQTT
- HiveMQ
Encontro 5
- BI
- Introdução ao Metabase
Encontro 6
- Integração do metabase
encontros
Encontro 1
Configurando e usando o ROS
AGENDA
daily (até 14h15)
conteúdo de comp (até 14h25)
configuração do ubuntu (até14h45)
Relembrando mqtt (até 15h00)
Qual é o principal ramo que utiliza o MQTT?
1. Robótica
2. Machine Learning
3. Ciência de dados
4. IoT
5. Web
Relembrando mqtt (até 15h00)
O MQTT é um protocolo que aplica qual camada do modelo OSI?
1. Física
2. Enlace de dados
3. Transporte
4. Aplicação
5. Rede
Relembrando mqtt (até 15h00)
Qual é o protocolo de transporte a partir do qual o MQTT é implementado?
1. UDP
2. TCP
Relembrando mqtt (até 15h00)
Existe algum software responsável por gerenciar as filas de mensagens do MQTT?
1. Sim
2. Não
Relembrando mqtt (até 15h00)
Por que se usa o MQTT com dispositivos IoT
1. Porque alguém decidiu que ia ser assim
2. Pois é um protocolo que garante uma latência muito baixa
3. Pois é um protocolo muito mais seguro que o HTTPS
4. Pois é um protocolo com especificações simples e compatíveis com dispositivos embarcados
mqtt vs ros (até 15h15)
Qual é o principal ramo que utiliza o ROS?
1. Robótica
2. Machine Learning
3. Ciência de dados
4. IoT
5. Web
mqtt vs ros (até 15h15)
O ROS é um framework que aplica qual camada do modelo OSI?
1. Física
2. Enlace de dados
3. Transporte
4. Aplicação
5. Rede
mqtt vs ros (até 15h15)
Qual é o protocolo de transporte a partir do qual o ROS é implementado?
1. UDP
2. TCP
mqtt vs ros (até 15h15)
Existe algum software responsável por gerenciar as filas de mensagens do ROS?
1. Sim
2. Não
mqtt vs ros (até 15h15)
Por que se usa o ROS com robôs
1. Porque alguém decidiu que ia ser assim
2. Pois é um protocolo que garante uma latência muito baixa
3. Pois é um protocolo muito mais seguro que o HTTPS
4. Pois é um protocolo que torna o stack de rede transparente
5. Pois há um ecossistema de pacotes ROS que podem ajudar a criar sua aplicação
criando um workspace (até 15h30)
mkdir -p meu_workspace/src
pip install setuptools==58.2.0
source install/local_setup.bash #se estiver usando zsh, mude para setup.zsh
ros2 pkg create --build-type ament_python ola_mundo
cd ola_mundo/ola_mundo
touch ola.py
def main():
print("Ola, mundo!")
if __name__ == "__main__":
main()
colcon build
Publisher mínimo (até 15h35)
import rclpy
from rclpy.node import Node
from std_msgs.msg import String
class MinimalPublisher(Node):
def __init__(self):
super().__init__('minimal_publisher')
self.publisher_ = self.create_publisher(String, 'topic', 10)
timer_period = 0.5 # seconds
self.timer = self.create_timer(timer_period, self.timer_callback)
self.i = 0
def timer_callback(self):
msg = String()
msg.data = 'Hello World: %d' % self.i
self.publisher_.publish(msg)
self.get_logger().info('Publishing: "%s"' % msg.data)
self.i += 1
def main(args=None):
rclpy.init(args=args)
minimal_publisher = MinimalPublisher()
rclpy.spin(minimal_publisher)
minimal_publisher.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
subscriber mínimo (Até 15h40)
import rclpy
from rclpy.node import Node
from std_msgs.msg import String
class MinimalSubscriber(Node):
def __init__(self):
super().__init__('minimal_subscriber')
self.subscription = self.create_subscription(
String,
'topic',
self.listener_callback,
10)
self.subscription # prevent unused variable warning
def listener_callback(self, msg):
self.get_logger().info('I heard: "%s"' % msg.data)
def main(args=None):
rclpy.init(args=args)
minimal_subscriber = MinimalSubscriber()
rclpy.spin(minimal_subscriber)
minimal_subscriber.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
turtlesim (até 16h00)
orientação 2
Kickoff com o parceiro
temas
Pessoas e Formação
1. Quais são as pessoas envolvidas no processo de limpeza dos canos? Qual sua formação e a área em que atuam? (G1)
2. Além de limpar os tubos quais são as outras atividades desenvolvidas por esses colaboradores e qual o nível de letramento digital dos mesmos ? (G1)
3. Quais são as habilidades/capacidades necessárias para atuar nessa área? (G1)
4. Quais seriam os tipos de funcionários que estarão envolvidos na utilização do robô? ? Qual é a faixa etária, nível de formação e familiarização com a tecnologia? (G3)
Processos e Operação
1. Qual a etapa do processo de formação do açúcar que ocorre no tanque? (G1)
2. No processo de limpeza atual dos tubos, quais são as melhores formas de identificar se um tubo precisa de uma limpeza ou não?
3. Quais as dimensões dos tubos que o robô deve analisar? (G3)
Custos e Logística
1. Qual a principal dor sanada e qual principal ganho que vocês terão com a nossa solução(tempo, custo, etc)? (G2)
2. Quanto é gasto no processo de limpeza? (G2)
3. Há necessidade de saber quantos litros de água é usado na manutenção dos tubos? (G2)
4. Existem variáveis que impactam mais significativamente nos custos de operação além da mão de obra? (G4)
5. O robô será utilizado de fato apenas uma vez ao longo do ano inteiro? (G4)
Tecnologia e Dados
1. Já tem alguma base de dados que tem especificando o nível mínimo de sujeira? (G2)
2. Quais são os dados importantes para monitorar e como vocês gostariam de visualizá-los? (G2)
3. Como é o funcionamento do reboiler? Ou seja, por onde ocorre a entrada do açúcar? (G3)
4. Nessas áreas é possível ter acesso à internet? (G3)
Produtividade e Eficiência
1. Vocês tem alguma ideia de quantos % os tubos ficam entupidos? Vocês podem falar um pouco sobre a produtividade relacionada ao entupimento dos tubos? (G5)
2. Existem tubos/canos que entopem totalmente? (G5)
3. Como os tubos são usados por 9 meses ininterruptos, imaginamos que a maioria deles fique sujo com a crosta. Como podemos definir o grau de impureza para que ele deva ser limpo? (G3)
4. Existem condições específicas dentro dos canos (como temperatura e umidade) que possam afetar o desempenho? (G4)
Infraestrutura e Design
1. Como o reboiler capta o melaço? (G2)
2. Como está a disposição dos reboilers, na horizontal ou na vertical? (G2)
3. Existe algum acesso à parte de baixo do tanque e do reboiler? (G3)
Competitividade e Mercado
1. Qual o diferencial que vocês buscam com o projeto em relação à concorrência? (G2)
2. Com quais empresas/instituições vocês possuem parceria? (G5)
3. Vocês podem citar empresas/instituições que atuam como fornecedores da Atvos? (G5)
Orientação 4
Sprint Planning 2
Encontro 3
Sistemas de controle e robótica móvel
objetivos do encontro
- O que significa um sistema ser controlado?
- Quais são os tipos de controle que existem?
- O que as aulas do Geraldo tem a ver com essa?
- Qual é a dinâmica do controlador e por quê você deveria se importar?
- Qual é o controlador que na maioria dos casos vai servir para o seu problema?
- O que faz cada um dos termos do PID?
- Se eu não consigo/sei modelar um sistema, eu ainda posso controlá-lo?
objetivos do encontro
roteiro
o que é um controlador?
malha aberta (feedforward)
Representação de sistemas dinâmicos
domínio do tempo
subdividindo o sistema
o problema do domínio temporal
Em sistemas lineares no domínio do tempo, precisamos fazer um processo de convolução entre o sinal de entrada e a resposta ao impulso do sistema linear para chegar à saída.
solução: domínio dos complexos
função de transferência
Malha fechada (feedback)
objetivos do encontro
controle pid
controlador simples
Características marcantes:
Vantagens:
Desvantagens:
P
Características marcantes:
Vantagens:
Desvantagens:
PI
Características marcantes:
Vantagens:
Desvantagens:
PD
Características marcantes:
Vantagens:
Desvantagens:
PID
Características marcantes:
Vantagens:
Desvantagens:
Identificação de sistemas
sistema genérico 2a ordem
entrada conhecida
Orientação 5
Setup turtlebot
Orientação 7
Sprint planning 3
Orientação 10
Sprint planning 4
Encontro 8
Multi-layer perceptrons e torch
implementação perceptron
implementação perceptron
class Perceptron:
def __init__(self, weights=None, bias=-1, activation_threshold=0.5):
if weights == None:
self.weights = np.array([1, 1])
else:
self.weights = np.array(weights)
self.bias = bias
self.activation_threshold = activation_threshold
def _heaviside(self, x):
return 1 if x >= self.activation_threshold else 0
def _sigmoid(self, x):
return 1/(1 + math.exp(-x))
def _activation(self, perceptron_output):
return self._heaviside(perceptron_output)
def forward_pass(self, data):
weighted_sum = self.bias + np.dot(self.weights, data)
return self._activation(weighted_sum)
considerações sobre treinamento
método dos mínimos quadrados
gradiente descendente
gradiente descendente em 3d
implementação (até 15h20)
Modifique a implementação do perceptron, adicionando o método fit, que implementa o gradiente descendente.
o problema do xor
solução 1: eu sei lógica
XOR(A, B) = (A + B) . (NAND(A, B))
PROVE!
solução 2: MLP
solução 2: backpropagation
Orientação 11
Demo Yolo
Encontro 9
LOOK
Sobre correções:
- P1 - Nota amanhã (pt 1 já foi divulgada)
- Conversa c/ grupos (Sprint 3) - Amanhã
- PD3 e PD4 - Fim da semana que vem
- Notas do sprint 3 - Nota de grupo amanhã e lançamento na quarta
Imagem * Filtro = Imagem processada
Convolução
YOLO (v4)
Arquivo YAML
Estrutura de pastas
Arquivo de anotações
<object-class>
CLASSIFICAÇÃO
0
<object-class> <x> <y> <largura> <altura>
DETECÇÃO DE OBJETOS
0 45 55 29 67
<object-class> <pontos do polígono>
SEGMENTAÇÃO
No próximo slide...
0 0.03686995913461539 0.9808467740384615 0.03245967788461539 0.9595654110576923 0.030569555288461538 0.9517249110576922 0.03497983894230769 0.9438844086538462 0.0375 0.9304435480769231 0.038130040865384615 0.9203629038461538 0.053251007211538456 0.9091621875 0.057031250000000006 0.9002016129807693 0.05955141105769231 0.8822804663461539 0.060181451923076924 0.8699596778846155 0.06585181490384616 0.85987903125 0.07089213701923078 0.8520385312500001 0.07341229807692308 0.8408378125 0.07341229807692308 0.8307571682692309 0.07782258173076924 0.8195564519230769 0.0765625 0.8128360216346154 0.08034274278846154 0.7926747307692307 0.08790322596153846 0.7769937283653847 0.09294354807692308 0.7691532259615385 0.09420362980769231 0.753472221153846 0.10050403125 0.7310707884615385 0.11499495913461538 0.7153897860576923 0.12444556490384615 0.7086693557692307 0.13641633173076922 0.6974686370192308 0.14523689423076924 0.6851478485576923 0.15090725721153847 0.6717069903846155 0.15342741826923076 0.6593861995192308 0.1572076610576923 0.6448252692307693 0.16224798317307693 0.6302643365384615 0.16980846875 0.6313844086538462 0.17736895192307692 0.6347446225961538 0.18492943509615384 0.6369847668269231 0.1912298389423077 0.6381048389423077 0.1962701610576923 0.6381048389423077 0.20698084615384615 0.6381048389423077 0.22336189423076924 0.6369847668269231 0.22714213701923078 0.6280241947115385 0.22084173317307693 0.6280241947115385 0.2107610889423077 0.6302643365384615 0.20446068509615384 0.6313844086538462 0.19942036298076923 0.6313844086538462 0.18744959615384615 0.6291442644230769 0.1761088701923077 0.6213037644230769 0.16602822596153846 0.6179435480769231 0.15783770192307692 0.6224238341346153 0.1565776201923077 0.6291442644230769 0.1521673389423077 0.6414650528846154 0.14964717788461537 0.6493055552884616 0.14712701682692308 0.6661066298076924 0.1401965721153846 0.6784274182692307 0.13515625 0.684027778846154 0.12822580528846153 0.6896281370192308 0.12192540384615384 0.6952284951923077 0.11814516105769231 0.6985887091346155 0.1131048389423077 0.7041890673076924 0.10617439423076923 0.7097894254807693 0.10050403125 0.71875 0.0935735889423077 0.7310707884615385 0.09042338701923078 0.7422715048076923 0.09042338701923078 0.7545922932692307 0.08853326682692307 0.7657930096153845 0.08286290384615384 0.7736335120192308 0.07719254086538462 0.7837141586538461 0.07467237980769231 0.7926747307692307 0.07215221875 0.8072356634615385 0.06900201682692307 0.8184363798076923 0.06837197596153846 0.8329973125 0.06837197596153846 0.8441980288461538 0.06396169471153847 0.8509184591346154 0.057031250000000006 0.857638889423077 0.053251007211538456 0.8677195336538461 0.053251007211538456 0.8744399639423077 0.055141129807692306 0.884520608173077 0.05451108894230769 0.892361110576923 0.050730846153846154 0.9024417572115385 0.04254032211538462 0.9102822572115384 0.03182963701923077 0.9170026875 0.03182963701923077 0.9270833341346154 0.03182963701923077 0.9338037644230769 0.026789314903846152 0.9405241947115385 0.025529233173076923 0.9483646947115385 0.02741935576923077 0.9662858413461539 0.03245967788461539 0.9819668461538461 0.035609879807692306 0.9920474903846154 0.04632056490384616 0.9998879927884615 0.04191028125 0.9954077067307693 0.03686995913461539 0.9808467740384615
- Procurem datasets pré-anotados;
SUGESTÕES
- Procurem datasets pré-anotados;
- Se forem anotar, usem ferramentas para ajudá-los (https://github.com/ofeksadlo/AutoLabelImg)
SUGESTÕES
- Procurem datasets pré-anotados;
- Se forem anotar, usem ferramentas para ajudá-los (https://github.com/ofeksadlo/AutoLabelImg)
- Se quiserem usar segmentação, pensem 2 vezes;
SUGESTÕES
- Procurem datasets pré-anotados;
- Se forem anotar, usem ferramentas para ajudá-los (https://github.com/ofeksadlo/AutoLabelImg)
- Se quiserem usar segmentação, pensem 2 vezes;
- Se quiserem anotar datasets de segmentação, pensem 2^10 vezes.
SUGESTÕES
- Procurem datasets pré-anotados;
- Se forem anotar, usem ferramentas para ajudá-los (https://github.com/ofeksadlo/AutoLabelImg)
- Se quiserem usar segmentação, pensem 2 vezes;
- Se quiserem anotar datasets de segmentação, pensem 2^10 vezes.
- A quantidade de épocas influencia diretamente na qualidade do modelo final. Mexam nesse parâmetro!!!
SUGESTÕES
Orientação 13
Sprint planning 5
Encontro 11
Sistemas operacionais
Encontro 12
Linux e ROS