본문으로 바로가기

ROS Serial Test

category 소프트웨어/ROS 2019. 1. 2. 22:38
728x90
반응형

1. Test Package 생성

아래의 명령어를 입력하여 serial_test 패키지를 생성합니다.


catkin_create_pkg serial_test std_msgs roscpp



2. ROS Serial Package 다운로드


http://wjwwood.io/serial/


위의 사이트에 접속하면 다운로드 및 설치에 관한 안내가 있습니다. 참조하시기 바랍니다.




먼저 소스코드를 다운로드 합니다.


git clone https://github.com/wjwwood/serial.git



다운로드 한 소스를 컴파일합니다.


make



test 소스도 컴파일 합니다.


make test



설치를 수행합니다.


make install



3. 다른 serial 예제 다운로드


https://github.com/garyservin/serial-example




위와 같은 파일이 있습니다.  "src" 폴더의 cpp 파일 내용을 사용하여 노드를 작성하도록 합니다. 

먼저 패키지를 생성한 "serial_test" 폴더로 이동합니다. 



여기서 package.xml 파일과 다음과 같이 수정합니다.


<?xml version="1.0"?>
<package format="2">
  <name>serial_test</name>
  <version>0.1.0</version>
  <description>The serial_test package</description>

  <maintainer email="sjyong@humanoidsystem.com">Seo, Jae Yong</maintainer>

 <license>BSD</license>

  <author email="sjyong@humanoidsystem.com">Seo, Jae Yong</author> -->


  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>roscpp</build_depend>
  <build_depend>serial</build_depend>
  <build_depend>std_msgs</build_depend>
  <build_export_depend>roscpp</build_export_depend>
  <build_export_depend>serial</build_export_depend>
  <build_export_depend>std_msgs</build_export_depend>
  <exec_depend>roscpp</exec_depend>
  <exec_depend>serial</exec_depend>
  <exec_depend>std_msgs</exec_depend>

</package>


CMakeLists.txt 파일을 아래의 내용으로 수정합니다.


cmake_minimum_required(VERSION 2.8.3)
project(serial_test)

find_package(catkin REQUIRED COMPONENTS
  roscpp
  serial
  std_msgs
)


catkin_package(
  CATKIN_DEPENDS 
  	roscpp 
  	serial
  	std_msgs
)

include_directories(
# include
  ${catkin_INCLUDE_DIRS}
)

add_executable(serial_test_node src/serial_test_node.cpp)

target_link_libraries(serial_test_node
	${catkin_LIBRARIES}
)


"src" 폴더에 serial_test_node.cpp 파일을 아래와 같이 작성합니다.


#include <ros/ros.h>
#include <serial/serial.h>
#include <std_msgs/String.h>
#include <std_msgs/Empty.h>

serial::Serial ser;

void write_callback(const std_msgs::String::ConstPtr& msg){
    ROS_INFO_STREAM("Writing to serial port" << msg->data);
    ser.write(msg->data);
}

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

    ros::Subscriber write_sub = nh.subscribe("write", 1000, write_callback);
    ros::Publisher read_pub = nh.advertise<std_msgs::String>("read", 1000);

    try
    {
        ser.setPort("/dev/ttyUSB0");
        ser.setBaudrate(9600);
        serial::Timeout to = serial::Timeout::simpleTimeout(1000);
        ser.setTimeout(to);
        ser.open();
    }
    catch (serial::IOException& e)
    {
        ROS_ERROR_STREAM("Unable to open port ");
        return -1;
    }

    if(ser.isOpen()){
        ROS_INFO_STREAM("Serial Port initialized");

        std_msgs::String test_string;
        test_string.data = "Send test string!!!";
        ser.write(test_string.data);
    }else{
        return -1;
    }

    ros::Rate loop_rate(5);
    while(ros::ok()){

        ros::spinOnce();

        if(ser.available()){
            ROS_INFO_STREAM("Reading from serial port");
            std_msgs::String result;
            result.data = ser.read(ser.available());
            ROS_INFO_STREAM("Read: " << result.data);
            read_pub.publish(result);
        }
        loop_rate.sleep();

    }
}


ser.setPort("/dev/ttyUSB0"); 에서 USBtoSerial 케이블을 사용할 경우 장치는 ttyUSB0로 인식됩니다. 각자의 장치에 적합한 이름을 사용하여 수정하시기 바랍니다.


노드 프로그램이 완성되었으면 catkin_make를 이용하여 컴파일을 수행합니다.




정상적으로 컴파일이 완료되면 roscore를 먼저 실행하고 노드를 실행하여 정상적인 동작을 확인합니다.





728x90
반응형

'소프트웨어 > ROS' 카테고리의 다른 글

Arduino에서 ROS 사용  (0) 2019.02.01
Ubuntu 16.04에서 Arduino IDE 설치  (0) 2019.01.23
ROS Kinetic Kame 설치  (0) 2018.11.10
ROS 파일 시스템 및 사용자 패키지 생성  (0) 2018.11.07
ROS-Melodic 개발 환경 구축  (0) 2018.11.05