grepros 1.3.0
grep for ROS bag files and live topics
Loading...
Searching...
No Matches
grepros.ros1 Namespace Reference

Classes

class  ROS1Bag
 

Functions

 canonical (typename, unbounded=False)
 
 create_publisher (topic, cls_or_typename, queue_size)
 
 create_subscriber (topic, typename, handler, queue_size)
 
 deserialize_message (raw, cls_or_typename)
 
 format_message_value (msg, name, value)
 
 generate_message_classes (typename, typedef)
 
 get_message_class (typename)
 
 get_message_definition (msg_or_type)
 
 get_message_fields (val)
 
 get_message_type (msg_or_cls)
 
 get_message_type_hash (msg_or_type)
 
 get_message_value (msg, name, typename=None, default=Ellipsis)
 
 get_rostime (fallback=False)
 
 get_topic_types ()
 
 init_node (name)
 
 is_ros_message (val, ignore_time=False)
 
 is_ros_time (val)
 
 make_duration (secs=0, nsecs=0)
 
 make_time (secs=0, nsecs=0)
 
 scalar (typename)
 
 serialize_message (msg)
 
 set_message_value (obj, name, value)
 
 shutdown_node ()
 
 to_duration (val)
 
 to_nsec (val)
 
 to_sec (val)
 
 to_sec_nsec (val)
 
 to_time (val)
 
 validate (live=False)
 

Variables

 Bag = ROS1Bag
 
tuple BAG_EXTENSIONS = (".bag", ".bag.active")
 Bagfile extensions to seek.
 
 genpy_mtx = threading.RLock()
 Mutex for ensuring exclusive access to genpy generator (genpy.dynamic is not thread-safe)
 
 master = None
 rospy.MasterProxy instance
 
dict ROS_ALIAS_TYPES = {"byte": "int8", "char": "uint8"}
 Mapping between type aliases and real types, like {"byte": "int8"}.
 
dict ROS_TIME_CLASSES = {rospy.Time: "time", rospy.Duration: "duration"}
 ROS1 time/duration types mapped to type names.
 
list ROS_TIME_TYPES = ["time", "duration"]
 ROS1 time/duration types.
 
tuple SKIP_EXTENSIONS = (".bag.orig.active", )
 Bagfile extensions to skip.
 
float SLEEP_INTERVAL = 0.5
 Seconds between checking whether ROS master is available.
 
dict TYPECLASSES = {}
 {(typename, typehash): message type class}
 

Detailed Description

ROS1 interface.

------------------------------------------------------------------------------
This file is part of grepros - grep for ROS bag files and live topics.
Released under the BSD License.

@author      Erki Suurjaak
@created     01.11.2021
@modified    13.02.2026
------------------------------------------------------------------------------

Function Documentation

◆ canonical()

canonical (   typename,
  unbounded = False 
)
Returns "pkg/Type" for "pkg/subdir/Type".

@param  unbounded  drop array bounds, e.g. returning "uint8[]" for "uint8[10]"

Definition at line 505 of file ros1.py.

◆ create_publisher()

create_publisher (   topic,
  cls_or_typename,
  queue_size 
)
Returns a rospy.Publisher.

Definition at line 518 of file ros1.py.

◆ create_subscriber()

create_subscriber (   topic,
  typename,
  handler,
  queue_size 
)
Returns a rospy.Subscriber.

Local message packages are not required. Subscribes as AnyMsg,
creates message class dynamically from connection info,
and deserializes message before providing to handler.

Supplemented with .get_message_class(), .get_message_definition(),
.get_message_type_hash(), and .get_qoses().

The supplementary .get_message_xyz() methods should only be invoked after at least one message
has been received from the topic, as they get populated from live connection metadata.

Definition at line 531 of file ros1.py.

◆ deserialize_message()

deserialize_message (   raw,
  cls_or_typename 
)
Returns ROS1 message or service request/response instantiated from serialized binary.

Definition at line 729 of file ros1.py.

◆ format_message_value()

format_message_value (   msg,
  name,
  value 
)
Returns a message attribute value as string.

Result is at least 10 chars wide if message is a ROS time/duration
(aligning seconds and nanoseconds).

Definition at line 571 of file ros1.py.

◆ generate_message_classes()

generate_message_classes (   typename,
  typedef 
)
Generates ROS message classes dynamically from given name and definition.

Modifies `sys.path` to include the generated Python module.

@param typename  message type name like "std_msgs/String"
@param typedef   message type definition full text, including all subtype definitions
@return          dictionary of {typename: typeclass} for message type and all subtypes

Definition at line 588 of file ros1.py.

◆ get_message_class()

get_message_class (   typename)
Returns ROS1 message class.

Definition at line 602 of file ros1.py.

◆ get_message_definition()

get_message_definition (   msg_or_type)
Returns ROS1 message type definition full text, including subtype definitions.

Returns None if unknown type.

Definition at line 614 of file ros1.py.

◆ get_message_fields()

get_message_fields (   val)
Returns OrderedDict({field name: field type name}) if ROS1 message, else {}.

@param   val  ROS1 message class or instance

Definition at line 630 of file ros1.py.

◆ get_message_type()

get_message_type (   msg_or_cls)
Returns ROS1 message type name, like "std_msgs/Header".

Definition at line 643 of file ros1.py.

◆ get_message_type_hash()

get_message_type_hash (   msg_or_type)
Returns ROS message type MD5 hash, or "" if unknown type.

Definition at line 624 of file ros1.py.

◆ get_message_value()

get_message_value (   msg,
  name,
  typename = None,
  default = Ellipsis 
)
Returns object attribute value, with numeric arrays converted to lists.

@param   name      message attribute name
@param   typename  value ROS type name, for identifying byte arrays
@param   default   value to return if attribute does not exist; raises exception otherwise

Definition at line 651 of file ros1.py.

◆ get_rostime()

get_rostime (   fallback = False)
Returns current ROS1 time, as rospy.Time.

@param   fallback  use wall time if node not initialized

Definition at line 668 of file ros1.py.

◆ get_topic_types()

get_topic_types ( )
Returns currently available ROS1 topics, as [(topicname, typename)].

Omits topics that the current ROS1 node itself has published.

Definition at line 680 of file ros1.py.

◆ init_node()

init_node (   name)
Initializes a ROS1 node if not already initialized.

Blocks until ROS master available.

Definition at line 450 of file ros1.py.

◆ is_ros_message()

is_ros_message (   val,
  ignore_time = False 
)
Returns whether value is a ROS1 message or special like ROS1 time/duration class or instance.

@param  ignore_time  whether to ignore ROS1 time/duration types

Definition at line 695 of file ros1.py.

◆ is_ros_time()

is_ros_time (   val)
Returns whether value is a ROS1 time/duration class or instance.

Definition at line 705 of file ros1.py.

◆ make_duration()

make_duration (   secs = 0,
  nsecs = 0 
)
Returns a ROS1 duration, as rospy.Duration.

Definition at line 710 of file ros1.py.

◆ make_time()

make_time (   secs = 0,
  nsecs = 0 
)
Returns a ROS1 time, as rospy.Time.

Definition at line 715 of file ros1.py.

◆ scalar()

scalar (   typename)
Returns scalar type from ROS message data type, like "uint8" from "uint8[100]".

Returns type unchanged if already a scalar.

Definition at line 737 of file ros1.py.

◆ serialize_message()

serialize_message (   msg)
Returns ROS1 message as a serialized binary.

Definition at line 720 of file ros1.py.

◆ set_message_value()

set_message_value (   obj,
  name,
  value 
)
Sets message or object attribute value.

Definition at line 746 of file ros1.py.

◆ shutdown_node()

shutdown_node ( )
Shuts down live ROS1 node.

Definition at line 479 of file ros1.py.

◆ to_duration()

to_duration (   val)
Returns value as ROS1 duration if convertible (int/float/time/datetime/decimal), else value.

Definition at line 751 of file ros1.py.

◆ to_nsec()

to_nsec (   val)
Returns value in nanoseconds if value is ROS time/duration, else value.

Definition at line 765 of file ros1.py.

◆ to_sec()

to_sec (   val)
Returns value in seconds if value is ROS1 time/duration, else value.

Definition at line 770 of file ros1.py.

◆ to_sec_nsec()

to_sec_nsec (   val)
Returns value as (seconds, nanoseconds) if value is ROS1 time/duration, else value.

Definition at line 775 of file ros1.py.

◆ to_time()

to_time (   val)
Returns value as ROS1 time if convertible (int/float/duration/datetime/decimal), else value.

Definition at line 780 of file ros1.py.

◆ validate()

validate (   live = False)
Returns whether ROS1 environment is set, prints error if not.

@param   live  whether environment must support launching a ROS node

Definition at line 487 of file ros1.py.

Variable Documentation

◆ Bag

Definition at line 446 of file ros1.py.

◆ BAG_EXTENSIONS

tuple BAG_EXTENSIONS = (".bag", ".bag.active")

Bagfile extensions to seek.

Definition at line 40 of file ros1.py.

◆ genpy_mtx

genpy_mtx = threading.RLock()

Mutex for ensuring exclusive access to genpy generator (genpy.dynamic is not thread-safe)

Definition at line 64 of file ros1.py.

◆ master

master = None

rospy.MasterProxy instance

Definition at line 61 of file ros1.py.

◆ ROS_ALIAS_TYPES

dict ROS_ALIAS_TYPES = {"byte": "int8", "char": "uint8"}

Mapping between type aliases and real types, like {"byte": "int8"}.

Definition at line 52 of file ros1.py.

◆ ROS_TIME_CLASSES

dict ROS_TIME_CLASSES = {rospy.Time: "time", rospy.Duration: "duration"}

ROS1 time/duration types mapped to type names.

Definition at line 49 of file ros1.py.

◆ ROS_TIME_TYPES

list ROS_TIME_TYPES = ["time", "duration"]

ROS1 time/duration types.

Definition at line 46 of file ros1.py.

◆ SKIP_EXTENSIONS

tuple SKIP_EXTENSIONS = (".bag.orig.active", )

Bagfile extensions to skip.

Definition at line 43 of file ros1.py.

◆ SLEEP_INTERVAL

float SLEEP_INTERVAL = 0.5

Seconds between checking whether ROS master is available.

Definition at line 58 of file ros1.py.

◆ TYPECLASSES

dict TYPECLASSES = {}

{(typename, typehash): message type class}

Definition at line 55 of file ros1.py.