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

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

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

1. 创建ROS工作空间

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

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_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/

你可能感兴趣的文章
nginx 配置~~~本身就是一个静态资源的服务器
查看>>
Nginx 配置清单(一篇够用)
查看>>
Nginx 配置解析:从基础到高级应用指南
查看>>
nginx+php的搭建
查看>>
nginx+tomcat+memcached
查看>>
nginx+Tomcat性能监控
查看>>
nginx+uwsgi+django
查看>>
Nginx-http-flv-module流媒体服务器搭建+模拟推流+flv.js在前端html和Vue中播放HTTP-FLV视频流
查看>>
Nginx下配置codeigniter框架方法
查看>>
Nginx之二:nginx.conf简单配置(参数详解)
查看>>
Nginx代理websocket配置(解决websocket异常断开连接tcp连接不断问题)
查看>>
Nginx代理初探
查看>>
Nginx代理外网映射
查看>>
Nginx代理模式下 log-format 获取客户端真实IP
查看>>
Nginx代理静态资源(gis瓦片图片)实现非固定ip的url适配网络环境映射ip下的资源请求解决方案
查看>>
Nginx反向代理与正向代理配置
查看>>
Nginx多域名,多证书,多服务配置,实用版
查看>>
nginx异常:the “ssl“ parameter requires ngx_http_ssl_module in /usr/local/nginx/conf
查看>>
nginx总结及使用Docker创建nginx教程
查看>>
nginx报错:the “ssl“ parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:128
查看>>