转载:
https://blog.csdn.net/wilylcyu/article/details/57080917
1.1 使用例子(C++/roscpp)
首先,发布话题visualization_marker:
ros::Publisher vis_pub = node_handle.advertise<visualization_msgs::Marker>( "visualization_marker", 0 );
- 1
然后简单的填充visualization_msgs/Marker 消息并且发布它:
visualization_msgs::Marker marker;
marker.header.frame_id = "base_link";
marker.header.stamp = ros::Time();
marker.ns = "my_namespace";
marker.id = 0;
marker.type = visualization_msgs::Marker::SPHERE;
marker.action = visualization_msgs::Marker::ADD;
marker.pose.position.x = 1;
marker.pose.position.y = 1;
marker.pose.position.z = 1;
marker.pose.orientation.x = 0.0;
marker.pose.orientation.y = 0.0;
marker.pose.orientation.z = 0.0;
marker.pose.orientation.w = 1.0;
marker.scale.x = 1;
marker.scale.y = 0.1;
marker.scale.z = 0.1;
marker.color.a = 1.0; // Don't forget to set the alpha!
marker.color.r = 0.0;
marker.color.g = 1.0;
marker.color.b = 0.0;
//only if using a MESH_RESOURCE marker type:
marker.mesh_resource = "package://pr2_description/meshes/base_v0/base.dae";
vis_pub.publish( marker );
这也是个visualization_msgs/MarkerArray消息,这允许一次性发布很多marker。
注意,时间戳将marker消息关联到ros::Time(),这是时间Zero(0)。这个被rviz和其他时间区别对待。如果使用ros::Time::now()或者其他非零值,rviz将仅仅显示距离当前时间很近的marker,其中足够近依据的是TF。然而对于0时间,不管是不是当前时间,都会显示marker。
不要忘记设置color.a=1,否则marker将会不可见。
ros坐标系
. 坐标系统:
当你工作于参考坐标系空间,记住:ROS使用 右手定义 :
所以,对于 ROS 机器人,如果以它为坐标系的原心,那么:
- x轴:前方
- y轴:左方
- z轴:上方
2 . 在一个绕轴线上的旋转,也使用 右手定义:
根据右手定义,围绕 z轴正旋转 是 逆时针旋转
3 . 测量单位:
ROS使用公制 :
- 线速度:
m/s
- 角速度:
rad/s
线速度=0.5m/s
对于一个室内机器人来说是一个相当快的速度了。角速度=1.0rad/s
就是旋转一圈6秒钟。