20 Dec 2017
|
ROS
ROS 2.0의 실행 명령어는 ros2 입니다. ROS 1.0 버전에서의 명령어 사용법과 꽤 차이가 있습니다. 간단한 사용법을 알아놓는 편이 좋습니다.
ros2 명령어 사용법
도움말
간단한 도움말을 보기 위해서는 --help 옵션을 넣으면 됩니다.
프로그램 실행방법
run 옵션을 이용해서 프로그램을 실행할 수 있습니다. 하지만 경험상 그냥 실행 파일만 실행해도 잘 실행이 되더군요.
ros2 run demo_nodes_cpp talker -t chatter2
Message Publish
특정 Topic으로 메시지를 발행하기 위해서는 topic pub 옵션을 사용하면 됩니다. 아래 예제는 snowdeer_topic이라는 이름의 Topic에 문자열 메시지를 보내는 예제입니다.
$ ros2 topic pub /snowdeer_topic std_msgs/String "data: Hello, snowdeer."
Message Subscribe
특정 Topic의 메시지를 수신하기 위해서는 topic echo 옵션을 사용하면 됩니다.
$ ros2 topic echo /snowdeer_topic
Topic 리스트 조회
Node 리스트 조회
20 Dec 2017
|
ROS
ROS 2.0을 기반으로 빌드 환경을 설정하는 방법입니다. 여기에서 원문을 볼 수 있으며, 저는 제 경험을 토대로 글을 작성했습니다.
Ament
ROS 1.0에서는 빌드 시스템으로 catkin을 이용했었는데, ROS 2.0에서는 ament를 이용합니다. ament를 사용하기 위해서는 먼저 빌드 환경을 설정해주어야 합니다.
필요한 프로그램 설치
만약 vcs 프로그램이 설치되어 있지 않다면 vcstool을 설치합니다.
다음 명령어를 이용해서 ‘vcstool’을 쉽게 설치할 수 있습니다.
$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
$ sudo apt-key adv --keyserver hkp://pool.sks-keyservers.net --recv-key 0xB01FA116
$ sudo apt-get update
$ sudo apt-get install python3-vcstool
$ source /usr/share/vcstool-completion/vcs.bash
폴더 생성
아래 명령어를 이용해서 폴더 생성을 해줍니다.
소스 다운로드
$ cd ~/ros2_ws
$ wget https://raw.githubusercontent.com/ros2/ros2/master/ros2.repos
$ vcs import ~/ros2_ws/src < ros2.repos
빌드
$ src/ament/ament_tools/scripts/ament.py build --build-tests --symlink-install
꽤 오랜 시간이 걸리기 때문에 인내력을 갖고 기다려줍니다. 만약 중간에 응답이 없거나 타임아웃(Timeout)이 발생한 경우는 Ctrl + C키를 눌러서 종료한 다음 위 명령어를 다시 입력하면 작업을 이어서 진행합니다.
저 같은 경우는 중간에 너무 오래 걸려서 타임아웃 설정값을 바꿔야 하는 경우도 있었습니다.
설치
빌드가 다 끝나면 install 디렉토리에 결과물이 만들어집니다. 다음 명령어를 이용해서 설치를 해줍니다.
$ . install/local_setup.bash
샘플 코드 빌드 테스트
이제 ament를 이용해서 빌드가 잘 되는지 확인을 해야 합니다. 샘플 코드를 빌드해서 잘 되는지 확인합니다.
$ mkdir -p ~/ros2_overlay_ws/src
$ cd ~/ros2_overlay_ws/src
$ git clone https://github.com/ros2/examples.git
$ cd ~/ros2_overlay_ws
$ ament build
19 Dec 2017
|
ROS
ROS 2.0을 설치하는 방법입니다. ROS 2.0 공식 페이지에서 더 자세히 볼 수 있으며, 여기서는 제 경험을 토대로 다시 정리했습니다.
ROS 2.0 설치
저는 Ubuntu 16.04 LTS에 ROS 2.0을 설치했습니다.
필요한 라이브러리 설치
다음 명령어를 이용해서 필요한 라이브러리들을 먼저 설치합니다.
$ sudo apt-get update && sudo apt-get install -q -y \
libopencv-core2.4v5 \
libhighgui2.4 \
libopencv-imgproc2.4v5 \
libasio-dev \
libeigen3-dev \
libtinyxml-dev \
libtinyxml2-dev \
libcurl4-openssl-dev \
libqt5core5a \
libqt5gui5 \
libqt5opengl5 \
libqt5widgets5 \
libxaw7-dev \
libgles2-mesa-dev \
libglu1-mesa-dev \
python3-pip \
python3-setuptools \
python3-yaml \
wget \
tree
$ sudo apt-get update && sudo apt-get install -q -y \
libboost-thread-dev
$ sudo pip3 install argcomplete
ROS 2.0 바이너리 패키지 다운로드
다음 경로에서 ROS 2.0 최신 바이너리 패키지를 다운 받습니다.
저는 ‘ros2-ardent-package-linux-fastrtps-opensplice-x86_64.tar.bz2’ 파일을 다운받았습니다.
그런 다음 다음 명령어를 통해 압축 파일을 해제합니다.
$ mkdir -p ~/ros2_install
$ cd ~/ros2_install
$ tar xf ~/Downloads/ros2-package-linux-x86_64.tar.bz2
샘플 테스트
이제 잘 설치가 되었고 동작이 되는지 확인하기 위해서 터미널에서 다음 명령어를 실행해봅니다.
$ . ~/ros2_install/ros2-linux/setup.bash
$ ros2 run demo_nodes_cpp talker
$ . ~/ros2_install/ros2-linux/setup.bash
$ ros2 run demo_nodes_cpp listener
잘 동작이 되는 걸 확인했으면, .bashrc 파일 맨 끝에 아래 항목을 추가합니다.
. ~/ros2_install/ros2-linux/setup.bash
19 Dec 2017
|
C++
함수 콜백 예제
Child.h
#ifndef FUNCTIONCALLBACK_CHILD_H
#define FUNCTIONCALLBACK_CHILD_H
#include <functional>
using namespace std;
class Child {
public:
Child() {}
virtual ~Child() {}
private:
typedef function<void()> func1;
typedef function<void(int, int)> func2;
func1 handler1;
func2 handler2;
public:
void setHandler1(func1 func) {
handler1 = move(func);
}
void setHandler2(func2 func) {
handler2 = move(func);
}
void exec() {
handler1();
handler2(100, 200);
}
};
#endif //FUNCTIONCALLBACK_CHILD_H
parent.h
#ifndef FUNCTIONCALLBACK_PARENT_H
#define FUNCTIONCALLBACK_PARENT_H
#include "Child.h"
#include <iostream>
#include <functional>
using namespace std;
class Parent {
public:
Parent() {}
virtual ~Parent() {}
void hello() {
cout << "Hello" << endl;
}
void sum(int a, int b) {
cout << a << " + " << b << " = " + (a + b) << endl;
}
void test() {
Child child;
child.setHandler1(bind(&Parent::hello, this));
child.setHandler2(bind(&Parent::sum, this, placeholders::_1, placeholders::_2));
child.exec();
}
};
#endif //FUNCTIONCALLBACK_PARENT_H
main.cc
#include "Parent.h"
int main() {
Parent obj;
obj.test();
return 0;
}
18 Dec 2017
|
ROS
ROS 2.0 Ardent Apalone 버전이 2017년 12월 8일에 공개되었습니다. 그동안 알파 버전부터 베타3 버전까지 배포되었으나, 이번에 공개한 Ardent Apalone은 최초의 non-beta 버전입니다.
ROS 2.0이 나오게 된 배경
ROS는 로봇 계열에서 가장 많이 사용되던 운영체제였습니다. 하지만, ROS는 아래와 같은 문제점 또는 특징을 갖고 있었습니다.
ROS 1.0의 특징
- 단일 로봇(Single Robot) 지원
- 워크스테이션 급의 컴퓨팅 리소스 필요
- 리얼타임(Real-time) 요구사항 미지원
- 아주 훌륭한 네트워크 연결 상태 필요(유선이거나 아주 높은 대역폭의 무선 필요)
- 주로 연구 기관, 아카데미 등에서 사용
새로운 요구 사항 등장
- 멀티 로봇 지원 : 기존 ROS의 경우 일부분을 수정하여 복수의 로봇을 제어할 수는 있었지만 일반적인 접근 방식은 아니었습니다. 오늘날에는 복수의 로봇을 동시에 제어하는 시나리오가 많이 생겼습니다.
- Small Embeded Platform : OS가 탑재되지 않은 마이크로 컨트롤러(Micro Controller)와 같은 작은 플랫폼과도 ROS와 연동시키고 싶은 경우가 생겼습니다.
- 리얼타임(Real-Time) 시스템 : 프로세스간, 기계간 통신을 ROS를 통해 실시간으로 제어할 수 있어야 합니다.
- 네트워크 조건 완화 : 기존에는 너무 이상적인 네트워크 환경을 요구했지만 앞으로는 상태가 나쁜 WiFi 상황도 고려해야 합니다.
새로운 기술 적용
아래와 같은 새로운 기술들이 적용되었습니다.
- Zeroconf
- Protocol Buffers
- ZeroMQ (and the other MQs)
- Redis
- WebSockets
- DDS (Data Distribution Service)
OS 지원
ROS 2.0은 다음과 같은 OS를 지원합니다.
- Ubuntu 16.04 LTS (Xenial)
- Mac OS X 10.12 (Sierra)
- Windows 10