ROS初学者关于rviz的小障碍

ROS初学者关于rviz的小障碍,第1张

在ROS第二章教程中遇到了输入rosrun rviz rviz -d 'rospack find turtle_tf' /rviz/turtlez_rviz.rviz,但是无法显示两只小海龟坐标的问题,解决办法是首先将Global Options选项下的Fixed Frame后面的坐标系改成world,然后通过左下角add按键,在By display type下面找到TF并添加,就可以了。

之前我按古月老师的书中的例程添加了gazebo标签,奇怪的一幕发生了,小车自己以隔壁吴老二的步伐在地板上肆意摩擦,而且机械臂姿势不太对(根本没注意这一点,后来搞清楚是因为没加控制器,所以机械臂相当于各关节没有自锁,进而姿态奇异,进而受力不对,进而发生移动),一开始以为是质量参数不对,调大调小都不行,后来想着一部分一部分调试吧,去掉了臂,小车不动了。

分析:

(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

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11876826.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-19
下一篇2023-05-19

发表评论

登录后才能评论

评论列表(0条)

    保存