Limit is your thinking

IT 공부/PyQt, SQL

PyQt5와 Ros2 통신 (How can I connect PyQt5 Ros2)

a19o_20 2023. 11. 14. 15:44

Ros2에서 GUI를 써서 로봇을 조종해 보고 싶다면?

그것을 Python 대표 PyQt5 그래픽 드래그앤 드랍으로해서

 (How can I connect PyQt5 Ros2)

PyQt5 and Ros2

 

 

 

 

 

 

 

 

 

 

만들고싶다면

잘 오셨습니다.

 

위의 자료는 저의 프로젝트 슈봇에 있습니다.

다음은 ROS2와 PyQt5를 연결시키는것으로

모바일로봇과 로봇암(메뉴플레이터) 그리고 Face_id(recognition and dection) 입니다.

 

먼저 가장 기본적인 것부터 해봅시다.

 

해야하는 것

ROS2의 개념이해, PyQt5의 기본적인 코드이해

파이썬에서의 쓰레드의 이해

메인함수에서의 가동이해

 

 

ROS2는 로봇 오퍼레이터 시스템 2로서 강력한 로봇 오퍼레이터 툴입니다. Ros2를 다운로드하는 이행하시고, 가장 간단한 튜토리얼 터틀 시리즈 하시고나서 와서 다시 와서 여기에서, 리스너 토픽이용하는법과 토커 토픽 이용하는 법을 와주시길바랍니다.

 

일단, 리스너와 토커의 개념에 대해서 말해드리겠습니다.

 

 

 

4개의 말하는 사람은 신나게 던집니다. 여기에서 리스너는 실행이 안된 상태라면 그냥 전달만 되는 것이겠지요. 하지만

실행하게된다면, 토픽(통신하는연결체계)만 맞춰준다면 4개의 전화를 다 받을수 있는게 토커 리스너 기초적인 뜻입니다.

 

 

자 이제 ROS2에서 패키지에서 등록을 py를 등록해주시고, PyQt의 기본적인 것도 등록해주시고나서 거기에 하나로 묶어주는 동작을 해보겠습니다.

 

먼저

로스2에서 이러한 동작을 하려면 

 

클래스안에서 어떻게 정의 되어 있고, main 함수는 어떻게 만들어졌는지 관찰해주셔야합니다.

 

def main(args=None)


def main(args=None):
rclpy.init(args=args)
node = ListenerNode()
rclpy.spin(node)
node.destroy_node()
rclpy.shutdown()

if __name__ == '__main__':
main()

저의 리스너 코드의 main 함수이며 이렇게 했을경우

리스너가 열심히 돕니다. 토커도 비슷하고요.

 


파이썬에서의 쓰레드를 주고, 그일들이 끝나던말던 알아서 처리하라고 주어진다면

ros2통신과 파이썬Pyqt가 이어집니다.

def main():
rclpy.init()
node = Listen()
app = QApplication(sys.argv)
myWindows = WindowClass(node)
thread1 = threading.Thread(target=rclpy.spin, args=[node], daemon=False)
thread1.start()
myWindows.show()
sys.exit(app.exec_())

if __name__ == "__main__":
main()