Skip to content

Commit

Permalink
enable reconfigure for vlpart node
Browse files Browse the repository at this point in the history
  • Loading branch information
ojh6404 committed Apr 12, 2024
1 parent 31648f1 commit e60fd10
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 2 deletions.
21 changes: 19 additions & 2 deletions tracking_ros/launch/vlpart_segment.launch
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
<launch>
<arg name="device" default="cuda:0" /> <!-- cpu or cuda -->
<arg name="reconfigure" default="false" />
<arg name="input_image" default="/kinect_head/rgb/image_rect_color"/>
<arg name="vlpart_node_name" default="vlpart_node"/>
<arg name="vocabulary" default="custom" /> <!-- "lvis", "paco"... "custom" -->
<arg name="classes" default="cup handle; bottle cap;" /> <!-- object to detect when vocabulary is custom -->
<arg name="confidence_threshold" default="0.5" /> <!-- confidence threshold -->
Expand All @@ -15,10 +17,25 @@
<arg name="area_threshold" default="400" /> <!-- refine mask area threshold -->
<arg name="refine_mode" default="holes" /> <!-- refine mode : "holes", "islands" -->

<!-- vlpart reconfigure node -->
<node name="vlpart_reconfigure_node"
pkg="tracking_ros" type="vlpart_reconfigure_node.py"
output="screen" if="$(arg reconfigure)" >
<rosparam subst_value="true" >
input_image: $(arg input_image)
node_name: /$(arg vlpart_node_name)
device: $(arg device)
use_sam: $(arg use_sam)
vocabulary: $(arg vocabulary)
classes: $(arg classes)
confidence_threshold: $(arg confidence_threshold)
</rosparam>
</node>

<!-- vlpart node -->
<node name="vlpart_node"
<node name="$(arg vlpart_node_name)"
pkg="tracking_ros" type="vlpart_node.py"
output="screen" >
output="screen" unless="$(arg reconfigure)" >
<remap from="~input_image" to="$(arg input_image)" />
<rosparam subst_value="true" >
device: $(arg device)
Expand Down
55 changes: 55 additions & 0 deletions tracking_ros/node_scripts/vlpart_reconfigure_node.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import rospy
import rosnode
import subprocess

from dynamic_reconfigure.server import Server
from tracking_ros.cfg import VLPartConfig as ServerConfig


class VLPartReconfigureNode(object):
def __init__(self):
super(VLPartReconfigureNode, self).__init__()
self.node_name = rospy.get_param("~node_name", "/vlpart_node")
self.input_image = rospy.get_param("~input_image", "/camera/rgb/image_rect_color")
self.classes = rospy.get_param("~classes", "bottle cap; cup handle;")
self.confidence_threshold = rospy.get_param("~confidence_threshold", 0.5)
self.vocabulary = rospy.get_param("~vocabulary", "custom")
self.device = rospy.get_param("~device", "cuda:0")
self.use_sam = rospy.get_param("~use_sam", False)
self.reconfigure_server = Server(ServerConfig, self.config_cb)

def config_cb(self, config, level):
self.classes = config.classes
self.confidence_threshold = config.confidence_threshold
self.vocabulary = config.vocabulary
rospy.loginfo(f"Detecting Classes: {self.classes}")

# rosrun using subprocess cause vlpart is not configurable when it is running
if self.node_name in rosnode.get_node_names(): # Check if node exists, if it does, kill the node to reconfigure
rospy.loginfo("Node exists, killing node")
rosnode.kill_nodes([self.node_name])
else: # If node does not exist, run the node
rospy.loginfo("Node does not exist")
subprocess.Popen(
"""rosrun tracking_ros vlpart_node.py \
__name:={} \
~input_image:={} \
_vocabulary:={} \
_classes:='{}' \
_device:={} \
_use_sam:={} \
""".format(
self.node_name, self.input_image, self.vocabulary, self.classes, self.device, self.use_sam
),
shell=True,
)
return config


if __name__ == "__main__":
rospy.init_node("vlpart_reconfigure_node")
node_manager_node = VLPartReconfigureNode()
rospy.spin()
1 change: 1 addition & 0 deletions tracking_ros/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ check_untyped_defs = true
module = [
"rospy",
"rostest",
"rosnode",
"rospkg",
"cv_bridge",
"dynamic_reconfigure.*",
Expand Down

0 comments on commit e60fd10

Please sign in to comment.