교육캠프

캠프 종료 후 의견을 묻는 설문조사에 참여부탁드립니다.

장소

  • 한동대학교 뉴턴홀 412호

일정

6/24 (월)

  • 10:30~11:00 : 참석자 등록
  • 11:00~11:30 : 오리엔테이션
  • 11:30~12:30 : 차량 인계 및 기초 사용법 교육 (자이트론 회사)
  • 12:30~14:00 : 점심식사
  • 14:00~15:00 : 대회 규정 안내
  • 15:00~17:00 : ROS 교육 (기초)
  • 17:00~17:30 : 기숙사 안내
  • 19:00~22:00 : 자율주행 자유 실습 (팀별)

6/25 (화)

  • 10:00~12:00 : ROS 교육 (프로그램 개발)
  • 12:00~13:30 : 점심식사
  • 13:30~15:00 : ROS 교육 (모형차 제어)
  • 15:00~17:00 : ROS 교육 (실습)
  • 19:00~22:00 : 자율주행 자유 실습 (팀별)

6/26 (수)

  • 09:00~12:00 : 영상처리 교육
  • 12:00~13:30 : 점심식사
  • 13:30~15:00 : 영상처리 교육
  • 15:00~15:30 : 캠프 마무리

교육자료

  • 오리엔테이션 자료
  • 자이트론 차량 최신 설명서
  • 6/25(화) 오전 교육자료 "ROS 개념 및 개발" 최신버젼
  • 차량 라즈베리파이 원격접속 방법
    • 라즈베리파이에 직접 HDMI 및 키보드/마우스 연결하여 환경설정
      • 무선공유기 연결 후
      • ifconfig 명령어로 ip 주소 확인
      • 다음의 두 명령어로 ssh 연결 활성화 (최초 한 번만 실행해주면 됨)
        • sudo systemctl enable ssh
        • sudo systemctl start ssh
    • 원격 컴퓨터에서 (리눅스 기준)
      • 터미널 1
        • ssh cseecar@(위에서 확인한 아이피주소)
        • 라즈베리파이에 접속한 후
        • roscore
      • 터미널 2
        • su (혹은 sudo su)
        • ssh -X cseecar@(위에서 확인한 아이피주소)
        • 라즈베리파이에 접속한 후
        • rosrun (패키지 이름) (노드 이름)
          • ex) rosrun camera_show camera_show_node
    • 윈도우 컴퓨터의 경우
      • PuTTy 프로그램을 사용한다.
      • ssh -X와 같은 기능을 수행하기 위해서는
        • Xming을 설치 후 실행시키고
        • PuTTy 접속시에 좌측 리스트에서 ssh → X11 → Enable X11 forwarding 옵션을 체크하여 접속한다.
    • Mac 컴퓨터의 경우
      • Mac 자체 터미널로도 ssh를 사용할 수 있다.
      • 다만, ssh -X와 같은 기능을 수행하기 위해서는
        • Xquartz를 설치 후 실행시키고
        • 터미널에서 ssh -X 명령어를 수행해야 한다.

Publisher 코드

#include "ros/ros.h" // ROS 기본 헤더파일

#include "ros_tutorials_topic/MsgTutorial.h" // MsgTutorial 메시지 파일 헤더(빌드 후 자동 생성됨)

int main(int argc, char **argv)

{

ros::init(argc, argv, "topic_publisher"); // 노드명 초기화

ros::NodeHandle nh; // ROS 시스템과 통신을 위한 노드 핸들 선언

// 퍼블리셔 선언, ros_tutorials_topic 패키지의 MsgTutorial 메시지 파일을 이용한

// 퍼블리셔 ros_tutorial_pub 를 작성한다. 토픽명은 "ros_tutorial_msg" 이며,

// 퍼블리셔 큐(queue) 사이즈를 100개로 설정한다는 것이다

ros::Publisher ros_tutorial_pub = nh.advertise<ros_tutorials_topic::MsgTutorial>("ros_tutorial_msg", 100);

// 루프 주기를 설정한다. "10" 이라는 것은 10Hz를 말하는 것으로 0.1초 간격으로 반복된다

ros::Rate loop_rate(10);

// MsgTutorial 메시지 파일 형식으로 msg 라는 메시지를 선언

ros_tutorials_topic::MsgTutorial msg;


// 메시지에 사용될 변수 선언

int count = 0;

while (ros::ok())

{

msg.stamp = ros::Time::now(); // 현재 시간을 msg의 하위 stamp 메시지에 담는다

msg.data = count; // count라는 변수 값을 msg의 하위 data 메시지에 담는다

ROS_INFO("send msg = %d", msg.stamp.sec); // stamp.sec 메시지를 표시한다

ROS_INFO("send msg = %d", msg.stamp.nsec); // stamp.nsec 메시지를 표시한다

ROS_INFO("send msg = %d", msg.data); // data 메시지를 표시한다

ros_tutorial_pub.publish(msg); // 메시지를 발행한다

loop_rate.sleep(); // 위에서 정한 루프 주기에 따라 슬립에 들어간다

++count; // count 변수 1씩 증가

}

return 0;

}

Subscriber 코드

#include "ros/ros.h" // ROS 기본 헤더파일

#include "ros_tutorials_topic/MsgTutorial.h" // MsgTutorial 메시지 파일 헤더 (빌드 후 자동 생성됨)

// 메시지 콜백 함수로써, 밑에서 설정한 ros_tutorial_msg라는 이름의 토픽

// 메시지를 수신하였을 때 동작하는 함수이다

// 입력 메시지로는 ros_tutorials_topic 패키지의 MsgTutorial 메시지를 받도록 되어있다

void msgCallback(const ros_tutorials_topic::MsgTutorial::ConstPtr& msg)

{

ROS_INFO("recieve msg = %d", msg->stamp.sec); // stamp.sec 메시지를 표시한다

ROS_INFO("recieve msg = %d", msg->stamp.nsec); // stamp.nsec 메시지를 표시한다

ROS_INFO("recieve msg = %d", msg->data); // data 메시지를 표시한다

}


int main(int argc, char **argv) // 노드 메인 함수

{

ros::init(argc, argv, "topic_subscriber"); // 노드명 초기화

ros::NodeHandle nh; // ROS 시스템과 통신을 위한 노드 핸들 선언

// 서브스크라이버 선언, ros_tutorials_topic 패키지의 MsgTutorial 메시지 파일을 이용한

// 서브스크라이버 ros_tutorial_sub 를 작성한다. 토픽명은 "ros_tutorial_msg" 이며,

// 서브스크라이버 큐(queue) 사이즈를 100개로 설정한다는 것이다

ros::Subscriber ros_tutorial_sub = nh.subscribe("ros_tutorial_msg", 100, msgCallback);

// 콜백함수 호출을 위한 함수로써, 메시지가 수신되기를 대기,

// 수신되었을 경우 콜백함수를 실행한다

ros::spin();

return 0;

}

준비물

  • 컴퓨터(노트북) OS
    • 16.04 LTS 버젼의 리눅스 OS가 깔린 노트북 (권장)
    • 또는, Windows OS 사용자의 경우
      • Virtual Box 설치 후 (설치방법: 링크)
      • 16.04 LTS 버젼의 가상 리눅스 OS 설치 (설치 방법: 링크1, 링크2)
    • 또는, Mac OS 사용자의 경우
      • Virtual Box 설치 후 (설치방법: 링크)
      • 16.04 LTS 버젼의 가상 리눅스 OS 설치 (설치 방법: 링크1, 링크2)
    • 참고
      • 리눅스 설치 시 저장공간을 가능하면 100G 정도로 잡아주면 좋습니다.
  • 설치 프로그램
    • ROS Kinetic 버젼
      • 리눅스 터미널에서 아래의 세 개 명령어를 입력하면 기본 설치가 끝납니다.
        1. sudo apt-get update
        2. sudo apt-get upgrade
        3. wget https://raw.githubusercontent.com/ROBOTIS-GIT/robotis_tools/master/install_ros_kinetic.sh && chmod 755 ./install_ros_kinetic.sh && bash ./install_ros_kinetic.sh
    • Windows OS 사용자의 경우
      • Virtual Box 설치 및 가상 리눅스 OS를 설치했다면 굳이 아래 작업은 필요하지 않습니다.
      • puTTY 설치 (설치방법: 링크)
      • Xming 설치 (설치방법: 링크)
    • Mac OS 사용자의 경우
      • Virtual Box 설치 및 가상 리눅스 OS를 설치했다면 굳이 아래 작업은 필요하지 않습니다.
      • XQuartz 설치 (다운로드 링크) (참고)