반응형

1. ROS Services

서비스는 노드 사이 통신을 위한 또다른 방법이다. 서비스는 노드들에게 Request를 보내고 Response를 받게 된다.

앞에서 다룬 Topic과의 차이는 아래 그림을 통해 쉽게 이해할 수 있다.

Topic은 데이터가 지속적으로 전달되어지는 데이터 스트림에 적합한 비동기식 통신 방법인 반면, 서비스는 대기/응답(Request/Response) 방식의 통신으로 동기식 통신 방법을 의미한다.

 

 

2. Using rosservice

rosservice는 ROS의 client/service 프레임워크의 일부로 많은 명령어들이 존재한다.

* setup

$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun turtlesim turtle_teleop_key

 

 

2.1 rosservice list

 

list는 현재 가동중인 노드의 활성화된 서비스에 대한 정보를 출력하는 것으로, roscore만 실행한 후 이를 진행해보면

위의 결과를 확인할 수 있고 setup과정의 모든 노드를 실행하고 list를 확인하여 보면

위의 결과를 확인할 수 있다.

 

즉, turtlesim 노드는 9개의 서비스(reset, kill, clear, spawn, turtle1/set_pen, ... , turtlesim/get_logger_level)를 나타내고

turtle_teleop_key 노드는 2개의 서비스(teleop_turtle/get_loggers, teleop_turtle/set_logger_level)를 나타내며

rosout 노드에서 2개의 서비스를 나타내는 것을 확인할 수 있다.

 

 

2.2 rosservice type

 

turtlesim 의 clear 서비스의 타입을 살펴보자.

서비스가 empty로  표시되는데 이는 서비스가 호출될 때 전달된 인자가 없다는 것을 의미한다.

(Request할때 어떠한 데이터를 전송하지도 않고 Response할때 어떠한 데이터도 받지 않는다.)

그럼 이제 clear service를 rosservice call 을 이용하여 호출하여 보자.

 

 

2.3 rosservice call

 

위의 내용은 turtlesim_node의 clear 서비스를 실행시키는 것으로 거북이가 움직인 경로(background)를 초기화한다.

 

service가 전달인자를 갖는 경우를 살펴보기 위해 spwan service를 살펴보자.

 

spwan 서비스는 새로운 거북이를 주어진 방향과 위치로 생성한다(name 부분은 선택사항이다).

위의 명령어를 실행하면 새로 생성된 거북이의 이름을 return하고 아래와 같이 한마리가 추가된다.

내요은 /spawn 서비스를 호출하는데 x값에 해당하는 값에 2, y값에 해당하는 값에도 2, theta값에 0.2값을 넣어준 것이다.

마지막의 ""는 turtlesim의 이름을 지정하는 부분으로 공백으로 사용하여 임의의 값을 얻어오고자 함이다.

 

 

 

3. Using rosparam

ROS에서의 파라미터는 전역변수(Global variable)와 같은 역할을 한다.

rosparam은 사용자가 ROS 파라미터 서비스의 데이터를 저장하거나 조종하는 것을 허용하며 integer, float, boolean, dictionary, list 타입의 데이터를 저장할 수 있고 YAML 마크업언어 문법을 사용한다.

*YAML은 "또 다른 마크업 언어(Yet Another Markup Language)" 이며 사람이 쉽게 읽을 수 있는 데이터 직렬화 양식으로 가벼운 마크업 언어로 사용하고 있다(최근에는 XML, JSON이 데이터 직렬화에 주로 쓰인다).

 

$ rosparam

위의 명령어를 통해 옵션들을 확인해볼 수 있다.

 

3.1 rosparam list

rosparam list를 통해 현재 노드들에서 활성화된 파라미터들을 확인할 수 있고 turtlesim 노드에서 배경색에 대한 3가지의

parameters가 존재함을 확인할 수 있다.

그럼 rosparam set을 이용하여 파라미터를 수정하여보자.

 

 

3.2 rosparam set and rosparam get

현재 배경의 RGB값을 확인하여보면 위와 같다.

Parameter Server의 모든 내용을 확인하고자 하면 다음과 같이 진행한다.

 

그럼 set을 통해 값을 변경해보자.

 

3.3 rosparam dump and rosparam load

 

rosparam을 이용하여 정보들을 저장하여 추후에 다시 불러올 수 있도록 해보자.

아래 명령어를 통해 모든 parameters를 params.yaml로 저장한다.

또한 저장된 yaml파일을 새로운 namespace에 저장하여 사용할 수 있다.

반응형

'ROS > ROS Wiki' 카테고리의 다른 글

Using rosed to edit files in ROS  (0) 2021.01.05
Using rqt_console and roslaunch  (0) 2021.01.05
Understanding ROS Topics  (0) 2021.01.04
Understanding ROS Nodes  (0) 2021.01.03
Building a ROS Package  (0) 2020.12.31
반응형

1. Setup

$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun turtlesim turtle_teleop_key

 

 

 

2. ROS Topics

위의 setup과정에서 실행한 turtlesim_node와 turtle_teleop_key 노드들은 ROS Topic을 통해 서로 통신하게 된다.

tuetle_teleop_key는 키보드의 입력을 publishing하게 되고 tuetlesim_node 노드는 같은 Topic을 subscribe하여 키의 입력을 전달받데 된다. 구조는 rqt_graph를 이용하여 쉽게 시각화시킬 수 있다.

 

 

2.1 Using rqt_graph

rqt_graph는 ROS 시스템의 구성을 그래프로 보여주는 도구로 rqt package의 한 부분이다.

아래 명령어를 통해 작업을 진행한다.

(위의 내용에서 <distro>는 kinetic, melodic, ... 등으로 대체된다.)

그럼 아래 명령어를 통해 Setup과정에서 진행한 ROS시스템의 구성을 살펴보자.

위의 그래프를 통해 /turtle1/command_velocity 라는 이름의 Topic에 대해 /teleop_turtle 노드와 tutlesim 노드가 메시지(데이터)를 통신하는 관계임을 확인할 수 있다.

 

 

2.2 Introducing rostopic

rostopic 툴은 ROS Topics에 대한 정보를 얻기 위한 도구이다.

 

2.3 Using rostopic echo

rostopic echo는 토픽에 대해 publish된 내용들을 표시해준다.

위와 같은 구조로 사용하게 되고 이를 예제 적용하여 보면

위의 명령어를 입력한 후 teleop_key 터미널창에 방향키 입력을 통해 거북이를 움직여보면 값이 변화하는 것을 확인할 수 있다.

이제 rqt_graph를 확인하여 보면 아래와 같이 붉은색으로 rostopic echo 노드가 생성되어 turtle1/command_velocity 토픽을

subscribe 하는것을 확인할 수 있다.

 

즉, turtle1/cmd_vel topic에 대해 teleop_turtle노드는 입력받는 키에 대한 정보를 publish하고 이를 나타내는 turtlesim 노드와 회전각 및 이동량을 전달받는 rostopic echo 노드가 topic을 subscribe하는 것을 확인할 수 있다.

 

2.4 Using rostopic list

rostopic list는 현재 topic에 대해 subscribe 및 publish 되는 노드들의 정보를 나타낸다.

rostopic list에 대한 argument들은 다음 명령어를 통해 확인할 수 있다.

 

 

3. ROS Messages

Topic들에 대한 통신(Communication)은 노드들 사이에 ROS 메시지를 전송함으로서 진행된다.

publisher(turtle_teleop_key)와 subscriber(turtlesim_node)가 통신하기 위해서는 각각 동일한 타입의 메시지를 송수신 하여야 한다.

즉, topic의 타입은 publish되는 메시지의 타입에 따라 정의되게 되고 이러한 토픽에 전송되는 메시지는 rostopic 타입을 통해 결정된다.

 

3.1 Using rostopic type

rostopic type는 publish되는 메시지 타입들을 보여준다.

 

우리의 예를 들면

위의 명령어를 통해 turtle1/cmd_vel 이라는 Topic의 메시지 타입을 확인하면 아래와 같은 결과를 확인할 수 있다.

그리고 메시지의 자세한 정보를 위해 rosmsg를 아래와 같이 사용하면 결과를 확인할 수 있다.

 

즉, geometry_msgs/Twist 라는 데이터 형은 직선방향, 각도에 대한 데이터형이고 이는 float64형임을 확인할 수 있다.

 

 

 

 

4. rostopic continued

4.1 Using rostopic pub

rostopic pub은 현재 토픽에서의 데이터를 publish한다.

 

위의 명령은 turtlesim 노드에게 직선속도 2.0과 각속도 1.8을 갖고 움직여라 라는 의미를 담고있다.

 

그럼 위와 같은 결과를 볼 수 있다.

 

굉장히 복잡한 명령어이므로 자세히 살펴보자.

 

우선 가장 앞에 등장하는 rostopic pub은 해당 topic에게 메시지를 전송하겠다는 것을 의미한다.

 

*  -1(dash-one) 은 한번의 메시지만 publish한 후 종료하라는 의미를 담고있다.

*  turtle1/cmd_vel 은 publish할 토픽의 이름을 나타낸다.

*  geometry_msgs/Twist 는 topic을 publish할 때, 메시지의 타입을 나타낸다.

*  --(double dash)는 해당 argument에 값을 넣어주지 않기 위한 과정이다.

*  앞에서와 같이 geometry/Twist 메시지는 각각 3개의 floating 요소들로 구성된다.

 

 

그리고 거북이를 계속 움직이기 위해선 아래 명령어와 같이 rostopic pub -r  명령어를 사용하자.

 

이 과정을 rqt를 이용해서 확인하여보면 아래와 같다.

 

보면 subscribe 노드는 rostopic echo 노드와 turtlesim 노드, publish는 teleop_turtle노드와 추가적으로

새로운 노드가 생성된 것을 확인할 수 있다.

 

즉 teleop_turtle로 키 입력을 받는 것 외에 계속적으로 움직임을 가질 수 있도록 새로운 노드가 생성되어 publish하는 것을

확인할 수 있다.

 

 

4.2 Using rostopic hz

rostopic hz는 어떤 데이터들이 publish 되는지 확인할 수 있다.

보면 average rate가 60과 가까운 것을 확인할 수 있고 이는 turtlesim 노드가 pose에 대한 데이터는 60Hz로 Publish 한다는

것을 의미한다.

 

 

 

5. Using rqt_plot

rqt_plot은 topics에 대해 publish되는 데이터의 연속적인 값들을 보여준다.

 

위의 명령어를 통해 rqt_plot을 진행하고 상단의 Topic에 그래프로 나타내고자 하는 토픽을 지정하고 옆의 + 버튼을 누르자.

 

근데 우분투 18.04버전을 진행함에 있어 다음과 같은 에러가 발생한다.

창의 크기를 조절하게 되면 다음과 같은 결과를 출력하며 강제 종료되게 된다.

 

 

이는 matplotlib 내부에 존재하는 문제로 아직 해결책을 찾지는 못하였지만 대체 방안으로 창을 최대화하면 보이는 것을 확인할 수 있다.

 

아래 링크는 해당 문제가 발생한 것에 대한 참고 링크이다.

 

github.com/ros-visualization/rqt_plot/issues/35

 

Error when re-arranging widgets over plot. Kinetic, 16.04 · Issue #35 · ros-visualization/rqt_plot

When I try to re-arrange widgets in rqt, whenever I pass with it over a plot widget, I get the error: Traceback (most recent call last): File "/opt/ros/kinetic/lib/python2.7/dist-packages/qt_g...

github.com

 

반응형

'ROS > ROS Wiki' 카테고리의 다른 글

Using rqt_console and roslaunch  (0) 2021.01.05
Understanding ROS Services and Parameters  (0) 2021.01.05
Understanding ROS Nodes  (0) 2021.01.03
Building a ROS Package  (0) 2020.12.31
Creating a ROS Package  (0) 2020.12.31
반응형

1. Prerequisites

우선 간단한 시뮬레이터를 사용하기 위해 아래 코드를 입력한다.

$ sudo apt-get install ros-<버전이름>-ros-tutorials
(버전이름으로 melodic, kinetic 등을 사용)

 

 

2. Quick Overview of Graph Concepts

* nodes: 실행가능한 요소로 ROS에서 다른 노드들과 통신을 위해 사용된다.

* Messages: 토픽을 publish, subscribing 함에 있어 전달되는 ROS 데이터의 타입이다.

* Topics: 노드들은 토픽에 대한 메시지를 publish 하거나 subscribe할 수 있다.

* Master: 노드들이 서로를 찾을 수 있도록 한다.

* rosout: stdout/stderr 역할을 수행

* roscore: Master + rosout + parameter server 수행

 

 

3. Nodes

ROS 패키지 안의 노드들은 실행 가능한 파일들보다 적다. ROS에서 노드들은 ROS client library를 통해

서로 통신하게 되고 노드들은 Topic에 publish(send message) 혹은 subscribe(receive message) 수행.

 

 

 

4. Client Libraries

ROS client libraries는 각각 다른 언어로 작성된 노드들이 서로 통신할 수 있도록 한다.

* rospy = python client library

* roscpp = c++ client library

 

 

 

5. Roscore

ROS를 사용할때 가장먼저 시작되어야 할 부분으로 roscore을 실행하면 다음과 같은 결과를 확인할 수 있다.

 

 

6. Using rosnode

새로운 터미널을 열어 roscore을 실행시킨 후 rosnode를 입력하면 roscore가 무슨 일을 하는지 확인해볼 수 있다.

 

$ rosnode list  를 입력하면

/ rosout  이라는 출력을 확인할 수 있다.

 

이는 현재 하나의 노드(rosout 노드)가 실행중임을 의미한다. 해당 노드에 대한 자세한 정보를 확인하고 싶으면

아래 명령어를 입력한다.

 

이제 그럼 조금 더 다양한 노드들을 사용해보자.

 

 

 

7. Using rosrun

rosrun은 패키지 안의 노드를 바로 실행시킨다.

예를들어

 

위의 명령어를 입력하면 turtlesim 패키지 안의 turtlesim_node 가 실행된다.

이런 거북이가 보이게 되는데 이때 rosnode list를 통해 노드들을 확인해보면 아래와 같다.

 

 

반응형

'ROS > ROS Wiki' 카테고리의 다른 글

Using rqt_console and roslaunch  (0) 2021.01.05
Understanding ROS Services and Parameters  (0) 2021.01.05
Understanding ROS Topics  (0) 2021.01.04
Building a ROS Package  (0) 2020.12.31
Creating a ROS Package  (0) 2020.12.31
반응형

 

우분투는 윈도우와 달리 최상위 권한자라는 개념이 존재하는데

우분투의 사용자(권한)는 일반 사용자와 root로 나뉘게 된다.

 

일반 사용자는 말 그대로 일반 사용자이고 이들에겐 root의 막강한 권한을 제공하지 않는다.

즉, 중요 구성 파일을 뜯어 고칠 수 없다.

 

그럼 root 권한을 어떻게 얻을 수 있는가.

우선 아래 명령을 통해 root권한의 비밀번호를 설정해준다.

$sudo passwd root

 

그럼

$ su 명령어 혹은

$ sudo su 명령어를 통해 루트 권한을 획득할 수 있고 종료하기 위해

 

$ su - (username)을 입력하면 된다.

반응형
반응형

1. Building Packages

패키지의 dependencies 설정이 완료되면 패키지를 빌드할 수 있다.

내용을 진행하기에 앞서 환경설정 파일(setup.bash)을 source하도록 하자.

 * 리눅스 환경 설정 파일들은 수정하기만 한다고 바로 내용이 적용되는 것이 아니다. 새로운 환경설정 내용을 바로 적용하기 위해서

    source 명령어가 사용된다.

 

 

 

1.1 Usung catkin_make

catkin_make는 CMake 작업환경에서 cmake와 make가 합쳐진 도구로 볼 수 있다.

catkin_make를 사용하지 않는다면 아래와 같은 과정을 각각의 CMake프로젝트에 대해 수행하게 된다.

해당 CMake 프로젝트의 폴더 안에서 build 디렉터리를 생성하고 cmake .. 와 make 단계를 진행하게 된다.

하지만 catkin_make를 사용하면 catkin 프로젝트 안에서 아래와 같이 진행할 수 있다.

위의 명령어를 통해 catkin프로젝트의 src폴더를 찾아 빌드를 진행하게 된다. 패키지의 소스코드가 다른 폴더(예를들어 my_src라는 폴더)에 들어있다면 catkin_make 는 다음과 같이 사용될 수 있다.

 

 

 

1.2 Building Your Package

 이전 게시물에서 catkin workspace와 beginner_tutorials 패키지를 생성하였다. catkin_ws로 이동하여 src디텍터리의

내용을 확인하면 CMakeLists.txt 파일과 beginner_tutorials 디렉터리를 확인할 수 있다.

 

앞의 게시물에서 beginner_tutorials 디렉터리 아래에 catkin_create_pkg가 생성한 파일들을 담아 놓았다.

이제 catkin_make를 사용하여 이 패키지를 빌드하자.

 

catkin_ws 디렉터리에서 아래 명령어를 입력한다.

 

 

그럼 해당 디렉터리에 build폴더가 생기며 빌드가 완료된다.

(build파일이 생기는 것을 확인하지 못했으면 폴더를 삭제 후 다시 catkin_make를 해보자.)

 

 

반응형

'ROS > ROS Wiki' 카테고리의 다른 글

Using rqt_console and roslaunch  (0) 2021.01.05
Understanding ROS Services and Parameters  (0) 2021.01.05
Understanding ROS Topics  (0) 2021.01.04
Understanding ROS Nodes  (0) 2021.01.03
Creating a ROS Package  (0) 2020.12.31
반응형

1. What makes up a catkin Package?

우선 내용을 다루기 전에 ROS에서 자주 등장하는 catkin이 무엇인지 알아보자.

Catkin은 ROS의 빌드 시스템으로 볼 수 있고 패키지들을 효율적으로 빌드하여 다른 상황에서 쉽게 사용될 수 있도록 한다.

ROS는 CMake를 ROS에 맞도록 특화면 catkin 빌드 시스템을 만들었다.

그럼 CMake는 무엇인가?

CMake는 플랫폼과 독립적으로 Build Process를 기술한 파일로 특정 IDE나 특정 빌드 도구에 한정되어 하나의 형식으로

한정되는(예를들어 Visual Studio의 sln/vcproj를 다른 플랫폼에서 바로 빌드할 수 없음) 문제점들을 CMake를 통해

해결할 수 있다.

 

ROS의 패키지들이 catkin package로 다뤄지기 위해선 몇가지 조건이 필요하다.

 

* 패키지는 반드시 catkin을 따르는 .xml파일이 필요하다.

   패키지.xml 파일은 패키지에 대한 메타 정보를 제공한다.

   (메타정보 : 데이터를 효율적으로 이용하기 위해 설명해놓은 정보)

 

* 패키지는 반드시 catkin을 사용하는 CMakeLists.txt 파일을 포함하고 있어야 한다.

 

* 각각의 패키지는 각각의 폴더를 갖고 있어야 한다.

   이는 다수의 패키지들이 같은 경로를 공유할 수 없다는 것을 의미한다.

 

 

 

2. Packages in a catkin Workspace

catkin 패키지들은 catkin workspace를 통해 사용하는 것이 좋지만 catkin 패키지만을 독립적으로 빌드할 수 있다.

workspace는 아래와 같은 형태를 갖는다.

 

튜토리얼을 시작하기 전에 새로운 empty catkin workspace를 만들자.

(참고: wiki.ros.org/catkin/Tutorials/create_a_workspace)

 

 

 

3. Creating a catkin Package

새로운 catkin package를 만들기 위한 catkin_create_pkg 스크립트 사용법을 다루고 이를 통해 할 수 있는 작업을 다룬다.

 

우선 위의 과정에서 생성한 empty catkin workspace에서의 경로에서 source 경로로 이동한다.

'beginner_tutorials'라는 새로운 패키지를 생성하기 위해 std_msgs, roscpp, rospy에 의존적인

catkin_create_pkg 스크립트를 사용한다.

위의 과정을 통해 package.xml, CMakeLists.txt 등이 담긴 beginner_tutorials 폴더를 생성하게 되고

catkin_create_pkg 패키지에 부여한 정보들을 통해 설정되게 된다.

우리는 [depend1], [depend2], [depend3]에 의존적인 package_name 패키지를 생성한 것이다.

 

 

 

4. Building a catkin workspace and sourcing the setup file

이제 catkin workspace의 패키지를 빌드해보자.

이를 진행하면 devel 디렉터리 안에 /opt/ros/melodic 안에 있는 내용들과 유사한 구조의 파일들이 생성되게 된다.

workspace를 ROS 환경에 추가하기 위해 아래 내용을 진행한다.

 

 

 

5. Package Dependencies

5.1 First-order dependencies

 

앞에서 catkin_create_pkg 패키지를 사용할때 몇가지 의존성을 설정하였다(roscpp, rospy, std_msgs).

이들은 rospack tool을 통해 확인할 수 있다.

위의 내용을 통해 rospack은 catkin_create_pkg를 실행할 때 사용되는 arguments들을 나타내는 것을 확인할 수 있다.

이러한 의존성(dependencies)는 package.xml 파일에 저장되게 된다.

 

5.2 Indirect Dependencies

 

대부분의 경우 하나의 dependency는 각각의 dependencies를 갖고 있는데 예를들어 rospy 패키지는 다음과 같은

dependencies를 갖는다.

그리고 패키지들은 다수의 직접적이지 않은(Indirect) dependencies를 갖는데 rospack을 통해 이들을 확인할 수 있다.

 

6. Customizing Your Package

catkin_create_pkg를 통해 실행되는 파일들을 살피며 각각의 Customizing을 통해 패키지를 설정한다.

 

 

6.1 Customizing the package.xml

새로운 패키지 안의 package.xml 파일이 실행된다.  package.xml을 살펴보자.

 

 

6.1.1 description tag

.xml 파일의 line5에 위치한 description 부분을 수정한다. 문장은 짧게 구성되어야 하고 짧게 구성하기 힘든 경우

분할하여 작성하여야 한다.

 

6.1.2 maintainer tags

이는 다른 사람들이 패키지와 관련하여 어떻게 컨텍할 수 있을지 표기하는 부분이다. 적어도 하나의 maintainer tag가 요구되고

maintainer의 이름은 tag의 중앙부에 위치시킨다.

혹은 이메일을 남기기도 한다.

 

6.1.3 license tags

open source 라이센스나 소프트웨어 라이센스 등을 표시한다.

 

6.1.4 dependencies tags

dependencies는 build_depend, buildtool_depend, exec_depend, test_depend 로 나뉘어진다.

자세한 내용은 wiki.ros.org/catkin/package.xml#Build.2C_Run.2C_and_Test_Dependencies 를 참고하자.

 

위의 과정에서 std_msgs, roscpp, rospy를 catkin_create_pkg 패키지의 arguments로 설정하였으므로

다음과 같이 표시된다.

 

catkin 에서의 buildtool_depend를 디폴트로 하여 지정한 dependencies들이 표시된다.

우리의 경우 지정한 dependencies들이 빌드과정과 실행과정에서 모두 사용 가능하기를 원하므로 exec_depend 태그를

추가해준다.

6.1.5 Final package.xml

최종적인 xml 파일의 형태를 확인한다.

 

6.2 Customizing the CMakeLists.txt

위의 과정을 통해 package.xml 파일은 당신의 package에 맞게 최적화되었다.

CMakeLists.txt 파일은 ROS 코드를 빌드하는 과정을 통해 변경되게 될 것이다.

 

이렇게 ROS Package를 생성하는 과정을 진행하였다.

반응형

'ROS > ROS Wiki' 카테고리의 다른 글

Using rqt_console and roslaunch  (0) 2021.01.05
Understanding ROS Services and Parameters  (0) 2021.01.05
Understanding ROS Topics  (0) 2021.01.04
Understanding ROS Nodes  (0) 2021.01.03
Building a ROS Package  (0) 2020.12.31
반응형

최종 목표는 터틀봇3를 이용한 지도작성과 네비게이션으로

pc의 원격 제어로 터틀봇을 제어하여 특정 공간의 지도를 작성하고 터틀봇이 지정된 위치로

이동할 수 있게 하는 것이다.

 

우선 원격으로 제어하게 될 PC에는 Ubuntu16.04 Xenial Xerus(LTS)와 ROS(Kinetic Kame)을 설치하였고

터틀봇의 라즈베리파이를 이용하여 리눅스 라즈비안OS를 사용하였다.

 

1. 터틀봇3의 의존성 패키지를 설치하여주고 터틀봇3의 패키지까지 설치하여 준다.

 

2. 앞의 과정과 똑같이 터틀봇에 탑재된 PC(라즈베리파이)에도 의존성 패키지와 터틀봇3의

   패키지들을 설치하여 준다.

 

패키지 설치.txt
0.00MB

3. 네트워크 설정 맞추기

   Remote PC의 IP를 ifconfig  혹은 hostname -I(대문자 알파벳 I)를 통해 알아낸다.

   그리고 ~/.bashrc 파일의 ROS_HOSTNAME 및 ROS_MASTER_URI를 설정해주는데

   gedit ~/.bashrc  를 통해 수정이 가능하고 아니면 nano ~/.bashrc  에서 Alt+/  을 눌러 가장 밑으로 가서

   수정하여 주는 방법이 있다.

   가장 아래의 값에

   export ROS_HOSTNAME=192.168.0.100  (여기의 IP는 위에서 찾은 Remote PC의 IP)

   export ROS_MASTER_URI=http://${ROS_HOSTNAME}:11311

   을 입력해 준다.

 

   다음은 터틀봇PC의 IP값을 확인해준다.(이때 Remote PC와 터틀봇PC는 같은 네트워크에 연결되어있어야 한다.)

   그리고 위와 같은 방법으로 ~/.bashrc를 수정하여 주는데 이때

   export ROS_HOSTNAME=192.168.0.103  

   export ROS_MASTER_URI=http://192.168.0.100:11311

   로 HOSTNAME에는 원래 터틀봇PC의 아이피주소를 적어주고

   MASTER_URI에는 RemotePC의 아이피 주소를 넣어주도록 한다.

 

    -> ~/.bashrc의 수정이 끝났으면

         $ source ~/.bashrc    를 통해 저장하는것을 잊지말자!

 

 

4. 터틀봇 원격 조종하기

   (1) RemotePC에서 명령창을 띄운 후 $ roscore   을 실행시켜준다.

   (2) 터틀봇PC에서 turtlebot3_robot.launch 런치파일 실행

      // $ export TURTLEBOT3_MODEDL=waffle_pi

      $ roslaunch turtlebot3_bringup turtlebot3_robot.launch

   (3) RemotePC에서 turtlebot3_remote.launch  런치파일 실행

      $ roslaunch turtlebot3_bringup turtlebot3_remote.launch

   (4) RemotePC에서 turtlebot3_teleop_key 런치파일 실행

      $ export TURTLEBOT3_MODEL=waffle_pi

      $ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

 

  여기까지 완료하면 RemotePC쪽에 w / a s d / x  를 이용하여 터틀봇을 조종할 수 있도록 뜨게된다.

 

(이 과정에서 방화벽이 해지되어있는지 확인하여야하고 이 과정이 잘 진행되지 않는다면

  터틀봇 PC에서   $ sudo ufw disable     을 통해 방화벽을 해지시켜줘야한다.)

   

 

위의 과정들을 진행하면서 터틀봇pc와 remotePC를 모두 사용해야하는 불편함이 있다.

나의 경우 터틀봇pc(라즈베리파이)에 키보드와 마우스, 모니터를 연결하여 사용하면서

동시에 remotePC에서도 조작을 하여야했기에 굉장히 책상 위가 번잡해지는 불편함이 있었는데

SSH통신을 통해 이를 해결할 수 있었다.

 

다음은 RemotePC에서 TurtlebotPC를 원격으로 접속할 수 있는 방법이다.

그러기 위해서 두 PC를 같은 네트워크에 연결하고

RemotePC에서

$ ssh pi@192.168.0.100   을 입력하여 준다.

여기서 pi는 turtlebotPC의 커맨드창에 보면

작업자이름@작업환경 :     이 표시되게 되는데 이 때 작업자 이름을 나타내고

뒤의 IP주소는 TurtlebotPC의 IP 주소이다.

 

 

 

 

반응형

'ROS > TURTLEBOT3' 카테고리의 다른 글

TURTLEBOT3(waffle_pi)를 이용한 SLAM, NVIGATION  (2) 2019.10.03
반응형

앞에서 Hough Transform(허프변환)을 이용하여 직선을 검출하게 되는 과정을 나타내었다.

 

그리고 이번 글에서는 이를 응용하여 직선이 아닌 원을 검출하게 되는 과정을 나타내어 보겠다.

 

[그림.1]

위에 흔하게 볼 수 있는 x-y평면 위에 반지름이 r인 원을 그려보았다.

이 원은 (x-a)^2 + (y-b)^2 = r^2 으로 나타내어 질 수 있다.

 

그럼 [그림.1]에서 그려진 붉은색 원 위의 임의의 점 P1에 대하여 생각해보자.

[그림.2]

P1을 지나는 원은 굉장히 많이 존재할 것이다.

[그림.3]

[그림.3]을 통해 볼 수 있듯이 P1을 지나는 원은 무수히 많고 각각의 원은 모두 다른 중심, 다른 반지름을 갖고있다.

즉 (x-a)^2 + (y-b)^2 = r^2 의 식에서 중심을 나타내는 a와 b, 그리고 반지름을 나타내는 r의 값이 모두

다르다는 것이다!

 

그럼 점 P1을 지나는 원을 타나내는 식을 써보도록 하자.

(x1, y1)의 점은 항상 포함될 것이고 a,b,r은 매개변수가 될 것이다.

 

앞에서 Hough Transform의 매개변수는 a와 b 로 총 2개였지만 여기서는 r까지 포함되어 3개의 매개변수,

즉 3차원으로 나타내어 지게 된다.

즉 (x-a)^2 + (y-b)^2 = r^2 의 식을 x축, y축이 아닌 a축, b축, r축에 대하여 3차원으로 나타내어 보자!

 

우선 식을 좀 간단하게 (a-x)^2 + (b-y)^2 = r^2 의 형태로 바꿔보자.

[그림.4]

그럼 위와 같이 뒤집어진 원뿔형의 모습으로 그려지게 될 것이다.

 

원뿔형이 그려진다는 것에 대해 이해가 가지 않는다면

r값에 값을 하나씩 넣어보면서 생각해보자.

우선 r=0 일때 a=x, b=y 가 된다.

따라서 r축의 값은 0이되고 a의 값은 x, b의 값은 y가 되는 한 점을 나타내게 된다.

 

다음으로 r값에 2를 넣어보자.

(a-x)^2 + (b-y)^2 = 2^2 의 형태로 이는 중심이 (x,y)이고 반지름이 2인 원의 방정식이 된다.

즉 r축의 값이 2일땐 중심은 (x,y), 반지름은 2인 원이 그려지게 된다.

 

다음으로 r값에 3을 넣어보자.

위와 같은 방식으로 r축의 값이 3일때 중심은 (x,y), 반지름은 3인 원이 그려지게 된다.

 

이러한 과정의 반복으로 a-b-r 좌표계에는 무한히 큰 뒤집어진 원뿔형의 모습이 그려지게 된다.

 

 

그럼 이제 x-y평면상의 다른 점 P2(x2, y2)에 대하여 생각해보자.

점 P2역시 이 점을 지나는 원은 무수히 많이 존재하게 될 것이다.

[그림.5]

 

그리고 위의 과정과 똑같이 점 P2를 지나는 모든 원들을 a-b-r축을 이용하여 표시하여 보자.

 

[그림.6]

위의 [그림.6] 과 같이 나타내어질 수 있을 것이고 여기서 보이는 원뿔은 무한히 큰 원뿔이기 때문에

이때 발생되는 접점의 a,b,r값을 알 수 있고 여기에 해당하는 a,b,r값을 이용하여 x-y 평면에 나타내게 되면

P1과 P2 모두 지나게 되는 원을 그릴 수 있게 된다. ([그림.7] 참고)

 

[그림.7]

따라서 x-y평면 위의 임의의 점들이 a-b-r좌표계에서 동일한 부분에 계속적으로 겹치게 된다면

이 임의의 점들은 모두 동일한 원 위에 나타내어 진다고 볼 수 있다.

그리고 Threshold로 지정된 갯수 이상의 점들이 동일한 원 위에 있게되면 이를 원으로 판단하여 검출하게 된다.

반응형

+ Recent posts