CPP解析YAML
Node
Node 是 yaml-cpp 的核心概念,是最重要的数据结构,用于存储解析后的yaml信息
在源码中通过 Nodetype 定义了 Node的可能类型
namespace YAML {
struct NodeType {
enum value {Undifined, Null, Scalar, Sequence, Map};
};
}
可以通过 Type() 方法获取其类型
YAML::Node test1 = YAML::Load("[1,2,3,4]");
std::cout << "Type: " << test1.Type() << std::endl;
// 3 意味着 Sequence
YAML:...
源码编译安装yaml-cpp
源码编译安装yaml-cpp
$ git clone https://github.com/jbeder/yaml-cpp.git
$ cd yaml-cpp
$ mkdir build && cd build
$ cmake .. && make -j
# 默认安装到 /usr/bin /usr/include
$ sudo make install
Rviz远程显示
Rviz在本地显示远程的topic
确定主/从机ip、用户名、主机名
主机:ros机器人
从机:本地的电脑
# 主机ip
$ ifconfig
# 用户名
$ whoami
# 主机名
$ hostname
修改bashrc
$ vim ~/.bashrc
# 在最后面加入如下两行
export ROS_MASTER_URI=http://<主机ip>:11311
export ROS_HOSTNAME=<从机ip>
# 至于端口号为什么是11311,可以自行在主机运行 roscore 命令
# 可以看到输出包含 ROS_MASTER_URI=http://<ip>:<port> 字眼
# 因此可以自行在主机中定义此环境变量...
ROS读取YAML文件
让ROS知道此yaml的存在
用例使用此yaml文件
# 文件名为 test.yaml
max_points: 70000
attr_num: 4
benewake:
point_cloud_range: [0, -46.08, -1, 92.16, 46.08, 4.6]
tanway:
point_clod_range: [-46.08, 0, -1, 46.08, 92.16, 4.6]
LIDAR:
fov_up: 3.0
fov_down: -25.0
bev_map:
voxel_size: [0.16, 0.16, 5.6]
grid_size: [576, 576, 1]
range_map:
proj_H: 96
proj_W: ...
ROS点云和PCL点云转换
ROS点云<=>PCL点云
PCL第一代点云:sensor_msgs::PointCloud2 <=> pcl::PointCloud<T>
头文件:
#include <pcl_ros/point_cloud.h>
#include <sensor_msgs/PointCloud2.h>
#include <pcl_ros/transforms.h>
原型:
void pcl::fromROSMsg(const sensor_msgs::Pointcloud2 &, pcl::PointCloud<T> &);
void pcl::toROSMsg(const pcl::...
ROS轮询机制
消息队列
发送消息过快时,来不及处理,回调函数会存放在消息队列当中
单话题
显而易见,只存在一个消息队列
多话题
默认情况下,所有的回调函数共享同一个全局消息队列
By default, all callbacks get assigned into that global queue, which is then processed by ros::spin() or one of the alternatives.
ros::spin()
不断的轮询回调函数队列,有就立马处理,没有就阻塞
ros::spinOnce()
每执行一次就执行回调函数队列中所有的消息队列,然后继续向下执行,不阻塞
参考资料
ros::spin、ros::spi...
kitti2rosbag
kitti 数据转 rosbag
由于需要验证笔者写的 3D 点云数据转 range image 是否成功,由于项目组已经写好了 rosmsg 到 pcd 的内容。因此想将 kitti 的数据录成一个 bag 包,发布出去,然后在项目的代码里添加转 range image 模块,可以直接将项目已经转好的 pcd 作为 range image 模块的输入。
|——————–| |———— | |————–|
velodyne/XXX.bin
——–> rosbag ——–>
Ptr –> pcd
——–>
range image
...
ROS自定义消息结构
定义消息结构和使用
定义消息结构
在功能包中新建 msg 目录,里面创建 后缀名为 .msg 的文件
使用之前写下这篇文档时创建的功能包 learing_topic
$ cd <work_space>/src/learning_topic
$ mkdir msg && cd msg
$ touch Person.msg
$ vim Person.msg
# 写入如下内容
string name
uint8 sex
uint8 age
uint8 unknown = 0
uint8 male = 1
uint8 female = 2
‼️!!! update package.xml
<!-- 新增编译依赖 -->
<build...
使用gdb调试ROS项目
如何使用gdb
见文档
roslaunch
使用roslaunch命令运行功能包时,如何使用gdb调试?
在launch文件中的node标签添加一句话
launch-prefix="xterm -e gdb -ex run --args "
修改完后效果如下
<node pkg="waypoint_follower" type="pure_persuit" name="pure_pursuit" output="screen" launch-prefix="xterm -e gdb -ex run --args">
………
</node>
注意这个时候会重新打开一个shell窗口来执行被调试的程序,因此如果使用远程ssh到开发板上进行开发...
114 post articles, 12 pages.