杂记1--ros开发相关

Posted 鸿_H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了杂记1--ros开发相关相关的知识,希望对你有一定的参考价值。

环境:ubuntu20.04,ros-Noetic

背景:好几月的工作笔记,一直没空小结归档。最近被家人逼着相亲成家事情(刚出校门几个月而已),有点烦躁,不如放空现实,写写blog,躲到乐土中来。下面就是工作开发中的一些唠叨记录,希望可以方便你我。如果有误,麻烦朋友们不吝赐教。

1、ros的时间戳和double类型的转换

  double time1=ros::Time::now().toSec();	//将时间戳转为浮点数
  msg.header.stamp =ros::Time().fromSec(time1);//将浮点数转为ros时间戳

2、自定义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(自定义包名称)

3、智能指针小知识

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

4、c++里面 std::mutex(互斥量)

std::mutex 的成员函数

构造函数,std::mutex不允许拷贝构造,也不允许 move 拷贝,最初产生的 mutex 对象是处于 unlocked 状态的。

lock(),调用线程将锁住该互斥量。线程调用该函数会发生下面 3 种情况:

(1). 如果该互斥量当前没有被锁住,则调用线程将该互斥量锁住,直到调用 unlock之前,该线程一直拥有该锁。

(2). 如果当前互斥量被其他线程锁住,则当前的调用线程被阻塞住。

(3). 如果当前互斥量被当前调用线程锁住,则会产生死锁(deadlock)。

参考:https://blog.csdn.net/faihung/article/details/88411839

5、手动编译某一个包流程

cd xxx_package_name
mkdir build && cd build
cmake .. && make -j4

6、一些ubuntu使用指令

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时,安装完成时,会提示安装所在位置

7、一种有趣思路

做开发时候,编译和运行的电脑可能不是一样的,如笔记本开发,而实际使用运行是在工控机上面.这时候,我们希望在不污染工控机原来环境情况下,对工控机的目标包进行升级.这是,可以把笔记本上编译的程序生成的动态库文件,放到工控机对应位置即可.

8、python小记

python xxx.py  #运行的程序来自python2版本,若里面对应的模块有来自其他模块则无法运行
python3 xxxx.py	#运行的程序来自python3版本

9、一个终端现象

终端出现样式:

KeyboardInterrupt
>>>

退出指令:

ctrl+d 

10、python里面的次方表示

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 周三

#####################
不积硅步,无以至千里
好记性不如烂笔头

以上是关于杂记1--ros开发相关的主要内容,如果未能解决你的问题,请参考以下文章

python杂记

机器人开发相关博客论坛等

Java Web开发——JSP基本语法杂记

Unity游戏开发AssetBundle杂记--AssetBundle的二三事

Promise杂记

浅谈ROS的产品化探索——开发工具篇