博客
关于我
ROS使用笔记
阅读量:249 次
发布时间:2019-03-01

本文共 4108 字,大约阅读时间需要 13 分钟。

创建ROS工作空间及相关开发指南

1. 创建ROS工作空间

在ROS中创建一个工作空间的步骤如下:

mkdir -p ~/catkin_ws/srccd ~/catkin_ws/srccatkin_init_workspace

2. 头文件引用

在ROS项目中,头文件的引入通常包含以下内容:

#include 
#include
#include
#include
#include
#include
#include

3. 类定义

以下是对Scheduler类的定义:

class Scheduler {public:    Scheduler(ros::NodeHandle& node_handle);    ~Scheduler();    void initialize();    void run();private:    void imuHandler(const sensor_msgs::Imu::ConstPtr& msg);    void gpsHandler(const sensor_msgs::NavSatFix::ConstPtr& msg);    void cloudHandler(const sensor_msgs::PointCloud2ConstPtr& msg);    void imageHandler(const sensor_msgs::ImageConstPtr& msg);    void compressedImageHandler(const sensor_msgs::CompressedImage::ConstPtr& msg);private:    ros::NodeHandle node_handle_;    ros::Subscriber imu_sub_;    ros::Subscriber gnss_sub_;    ros::Subscriber cloud_sub_;    ros::Subscriber image_sub_;    ros::Subscriber compressed_image_sub_;    ros::Publisher location_pub_;};

4. 初始化

Scheduler类的初始化方法如下:

void Scheduler::initialize() {    // IMU主题订阅    imu_sub_ = node_handle_.subscribe("imu_topic", 10, &Scheduler::imuHandler, this, ros::TransportHints().tcpNoDelay());    // GPS主题订阅    gnss_sub_ = node_handle_.subscribe("gps_topic", 2, &Scheduler::gpsHandler, this);    // LiDAR主题订阅    cloud_sub_ = node_handle_.subscribe("lidar_topic", 1, &Scheduler::cloudHandler, this);    // 图像主题订阅    image_sub_ = node_handle_.subscribe("camera_topic", 5, &Scheduler::imageHandler, this);    // 压缩图像主题订阅    compressed_image_sub_ = node_handle_.subscribe("camera_topic", 5, &Scheduler::compressedImageHandler, this);    // 发布位置信息    location_pub_ = node_handle_.advertise
("topic_m", 1000);}

5. 回调函数

以下是各个回调函数的实现:

void Scheduler::imuHandler(const sensor_msgs::Imu::ConstPtr& msg) {    time = msg->header.stamp.toSec();    // 加速度和角速度处理    Eigen::Vector3d acceleration(msg->linear_acceleration.x,                                  msg->linear_acceleration.y,                                  msg->linear_acceleration.z);    // 角速度处理    Eigen::Vector3d angular_velocity(msg->angular_velocity.x,                                    msg->angular_velocity.y,                                    msg->angular_velocity.z);}void Scheduler::gpsHandler(const sensor_msgs::NavSatFix::ConstPtr& msg) {    Eigen::Vector3d position(msg->longitude, msg->latitude, msg->altitude);}void Scheduler::cloudHandler(const sensor_msgs::PointCloud2ConstPtr& msg) {    pcl::PointCloud
::Ptr cloud; pcl::fromROSMsg(*msg, *cloud);}void Scheduler::imageHandler(const sensor_msgs::ImageConstPtr& msg) { double time_nsecond = msg->header.stamp.toNSec(); cv::Mat color_image; cv_bridge::CvImageConstPtr srcImage = cv_bridge::toCvShare(msg, sensor_msgs::image_encodings::RGB8);}

6. 服务器实现

以下是服务端的实现:

bool add(const beginner_tutorials::AddTwoInts::Request& req,          const beginner_tutorials::AddTwoInts::Response& res) {    res.sum = req.a + req.b;    ROS_INFO("request: x=%ld, y=%ld", (long int)req.a, (long int)req.b);    ROS_INFO("sending back response: [%ld]", (long int)res.sum);    return true;}ros::ServiceServer service = n.advertiseService("add_two_ints", add);

7. 客户端实现

以下是客户端的实现:

ros::NodeHandle n;ros::ServiceClient client = n.serviceClient
();

8. 参数服务器

参数服务器的使用方法:

// 获取参数std::string parameter;node_handle_.getParam("param", parameter);// 设置参数node_handle_.param["param"] = parameter;// 获取参数(可选参数服务器配置)node_handle_.param["param"] = parameter;node_handle_.param["param"] = parameter;

9. 主函数

以下是主函数的实现:

int main(int argc, char** argv) {    ros::init(argc, argv, "node");    ros::console::set_logger_level(ROSCONSOLE_DEFAULT_NAME, ros::console::levels::Info);    double time = ros::Time::now().toSec();    Scheduler scheduler(node_handle_);    scheduler.initialize();    scheduler.run();    return 0;}

10. 常用命令

按时间截取

rosbag filter origin.bag new.bag "t.secs >= 576210103 and t.secs <= 576210303"

显示数据包信息

rosbag info data.bag

播放数据包

rosbag play data.bag

可视化

rqt_image_view

录包

rosbag record -help

查看消息

rostopic echo /radar_all_tracker | grep header -A4

转载地址:http://ykwt.baihongyu.com/

你可能感兴趣的文章
mysql优化概述(范式.索引.定位慢查询)
查看>>
MySQL优化配置详解
查看>>
Mysql优化高级篇(全)
查看>>
mysql会员求积分_MySql-统计所有会员的最高前10次的积分和
查看>>
mysql会对联合索性排序优化_MySQL索引优化实战
查看>>
MySQL作为服务端的配置过程与实际案例
查看>>
Mysql使用命令行备份数据
查看>>
MySQL保姆级教程(SQL语法基础篇)从小白到高手的进阶指南,收藏这一篇就够了
查看>>
MySQL修改root密码的多种方法
查看>>
mysql修改一列属性
查看>>
MySQL修改密码报错ERROR 1396 (HY000): Operation ALTER USER failed for ‘root‘@‘localhost‘
查看>>
Mysql全局优化参数
查看>>
MySQL全文索引实现简单版搜索引擎
查看>>
MySQL全面瓦解:安装部署与准备
查看>>
mysql共享锁与排他锁
查看>>
MySQL内存表使用技巧
查看>>
MySQL再叙(体系结构、存储引擎、索引、SQL执行过程)
查看>>
mysql出现错误的解决办法
查看>>
MySQL函数
查看>>
mysql函数汇总之字符串函数
查看>>