ROS 작업 공간 만들기
1
2
3
$mkdir -p ~/catkin_ws/src
$cd ~/catkin_ws
$catkin_make
catkin_make
는 catkin 작업공간으로, 작업하기 위한 편리한 도구다. 작업영역에서 처음 실행하면 src폴더에 링크가 생성된다. 그리고, devel/build 디렉토리가 함께 생성된다. devel 폴더 내에 여러 가지 설정이 있고, 이러한 파일 중 하나를 소싱하면 이 작업 영역이 나의 환경 위에 덮어진다.
1
$source devel/setup.bash
1
2
$echo $ROS_PACKAGE_PATH
/home/ice/catkin_ws/src:/opt/ros/noetic/share
그 후, 파일을 열어 아래 코드를 추가해줘야 한다.
1
sudo gedit ~/.bashrc
1
2
3
4
5
alias cm='cd ~/xycar_ws && catkin_make'
source /opt/ros/melodic/setup.bash
source ~/xycar_ws/devel/setup.bash
export ROS_MASTER_URI=http://localhost:11311
export ROS_HOSTname=localhost
추가한 후 저장한다. 그 후 source
코드를 통해 시스템에 반영한다.
1
source ~/.bashrc
ROS환경변수가 어떻게 설정되었는지 확인해본다.
1
2
3
4
5
6
7
8
9
10
11
printenv | grep ROS
ROS_VERSION=1
ROS_PYTHON_VERSION=3
ROS_PACKAGE_PATH=/home/ice/xycar_ws/src:/home/ice/catkin_ws/src:/opt/ros/noetic/share
ROSLISP_PACKAGE_DIRECTORIES=/home/ice/xycar_ws/devel/share/common-lisp:/home/ice/catkin_ws/devel/share/common-lisp
ROS_ETC_DIR=/opt/ros/noetic/etc/ros
ROS_MASTER_URI=http://localhost:11311
ROS_HOSTname=localhost
ROS_ROOT=/opt/ros/noetic/share/ros
ROS_DISTRO=noetic
이렇게 환경설정이 완료되었다.
turtlesim 예제
이 예제를 수행하기 위해서는 4개의 터미널이 필요하다. 노드1(publisher = turtle_teleop_key)에서 노드2(subscriber = turtlesim_node)로 토픽(turtle1/cmd_vel)을 전송한다.
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
rosnode
실행,rostopic
실행rosrun rqt_graph rqt_graph
일단 터미널1에서 roscore
을 실행한다.
터미널2에서 rosnode list
를 실행시켜보면 /rosout 만 출력되는 것을 볼 수 있다.
그 다음 터미널2에 rosrun turtlesim turtlesim_node
를 실행시켜 node를 생성하게 되면 거북이가 나오는 창이 하나 뜬다.
<img src=”/assets/img/ros/rosrunnode.png” width = 50%><img src=”/assets/img/ros/turtle.png” width=50%>
터미널3에 rosrun turtlesim turtle_teleop_key
를 실행한다. 이를 실행하면 터미널에서 방향키로 거북이를 움직일 수 있게 된다.
그 후, 터미널2에서 rosnode list를 다시 실행시켜보면 다른 것들이 추가되어 있다.
rqt_graph를 살펴보기 위해 터미널4에 rosrun rqt_graph rqt_graph
를 실행시켜본다.
그림을 보면 teleop_turtle(퍼블리셔 노드) 에서 /turtle/cmd_vel(토픽)이 /turtlesim(서브스크라이버 노드)로 전송되고 있는 것을 확인해볼 수 있다. 그리고 다시 터미널4에 rostopic list
를 실행하면 어떤 토픽이 발생(전송)되고 있는지 확인할 수 있다.
그 중 1개를 선택하여 어떤 값인지 확인이 가능하다. 또한, rostopic list -v
를 통해 퍼블리셔 노드와 서브스크라이버 노드를 더 자세히 볼 수 있다.
이 때, 토픽을 직접 지정해줄 수도 있다.
1
2
3
4
5
#rosrun {퍼블리셔} {1회} {토픽이름} {메시지 타입} -- {메시지 내용} => 1회 z방향으로 1.8만큼 twist(돈다)
rosrun pub -1 /turtle/cmd_vel geometry_msgs/Twist -- '[2.0,0.0,0.0]' '[0.0,0.0,1.8]'
# -r 은 발행 주기(Hz) => 초당 1회 => 1초당 1회
rosrun pub /turtle/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0,0.0,0.0]' '[0.0,0.0,1.8]'