반응형

When I tried to build the workspace, error about cv_bridge is occured.

 

fig.1

 

The error shows about the library link structure.

So I had to check opencv version and correct the lib path for cv_bridge.

fig.2

 

I could get the lib path by typing the commend showd upward picture.

 

And then I need to change the lib path in cv_bridge.

For linking library process, we have to edit cv_bridgeConfig.cmake file

 

cd /opt/ros/melodic/share/cv_bridge/cmake sudo gedit cv_bridgeConfig.cmake

sudo gedit cv_bridgeConfig.cmake

 

 

fig.3

upward picture shows the cmake file and we can check "_include_dirs" part.

we have to edit the setting of opencv include path to fig.2

 

It would be like below.

 

반응형
반응형

ROS작업을 진행하다 무엇인가 설정을 잘못 건드려 roslaunch + tab을 했는데

패키지 이름들이 출력되지 않고 해당 디렉토리의 파일들만 출력되는 경우가 발생했다.

 

또한 roscd roslaunch 를 입력하여도

 

"command 'roscd' not found, ...."의 내용만 출력되는 문제가 발생하였다.

 

분명 패키지를 다운받았는데 해당 패키지의 내용들이 실행되지 않을 때가 있다.

이걸로 꽤나 시간을 많이 썼는데 생각보다 간단한 실수였다..

 

패키지만 다운받아놓고 source를 진행하지 않아 발생한 문제였다.

 

보통 source를 진행할때

$ source ~/.bashrc  로 진행하게 된다.

하지만 패키지를 받을 때

$ sudo apt-get install ros-melodic-..  와 같은 명령어를 통해 받은 것이 아니라

workspace를 생성하고 저장소의 URL을 통해 설치한 것 이라면 해당 workspace를 source 해주어야 한다.

 

아주 기본적인 내용이지만 자주 놓치게 되는 것 같다.

 

해당 패키지를 적용시키려면 반드시 source 해주자.

 

 

 

* 참고로 source 는 스크립트 파일을 수정한 후에 수정된 값을 적용시키기 위한 명령어이다.

보통 bashrc파일은 사용자가 로그인할때 읽어지는 파일이라 OS에서 로그아웃 혹은 재부팅을 하여야 적용되는데

source과정을 통해 수정된 내용이 바로 적용될 수 있도록 해준다.

반응형

'ROS > ROS 기초' 카테고리의 다른 글

Ubuntu 18.04 ROS 설치하기(ROS Melodic)  (1) 2020.12.22
turtlesim 을 이용한 거북이 움직이기  (0) 2019.09.16
ROS로 카메라 사용하기(영상 확인)  (0) 2019.09.16
ROS 용어 정리  (0) 2019.09.16
반응형

$ pkg-config --modversion opencv   명령어를 통해 현재 설치된 opencv의 버전을 확인하자.

 

$ sudo apt-get purge libopencv* python-opencv

 

$ sudo find /usr/local/ -name "*opencv*" -exec rm {} \;

위의 명령어를 진행하는데 삭제가 되지 않는 파일들이 출력된다면 관리자권한으로 모두 삭제해주자.

(GUI로 삭제가 안되면 커멘드로 삭제해야 할 수도 있다.)

 

$ sudo apt autoremove -y

 

 

다시  $ pkg-config --modversion opencv  를 통해 제대로 삭제되었음을 확인해보자.

 

삭제가 잘 되었다면 이제 재설치를 진행한다.

 

 

$ sudo apt update -y
$ sudo apt upgrade -y

$ sudo apt-get install build-essential cmake unzip pkg-config
$ sudo apt-get install libjpeg-dev libpng-dev libtiff-dev
$ sudo apt-get install -y build-essential cmake pkg-config git
$ sudo apt-get install -y libjpeg-dev libtiff5-dev libpng-dev
$ sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libxine2-dev
$ sudo apt-get install -y libv4l-dev v4l-utils
$ sudo apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev 
$ sudo apt-get install -y libgtk2.0-dev
$ sudo apt-get install -y mesa-utils libgl1-mesa-dri libgtkgl2.0-dev libgtkglext1-dev
$ sudo apt-get install -y libatlas-base-dev gfortran libeigen3-dev
$ sudo apt-get install -y python2.7-dev python3-dev python-numpy python3-numpy
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev v4l-utils libxvidcore-dev libx264-dev libxine2-dev
$ sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
$ sudo apt-get install libgtk-3-dev
$ sudo apt-get install mesa-utils libgl1-mesa-dri libgtkgl2.0-dev libgtkglext1-dev
$ sudo apt-get install libatlas-base-dev gfortran libeigen3-dev

$ mkdir ~/opencv
$ cd ~/opencv
$ wget -O opencv.zip https://github.com/opencv/opencv/archive/3.3.1.zip
$ unzip opencv.zip && mv opencv-3.3.1 opencv
$ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/3.3.1.zip
$ unzip opencv_contrib.zip && mv opencv_contrib-3.3.1 opencv_contrib

$ cd opencv/
$ mkdir build
$ cd build

$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_TBB=OFF \
-D WITH_IPP=OFF \
-D WITH_1394=OFF \
-D BUILD_WITH_DEBUG_INFO=OFF \
-D BUILD_DOCS=OFF \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D BUILD_EXAMPLES=OFF \
-D BUILD_TESTS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D WITH_QT=OFF \
-D WITH_GTK=ON \
-D WITH_OPENGL=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
-D WITH_V4L=ON  \
-D WITH_FFMPEG=ON \
-D WITH_XINE=ON \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D WITH_CUDA=OFF \
../

$ make -j4
$ sudo make install
$ sudo sh -c 'echo '/usr/local/lib' > /etc/ld.so.conf.d/opencv.conf'
$ sudo ldconfig

 

 

 

반응형

'ROS' 카테고리의 다른 글

ROS cv_bridge Error  (0) 2021.06.11
VINS-MONO  (0) 2021.03.09
Realsense D435i Rtabmap  (0) 2021.03.09
RPLIDAR A3 실행(Hector SLAM In ROS)  (0) 2021.02.02
Ubuntu에서 ROS를 통해 Intel Realsense D435i 사용하기  (1) 2021.01.06
반응형

www.programmersought.com/article/16831083623/

blog.csdn.net/qq_41839222/article/details/86552367

 

如何用Realsense D435i运行VINS-Mono等VIO算法 获取IMU同步数据_Manii-CSDN博客

前言 Intel Realsense D435i在D435的基础上硬件融合了IMU,然而目前网上关于这款摄像头的资料非常少,本文主要介绍自己拿着d435i历经曲折最后成功运行VINS-Mono的过程。。。 重要 最近官方更新了GitHub

blog.csdn.net

 

Run VINS-Mono from Zero on Realsense D435i - Programmer Sought

Run VINS-Mono from Zero on Realsense D435i The test D435i process was quite smooth. It took only one afternoon to get it. It was much better than the previous tests of ZR300 and SR300. Here is the whole process of running VINS-Mono with D435i (no technical

www.programmersought.com

위의 블로그 내용을 참고하였다.

 

OpenCV 버전은 3.3.1

Eigen3 버전은 3.3.7 을 사용하였다.

 

 

 

 

 

 

$ cd ~/catkin_ws/src

$ git clone https://github.com/HKUST-Aerial-Robotics/VINS-Mono.git

$ cd ..

$ catkin_make

$ source ~/catkin_ws/devel/setup.bash

 

 

 

 

위의 내용에서 catkin_make를 실행하는 중 에러가 발생하게 된다.

CMakeLists.txt를 확인해보면 19번째 줄에서 Ceres 패키지를 불러오는데

Ceres가 설치되어있지 않아 에러가 발생하는 것으로 보인다.

Ceres 설치를 위해 아래 과정들을 진행해준다.

 

ceres-solver.org/installation.html#linux

 

Installation — Ceres Solver

Although a full tutorial on CMake is outside the scope of this guide, here we cover some of the most common CMake misunderstandings that crop up when using Ceres. For more detailed CMake usage, the following references are very useful: When a project like

ceres-solver.org

 

# CMake
$ sudo apt-get install cmake

# google-glog + gflags
$ sudo apt-get install libgoogle-glog-dev

# BLAS & LAPACK
$ sudo apt-get install libatlas-base-dev

# Eigen3
$ sudo apt-get install libeigen3-dev

# SuiteSparse and CXSparse (optional)
# - If you want to build Ceres as a *static* library (the default)
#   you can use the SuiteSparse package in the main Ubuntu package
#   repository:
$ sudo apt-get install libsuitesparse-dev

# - However, if you want to build Ceres as a *shared* library, you must
#   add the following PPA:
$ sudo add-apt-repository ppa:bzindovic/suitesparse-bugfix-1319687
$ sudo apt-get update
$ sudo apt-get install libsuitesparse-dev

아래 코드는 workspace에서 진행해준다.

즉, ceres-solver 폴더와는 별개로 ceres-bin을 생성한 후 아래 과정을 진행한다.

$ mkdir ceres-bin
$ cd ceres-bin
$ cmake ../ceres-solver
$ make -j3
$ make test
$ make install

우분투 16.04 버전에서 ceres-solver을 빌드하게 되면 eigen3의 버전문제로 문제가 발생하게 된다.

eigen3의 버전은 3.3이상이 요구되지만 16.04에서 설치된 것은 3.2.92이다($ pkg-config --modversion eigen3)

 

이럴경우 상위 버전을 다운받아 직접 업그레이드를 진행해준다.

우선 아래 사이트로 이동한다.

packages.ubuntu.com/bionic/libeigen3-dev

 

Ubuntu – Details of package libeigen3-dev in bionic

[  xenial  ] [  bionic  ] [  focal  ] [  groovy  ] [  hirsute  ] Package: libeigen3-dev (3.3.4-4) [universe] lightweight C++ template library for linear algebra Other Packages Related to libeigen3-dev dep: pkg-config manage compile and link flags

packages.ubuntu.com

 

 

 

 

아래 Architecture 에서 all을 클릭한 후 asia의 kr을 다운받는다.

 

그럼 해당 파일과 같은 경로에서

$ sudo dpkg -i libeigen3-dev_3.3.4-4_all.deb

 

 

 

하지만 마지막 단계인 make install 을 진행하면 위와 같은 에러가 뜨면서 install 이 failed 했다는 문구가 출력된다.

"Maybe need administrative privileges" 라는 에러를 찾아보니 작업자관리자로 실행해보라는 내용을 찾을 수 있었고

su  를 통해 권한을 변경한 후 make install을 진행하니 제대로 완료되었다.

 

 

그럼 다시 vins-mono의 workspace로 돌아와 catkin_make를 진행해주자.

 

이번엔 opencv에서 문제가 발생한다.

opencv library를 제대로 불러오지 못하는 것 같다.

 

에러가 발생하는 파일의 CMakeLists로 들어가보자.

~/workspace/catkin_ws_mono/src/VINS-Mono/camera_model/ 의 CMakeLists 파일이였다.

하단부에 보면 target_link_libraries로 OpenCV_LIBS 가 링크된 것을 볼 수 있는데 여기서 제대로 못불러오는 것으로 보인다.

 

 

확인결과 opencv의 버전 문제였다.

 

Vins-MONO의 경우 OpenCV 버전 3.3.1, Eigen 버전 3.3.3 에서 잘 진행되는 것을 확인하였다.

 

기존 내 opencv는 3.2.0으로 위의 문제가 발생한 것이다.( $ pkg-config --modversion opencv   로 확인)

 

그럼 기존 설치된 opencv를 제거하고 3.3.1을 재설치해준다.

 

이 과정에서

/usr/local/include  경로와 /usr/local/lib/cmake 경로에 opencv의 다른 버전이 설치되어있는지 확인하고

이들을 제거해줘야한다.

$ sudo rm ~~~ -r 을 통해 해당 폴더를 삭제해준다.

 

 

기존 설치된 opencv를 삭제하고 새로운 버전을 재설치하는 과정은 다른 게시물에서 다루도록 하겠다.

 

$ catkin_make 가 정상적으로 진행되면 다시 돌아와 아래 과정을 진행한다.

 

우선 .bag 파일을 불러와 시뮬레이션을 실행시켜보자.

projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets

 

kmavvisualinertialdatasets – ASL Datasets

The EuRoC MAV Dataset This web page presents visual-inertial datasets collected on-board a Micro Aerial Vehicle (MAV). The datasets contain stereo images, synchronized IMU measurements, and accurate motion and structure ground-truth. Those data sets were p

projects.asl.ethz.ch

 

$ roslaunch vins_estimator euroc.launch

$ roslaunch vins_estimator vins_rviz.launch

$ rosbag play MH_01_easy.bag

 

.bag 파일을 실행시키는데 위와 같은 에러가 떠서 당황했다.

 

이는 아직 bag파일의 다운로드가 완료되지 않았기에 발생한 에러이다.

 

용량이 크므로 천천히 다운로드를 기다리고 다시 실행새보자.

 

 

 

그리고 Realsense를 통해 작업을 진행하다가 아래와 같은 문제가 발생하게 되었다.

 

 

내용을 살펴보면

OpenCV Error: Assertion failed ~~~  의 내용이 보인다.

이는 이미지의 프레임 크기를 조절하여 해결하였다.

 

우선

$ roslaunch realsense2_camera rs_camera.launch

명령어를 통해 realsense 패키지를 실행시키고

 

$ rostopic list

 

위의 명령어를 통해 topic내용들을 확인한다.

여기서 /camera/color/camera_info 를 확인할 수 있을 것이다.

 

그럼

$ rostopic echo /camera/color/camera_info를 확인하여보면

 

이미지 프레임의 크기가 1280*720임을 확인할 수 있다.

 

그럼 VINS-Mono/config/realsense/realsense_color_config.yaml 파일을 수정하도록 하자.

 

그럼 아래와 같은 결과를 확인할 수 있다.

 

 

반응형
반응형

wiki.ros.org/rtabmap_ros/Tutorials/HandHeldMapping

 

rtabmap_ros/Tutorials/HandHeldMapping - ROS Wiki

Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags. RGB-D Handheld Mapping Description: This tutor

wiki.ros.org

 

 

$ roslaunch realsense2_camera rs_camera.launch align_depth:=true unite_imu_method:="linear_interpolation" enable_gyro:=true enable_accel:=true

 

$ rosrun imu_filter_madgwick imu_filter_node \ _use_mag:=false \ _publish_tf:=false \ _world_frame:="enu" \ /imu/data_raw:=/camera/imu \ /imu/data:=/rtabmap/imu

 

$ roslaunch rtabmap_ros rtabmap.launch \ rtabmap_args:="--delete_db_on_start --Optimizer/GravitySigma 0.3" \ depth_topic:=/camera/aligned_depth_to_color/image_raw \ rgb_topic:=/camera/color/image_raw \ camera_info_topic:=/camera/color/camera_info \ approx_sync:=false \ wait_imu_to_init:=true \ imu_topic:=/rtabmap/imu

 

반응형
반응형

1. Work Space 생성

   우선 Work Space를 생성해준다.

 

$ mkdir catkin_ws && mkdir catkin_ws/src

 

 

2. 패키지 다운로드

   위에서 생성한 src 디렉토리에서 rplidar 와 Hector_SLAM 패키지를 다운받아준다.

 

$ git clone github.com/robopeak/rplidar_ros

$ git clone github.com/tu-darmstadt-ros-pkg/hector_slam

 

그럼 src경로에 rplidar 디렉토리와 hector_slam 디렉토리가 생성된다.

이제 파일들을 수정해주자.

 

 

$ gedit catkin_ws/src/hector_slam/hector_mapping/launch/mapping_default.launch

 

 

 

 

$ gedit catkin_ws/src/hector_slam/hector_slam_launch/launch/tutorial.launch

 

 

 

 

3. Build

수정이 완료되었으면 catkin_ws 경로로 돌아와 catkin_make를 통해 빌드를 진행해주자.

 

$ cd ~/catkin_ws

$ catkin_make

 

위의 과정을 통해 catkin_make를 진행하면 catkin_ws 경로에 devel 폴더와 build폴더가 생성된다.

 

$ source /devel/setup.bash

 

 

4. Hector SLAM

그럼 이제 LIDAR센서를 통해 지도를 그려보자.

라이다 센서를 연결한 후 USB 포트에 권한을 설정해주는 과정을 진행한다.

 

$ ls /dev/ttyUSB*

위의 명령어를 통해 USB로 연결되어있는 LIDAR센서의 포트를 확인해보자.

(보통 USB0으로 검색되는 것 같다.)

 

USB0으로 검색되는 경우 아래 명령어를 통해 권한을 설정해주자.

 

$ sudo chmod 666 /dev/ttyUSB0

 

 

$ roslaunch rpldiar_ros rplidar_a3.launch

위의 명령어를 통해 라이다를 작동시키고

 

$ roslaunch hector_slam_launch tutorial.launch

위의 명령어를 통해 hector slam을 진행해보자.

 

반응형
반응형

가장 먼저 Intel realsense sdk를 설치한다.

www.intelrealsense.com/sdk-2/

 

Intel RealSense SDK 2.0 – Intel RealSense Depth and Tracking cameras

Free Cross-platform SDK for depth cameras (lidar, stereo, coded light). Windows, Linux and other. 10+ wrappers including ROS, Python, C/C++, C#, unity. Try!

www.intelrealsense.com

 

$ export ROS_VER=melodic
$ sudo apt-get install ros-melodic-realsense2-camera

 

workspace를 만들기 위해 catkin_ws_d435i 라는 이름의 디렉터리를 생성한다.

$ mkdir -p ~/catkin_ws_d435i/src
$ cd ~/catkin_ws_d435i/src/

 

Intel RealSense 패키지를 다운받자.

git clone https://github.com/IntelRealSense/realsense-ros.git
cd realsense-ros/
git checkout `git tag | sort -V | grep -P "^2.\d+\.\d+" | tail -1`
cd ..

그리고 아래 과정을 통해 catkin_make를 설치하자.

catkin_init_workspace
cd ..  (catkin_ws_d435i 폴더로 이동)
catkin_make clean
catkin_make -DCATKIN_ENABLE_TESTING=False -DCMAKE_BUILD_TYPE=Release
catkin_make install

 

setup.bash 파일을 source한다.

echo "source ~/catkin_ws_d435i/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

 

* 카메라 노드 실행

$ roslaunch realsense2_camera rs_camera.launch

관계를 살펴보기 위해 rqt_graph를 실행해보자.

 

* 포인트클라우드 생성

우선 위에서 실행한 roslaunch realsense2_camera 를 종료하고 아래 명령어를 실행한다.

$ roslaunch realsense2_camera rs_camera.launch filters:=pointcloud

상단의 Fixed Frame을 camera_color_frame으로 변경해야 좌표계를 맞게 설정하게 된다.

 

 

 

*imu 사용하기

 

rostopic list 를 실행하여 확인해보면 imu에 대한 topic이 확인되지 않는다.

 

$ roslaunch realsense2_camera rs_camera.launch filters:=pointcloud unite_imu_method:="linear_interpolation" enable_gyro:=true enable_accel:=true

위에서 실행시켰던 roslaunch 명령어에 몇가지 arguments를 추가해주자.

 

해당 arguments 는 rs_camera.launch 파일에 작성되어있는 부분을 수정해 준 것이다.

 

그럼 다음으로 imu값을 받아오기 위해 imu tools 패키지를 설치해주자.

 

$ sudo apt-get install ros-melodic-imu-tools

 

그럼 이제 rviz를 실행시켜 시각화해보자.

이때 "Global Option" 의 "Fixed Frame" 은 camera_accel_optical.. 로 설정하고

IMU 항목과 PointCloud2 항목에서 Topic을 설정해준다.

imu 센서의 값들을 확인해보고자 한다면 아래 명령어를 실행시키자.

 

$ rostopic echo /camera/imu
반응형

'ROS' 카테고리의 다른 글

VINS-MONO  (0) 2021.03.09
Realsense D435i Rtabmap  (0) 2021.03.09
RPLIDAR A3 실행(Hector SLAM In ROS)  (0) 2021.02.02
ROS에서 Realsense D435i 실행시키기  (0) 2020.12.28
ROS IP주소를 이용한 다른pc의 캠(CAM) 사용  (0) 2019.09.16
반응형

 

1. Service Node 작성

(앞의 게시물에서 다루었던 AddTwoInts.srv 과정을 진행하지 않았다면 이것부터 진행한다.)

 

 

1.1 The Code

 

패키지 경로로 이동한 후 src/add_two_server.cpp 파일을 생성하고 아래 코드를 붙여넣자.

#include "ros/ros.h"
#include "beginner_tutorials/AddTwoInts.h"

bool add(beginner_tutorials::AddTwoInts::Request  &req,
         beginner_tutorials::AddTwoInts::Response &res)
{
  res.sum = req.a + req.b;
  ROS_INFO("request: x=%ld, y=%ld", (long int)req.a, (long int)req.b);
  ROS_INFO("sending back response: [%ld]", (long int)res.sum);
  return true;
}

int main(int argc, char **argv)
{
  ros::init(argc, argv, "add_two_ints_server");
  ros::NodeHandle n;

  ros::ServiceServer service = n.advertiseService("add_two_ints", add);
  ROS_INFO("Ready to add two ints.");
  ros::spin();

  return 0;
}

 

 

1.2 The Code Explained

 

#include "ros/ros.h"
#include "beginner_tutorials/AddTwoInts.h"

srv파일을 통해 실행되는 헤더파일들을 선언한다.

 

bool add(beginner_tutorials::AddTwoInts::Request  &req,
         beginner_tutorials::AddTwoInts::Response &res)

함수 선언으로 srv파일에 정의된 대로 2개의 request를 통해 하나의 response를 갖고 최종적으로 boolean값을 return한다.

 

{
  res.sum = req.a + req.b;
  ROS_INFO("request: x=%ld, y=%ld", (long int)req.a, (long int)req.b);
  ROS_INFO("sending back response: [%ld]", (long int)res.sum);
  return true;
}

response로 정의된 sum은 request되는 변수 a와 b의 합으로 정의된다.

ROS_INFO함수를 통해 request된 값과 reponse되는 값을 출력한다.

 

ros::ServiceServer service = n.advertiseService("add_two_ints", add);

NodeHandle을 통해 service를 발행하고 누가 쿼리를 날려주면 add함수를 실행하고

정해놓은 service 타입인 beginner_tutorials 패키지의 AddTwoInts.srv로 만들어진 AddTwoInts.h파일을 이용하여

서비스타입을 받아온다. 그 중 Request는 client에서 request하는 값들이고 Response는 client로 보내줄 값들이다.

 

 

2. Writing the Client Node

 

2.1 The Code

 

src/add_two_ints_client.cpp 파일을 생성하고 아래 코드를 붙여넣자.

 

#include "ros/ros.h"
#include "beginner_tutorials/AddTwoInts.h"
#include <cstdlib>

int main(int argc, char **argv)
{
  ros::init(argc, argv, "add_two_ints_client");
  if (argc != 3)
  {
    ROS_INFO("usage: add_two_ints_client X Y");
    return 1;
  }

  ros::NodeHandle n;
  ros::ServiceClient client = n.serviceClient<beginner_tutorials::AddTwoInts>("add_two_ints");
  beginner_tutorials::AddTwoInts srv;
  srv.request.a = atoll(argv[1]);
  srv.request.b = atoll(argv[2]);
  if (client.call(srv))
  {
    ROS_INFO("Sum: %ld", (long int)srv.response.sum);
  }
  else
  {
    ROS_ERROR("Failed to call service add_two_ints");
    return 1;
  }

  return 0;
}

 

 

2.2 The Code Explained

 

ros::ServiceClient client = n.serviceClient<beginner_tutorials::AddTwoInts>("add_two_ints");

위의 과정을 통해 add_tow_ints 서비스의 client를 생성한다. ros::ServiceClient 객체는 나중에 서비스를 호출하기 위해 사용된다.

 

beginner_tutorials::AddTwoInts srv;
srv.request.a = atoll(argv[1]);
srv.request.b = atoll(argv[2]);

argv[1], argv[2] 로 들어온 문자를 longlong 정수형으로 변환하여 request 변수인 a와 b에 저장한다.

 

if (client.call(srv))

이 부분이 실질적으로 서비스를 호출한다. 서비스 호출이 제대로 완료되면 call()함수가 True를 반환하고 값이 srv에 들어가고

reponse가 가능해진다.

 

 

 

3. Building your nodes

 

~/catkin_ws/src/beginner_tutorials/CMakeLists.txt 파일의 하단부에 아래 내용을 삽입하여 수정하도록 하자.

add_executable(add_two_ints_server src/add_two_ints_server.cpp)
target_link_libraries(add_two_ints_server ${catkin_LIBRARIES})
add_dependencies(add_two_ints_server beginner_tutorials_gencpp)

add_executable(add_two_ints_client src/add_two_ints_client.cpp)
target_link_libraries(add_two_ints_client ${catkin_LIBRARIES})
add_dependencies(add_two_ints_client beginner_tutorials_gencpp)

 

이제 catkin_make를 실행하자.

# In your catkin workspace
cd ~/catkin_ws
catkin_make

 

 

4. Running the nodes

 

4.1 Runnning the Server

 

$ rosrun beginner_tutorials add_two_ints_server

그럼 아래와 같은 문구가 출력되게 된다.

4.2 Running the Client

$ rosrun beginner_tutorials add_two_ints_client 1 3

위의 명령어를 입력하면 client shell과 server shell에서 아래와 같이 각각 출력됨을 확인할 수 있다.

 

 

반응형

+ Recent posts