728x90
반응형
1. Test Package 생성
아래의 명령어를 입력하여 serial_test 패키지를 생성합니다.
catkin_create_pkg serial_test std_msgs roscpp
2. ROS Serial Package 다운로드
위의 사이트에 접속하면 다운로드 및 설치에 관한 안내가 있습니다. 참조하시기 바랍니다.
먼저 소스코드를 다운로드 합니다.
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 |