环境:ubuntu20.04,ros-Noetic
背景:好几月的工作笔记,一直没空小结归档。最近被家人逼着相亲成家事情(刚出校门几个月而已),有点烦躁,不如放空现实,写写blog,躲到乐土中来。下面就是工作开发中的一些唠叨记录,希望可以方便你我。如果有误,麻烦朋友们不吝赐教。
double time1=ros::Time::now().toSec(); //将时间戳转为浮点数
msg.header.stamp =ros::Time().fromSec(time1);//将浮点数转为ros时间戳
报错:
WORK_SPACE_PATH: /home/ylh/ros_kinetic_ws/src
/home/ylh/ros_kinetic_ws/src/xxx/config/config.yaml
terminate called after throwing an instance of 'YAML::BadFile'
what(): bad file
.....
个人报错理解:读取配置文件路径有问题。
仔细检查可以发现,配置文件config是在src/xxx/config/xxx.yaml,所以这里需要做的内容就是补充路径。查找读取配置文件的源文件,补充 包 路径。
解决方式例子:
std::string(WORK_SPACE_PATH) + std::string("/config/config.yaml");//原始的
std::string(WORK_SPACE_PATH) + std::string("/xxx/config/config.yaml");//修正后的,比原来多了一个xxx(自定义包名称)
shared_ptr的用法
可以指向特定类型的对象,用于自动释放所指的对象
当然还有一个最安全的分配和使用动态内存的方法就是调用一个名为make_shared的标准库函数;
make_shared的用法
make_shared 在动态内存中分配一个对象并初始化它,返回指向此对象的shared_ptr,与智能指针一样,make_shared也定义在头文件memory中;
当要用make_shared时,必须指定想要创建的对象类型,定义方式与模板类相同,在函数名之后跟一个尖括号,在其中给出类型;
例子:
shared_ptr p3 = make_shared(42);
参考:https://blog.csdn.net/u013360881/article/details/71798950
std::mutex 的成员函数
构造函数,std::mutex不允许拷贝构造,也不允许 move 拷贝,最初产生的 mutex 对象是处于 unlocked 状态的。
lock(),调用线程将锁住该互斥量。线程调用该函数会发生下面 3 种情况:
(1). 如果该互斥量当前没有被锁住,则调用线程将该互斥量锁住,直到调用 unlock之前,该线程一直拥有该锁。
(2). 如果当前互斥量被其他线程锁住,则当前的调用线程被阻塞住。
(3). 如果当前互斥量被当前调用线程锁住,则会产生死锁(deadlock)。
参考:https://blog.csdn.net/faihung/article/details/88411839
cd xxx_package_name
mkdir build && cd build
cmake .. && make -j4
1)查询系统中某一个文件,并返回所在路径:
sudo find / -name 'file_name'
如:
ylh@y:/usr/share/opencv4$ sudo find / -name 'constants_c.h'
[sudo] password for ylh:
/usr/include/opencv4/opencv2/video/legacy/constants_c.h
/usr/include/opencv4/opencv2/photo/legacy/constants_c.h
/usr/include/opencv4/opencv2/imgcodecs/legacy/constants_c.h
/usr/include/opencv4/opencv2/videoio/legacy/constants_c.h
....
ylh@y:
2)使用指令sudo make install来安装库,这类可使用删除方式:
cd /自己建立的编译文件夹如,build或release
sudo make uninstall
参考:https://www.jianshu.com/p/f54b0fc13811
3)使用sudo make install
时,安装完成时,会提示安装所在位置
做开发时候,编译和运行的电脑可能不是一样的,如笔记本开发,而实际使用运行是在工控机上面.这时候,我们希望在不污染工控机原来环境情况下,对工控机的目标包进行升级.这是,可以把笔记本上编译的程序生成的动态库文件,放到工控机对应位置即可.
python xxx.py #运行的程序来自python2版本,若里面对应的模块有来自其他模块则无法运行
python3 xxxx.py #运行的程序来自python3版本
终端出现样式:
KeyboardInterrupt
>>>
退出指令:
ctrl+d
import numpy as np
import matplotlib.pyplot as plt
import math
x=np.arange(-20,180,0.1)
y=x**3 #x的多次方表示方式
plt.title("picture")
plt.plot(x,y)
plt.show()
记录至20211020 周三
#####################
不积硅步,无以至千里
好记性不如烂笔头