[ROS1 NOTE] mavros_msgs.srv
Service Types
서비스(Service)는 서비스의 요청(Request) - Client와 서비스의 응답(Response) - Server로 구성된다.
서비스에 대한 요청이 있을 때 그에 응답하여 답을 전달한다.
mavros_msgs/CommandBool
# Common type for switch commands
bool value
---
bool success
uint8 result
--- 기준으로 상단은 request, 하단은 response를 받게 된다.
기본 예제 코드를 보면, value로 true를 저장하는 것을 볼 수 있다.
arm_cmd.request.value = true
mavros_msgs/SetMode
비행 모드에 대하여 선언을 할 수 있는 service에 해당한다.
# set FCU mode
#
# Known custom modes listed here:
# http://wiki.ros.org/mavros/CustomModes
# basic modes from MAV_MODE
uint8 MAV_MODE_PREFLIGHT = 0
uint8 MAV_MODE_STABILIZE_DISARMED = 80
uint8 MAV_MODE_STABILIZE_ARMED = 208
uint8 MAV_MODE_MANUAL_DISARMED = 64
uint8 MAV_MODE_MANUAL_ARMED = 192
uint8 MAV_MODE_GUIDED_DISARMED = 88
uint8 MAV_MODE_GUIDED_ARMED = 216
uint8 MAV_MODE_AUTO_DISARMED = 92
uint8 MAV_MODE_AUTO_ARMED = 220
uint8 MAV_MODE_TEST_DISARMED = 66
uint8 MAV_MODE_TEST_ARMED = 194
uint8 base_mode # filled by MAV_MODE enum value or 0 if custom_mode != ''
string custom_mode # string mode representation or integer
---
bool mode_sent # Mode known/parsed correctly and SET_MODE are sent
크게 base_mode와 custom_mode로 나뉜다.
기본 예제 코드를 보면, custom_mode로 되어 있는 것을 확인할 수 있다.
mavros_msgs::SetMode offb_set_mode;
offb_set_mode.request.custom_mode = "OFFBOARD";
해당 코드에서는 custom_mode = "OFFBOARD"로 들어가 있다.
OFFBOARD 이외에도 다양한 custom_mode를 지원하는데 다음 링크를 통해 확인할 수 있다.
http://wiki.ros.org/mavros/CustomModes
PX4를 이용하여 개발하므로 그 중 PX4 native flight stack 에 나와 있는 모드를 사용한다.
offb_set_mode.response.mode_sent
위의 코드를 입력하게 되면 bool에 해당하는 True/False의 값을 반환한다.
wait_for_service
rospy.wait_for_service("/mavros/cmd/arming")
##Basic Code
rospy.wait_for_service(service, timeout=None)
서비스가 가능한지 여부를 확인할 때 사용한다.
timeout에 값(초단위)을 지정해주면 해당 시간을 초과하게 되면 ROSExcpetion이 발생한다.
ServiceProxy
arming_client = rospy.ServiceProxy("mavros/cmd/arming", CommandBool)
##Basic Code
rospy.ServiceProxy(name, service_class, persistent=False, headers=None)
ServiceProxy를 통해 서비스의 요청(Request)을 한다.