교육캠프
캠프 종료 후 의견을 묻는 설문조사에 참여부탁드립니다.
캠프사진
장소
- 한동대학교 뉴턴홀 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 : 캠프 마무리
- 차량 라즈베리파이 원격접속 방법
- 라즈베리파이에 직접 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
- ex)
- 터미널 1
- 윈도우 컴퓨터의 경우
- PuTTy 프로그램을 사용한다.
- ssh -X와 같은 기능을 수행하기 위해서는
- Xming을 설치 후 실행시키고
- PuTTy 접속시에 좌측 리스트에서 ssh → X11 → Enable X11 forwarding 옵션을 체크하여 접속한다.
- Mac 컴퓨터의 경우
- Mac 자체 터미널로도 ssh를 사용할 수 있다.
- 다만, ssh -X와 같은 기능을 수행하기 위해서는
- Xquartz를 설치 후 실행시키고
- 터미널에서 ssh -X 명령어를 수행해야 한다.
- 라즈베리파이에 직접 HDMI 및 키보드/마우스 연결하여 환경설정
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
- 설치 프로그램
- ROS Kinetic 버젼
- 리눅스 터미널에서 아래의 세 개 명령어를 입력하면 기본 설치가 끝납니다.
sudo apt-get update
sudo apt-get upgrade
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 사용자의 경우
- Mac OS 사용자의 경우
- ROS Kinetic 버젼