강의를 제작하고 있는 현 시점, 세상은 chatgpt로 인해 큰 격변을 맞이하고 있는데요, chatgpt에게 ROS가 무엇인지 한 번 물어보았습니다. 😊
💡 앞으로 프로그래밍과 실습 시 chatgpt를 적극 활용하여 강의를 이어나가도록 하겠습니다. 😉
image from : wikimedia
로봇을 실행하기 위해서, 수많은 프로그램들이 실행되며, ROS는 이들 사이의 우선순위와, 프로그램 사이의 데이터 흐름을 책임집니다. 이 작업은 스케쥴링이라고 불리며, 이러한 동작을 수행하는 시스템을 Operating System이라고 부르기 때문에 ROS라는 이름을 갖게 되었습니다.
그럼, 로봇을 개발하기 위해서 어떠한 프로그램들이 필요할까요? => 로봇이 수행하는 임무들을 크게 3가지로 분류하면 인지, 판단, 제어의 3가지로 나뉩니다.
이렇게 로봇 시스템은 무척 복잡하며, 여러 작업을 수행하는 프로그램들 사이 수많은 데이터가 오가고, 데이터의 신뢰성과 속도 모두 충축시켜야 하며, 또 사람과 상호 작용해야 합니다.
예를 들면, 로봇의 센서, 구동부, 알고리즘이 모두 준비되어 있는 상황에서, 이들을 하나의 시스템으로 엮어주는 역할을 하는 것이 바로 ROS입니다.
image from : https://robots.ieee.org/robots/pr2/
연구용으로 설계된 기존 ROS를 통해서는 이러한 모든 조건을 충족할 수 없다는 결론을 내렸고, Open Robotics는 ROS 2를 새롭게 선보이게 됩니다.
💡 기존 언급되었던 ROS 1의 모든 문제들이 ROS 2에서 해결되었다고 할 수는 없지만 적어도 해결을 고려하여 설계되었다고 말하고 싶습니다.
DDS는 Data Distribution Service의 약자이며, 다양한 프로그램이 동시에 동작하는 시스템을 위한 일종의 약속입니다. 기존의 ROS가 지양하던 방식이 DDS와 일치하는 부분이 많았고, 산업 표준에 널리 사용되고 있었기 때문에 채택하지 않았나 싶습니다. (자세한 내용은 강의를 통해 함께 살펴보겠습니다.)
앞서 이야기한 바와 같이 ROS는 특정 알고리즘을 위한 라이브러리가 아닌 시스템입니다.
따라서, 이 시스템을 이해하고, 익숙해지고, 실습하고, 코딩하고, 기존의 코드를 연동하는 작업들을 통해 여러분들의 코드와 알고리즘을 ROS로 감쌀 수 있게 됩니다.
이번 강의를 기획하는 시점에서 세상에 큰 변화가 있었습니다. 바로 ChatGPT인데요. C++ 코드를 Python 코드로 바꾼다거나, 내가 원하는 ROS 2 코드를 말만 하면 순식간에 짜주는 세상이 되었습니다.
뿐만 아니라 코드 작성 시에도 Github Copilot, Code GPT 등 자동 완성 기능들이 등장하여 개발자들의 편의를 높여주고 있습니다.
#include "rclcpp/rclcpp.hpp"
// rclcpp node example
int main(int argc, char *argv[]) {
rclcpp::init(argc, argv);
auto node = rclcpp::Node::make_shared("test_node");
rclcpp::spin(node);
rclcpp::shutdown();
return 0;
}
이러한 이유로 개발자들은 더이상 코드 API를 외우고, 예제를 뒤적이고 할 필요가 없어졌다고 생각합니다. 이는 ROS 2 개발시에도 물론 적용될 것입니다.
따라서, 이번 강의에서는 AI가 알려줄 수 없는 것들을 위주로 진행하고자 합니다.
본 강의는 최대한 많은 분들이 끝까지 이해할 수 있도록 설계되었습니다. 따라서, 최대한 쉽고, 프로그래밍 실력이 출중하지 않아도 모두 완강할 수 있게 진행합니다. 프로그래밍 지식은 아래 코드를 이해할 수 있을 정도면 괜찮습니다.
class OOPNode:
def __init__(self):
self.counter_ = 0
def hello_du(self, event=None):
hello_du = f"hello du {rospy.get_time()}, counter: {self.counter_}"
print(hello_du)
self.counter_ += 1
def my_first_oop_node():
oop_node = OOPNode()
if __name__ == '__main__':
try:
my_first_oop_node()
except Exception as e:
print(e)
C++의 경우 이야기가 조금 다른데요. C++11 이후, 통칭 Modern C++에 대한 지식이 필요합니다.
더불어 빌드 시스템에 대한 이해 (make, CMake)도 어느 정도 필요합니다.
파이썬으로 개념을 익히고, C++ 언어 공부는 언제든 추가로 하면 되니 강의에서 이해에 어려움이 있다면 추가로 리서치하면 되시겠습니다.
강의 도중 사용되는 코드들은 Github Repository를 통해 배포되어 있습니다.
강의 노트의 주소는 https://rb2023ros.github.io/kr/ 입니다. 코드와 명령어 등 필요한 리소스를 모두 담고 있으므로 복사/붙여넣기를 활용하여 강의 청취 시간을 절약하시기 바랍니다.
해당 노트는 hugo를 사용하여 제작된 웹 페이지임을 밝힙니다.