阅读背景:

Rviz可视化交互之Maker(二)

来源:互联网 
#!/usr/bin/env python
#coding=utf-8


import rospy

#导入交互marker服务端
from interactive_markers.interactive_marker_server import *

#导入视觉资讯
from visualization_msgs.msg import *

#交互毁掉函数
def processFeedback(feedback):

	#打印当前的地位
	p = feedback.pose.position
	print feedback.marker_name + " is now at " + str(p.x) + ", " + str(p.y) + ", " + str(p.z)

if __name__=="__main__":

	#初始化节点
	rospy.init_node("InteractiveMarker", anonymous=True)
	
	#创立交互marker服务端对象
	server = InteractiveMarkerServer("simple_interactive_marker")
	
	#创立交互marker对象
	int_marker = InteractiveMarker()
	
	#交互Marker的参考框架
	int_marker.header.frame_id = "base_link"
	
	int_marker.name = "my_marker"
	int_marker.description = "Simple Interactive Marker"
	
	#创立Marker
	waypoint_marker = Marker()
	waypoint_marker.type = Marker.CYLINDER
	waypoint_marker.scale.x = 0.2
	waypoint_marker.scale.y = 0.2
	waypoint_marker.scale.z = 0.4
	waypoint_marker.color.r = 0.0
	waypoint_marker.color.g = 0.5
	waypoint_marker.color.b = 0.5
	waypoint_marker.color.a = 1.0
	waypoint_marker.pose.position.z = 0.2
	
	#创立非交互的掌握,并添加waypoint_marker到掌握,不用来交互,
	#只是用来在移动的时候可以看到waypoint_marker
	waypoint_control = InteractiveMarkerControl()
	
	#始终可见
	waypoint_control.always_visible = True
	
	#给交互掌握添加具体的Marker
	waypoint_control.markers.append(waypoint_marker)
	
	#添加非交互掌握
	int_marker.controls.append(waypoint_control)
	
	#创立交互掌握,不包括marker
	move_control = InteractiveMarkerControl()
	move_control.name = "move_x"
	
	#设置交互掌握的方向
	move_control.orientation.w = 1.0
	move_control.orientation.x = 0.0
	move_control.orientation.y = 1.0
	move_control.orientation.z = 0.0
	
	#设置交互掌握模式
	move_control.interaction_mode = InteractiveMarkerControl.MOVE_PLANE
	
	#添加非交互掌握
	int_marker.controls.append(move_control)
	
	#添加Marker和它的回调函数
	server.insert(int_marker, processFeedback)
	
	#运用变更,并发送给客户端
	server.applyChanges()
	
	rospy.spin()
	
	
"""
Marker,InteractiveMarker,InteractiveMarkerControl和InteractiveMarkerServer之间的关系

Maker:显示的Marker类型,定义Maker的地位姿势和色彩等
InteractiveMarker:交互的Marker类型,定义可以掌握的Marker,可以指定具体的Marker。
InteractiveMarkerControl:交互Marker的掌握类型,定义平移、旋转等掌握等
InteractiveMarkerServer:交互Marker的服务器类型,用于管理InteractiveMarker的回调函数,添加和删除等

交互掌握和非交互掌握的区分是:
	交互掌握是用于具体的交互,如果没有添加具体的Marker,那末会显示帮助交互的箭头或圆弧;
	而非交互掌握不是用于具体的交互,多是用于在交互进程中显示Maker。


"""



#!/usr/bin/env python
#coding=utf-8


import rospy



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: