TDR-SDC团队推出fsd_perception_ros感知堆栈教程

需积分: 9 0 下载量 127 浏览量 更新于2024-12-22 收藏 308KB ZIP 举报
资源摘要信息:"fsd_perception_ros:TDR-SDC团队的感知回购" 知识点解析: 1.ROS(Robot Operating System):ROS是一个用于机器人应用的灵活框架,它提供了一系列工具和库,这些工具和库被用来帮助软件开发人员创建机器人应用程序。TDR-SDC团队的感知回购是针对ROS环境进行构建的,这表明他们的代码和框架是为了在ROS环境下运行设计的。 2.Catkin构建系统:catkin是ROS的官方构建系统,它继承了rosbuild的优点,对ROS包提供了更加规范的构建方式。在TDR-SDC团队的回购中,首先创建一个工作空间目录,然后进入源代码目录,使用git clone命令下载fsd_perception回购,最后通过catkin_make命令编译代码。 3.Git版本控制:Git是一个开源的分布式版本控制工具,被广泛用于软件的版本管理。TDR-SDC团队使用了GitHub,这是一个托管git仓库的网站,允许开发者协作和发布代码。团队的感知回购托管在https://github.com/TDR-SDC/fsd_perception上。 4.LIDAR(Light Detection and Ranging)处理:LIDAR是一种遥感技术,用于测量地表或大气中的距离,通过发射激光脉冲并分析返回的光来实现。在感知回购中,包含了处理LIDAR数据的节点。LIDAR在自动驾驶领域中非常重要,因为它能够生成高精度的三维地图,这对于车辆来说是非常关键的感知数据。 5.pointcloudprocessing:pointcloudprocessing是一个假设存在的Python模块或脚本,用于处理点云数据。在这个回购中,rosrun命令用于运行一个名为final.py的Python节点,它可能处理点云数据,这些数据来自于LIDAR传感器,并且可能与ROS中的点云库(如sensor_msgs/PointCloud2)交互。 6.ROS模拟:在TDR-SDC团队的回购中,通过使用roslaunch命令和simulation.launch文件来启动ROS模拟环境。roslaunch是一个用于启动多个ROS节点的工具,它可以启动复杂的机器人系统,并设置所有必需的参数。这里的模拟环境是为了测试和演示感知系统的能力。 7.ROS包(package):在ROS中,"包"是指一个目录,里面包含了可执行文件、脚本、库文件等,所有这些都可以使用catkin构建。每个ROS包通常都有一个package.xml文件,其中包含了关于该包的元数据信息,以及一个CMakeLists.txt文件,其中包含了构建该包所需的构建指令。 8.ROS节点(node):在ROS中,节点是一个可执行的程序,它使用ROS的通信机制与其他节点进行交互。每个节点负责一个特定的功能,并且可以并行运行。在TDR-SDC团队的感知回购中,LIDAR处理节点和其他节点可以同时运行,并且通过ROS的发布/订阅机制相互交流。 通过以上知识点解析,可以看出TDR-SDC团队的感知回购涉及到了ROS的构建、运行模拟、LIDAR数据处理以及使用Git进行版本控制等多个方面。这表明他们正在构建一个完整的感知系统,其核心是利用ROS作为开发框架,并且在自动驾驶和机器人应用领域有着广泛的应用前景。

#include <ros/ros.h> #include "Utils/param.h" #include "control.hpp" #include <sstream> namespace ns_control { Param control_param_; Control::Control(ros::NodeHandle &nh) : nh_(nh) { controller_ = nh_.param<std::string>("controller", "pure_pursuit"); control_param_.getParams(nh_, controller_); if (controller_ == "pure_pursuit") { solver_ = &pure_pursuit_solver_; } else if (controller_ == "mpc") { solver_ = &mpc_solver_; } else { ROS_ERROR("Undefined Solver name !"); } } void Control::setCarState(const fsd_common_msgs::CarState &msgs) { car_state_ = msgs; } void Control::setTrack(const Trajectory &msgs) { refline_ = msgs; } fsd_common_msgs::ControlCommand Control::getCmd() { return cmd_; } visualization_msgs::MarkerArray Control::getPrePath() { return PrePath_; } bool Control::Check() { if (refline_.empty()) { ROS_DEBUG_STREAM("Successfully passing check"); return false; } return true; } void Control::runAlgorithm() { if (!Check()) { ROS_WARN_STREAM("Check Error"); return; } solver_->setState(VehicleState(car_state_, cmd_)); solver_->setTrajectory(refline_); solver_->solve(); cmd_ = solver_->getCmd(); std::vector<float> color_ref = {1, 0, 0}; std::vector<float> color_pre = {0, 1, 0}; std::vector<float> color_init = {0, 0, 1}; if (controller_ == "mpc") visual_trajectory(solver_->getTrajectory(), PrePath_, "/base_link", color_pre, car_state_.header, true); std::cout << "steering: " << cmd_.steering_angle.data << std::endl; std::cout << "throttle: " << cmd_.throttle.data << std::endl; }翻译这段代码

2023-06-07 上传