ROS之rviz显示GNSS/INS运动轨迹

本文介绍了如何在ROS中使用nav_msgs/Path展示自定义圆形轨迹和GNSS/INS数据的实时轨迹,包括show_path.cpp代码实现、CMakeLists.txt配置以及轨迹显示效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、显示自定义圆形轨迹

二、显示GNSS/INS轨迹

2.1代码show_path.cpp

2.2CMakeLists.txt

2.3显示效果


一、显示自定义圆形轨迹

参考:(九)ROS在rviz中实时显示轨迹(nav_msgs/Path消息的使用)_nav_msgs/path.h_火星机器人life的博客-CSDN博客

 默认代码的画圆速度很慢,改变ROS周期可以调整  //ros::Rate loop_rate(100);

二、显示GNSS/INS轨迹

 在接收到GNSS/INS位置和姿态信息后,由回调函数绘制轨迹path

2.1代码show_path.cpp

订阅GNSS/INS位置姿态信息,发布运动轨迹path

#include <ros/ros.h>
#include <ros/console.h>
#include <nav_msgs/Path.h>
#include <nav_msgs/Odometry.h>
#include <sensor_msgs/NavSatFix.h>
#include <std_msgs/String.h>
#include <geometry_msgs/Quaternion.h>
#include <geometry_msgs/PoseStamped.h>
#include <tf/transform_broadcaster.h>
#include <tf/tf.h>

#include "eul2qua.h"
#include "lla2utm.h"

nav_msgs::Path  path;
ros::Publisher  path_pub;

void odomCallback(const geometry_msgs::PoseStampedConstPtr& odom)
{
    geometry_msgs::PoseStamped this_pose_stamped;
    double pre_longitude = 116.17487972 , pre_latitude = 40.13351039 , pre_height = 37.43;
    double LL2UTM_E0 = LonLat2UTM(pre_longitude, pre_latitude).first;
    double LL2UTM_N0 = LonLat2UTM(pre_longitude, pre_latitude).second;
    // cout << "original: "<< LL2UTM_E0 << endl;
    // cout << "original: "<< LL2UTM_N0 << endl;

    double new_longitude = odom->pose.position.x;
    double new_latitude  = odom->pose.position.y;
    double LL2UTM_E_new = LonLat2UTM(new_longitude, new_latitude).first;
    double LL2UTM_N_new = LonLat2UTM(new_longitude, new_latitude).second;

    this_pose_stamped.pose.position.x = LL2UTM_E_new - LL2UTM_E0;
    this_pose_stamped.pose.position.y = LL2UTM_N_new - LL2UTM_N0;
    this_pose_stamped.pose.position.z = odom->pose.position.z - pre_height;

    this_pose_stamped.pose.orientation = odom -> pose.orientation;
 
    this_pose_stamped.header.stamp = ros::Time::now();
    this_pose_stamped.header.frame_id = "map";
 
    path.poses.push_back(this_pose_stamped);
    path.header.stamp = ros::Time::now();
    path.header.frame_id = "map";
    
    path_pub.publish(path);
    cout << "odom: "<<this_pose_stamped.pose.position.x << "  " << this_pose_stamped.pose.position.y << "  " << this_pose_stamped.pose.position.z << endl;
 
}
 
int main (int argc, char **argv)
{
    ros::init (argc, argv, "showpath");
    ros::NodeHandle ph;
    
    path_pub = ph.advertise<nav_msgs::Path>("trajectory_odom", 10, true);
    ros::Subscriber odomSub = ph.subscribe<geometry_msgs::PoseStamped>("/lla_qua", 10, odomCallback);  //订阅里程计话题信息

    ros::spin();
    return 0;
}

2.2CMakeLists.txt

cmake_minimum_required(VERSION 3.0.2)
project(show_path)

set(CMAKE_CXX_FLAGS "-std=c++11")
set(CMAKE_CXX_STANDARD 14)  


find_package(catkin REQUIRED COMPONENTS
  nav_msgs
  roscpp
  rospy
  # sensor_msgs
  std_msgs
  # tf
)
find_package(Eigen3 REQUIRED)
find_package(PCL REQUIRED)

catkin_package(
  CATKIN_DEPENDS roscpp std_msgs
  DEPENDS EIGEN3 PCL 
  INCLUDE_DIRS include
)

include_directories(
  include
  ${catkin_INCLUDE_DIRS}
  ${PCL_INCLUDE_DIRS}
)

aux_source_directory(./src SRCS)
add_executable(show_path ${SRCS})
target_link_libraries(show_path ${catkin_LIBRARIES})

2.3显示效果

 速度为0.5m/s的车运动80s的轨迹

<think>好的,我现在需要帮助用户查找关于基于ROS轨迹预测的资料或实现方法。首先,我得回顾用户提供的引用内容,看看有没有相关的信息。引用1提到了rviz中的轨迹可视化,绿色是参考路径,紫色是预测轨迹,红色是实际轨迹,这可能涉及到ROS中的可视化工具。引用2讨论了CVPR 2024的一个开源项目,结合在线地图和轨迹预测,提到了HiVT和DenseTNT模型,以及地图不确定性的影响,这可能与算法实现相关。引用3提到了MPC算法用于路径跟踪,这可能是一种控制方法,用于实际轨迹跟踪。 接下来,我需要将这些信息整合到基于ROS轨迹预测方法中。首先,ROS中的常用工具,比如rviz用于可视化,Gazebo用于仿真,可能需要提到。然后,算法部分,用户提到的HiVT和DenseTNT模型可能需要在ROS中集成,可能需要使用Python或C++实现。另外,MPC控制算法可能用于跟踪预测的轨迹,这需要与预测模块结合。 然后,我需要考虑用户可能的实际需求,比如如何搭建仿真环境,如何集成预测模型,如何实现控制部分。可能需要分步骤说明,比如环境搭建、算法实现、可视化等。同时,用户可能需要相关的教程或资料,比如ROS的官方文档,GitHub上的开源项目,以及相关论文或会议资料。 还需要注意用户提供的引用中提到的地图不确定性的处理,这可能涉及到在ROS中使用动态地图或实时地图更新。此外,预测轨迹与实际轨迹的对比和调整也是关键点,可能需要用到传感器数据融合或反馈机制。 最后,生成相关问题时要覆盖用户可能进一步关心的内容,比如具体算法对比、实时性处理、实际部署中的挑战等。确保回答结构清晰,步骤明确,引用相关的资料,帮助用户逐步解决问题。</think>### 基于ROS轨迹预测实现方法 #### 1. **ROS环境搭建与工具选择** - **仿真平台**:使用Gazebo搭建机器人运动仿真环境,结合ROS中的`robot_state_publisher`和`tf`包处理坐标变换[^3]。 - **可视化工具**:通过rviz实时显示参考路径(绿色)、预测轨迹(紫色/蓝色)和实际轨迹(红色)[^1]。 - **数据接口**:利用ROS话题(Topic)传递传感器数据(如激光雷达、摄像头)和轨迹信息,例如订阅`/odom`获取定位数据,发布预测结果到`/predicted_trajectory`。 #### 2. **轨迹预测算法实现** - **深度学习模型集成**: 可参考CVPR 2024开源的HiVT、DenseTNT等模型,结合地图不确定性优化预测结果(如引用[2]中提到的StreamMapNet生成高确定性道路边界)。 示例代码框架: ```python # 伪代码:在ROS节点中调用预测模型 import rospy from trajectory_predictor import HiVT_Predictor def callback(sensor_data): map_data = preprocess_map(sensor_data) predicted_traj = HiVT_Predictor(map_data, agent_states) publish(predicted_traj) rospy.init_node('trajectory_predictor') rospy.Subscriber('/sensor_data', SensorMsg, callback) ``` - **传统控制方法**: 结合模型预测控制(MPC)实现路径跟踪,如引用[3]中提到的“指定路径跟踪”,通过求解优化问题生成控制指令。 #### 3. **关键实现步骤** 1. **地图数据处理**: 使用`nav_msgs/OccupancyGrid`或自定义消息类型加载在线地图,提取车道线、障碍物等信息。 2. **多模态传感器融合**: 通过`message_filters`同步摄像头、IMU等数据,输入到预测模型中。 3. **实时性优化**: 采用C++编写高性能预测模块(如部署PyTorch模型到LibTorch),或使用ROS的`nodelet`减少通信延迟。 #### 4. **开源资源与教程推荐** - **官方文档**:ROS Wiki中的[navigation](http://wiki.ros.org/navigation)和[gmapping](http://wiki.ros.org/gmapping)包。 - **代码仓库**: - [Autoware](https://github.com/autowarefoundation/autoware):包含自动驾驶轨迹预测模块。 - [OpenTraj](https://github.com/crowdbotp/OpenTraj):行人轨迹预测数据集与ROS接口。 - **论文复现**:引用[2]中CVPR 2024的HiVT + MapTR方法,可在GitHub搜索相关开源实现。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可见一班

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值