카테고리 없음
보드에 코드 입히고 ROS 실행시키는 법
뚱이, not a starfish
2023. 2. 25. 13:07
자주 사용하는 명령어를 단축 명령어로 만드는 과정
$ gedit ~/.bashrc
bash 함수 열고
# Set ROS Kinetic(or Melodic)
source /opt/ros/kinetic/setup.bash
source ~/catkin_ws/devel/setup.bash
# Set ROS Network
export ROS_HOSTNAME=xxx.xxx.xxx.xxx
export ROS_MASTER_URI=http://xxx.xxx.xxx.xxx:11311 (roscore를 실행할 pc의 ip주소)
# Set ROS alias command
alias cw='cd ~/catkin_ws'
alias cs='cd ~/catkin_ws/src'
alias cm='cd ~/catkin_ws && catkin_make'
저장 후 다시 터미널로 돌아와 bashrc의 내용을 반영하기 위한 명령어를 입력한다.
$ source ~/.bashrc
터미널 3개 띄운 다음에 roscore, rosrun(패키지에서 하나의 노드를 실행), roslaunch(여러 노드 실행)
package.xml: 패키지의 정보를 담은 파일. 이름, 저작자, 라이센스, 의존성 패키지 등의 정보가 담겨있다.
토픽: 단방향 메시지 송수신 방식으로 topic을 publisher와 subscriber가 송수신함.
Publisher
#include "ros/ros.h"
#include "ros_tutorials/MsgTutorial.h"
int main(int argc, char** argv)
{
ros::init(argc, argv, "Node1"); //노드 이름을 Node1으로 초기화
ros::NodeHandle nh; // ROS 시스템과 통신을 위한 노드 핸들 선언
//Publisher
// ros_tutorials 패키지의 MsgTutorial 메시지 파일을 이용한 ros_tutorials_pub 작성
// 토픽명은 "ros_tutorial_msg", 큐 사이즈 100
//advertise(광고해서 사람들이 구독하게 한다고 생각하자)
ros::Publisher ros_tutorial_pub = nh.advertise<ros_tutorial::MsgTutorial>("ros_tutorial_msg", 100);
...
}
Subscriber
#include "ros/ros.h"
#include "ros_tutorial/MsgTutorial.h"
// 메시지를 수신하였을 때 동작하는 함수
// ConstPtr -> const pointer
void msgCallback(const ros_tutorial::MsgTutorial::ConstPtr& msg);
int main(int argc, char** argv)
{
ros::init(argc, argv, "Node2");
ros::NodeHandle nh;
//Subscriber
ros::Subscriber ros_tutorial_sub = nh.subscribe("ros_tutorial_msg", 100, msgCallback);
...
}
void msgCallback(const ros_tutorial::MsgTutorial::ConstPtr& msg)
ROS_INFO("recieve msg = %d", msg->stamp.sec); //msg 구조체 안의 stamp.sec 값을 표시한다.