
分析:
(1)gazebo属于物理仿真,意思大概是任何一部分受力不平衡都会导致整体受力不平衡进而发生难以预测的移动;
(2)仿真需要一部分一部分的添加,不熟悉的情况下不要一股脑儿怼进去,不容易发现问题;
(3)gazebo里姿态和rviz中不同其实说明了一个问题,机械臂的gazebo模型不太对,或者受力不太对,应该想到是它导致的系统整体以不可控的姿态移动。
本文实现在rviz中指定位置显示文字
1.在特定地方显示一行文字
#include <ros/ros.h>
#include <visualization_msgs/Marker.h>
#include<iostream>
using namespace std
int main( int argc, char** argv )
{
ros::init(argc, argv, "showline")
ros::NodeHandle n
ros::Publisher markerPub = n.advertise<visualization_msgs::Marker>("TEXT_VIEW_FACING", 10)
visualization_msgs::Marker marker
marker.header.frame_id="/odom"
marker.header.stamp = ros::Time::now()
marker.ns = "basic_shapes"
marker.action = visualization_msgs::Marker::ADD
marker.pose.orientation.w = 1.0
marker.id =0
marker.type = visualization_msgs::Marker::TEXT_VIEW_FACING
marker.scale.z = 0.2
marker.color.b = 0
marker.color.g = 0
marker.color.r = 255
marker.color.a = 1
ros::Rate r(1)
int k=0
while(1)
{
geometry_msgs::Pose pose
pose.position.x = (float)(k++)/10
pose.position.y = 0
pose.position.z =0
ostringstream str
str<<k
marker.text=str.str()
marker.pose=pose
markerPub.publish(marker)
cout<<"k="<<k<<endl
r.sleep()
}
return 0
}
如上例子,动态的在geometry_msgs::Pose pose 处(x = (float)(k++)/10)显示当前的k值.
2.在同时在不同地方显示不同文字
#include <ros/ros.h>
#include <visualization_msgs/Marker.h>
#include<visualization_msgs/MarkerArray.h>
#include<iostream>
using namespace std
int main( int argc, char** argv )
{
ros::init(argc, argv, "showline")
ros::NodeHandle n
ros::Publisher markerArrayPub = n.advertise<visualization_msgs::MarkerArray>("MarkerArray", 10)
visualization_msgs::MarkerArray markerArray
ros::Rate r(1)
int k=0
while(k<100)
{
visualization_msgs::Marker marker
marker.header.frame_id="/odom"
marker.header.stamp = ros::Time::now()
marker.ns = "basic_shapes"
marker.action = visualization_msgs::Marker::ADD
marker.pose.orientation.w = 1.0
marker.id =k
marker.type = visualization_msgs::Marker::TEXT_VIEW_FACING
marker.scale.z = 0.1
marker.color.b = 255
marker.color.g = 255
marker.color.r = 255
marker.color.a = 1
geometry_msgs::Pose pose
pose.position.x = (float)(k)/10
pose.position.y = 0
pose.position.z =0
ostringstream str
str<<k
marker.text=str.str()
marker.pose=pose
cout<<"k="<<k<<endl
markerArray.markers.push_back(marker)
cout<<"markerArray.markers.size()"<<markerArray.markers.size()<<endl
markerArrayPub.publish(markerArray)
r.sleep()
k++
}
return 0
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)