读取机器人移动轨迹并在RVIZ界面中显示

您所在的位置:网站首页 rviz怎么使用之前保存导航 读取机器人移动轨迹并在RVIZ界面中显示

读取机器人移动轨迹并在RVIZ界面中显示

2024-07-11 23:35| 来源: 网络整理| 查看: 265

文章目录 前言一、准备1.坐标系2.ros下的路径消息格式 二、实现过程1.轨迹保存2.轨迹读取并显示

前言

机器人在巡检过程中需要沿着固定路线执行任务,因此可以先把机器人的移动轨迹录制并保存下来,之后读取轨迹,方便后续操作。

一、准备 1.坐标系

巡检导航过程中,机器人需要确定好坐标系,以便进行定位与导航,在gazebo仿真下可以选择world坐标系,在实际使用中通常使用的是map坐标系,这里以map坐标系为例进行介绍。

2.ros下的路径消息格式 rosmsg show nav_msgs/Path std_msgs/Header header uint32 seq time stamp string frame_id geometry_msgs/PoseStamped[] poses std_msgs/Header header uint32 seq time stamp string frame_id geometry_msgs/Pose pose geometry_msgs/Point position float64 x float64 y float64 z geometry_msgs/Quaternion orientation float64 x float64 y float64 z float64 w 二、实现过程 1.轨迹保存

思路:使用/amcl_pose话题获取机器人当前的位置信息,用nav_msgs::Path格式的一个变量Path进行保存,控制机器人的运动,当机器人运动距离超过某一数值时,将当前位置pose加入该变量,直到机器人走完预设的路径。之后遍历Path中路径点保存输出CSV文本即可。

#include #include #include #include #include #include #include #include using namespace std; ros::Subscriber robot_pose_sub_; ros::Subscriber save_path_sub_ ; nav_msgs::Path curr_trajectory_; /* * 计算两点间距离 */ double calculateDistanceBetweenPose(const geometry_msgs::PoseStamped& pose1,const geometry_msgs::PoseStamped& pose2) { double d_x = pose2.pose.position.x - pose1.pose.position.x; double d_y = pose2.pose.position.y - pose1.pose.position.y; return sqrt(d_x* d_x + d_y * d_y); } /* * 保存路径 */ void savePathToFile(string filename) { ofstream File; //保存文本地址 string filePathName; filePathName = "/home/name/path/"+ filename +".csv"; File.open(filePathName.c_str(),ios::out|ios::trunc); //遍历存储路径容器,将路径四元数转为yaw角,写入文本 for(int i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3