Posted by 신영식
,

1. data recording

예제
roscore rosrun turtlesim turtlesim_node rosrun turtlesim turtle_teleop_key

발행중인 토픽 목록 확인하기

rostopic list -v

data를 기록할 폴더를 만들고 모든 topic을 기록한다
mkdir ~/bagfiles cd ~/bagfiles rosbag record -a
-a 옵션으로 모든 topic을 기록한다.

rosbag record -O subset /turtle1/command_velocity /turtle1/pose
data의 일부만 기록하기


기록된 bag파일 정보 확인

rosbag info <your bagfile>

기록된 bag파일 재생

rosbag play <your bagfile>


Posted by 신영식
,

1. Service Node 실행

$ rosrun beginner_tutorials add_two_ints_server


2. Client Node 실행

$ rosrun beginner_tutorials add_two_ints_client 1 3


Posted by 신영식
,

publisher와 subscriber처럼 항상 메시지를 주고 받는게 아니라 client가 service를 request하였을 때만 response해주는 것이다


1. Service Node 작성
$ roscd beginner_tutorials
$ cd src
$ vi add_two_ints_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;
}


2. Client Node 작성
$ roscd beginner_tutorials
$ cd src
$ vi 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;
}


3. CMakefileLists.txt 수정

아래 두 줄을 추가해 준다.

rosbuild_add_executable(add_two_ints_server src/add_two_ints_server.cpp) rosbuild_add_executable(add_two_ints_client src/add_two_ints_client.cpp)

빌드
rosmake beginner_tutorials


'ROS electric' 카테고리의 다른 글

ROS data 기록하고 재생하기  (0) 2014.01.08
Simple Service와 Client 실행  (0) 2014.01.08
Simple publisher와 subscriber 실행  (0) 2014.01.08
Simple publisher와 subscriber 작성(C++)  (0) 2014.01.08
ROS msg와 srv생성  (0) 2014.01.08
Posted by 신영식
,

1. Publisher 실행

$ roscore
$ rosrun beginner_tutorials talker

2. Subscriber 실행

$ rosrun beginner_tutorials listener


'ROS electric' 카테고리의 다른 글

Simple Service와 Client 실행  (0) 2014.01.08
Simple Service와 Client 작성(c++)  (0) 2014.01.08
Simple publisher와 subscriber 작성(C++)  (0) 2014.01.08
ROS msg와 srv생성  (0) 2014.01.08
ROS editor (rosed)  (0) 2014.01.08
Posted by 신영식
,

1. Publisher Node 작성

$ roscd beginner_tutorials
$ cd src
$ vi talker.cpp

#include "ros/ros.h"
#include "std_msgs/String.h"
#include <sstream>

int main(int argc, char **argv)
{
    ros::init(argc, argv, "talker");
    ros::NodeHandle n;
    ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);
    ros::Rate loop_rate(10);

    int count = 0;

    while (ros::ok())
    {
        std_msgs::String msg;

        std::stringstream ss;
        ss << "hello world " << count;
        msg.data = ss.str();

        ROS_INFO("%s", msg.data.c_str());

        chatter_pub.publish(msg);

        ros::spinOnce();

        loop_rate.sleep();
        ++count;
    }
    return 0;
}

요약 : ROS system 초기화, publish할 메시지를 chatter topic에 advertise, 1초에 10번씩 loop돌면서 message를 보낸다


2. Subscriber Node 작성

$ roscd beginner_tutorials
$ cd src
$ vi listener.cpp

#include "ros/ros.h"
#include "std_msgs/String.h"

void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
    ROS_INFO("I heard: [%s]", msg->data.c_str());
}

int main(int argc, char **argv)
{
    ros::init(argc, argv, "listener");
    ros::NodeHandle n;
    ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);
    ros::spin();

    return 0;
}

요약 : ROS System 초기화, chatter topic으로부터 subscribe, message들어올때마다 spin하면서 chatterCallback함수 수행


3. CMakeList.txt 수정

rosbuild_add_executable(talker src/talker.cpp)
rosbuild_add_executable(listener src/listener.cpp)

위 내용을 CMakeList.txt에 추가해주자

'ROS electric' 카테고리의 다른 글

Simple Service와 Client 작성(c++)  (0) 2014.01.08
Simple publisher와 subscriber 실행  (0) 2014.01.08
ROS msg와 srv생성  (0) 2014.01.08
ROS editor (rosed)  (0) 2014.01.08
roslaunch 사용하기  (0) 2014.01.08
Posted by 신영식
,

msg : ROS message의 field를 설명하는 단순 text file

srv : request와 response로 이뤄져 있는 service file


1. msg 생성하기

$ roscd beginner_tutorials $ mkdir msg $ echo "int64 num" > msg/Num.msg
$ rosmake beginner_tutorials
빌드하기 전 CMakefile에서 # rosbuild_genmsg()이부분의 주석을 제거해주자


2. msg 확인하기( rosmsg show [message type] )

$ rosmsg show beginner_tutorials/Num
$ rosmsg show Num

3. srv 생성하기( roscp [package_name] [file_to_copy_path] [copy_path]$ roscd beginner_tutorials ) $ mkdir srv
$ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv
$ rosmake beginner_tutorials

마찬가지로 빌드하기전 # rosbuild_gensrv() 이부분의 주석을 제거해주자

4. srv 확인하기(rossrv show <service type>)

$ rossrv show beginner_tutorials/AddTwoInts

참고 : 도움말확인하기
$ rosmsg -h
$ rosmsg show -h


'ROS electric' 카테고리의 다른 글

Simple publisher와 subscriber 실행  (0) 2014.01.08
Simple publisher와 subscriber 작성(C++)  (0) 2014.01.08
ROS editor (rosed)  (0) 2014.01.08
roslaunch 사용하기  (0) 2014.01.08
ROS Service와 Parameter의 이해  (0) 2014.01.08
Posted by 신영식
,

ROS editor (rosed)

ROS electric 2014. 1. 8. 15:45

rosed를 이용하면 ROS로 설정된 editor로 편집을 할 수있다(기본 vim)

1. rosed [package_name] [filename]

$ rosed roscpp Logger.msg


기본 editor변경하기

export EDITOR='emacs -nw'


'ROS electric' 카테고리의 다른 글

Simple publisher와 subscriber 작성(C++)  (0) 2014.01.08
ROS msg와 srv생성  (0) 2014.01.08
roslaunch 사용하기  (0) 2014.01.08
ROS Service와 Parameter의 이해  (0) 2014.01.08
ROS topic의 이해  (0) 2014.01.08
Posted by 신영식
,

1. roslaunch [package] [filename.launch]

$ roscd beginner_tutorials
$ mkdir launch $ cd launch

아래와 같은 turtlemimic.launch파일생성
1 <launch> 2 3 <group ns="turtlesim1"> 4 <node pkg="turtlesim" name="sim" type="turtlesim_node"/> 5 </group> 6 7 <group ns="turtlesim2"> 8 <node pkg="turtlesim" name="sim" type="turtlesim_node"/> 9 </group> 10 11 <node pkg="turtlesim" name="mimic" type="mimic"> 12 <remap from="input" to="turtlesim1/turtle1"/> 13 <remap from="output" to="turtlesim2/turtle1"/> 14 </node> 15 16 </launch>


$ roslaunch beginner_tutorials turtlemimic.launch
$ rostopic pub /turtlesim1/turtle1/command_velocity turtlesim/Velocity -r 1 -- 2.0 -1.8


'ROS electric' 카테고리의 다른 글

ROS msg와 srv생성  (0) 2014.01.08
ROS editor (rosed)  (0) 2014.01.08
ROS Service와 Parameter의 이해  (0) 2014.01.08
ROS topic의 이해  (0) 2014.01.08
ROS node의 이해  (0) 2014.01.08
Posted by 신영식
,

1. ROS Service

ROS Service는 노드들이 서로 통신할 수 있게하는 방식을 말한다. Service는 노드들이 request를 보내고 reponse를 받게해준다.

rosservice list print information about active services rosservice call call the service with the provided args rosservice type print service type rosservice find find services by service type rosservice uri print service ROSRPC uri

1) rosservice list : 현재 실행중인 노드의 활성화된 Service정보를 보여준다.

$ rosservice list

2) rosservice type [service]

$ rosservice clear

3) rosservice call [service] [args]

$ rosservice call clear

$ rosservice type spawn| rossrv show

$ rosservice call spawn 2 2 0.2 ""


2. ROS parameter

ROS parameter는 user가 ROS parameter server의 data를 저장하거나 조종할 수 있게 해준다. Parameter server는 integers, floats, booleans, dictionaries, lists등을 저장할 수 있다.ROS parameter는 YAML syntax에 대한 markup language를 사용한다. 예를들자면 1은 integers, 1.0은 floats, one은 string, true는 booleans, {1,2,3}은 integer list, {a:b,c:d}는 dictionary이다.

rosparam set set parameter rosparam get get parameter rosparam load load parameters from file rosparam dump dump parameters to file rosparam delete delete parameter rosparam list list parameter names

1) rosparam list : 실행중인 노드의 parameter list출력
$ rosparam list

2) rosparam set [param_name] & rosparam get [param_name]

$ rosparam set background_r 150

$ rosservice call clear

set후 clear해줘야 반영된다.

$ rosparam get background_g

background_g 파라미터 값을 보여준다.

$ rosparam get /

모든 파라미터 정보를 보여준다.

3) rosparam dump [file_name] & rosparam load [file_name] [namespace]

$ rosparam dump params.yaml
params.yaml에 모든 파라미터 정보를 쓴다.

$ rosparam load params.yaml copy
$ rosparam get copy/background_b
copy라는 namespace에 모든 파라미터 정보를 불러온다.


'ROS electric' 카테고리의 다른 글

ROS editor (rosed)  (0) 2014.01.08
roslaunch 사용하기  (0) 2014.01.08
ROS topic의 이해  (0) 2014.01.08
ROS node의 이해  (0) 2014.01.08
ROS package 빌드  (0) 2014.01.07
Posted by 신영식
,