- ros 기본 setup
Cd ~ 에서
sudo gedit ~/.bashrc
에서 제일 밑에
source ~/catkin_ws/devel/setup.bash 넣기
- ros package 만들기
Catkin_ws/src 에서
catkin_create_pkg <페키지 이름> std_msgs rospy roscpp <depend>
패키지 안에 있는 xml, cmake.txt 수정하기 (dependencies 설정)
- ros package build
catkin_ws 에서 catkin_make 로 빌드 가능
특정 패키지 빌드 원하면 아래와 같이 적기
catkin_make --pkg <my_package_name>
- ros script 작성
파이썬으로 작성할시
#!/usr/bin/python
제일 위에다가 적어야지 파이썬으로 인식함 (파이썬 경로)
파이썬 경로는
which python
으로 알아보기
- ros message(topic)
첫줄에다가
Ex) from geometry_msgs.msg import PoseWithCovarianceStamped 라고 적어줘야함
- Ros custom message(메시지 새로운거 만들기)
1) 패키지 폴더 안에 msg 파일 생성
2) find_package에 message_generation를 추가한다.
3)Cmakelists에서 정의한 Object.msg 를 add_message_files에 추가한다.
4)message를 추가하기 위해서는 dependencies를 설정해줘야 한다
5) 새로 빌드 하기 (catkin_make)
6) node 파일 첫줄 에다가 from <패키지 이름>.msg import <msg 파일 이름>
ex) from att_est.msg import error_msg
-ros subscriber,
Ex)
rospy.Subscriber("/mag_raw", MagneticField, self.mag_raw_data)
subscriber = rospy.Subscriber(“/토픽” , 메시지 종류 , 콜백 함수)
call back 함수 = 매시지를 다시 변수를 각각에 대입 하는과정
ex)
def mag_raw_data(self,
- ros publisher
ex)
self.Kalman_cov_pub = rospy.Publisher("/pose_covariance",PoseWithCovarianceStamped, queue_size=1)
함수 이름 = rospy.Publisher(“/토픽 이름” , 토픽 종류 , queen_size = 개수)
(queen_size 는 메시지가 끊겼을 때 몇 개 저장하는지 갯수 지정해 주는 과정 )
메시지 변수 이름 = 메시지 변수 종류()
메시지 종류, 타입은 ros.wiki 에서 확인 한다. 메시지 안에 메시지가 있으면
첫번째_메시지.2nd_메시지.3rd_메시지.해당_변수 로 적으면 된다.
Ex)
pose_topic = PoseWithCovarianceStamped()
위 처럼 메시지에다가 다 대입후 이제 publish 하는 과정을 거쳐야 하는것이다.
다 만들어진 메시지를 처음에 퍼블리시_함수.publish(메시지_변수)로 메시지를 퍼블리시 할수 있다.
Ex)
self.Kalman_cov_pub.publish(pose_topic)
추후에 rviz 와 같이 visualization 을 하려면 일반 메시지가 아닌 stamped 된 메시지를 통해서 frame 등을 표시 하여야 한다.
- Ros topic 확인 방법
Rostopic echo /토픽_이름 = 토픽을 받아 볼수 있다.
Rostopic pub /토픽_이름 메시지.변수들 = 토픽을 임의의 값으로 publish 할 수 있다.
Rostopic hz /토픽 = 토픽이 1초에 얼마나 오는지 hz 알려고 할 때 쓰는 용어
Rostopic rqt_graph rqt_graph = 노드들에서 토픽들이 어떻게 연결되어 있는지 알 수 있다.
Rostopic list = publish 되는 모든 토픽들을 볼 수 있다.
rqt_plot 으로 토픽을 그래프로 볼 수 있다
- Ros 여러기기 연결
1) 마스터 기기와 다른 기기들이 하나의 와이파이로 연결 되어있어야한다.
2) 마스터 기기의 ifconfig 로 ip 주소를 알아낸다 ex)192.068.0.135
3) 마스터 기기의 bashrc 에서 아래 내용을 추가한다.
export ROS_IP=master_의_ip_주소
export ROS_MASTER_URI=http:// master_의_ip_주소:11311
export ROS_HOSTNAME= master_의_ip_주소
4) 연결할 기기에서의 bashrc 에 아래 내용을 추가한다.
export ROS_MASTER_URI=http:// master_의_ip_주소:11311
export ROS_HOSTNAME= 연결하는기기_의_ip_주소
- Rosbag
토픽들을 저장하고, 저장한 토픽들을 다시 재생 할 수 있는 명령이 rosbag 이다.
rosbag 로 저장된 파일은 <파일이름. bag>로 저장된다.
rosbag record -o <저장할 이름> /토픽이름_1 /토픽이름_2 => 와 같이 저장할수 있다.
rosbag play <bag file> => 로 실행 할 수 있다.
또한
rosbag info <bag file> => 로 정보를 볼 수 있다.
- roslaunch
roslaunch 는 여러 노드들과 roscore 까지를 한번에 실행하는것이다.
launch 파일을 만들기 위한 형식의 예시는 아래와 같다.
<launch> |
<rosparam command="load" file="$(find termproject-coop)/config/sensor_config.yaml" /> |
<node pkg="termproject-coop" name="imu_raw_publisher" type="imu_raw_publisher.py" output="screen" /> |
<node pkg="termproject-coop" name="compliementary_filter" type="complementary_filter.py" output="screen" /> |
</launch> |
yaml 은 parameter에 해당되는 값들의 모음이다.
/ = 실행 버튼이다
name = 실행되는 패키지의 이름(우리가 지정하는것)
type = 실제 node 의 파일 명
output = 값이 어디에 출력될껀지 정하는 것이다.
- Yaml 파일 작성법
yaml 은 파라미터들의 모음이다. 이것을 사용하면 하나의 파일에 파라미터들을 저장하여 값을 바꿔야 할때 유용하게 쓸 수 있다.
-yaml 파일의 작성의 예시이다.
아래와 같이 작성하고, config 파일 안에 xxx.yaml 로 저장하면된다.
!! 단 탭이 아니라 띄어쓰기로만 작성해야함(탭으로 띄어쓰기 하면 에러발생)
imu: |
raw_rate : 250 # imu : 200hz # mag : 100hz |
sampling_rate : 100.0 |
bus_address : 0 |
gyro_scale : 0x00 # 0x00 : 250DPS |
accel_scale : 0x00 # 0x00 : 2G |
-yaml 파일의 파라미터를 불러오는 코드이다.
self.cf_rate = rospy.get_param("/complementary/rate")
yaml 파일에 있는 값을 node 에서 불러와서 사용할때 위와 같이 사용하면 값이 배정이 됩니다.
C++
python 과 다르게 새로운 cpp 파일을 만든다면 Cmakelist 에다가 새로 적어줘야 한다.
ex) 새로운 파일이 src 안에 talker.cpp 이라면 아래와 같다.
add_executable(talker src/talker.cpp)
target_link_libraries(talker ${catkin_LIBRARIES})
만약 새로운 파일이 message generation 을 포함한다면
ex)
add_executable(talker src/talker.cpp)
add_dependencies(talker${${PROJECT_NAME}_EXPORTED_TARGETS}
${catkin_EXPORTED_TARGETS})
target_link_libraries(talker ${catkin_LIBRARIES})
의존성까지 적어줘야 한다.
'programming' 카테고리의 다른 글
C ++ 연습장 (0) | 2020.07.07 |
---|---|
아두이노 센서 사용 코드 예시 (0) | 2020.05.07 |
git hub 사용법 Manual (0) | 2020.02.16 |
파이썬 코딩 연습장 (0) | 2020.01.10 |