- 博客(89)
- 收藏
- 关注
原创 YOLO V3学习(3)——基于darknet ros的目标检测 基于gpu版本
问题一:darknet_ros 会开始下载yolov2-tiny.weights、yolov3.weights和yolov2.weights,但国内下载太慢,可以直接去CMakelists.txt里注释掉。另外需要说明一点的是从如下链接下载文件放入/darknet_ros/darknet_ros/yolo_network_config/weights文件中。问题二:需要更改相应的gencode,具体可以参考darknet中各种显卡对应。我这里是1660Ti.下载darknet_ros包和darknet包。
2024-02-29 16:55:29
801
1
原创 autoware之twist_filter节点
总的来说,twist_filter是对线速度和角速度进行一个满足车辆运动学的检验,不能超过给定横向加速度阈值,否则做减速处理。lowpass_gain_linear_x 速度的低通滤波系数。lowpass_gain_angular_z 角速度的低通滤波系数。也就是说一阶低通滤波算法采样本次采样值与上次滤波输出值进行加权,得到有效滤波值。lowpass_gain_steering_angle 转角的低通滤波系数。Y(n)为本次滤波输出值;
2023-12-07 22:58:48
481
原创 linux C++实现线程绑定CPU
嵌入式里面我们会使用到,随着产品芯片性能提升,我们也会有很多功能,以及很多进程产生运行,这个时候我们在任务调度调优的时候,把一些进程绑定到固定cpu运行,下面就来分享一下cpu绑定运行的过程:首先运行的环境需要多核,大家可以按照下面命令进行查询对应设备的cpu数量使用cat /proc/cpuinfo查看cpu信息,如下两个信息:processor,指明第几个cpu处理器cpu cores,指明每个处理器的核心数。
2023-11-07 11:07:33
1010
原创 imu的静止零偏噪声标定与积分
备注:这款IMU是九轴IMU,融合了磁力计,也就是原始的yaw角指北是0度,范围为0-360°,顺时针增大。回答:你可以把*q_rr去掉,重新编译后,通过TF转换看到,实际上这个坐标是倒着的,还需要绕X轴转180°才是我们ROS里面用到的坐标系。只左乘q_r的话是可以完成TF的坐标变换的,但是我们通常在ros里用到的坐标系是前左上,所以还要通过右乘q_rr来修正坐标系的位姿。示例使用的Imu为轮趣科技 n100 mini其中imu出来的数据的坐标系是基于ROS坐标系的。输入的单帧Imu示例。
2023-10-24 14:22:06
392
原创 采用ros同步机制 message::filter将自定义消息在类中的实现时间同步
【代码】采用ros同步机制 message::filter将自定义消息在类中的实现时间同步。
2022-12-12 18:00:00
614
1
原创 C++ mark ros系统“秒”转换成“年月日时分秒+毫秒”
void getDate(long long time) { int seconds = time / 1000000000 + 8 * 3600;// time zone +8 int days = seconds / 86400; int year = 1970 + (int) (days / 1461) * 4; // recycled in 4 years = 1461 days int month = 0; int day = days % 1461;
2022-07-08 17:01:50
1737
原创 catkin_make install安装与打包ros功能包
假设有以下工程文件:其中bus_control是主文件,而pure_pursuit、planing均是其依赖文件。在bus_control层级的CMakeLists.txt写法:cmake_minimum_required(VERSION 3.0.2)project(bus_control)# set(CMAKE_BUILD_TYPE Release)SET(CMAKE_BUILD_TYPE Debug)## Compile as C++11, supported in ROS Kineti
2022-01-08 15:05:54
4487
1
原创 C++知识点(19) 纯虚函数与抽象基类
test.h#ifndef TEST#define TEST#include<iostream>using namespace std;class Shape//抽象基类,包含一个或一个以上纯虚函数{private: /* data */public: virtual float area() const {return 0.0;}//虚函数 virtual float volume() const {return 0.0;}//虚函数 virt
2021-09-25 20:43:33
128
原创 数据处理:修改rosbag topic的frame_id
1.安装srv_tools工具git clone https://github.com/srv/srv_tools.git将其作为功能包放到ros工作空间下编译即可。2.使用示例rosrun bag_tools change_frame_id.py -t /blrobot/drivers/lidar_front/velodyne_points -f /laser -i 2021-08-17-11-00-18.bag -o new.bag解释:rosrun bag_tools change_fram
2021-09-17 13:45:18
2306
原创 C++知识点(18) unordered_map
unorder_map是基于哈希表实现,不允许有重复的key值(1) find()iterator find(const key_type &key)如果key存在,则find返回key对应迭代器,通过迭代器的second获取值;如果key不存在,则返回unordered_map::end();因此可以通过map.find(key)==map.end()来判断key是否存在于unordered_map中。(2)count()size_type count(const key_type &
2021-09-15 21:55:39
2160
原创 机器人导航:move_base的actionlib机制
通过actionlib客户端发布目标点 让actionlib 服务器响应。在actionlin客户端#include <ros/ros.h>#include <tf/transform_listener.h>#include <nav_msgs/Odometry.h>#include <string.h>#include <move_base_msgs/MoveBaseAction.h>#include <actionlib/
2021-09-11 12:29:46
1275
2
原创 C++ Json实现外部参数配置
在项目开发过程中经常会通过配置文件去设置一些外部参数,前期也有讲到过用yaml配置参数,这里写了一个用json配置参数的示例。配置参数:{ "info": { "name": "I am Mr.liu", "year": 18, "id": 123456, "chinese": 98, "math": 99, "
2021-08-29 09:41:22
508
原创 数据处理:map2world的初始对准
在gnss和lidar融合定位的过程中有这样的一个问题,需要将雷达点云匹配的位姿转换到可以将相对于map系的gnss位置和laser位置分别记录到gnss.csv和laser.csv中。然后将位置点分别保存到sensor_msgs::PointCloud2类型的点云,最后再用ICP的方式找到两者的旋转和偏移。...
2021-08-18 20:02:35
465
3
原创 C++知识点(17)C++关键字static特点总结
一、面向过程设计1.修饰变量1.1 静态全局变量在声明它的整个文件可见,文件以外不可见。1.2 静态局布变量(1)在执行到该对象声明处被首次初始化,后续函数调用,不再初始化;(2)作用于局部作用域,当定义函数结束,作用域也结束;2.修饰函数2.1 全局静态函数(1)只能在声明它的文件中可用,不能被其它文件所用;(2)其它文件可以定义相同名称的函数二、面向对象设计1.修饰j静态数据成员(1)该类所有对象共有,只分配一次内存;(2)定义时即初始化,只限类外,eg. int Box:h
2021-08-08 11:31:10
215
原创 ROS知识点(9)_利用Eigen求解平方根
eg.点A(x1,y1) 点B(x2,y2),求解两点间距离Eigen::Vector2f rad_dir(x1-x2,y1-y2);Eigen::Vector2f Q=rad_dir.cwiseProduct(rad_dir);//该表达式完成的功能是将rad_dir*rad_dir的对应点相乘。//Q=((x1-x2)^2,(y1-y2)^2)double a=Q.sum();//该步实现的是a=(x1-x2)^2+(y1-y2)^2double b=sqrt(a);//该步实现的是b=
2021-08-07 21:48:59
844
原创 C++知识点(16)智能指针shared_ptr的初始化形式
1.默认初始化的智能指针保存着一个空指针NULLshared_ptr<T> p1;if(!p1) cout<<"p1=NULL"<<endl;2.一般形式的初始化用字符串hello初始化。shared_ptr<T> p2(new T);if(p2 && p2->empty()) cout<<"p1=NULL"<<endl;用字符串hello初始化。shared_ptr<T>
2021-08-07 21:02:00
1876
原创 C++知识点(14)线程与并发
共享内存 同一时刻只允许一个线程使用,要对访问临界资源的代码加锁保护。该程序中三个线程中var 的访问需加锁保护,保证了三个线程不会同时对 var 进行处理。#include <chrono>#include <iostream>#include <mutex>#include <random>#include <thread>double var = 100;std::mutex mymutex;void Threadwirt
2021-05-22 18:59:02
97
2
原创 系统安装:Dell INSPIRON 7501电脑在Win10基础上安装Ubuntu1804后无法进入WIN10系统解决方法
问题描述:戴尔电脑出厂后,在BIOS里面硬盘模式设置的是RAID ON模式,如果想让Ubuntu和win系统并存,Ubuntu系统必须在ACHI硬盘模式下才能识别出来,如果改为ACHI硬盘模式,Ubuntu可以识别到硬盘,但是Win10会因为找不到硬盘程序出现蓝屏的情况。方法1:自制启动盘,重装Win10系统,再装Ubuntu。方法2:不重装系统,先在RAID ON模式下,1)进入win10系统,按Win+R 输入msconfig ,引导->打开安全模式,勾选“最小”,最后确定,重启电脑。2)按
2021-04-17 20:10:35
1075
原创 系统安装:Dell INSPIRON 7501电脑在Win10基础上安装Ubuntu1804的注意点
准备工具:用软碟通制作好的Ubuntu1804启动盘1.关闭电脑默认的快速启动项关闭电脑默认的快速启动项:开始->设置->系统->电源和睡眠->其他电源设置->选择电源按钮的功能->更改当前不可用的设置->去掉“启用快速启动”的选项->保存修改2.Bios设置五、修改Bios设置重启电脑,一直按F12,进入Bios设置界面。SATA OperationSystem Configuration->SATA Operation改成AHCI。
2021-04-17 18:20:39
959
1
原创 学习笔记:protobuf数据序列化后通过网络传输后反序列化数据
1.student.proto文件:syntax = "proto3";package EthernetCom;message student_info { double id = 1; double age= 2; enum SEX { MAlE=0; FEMALE=1; } SEX sex=3; string note=4;}2.客户端:#include<string.h>#include
2021-03-20 15:26:16
307
2
原创 坐标转换:将imu坐标系下的角速度、线速度转换到车体坐标系,参考Autoware
需求:获取geometry_msgs::TwistStamped格式的速度信息(角速度+线速度)方法1:从底盘获取线速度,imu获取偏航角速度数据,然后组合数据发布信息。方法2:通过融合定位输出的位姿(x,y,yaw),通过前后帧计算线速度和偏航角速度,然后发布信息方法1实现:头文件:#pragma once#include <ros/ros.h>#include <tf2/transform_datatypes.h>#include <tf2_geomet
2021-03-06 09:48:48
6367
2
原创 学习笔记:滑动平均滤波器
1.滤波器控制块/*滑动平均滤波器——结构体*/typedef struct SlipAveFilter{ u16 len; /*窗口宽度*/ u16 index; /*索引*/ u16 has; /*已有的数据个数*/ char isfull; /*数组数据是否已满*/ float *data; /*滤波器数组*/ float sum; /*求和*/ float res; /*滤波结果*/ } SAFiter_t;2.通过创建函数来创建一个滤
2021-03-05 15:30:46
1354
3
原创 学习笔记:txt作为系统配置文件的读取示例
1.配置文件 parameters.txtfixed=worldbase=baseodometry=odometry# Apply a voxel grid filter on incoming point clouds.grid_filter=1# Resolution of voxel grid filter.grid_res=0.2# Apply a random downsample filter on incoming point clouds.random_filter=
2021-02-25 17:42:52
315
原创 Linux知识点(10)_本地与服务器文件目录映射与挂载
将172.16.0.100服务器下的/opt/robot/,映射为本地端的/home/×××/server_linux/步骤1:分别在服务器和本地端安装nfs、rpcbindsudo apt-get install rpcbindsudo apt-get install nfs-commonsudo apt-get install nfs-kernel-server步骤2:在服务器上修改/etc/exports文件最后添加一行代码,暴露目录给本地端,并分配目录的权限给它;sudo gedit /
2020-11-06 11:20:34
766
原创 ubuntu1604+qt5.9+opencv3.4环境配置
1.安装QT5.9.11.1 Qt官网下载QT5.9.1,版本选择qt-opensource-linux-x64-5.9.1.run,打开Ubuntu终端chmod +x ./qt-opensource-linux-x64-5.9.1.run sudo ./qt-opensource-linux-x64-5.9.1.run1.2 出现图形化安装界面,就和正常软件安装步骤类似,一直点击下一步即可,默认即可,中间不要进行任何操作。1.3 配置工作,在终端输入以下代码:sudo gedit /usr
2020-08-31 22:28:25
261
原创 YOLO V3学习(1)——基于已训练好的模型离线检测单张图片中的对象
1. 下载模型与权重文件模型下载地址:https://github.com/pjreddie/darknet权重下载地址:https://pjreddie.com/darknet/yolo/2. 编译darknet与官方数据测试说明:将下载的yolov3.weights放到backup文件夹中,然后打开Makefile文件。GPU=0CUDNN=0OPENCV=0OPENMP=0DEBUG=0对于CPU版本,若安装了OpenMP(多线程),那么设置为1,加快训练与测试点速度;对于G
2020-08-17 14:49:21
1448
原创 PCL库学习(14)_利用Qt中不同ui界面下的交互来可视化PCL中点云聚类
目标:以PCL中集成的欧式聚类为例,通过触发主界面的“segmentation”->“EuclideanClustering”然后调用出参数设置界面,最终将结果可视化到显示窗口中。具体步骤如下:1.新建.ui:右击“Form Files”->“添加”->“类”->“Qt5GuiClass”。class name命名为qeuclideancluster,然后就会生成相应的.ui,.h,.cpp文件。2.构建ui界面及对象名称修改我这里设置了这样一个简单的参数设定界面3.设
2020-08-15 09:57:52
726
原创 PCL库学习(13)_PCL中的法线估计对象与hdl-graph-slam中的法线滤波
#include <pcl/point_types.h>#include <pcl/io/pcd_io.h>#include <pcl/kdtree/kdtree_flann.h>#include <pcl/features/normal_3d.h>#include <pcl/surface/gp3.h>#include <pcl/visualization/pcl_visualizer.h>intmain (int ar
2020-08-06 10:32:07
620
1
原创 Linux知识点(13)_安装编译gtest中遇到的坑
1.下载gtest,release-1.8.0git clone https://github.com/google/googletest2.编译cd googletestmkdir buildcd buildcmake ..make 出现以下错误:/usr/include/c++/5/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO
2020-08-01 21:06:38
1153
原创 ROS知识点(2)_从bag文件中读取相应的topic数据
void readDataFromBag(const std::string &bag_name, const std::string &amcl_topic_name, const std::string &wheel_topic_name){ rosbag::Bag bag; try { bag.open(bag_name, rosbag::bagmode::Read); } catch (std::exception& e) {
2020-07-31 15:39:07
4960
原创 3D SLAM_LeGo-LOAM(2)_回环检测
Lego-LOAM的回环检测策略比较简单,它同时对距离和时间作考量。1.利用了PCL中基于半径的近邻搜索算法,以机器人当前位姿为搜索点,查找半径为7m范围内的若干个位姿;2利用时间作为约束,如果历史位姿对应时间与当前位姿对应时间的时间差太小,说明是个小回环,意义不大,作者在程序里将时间差设置为大于30s。下图表述了两种情况:上图表示机器人在正常建图的过程,下图表示机器人回到原点,开始判断是否满足回环检测的条件。对应代码也就是这一小段 // find the closest history key
2020-07-29 17:37:02
2674
4
原创 数据预处理(18)_将单线激光雷达的LaserScan数据从极坐标下转到笛卡尔坐标系并存储
void AutoGetLine::TransScanToPoints(const sensor_msgs::LaserScan& scan_in,std::vector<Eigen::Vector3d>& Points){ size_t pts_num=scan_in.ranges.size(); Eigen::ArrayXXd ranges_d(pts_num,2);//pt_num行,2列 Eigen::ArrayXXd output_xy(pts
2020-07-24 15:07:44
2083
3
原创 PCL库学习(12)_基于voxel_grid的欧式聚类算法
本算法在autoware中有相应的实现,这里对相应的代码作相应的的注释void VoxelGridBasedEuclideanClusterNodelet::pointcloudCallback(const sensor_msgs::PointCloud2ConstPtr & input_msg){ // ros2pcl pcl::PointCloud<pcl::PointXYZ>::Ptr raw_pointcloud_ptr(new pcl::PointCloud<
2020-07-17 17:37:28
806
原创 2D SLAM_Cartographer(2)_业务逻辑
cartographer通过main()函数调用void Run()来启动程序,Run()也承接了cartographer的业务逻辑。void Run() { constexpr double kTfBufferCacheTimeInSeconds = 10.; //tf2_ros::Buffer是tf2 library的主要工具。Its main public API is defined by tf2_ros::BufferInterface. tf2_ros::Buffer tf_b
2020-07-13 15:00:20
250
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人