Source code for pyrobot.robots.base
from __future__ import print_function
import copy
import importlib
import os
import sys
import threading
import time
from abc import ABCMeta, abstractmethod
import numpy as np
import rospy
import tf
from geometry_msgs.msg import Twist, Pose, PoseStamped
from sensor_msgs.msg import JointState, CameraInfo, Image
import pyrobot.utils.util as prutil
from pyrobot.utils.util import try_cv2_import, append_namespace
cv2 = try_cv2_import()
from cv_bridge import CvBridge, CvBridgeError
import message_filters
import actionlib
from actionlib_msgs.msg import GoalStatus
[docs]class Base(object):
"""
This is a parent class on which the robot
specific Base classes would be built.
"""
[docs] def __init__(self, configs, ns=""):
"""
The consturctor for Base class.
:param configs: configurations for base
:type configs: YACS CfgNode
"""
self.configs = configs
self.ns = ns
self.ctrl_pub = rospy.Publisher(
append_namespace(self.ns, configs.ROSTOPIC_BASE_COMMAND),
Twist,
queue_size=1
)
[docs] def stop(self):
"""
Stop the base
"""
msg = Twist()
msg.linear.x = 0
msg.angular.z = 0
self.ctrl_pub.publish(msg)
[docs] def set_vel(self, fwd_speed, turn_speed, exe_time=1):
"""
Set the moving velocity of the base
:param fwd_speed: forward speed
:param turn_speed: turning speed
:param exe_time: execution time
"""
fwd_speed = min(fwd_speed, self.configs.MAX_ABS_FWD_SPEED)
fwd_speed = max(fwd_speed, -self.configs.MAX_ABS_FWD_SPEED)
turn_speed = min(turn_speed, self.configs.MAX_ABS_TURN_SPEED)
turn_speed = max(turn_speed, -self.configs.MAX_ABS_TURN_SPEED)
msg = Twist()
msg.linear.x = fwd_speed
msg.angular.z = turn_speed
start_time = rospy.get_time()
self.ctrl_pub.publish(msg)
while rospy.get_time() - start_time < exe_time:
self.ctrl_pub.publish(msg)
rospy.sleep(1.0 / self.configs.BASE_CONTROL_RATE)