admin 管理员组

文章数量: 887016

dd

sudo apt-get  install  ibus-pinyin

代码中启动ros节点roslaunch和rosrun


import subprocess
import rospy
import rosnode
class launch_demo:
    def __init__(self, cmd=None):
        self.cmd = cmd
 
    def launch(self):
        self.child = subprocess.Popen(self.cmd)
        return True
 
    def shutdown(self):
        self.child.terminate()
        self.child.wait()
        return True

if __name__ == "__main__":
    rospy.init_node('launch_demo',anonymous=True)
 
    launch_nav = launch_demo(["roslaunch", "pibot_simulator", "nav.launch"])
 
    launch_nav.launch()
 
    r = rospy.Rate(0.2)
    r.sleep()
 
    rospy.loginfo("switch map...")
    r = rospy.Rate(1)
    r.sleep()
 
    rosnode.kill_nodes(['map_server'])
 
    map_name = "/home/pibot/ros_ws/src/pibot_simulator/maps/blank_map_with_obstacle.yaml"
 
    map_node = subprocess.Popen(["rosrun", "map_server", "map_server", map_name, "__name:=map_server"])
 
    while not rospy.is_shutdown():
        r.sleep()
#include <unistd.h>
//execlp函数的作用是从PATH 环境变量所指的目录中查找符合参数file的文件名,找到后便执行该文件
 execlp("roslaunch", "roslaunch", "runtime_manager","runtime_manager.launch", NULL);

ROS开机自动启动节点

robot_upstart安装节点
sudo apt-get install ros-kinetic-robot-upstart

rosrun robot_upstart install package_name/launch/start.launch --logdir /$HOME/.ros/log --job mine_job

sudo systemctl daemon-reload && sudo systemctl start mine_job

restart job:

sudo systemctl restart mine_job

stop job:

sudo systemctl stop mine_job

 github下载来链接

https://shrill-pond-3e81.hunsh.workers.dev

ros打包:

安装bloom-generate

sudo apt-get install python-bloom fakeroot
ros打包命令
roscd **(rosbag)
bloom-generate rosdebian --os-name ubuntu --ros-distro kinetic
fakeroot debian/rules binary
安装ros包
sudo dpkg -i ***.deb
执行sudo gedit ~/.ros/rosdep.yaml
lslidar_n301_msgs:
  ubuntu: [ros-kinetic-lslidar-n301-msgs]
disinfect_msg:
  ubuntu: [ros-kinetic-disinfect-msg]
disinfect_srvs:
  ubuntu: [ros-kinetic-disinfect-srvs]
qrcode_srvs:
  ubuntu: [ros-kinetic-qrcode-srvs]
qrcode_msg:
  ubuntu: [ros-kinetic-qrcode-msg]

执行sudo gedit /etc/ros/rosdep/sources.list.d/50-my-default.list
yaml file://localhost/home/iimt/.ros/rosdep.yaml

执行rosdep update

安装gmapping
sudo apt-get install ros-kinetic-openslam-gmapping ros-kinetic-slam-gmapping ros-kinetic-usb-cam

sudo apt-get install ros-kinetic-amcl ros-kinetic-base-local-planner ros-kinetic-carrot-planner ros-kinetic-clear-costmap-recovery ros-kinetic-costmap-2d ros-kinetic-costmap-prohibition-layer ros-kinetic-dwa-local-planner ros-kinetic-fake-localization ros-kinetic-follow-waypoints ros-kinetic-global-planner ros-kinetic-map-server ros-kinetic-move-slow-and-clear ros-kinetic-nav-core ros-kinetic-navfn ros-kinetic-navigation ros-kinetic-robot-pose-ekf ros-kinetic-rotate-recovery ros-kinetic-voxel-grid ros-kinetic-waypoint-global-planner 
sudo apt-get install ros-kinetic-teleop-twist-keyboard  ros-kinetic-yocs-velocity-smoother 
------------------------------------
navigation中只更新move_base 和eband
------------------------------------
 sudo dpkg -i ros-kinetic-controlmaster_0.0.0-0xenial_amd64.deb ros-kinetic-disinfect-msg_0.0.0-0xenial_amd64.deb ros-kinetic-disinfect-srvs_0.0.0-0xenial_amd64.deb ros-kinetic-eband-local-planner_0.3.1-0xenial_amd64.deb ros-kinetic-gmapping_1.4.2-0xenial_amd64.deb ros-kinetic-lslidar-n301-decoder_1.2.0-0xenial_amd64.deb ros-kinetic-lslidar-n301-driver_1.2.0-0xenial_amd64.deb ros-kinetic-lslidar-n301-msgs_1.2.0-0xenial_amd64.deb ros-kinetic-motorcontrol_0.0.0-0xenial_amd64.deb ros-kinetic-motor-mapbuild_0.0.0-0xenial_amd64.deb ros-kinetic-move-base_1.14.4-0xenial_amd64.deb ros-kinetic-qrcode-msg_0.0.0-0xenial_amd64.deb ros-kinetic-qrcode-srvs_0.0.0-0xenial_amd64.deb ros-kinetic-robot-vision_0.0.0-0xenial_amd64.deb ros-kinetic-robot-voice_0.0.0-0xenial_amd64.deb ros-kinetic-ui_0.1.0-0xenial_amd64.deb ros-kinetic-visualorientation_0.0.0-0xenial_amd64.deb 

clion

clion注册时报错:

Your activation code could not be validated(error 1653219) IntelliJ IDE

https://blog.csdn/yu88288356/article/details/95312019
1.hosts文件修改如下,即可解决激活码激活报错问题:
0.0.0.0 https://account.jetbrains:443

ubuntu开机自启动:

1.
 sudo gedit profile
2.在最后一行加入启动脚本
sh /home/iimt/workspace/workspace_ros_disinfectCar/start_lidar.sh &

ubuntu u盘硬盘修复

sudo ntfsfix /dev/sdb2

QInotifyFileSystemWatcherEngine::addPaths: inotify_add_watch failed: 设备上没有空间

命令设置:sudo sysctl fs.inotify.max_user_watches=524288
生效: sudo sysctl -p

ros中添加qt 增加Qt5SerialPor库

sudo apt-get install ros-kinetic-qt-create
sudo apt-get install ros-kinetic-qt-build
sudo apt install libqt5serialport5-dev

qtcreate :无法覆盖文件 /home/iimt/.config/QtProject/qtcreator/devices.xml : Permission denied

sudo运行qtcreator后,下次不使用sudo打开会报以上错误 /home/xxx/.config/QtProject/Qtcreator/qtversion.xml : Permission denied

原因:在sudo下打开qtcreator时,会向用户根目录的.config下写数据,所以这个目录变为管理员权限,使用下述命令就是将.config的管理员权限取消。

解决方式:

改变主目录下.config的权限,在home用户目录,终端输入:sudo chown -R iimt:iimt ~/.config/

注意改掉用户名:比如用户名为user,则输入的就是sudo chown -R user:user ./config/
注意空格的位置。在用户名后面还有一个空格

 以下是监听端口

需要先下载net-tools

netstat用法

sudo apt-get install net-tools
netstat -an|grep :8080

python2启动服务器:

 浏览器输入:http://0.0.0.0:8000即可看到目录下的文件

python -m SimpleHTTPServer

http server默认端口为8000,如果更改端口,可按如下格式 

python -m SimpleHTTPServer 8080 

python3启动服务器:

python -m http.server
python -m http.server 8888

Sub-process/usr/bin/dpkg returned an error code (1) 这个错误解决办法: 

Sub-process/usr/bin/dpkg returned an error code (1) 这个错误解决办法:

cd /var/lib/dpkg

sudo mv info info.bak #即备份一个info

sudo mkdir info #新建一个新的info目录

然后采用以下命令重装那些出错的软件包

sudo apt-get –reinstallinstall 软件包名

开始我是想在一条命令中同时安装几个软件包,结果还是出现E: Sub-process/usr/bin/dpkg returned an error code (1) 。于是把新的info删掉,一个个地来安装,每装好一个软件包,就把info删掉,再新建一个,这样就没有提示E: Sub-process/usr/bin/dpkg returned an error code (1) 了。

最后用原来的info.bak 替换新的info

sudo -rf info

sudo mv info.bak info

之后输入 sudo apt-get update 和 sudo apt-get upgrade 以及sudo apt-get autoremove都不再有E: Sub-process/usr/bin/dpkg returned an error code (1)了

W: GPG 错误:http://dl.google/linux/chrome/deb stable InRelease: 由于没有公钥,无法验证下列签名: NO_PUBKEY 78BD65473CB3BD13
 

sudo apt-key adv --keyserver keyserver.ubuntu --recv-keys 78BD65473CB3BD13

更新命令

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get -f install

ubuntu控制台 终端 

terminator安装

sudo apt-get install terminator

terminator 多窗同时输入

打开多终端同步输入

win + G

关闭多终端同步输入

win + shift + G

clion 类型补全,代码补全

clion IDEA 快捷键:

Ctrl+ALT+V 
  • 循环读取,实时查看指定文件最新内容tail -f test-date.log
tail -f test-date.log

clion 多窗口显示,鼠标放在文件显示栏右键点击

查看编码方式:import chardet

# coding=utf-8
def check_charset(file_path):
    import chardet
    with open(file_path, "rb") as f:
        data = f.read(4)
        charset = chardet.detect(data)['encoding']
    return charset
 
your_path = 你的文件路径
with open(your_path, encoding=check_charset(your_path)) as f:
    data = f.read()
    print(data)

Matlab 保存变量数据

positionerror2:Matlab变量数据

xlswrite('C:\Users\Administrator\Desktop\candata\1.xlsx',positionerror2)

csvwrite('C:\Users\Administrator\Desktop\candata\1.csv',positionerror2)

csvwrite('C:\Users\Administrator\Desktop\candata\1.txt',positionerror2)

保存后通过numpy读取数据:

data=np.loadtxt('1.csv',delimiter=',')

如报以下错误:

UnicodeDecodeError: 'gbk' codec can't decode byte 0xfb in position 4: illegal multibyte sequence

是因为你的电脑被加密了

解决方法是:

用这个csvwrite命令保存加密软件不能识别的文件后缀就没问题了

例:

csvwrite('C:\Users\Administrator\Desktop\candata\1.txtttt',positionerror2)

csvwrite('C:\Users\Administrator\Desktop\candata\1.txtttt',positionerror2)

在通过python加载就可以了:

data = np.loadtxt('1.txtttt',delimiter=',')

python-pip镜像源¶

配置Python安装源¶

临时指定安装源¶

如安装opencv-python的3.4.0.12版本,可直接使用-i参数指定源

pip3 install -i https://pypi.douban/simple opencv-python==3.4.0.12

永久指定安装源¶

每次临时指定源地址比较麻烦,可以通过以下方式配置永久源

在主目录创建.pip文件夹

mkdir ~/.pip

编写~/.pip/pip.conf

已复制sudo gedit ~/.pip/pip.conf

并添加以下内容

[global]
trusted-host=pypi.douban
index-url=https://mirrors.aliyun/pypi/simple/
timeout=6000

此时,默认pip install xxx已经可以自动走镜像地址, 但是sudo模式下的pip和pip3并不能使用此镜像。所以要把这个pip.conf复制到/root/.pip目录下

sudo mkdir -p /root/.pip
sudo cp ~/.pip/pip.conf /root/.pip/

可用的源有:

清华大学:https://pypi.tuna.tsinghua.edu/simple 
阿里云:http://mirrors.aliyun/pypi/simple/ 
中国科技大学 https://pypi.mirrors.ustc.edu/simple/ 
华中理工大学:http://pypi.hustunique/ 
山东理工大学:http://pypi.sdutlinux/ 
豆瓣:https://pypi.douban/simple/
# 原有设置:
http://mirrors.aliyun/pypi/simple/ 
 
# 改为:
https://mirrors.aliyun/pypi/simple/

idea原

https://pypi.python/simple

ubuntu 挂载移动硬盘,U盘,移动ssd,多系统平台插拔,出现错误:

mount:unknownfilesystem type 'exfat'

ubuntu 13.10以上:

sudo apt-get install exfat-fuse

 ubuntu 13.04或以下

sudo apt-add-repository ppa:relan/exfat

sudo apt-get update

sudo apt-get insatll fuse-exfat

pip依赖修复¶

如果安装过程中遇到pip环境工具问题,可以通过以下命令重装pip和pip3

sudo apt-get install --reinstall python3-pip
sudo apt-get install --reinstall python-pip

1.安装矢量图制作工具: 

sudo add-apt-repository ppa:inkscape.dev/stable
sudo apt-get update
sudo apt-get install inkscape

图像转svg

sudo apt install potrace

获取ros版本

${rosversion -d }

安装gcc

sudo apt-get install gcc-7 g++-7

ROS项目迁移:

ros的串口包

18.04

sudo apt-get install ros-melodic-serial
sudo apt-get install ros-melodic-libuvc
sudo apt-get install ros-melodic-bfl
sudo apt-get install ros-melodic-tf2-sensor-msgs
ros-melodic-move-base-msgs
sudo apt-get install ros-melodic-joy
 sudo apt-get install ros-melodic-geographic-msgs
sudo apt-get install ros-melodic*
sudo apt-get install ros-melodic-geographic-msgs
sudo apt-get install ros-melodic-cmake-modules
sudo apt-get install ros-melodic-tf2
sudo apt-get install ros-melodic-tf2-geometry-msgs
sudo apt-get install ros-melodic-nodelet
sudo apt install ros-melodic-desktop-full
pip3 install pyyaml
pip install pyyaml
pip install rospkg
不要安装serial 必须要卸载不然程序出错:
pip uninstall serial
要安装:
pip install pyserial

16.04 

sudo apt-get install ros-kinnetic-serial

如果是: Could NOT find SDL (missing: SDL_LIBRARYSDL_INCLUDE_DIR)

首先安装:

sudo apt-get install aptitude
sudo aptitude install libsdl1.2-dev

先选择no,后选择yes,降级安装

sdl_image问题也如此

sudo apt-get install libsdl-image1.2-dev 

或者

sudo aptitude install libsdl-image1.2-dev 

 安装ROS 遇到报错

Command 'rosluanch' not found, did you mean:

  command 'roslaunch' from deb python-roslaunch

Try: sudo apt install <deb name>

首先确保名字正确:

而后:

  1. usrname:~$ sudo apt install python-roslaunch

  2. 正在读取软件包列表... 完成

  3. 正在分析软件包的依赖关系树

  4. 正在读取状态信息... 完成

  5. 有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是

  6. 因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件

  7. 包尚未被创建或是它们已被从新到(Incoming)目录移出。

  8. 下列信息可能会对解决问题有所帮助:

  9. 下列软件包有未满足的依赖关系:

  10. python-roslaunch : 依赖: python-roslib 但是它将不会被安装

  11. E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

参考后,运行了如下命令:

usrname:~$ git clone https://github/ros/catkin.git
 
usrname:~$ cd catkin
 
usrname:~/catkin$ git branch melodic-devel
 
usrname:~/catkin$ mkdir build
 
usrname:~/catkin$ cd build
 
usrname:~/catkin/build$ cmake ..
 
usrname:~/catkin/build$ make
 
usrname:~/catkin/build$ sudo make install
 
usrname:~/catkin/build$ cd ..
 
usrname:~/catkin$ sudo python2 setup.py install
 
usrname:~/catkin$ sudo python3 setup.py install (这一步可能报错,只需要按照指示做就好了,比如缺少catkin_pkg 模块,请采用pip3 install catkin_pkg安装)
 
usrname:~/catkin$ mkdir catkin_ws (非必要,可以跳过的,其实没有作用,我个人是用来做ROS的工作空
间的)
 
usrname:~/catkin$ cd 
 
usrname:~/$ mkdir src
 
usrname:~/$ catkin_make
 
usrname:~/catkin$ sudo apt install ros-melodic-desktop-full
 
usrname:~/catkin$ rosdep update
 
usrname:~/catkin$ cd
 
usrname:~$ source ~/.bashrc

Ubuntu 默认是没有chkconfig命令的,需要手动安装。

使用终端安装命令:
sudo apt-get install sysv-rc-conf
如果出现问题:找不到该软件包,在sources.list文件中添加阿里的镜像源即可
cd /etc/apt
先备份 cp sources.list sources.list.old
vim sources.list
把下面阿里的镜像源添加进去

deb http://mirrors.aliyun/ubuntu/ trusty main restricted universe multiverse  
deb http://mirrors.aliyun/ubuntu/ trusty-security main restricted universe multiverse  
deb http://mirrors.aliyun/ubuntu/ trusty-updates main restricted universe multiverse  
deb http://mirrors.aliyun/ubuntu/ trusty-proposed main restricted universe multiverse  
deb http://mirrors.aliyun/ubuntu/ trusty-backports main restricted universe multiverse  
deb-src http://mirrors.aliyun/ubuntu/ trusty main restricted universe multiverse  
deb-src http://mirrors.aliyun/ubuntu/ trusty-security main restricted universe multiverse  
deb-src http://mirrors.aliyun/ubuntu/ trusty-updates main restricted universe multiverse  
deb-src http://mirrors.aliyun/ubuntu/ trusty-proposed main restricted universe multiverse  
deb-src http://mirrors.aliyun/ubuntu/ trusty-backports main restricted universe multiverse

更新源:sudo apt-get update
重新安装:sudo apt-get install sysv-rc-conf

更名为chkconfig
sudo cp /usr/sbin/sysv-rc-conf /usr/sbin/chkconfig
赋予权限:chmod 755 chkconfig
验证是否成功:sudo chkconfig

使用chkconfig来查看某个服务的运行级别和状态:
chkconfig --list 服务名

ssh: connect to host 192.168.169 port 22: No route to host 

出现这种原因是由于防火墙设置问题,要先检查防火墙的设置:

查看防护墙状态
service iptables status

关闭
service iptables stop

查看防火墙开机启动状态
chkconfig iptables --list

关闭开机启动
chkconfig iptables off 

r

Workspace创建

mkdir -p first_ws/src

编译工作空间

cd first_ws
catkin_make

 Package创建

来到workspace的src目录下

cd first_ws/src
catkin_create_pkg demo_cpp roscpp rospy rosmsg

启动ROS Master

roscore

解锁apt

sudo rm /var/lib/apt/lists/lock /var/cache/apt/archives/lock /var/lib/dpkg/lock*
 
sudo kill apt apt-get

catkin 编译脚本

catkit_make_source.sh

用 source catkit_make_source.sh 命令启动

#!/bin/bash
catkin_make
if [[ $? != 0 ]]; then
echo 'catkin_make :error'
else
echo 'catkin_make :ok'
source devel/setup.bash
echo 'source devel/setup.bash :ok'
fi

启动clion脚本

clion_start.sh

#!/bin/bash
bash ~/CLion-2020.1.1/clion-2020.1.1/bin/clion.sh

进入指定文件夹的shell脚本

inWorkspaceWorkProject.sh

用控制台命令:  source inWorkspaceWorkProject.sh  启动

或者 . ./inWorkspaceWorkProject.sh 命令运行脚本,第二个命令注意两个点之间是有空格的;

#!/bin/bash
cd ~/workspace/ros_work5

9.robot.czxy 笔记网站

查看摄像头
ll /dev/video*  
查询 c++ 库中的方法函数 
进opencv_env/opencv-3.4.9 目录下
grep -rniI "cornerHarris(" *
grep -rniI "cornerHarris(" * --include=*.cpp
 
制作 命令台命令:
通过一个命令启动
例如:
在 ~/.bashrc 中加入
alias sd='source devel/setup.sh'
在命令台中就可以使用 sd 命令
 

多机部署ros 

# 多机部署ros
 
> 主机和从机要在同一个局域网内
 
1. 主机添加在hosts中添加所有节点的ip和主机名(主机配置)
 
   ```bash
   sudo gedit /etc/hosts
   ```
   > ip  主机名
 
  1.1
 
   sudo gedit ~/.bashrc
   
   export ROS_HOSTNAME=本机ip
   
   export ROS_MASTER_URI=http://主机ip:11311
   source ~/.bashrc
   重启控制台
 
2. 从机配置master节点服务(主机也需要修改)
 
   ```bash
   sudo gedit ~/.bashrc
   
   export ROS_HOSTNAME=本机ip
   
   export ROS_MASTER_URI=http://主机ip:11311
   source ~/.bashrc
   重启控制台

问题1: ros环境中 opencv与ros冲突时删除 conda环境,是因为conda冲突,在ubuntu中建议不按照conda

问题2: ros多机互联后,一方收不到另一方的数据时需要在执行的那个控制台窗口执行 source ~/.bashrc

问题3: 如项目中使用的Qt 就必须加Qappliion

第二种:动态多机部署ros 方法:

主机:树莓派端配置

export ROS_IP=`hostname -I | awk '{print $1}'`
export ROS_HOSTNAME=`hostname -I | awk '{print $1}'`
export ROS_MASTER_URI=http://`hostname -I | awk '{print $1}'`:11311

从机:

export ROS_IP=`hostname -I | awk '{print $1}'`
export ROS_HOSTNAME=`hostname -I | awk '{print $1}'`
export ROS_MASTER_URI=http://树莓派的IP地址:11311

问题1:链接不上或找不到节点 可能ip问题
输入

ifconfig

echo $ROS_HOSTNAME

查看ip是否一致
 强制更改 本机ip; 把动态命令写死

export ROS_HOSTNAME=`hostname -I | awk '{print $1}'`


改 

export ROS_HOSTNAME=192.168.1.10

动态命令在多网卡或网络中断会导致把本机ip发送给mast节点的ip不准确

ros_视觉USB驱动集成

# USB驱动集成

## 下载驱动

来到工作空间下的src目录,下载驱动到当前目录:

```bash
# 下载
cd ws/src
git clone https://github/ros-drivers/usb_cam

# 编译
cd ws
catkin_make
```

## rosrun调试

1. 运行`usb_cam`节点

   ```bash
   rosrun usb_cam usb_cam_node
   ```

2. 图像调试

   ```bash
   rosrun image_view image_view image:=/usb_cam/image_raw
   ```

## roslaunch调试

```bash
roslaunch usb_cam usb_cam-test.launch
```

## 参数说明

`usb_cam`配置信息是通过rosparam来进行设置的。

|        参数        |    默认值     |                             说明                             | 编程关注度 |
| :----------------: | :-----------: | :----------------------------------------------------------: | :--------: |
|    video_device    | `/dev/video0` |                       设置使用哪部相机                       |   ★★★★★    |
|    image_width     |      640      |                       输出图片像素宽度                       |   ★★★★★    |
|    image_height    |      480      |                       输出图片像素高度                       |   ★★★★★    |
|    pixel_format    |    `mjpeg`    | 像素格式。取值范围: `yuyv`, `uyvy`, `mjpeg`, `yuvmono10`, `rgb24` 建议使用`yuyv` |   ★★★★★    |
|     framerate      |      30       |                  采样率,每秒钟采样30张图片                  |    ★★★     |
|     brightness     |      -1       |                       亮度。取值0~255                        |    ★★★     |
|      contrast      |      -1       |                      对比度。取值0~255                       |    ★★★     |
|     saturation     |      -1       |                      饱和度。取值0~255                       |    ★★★     |
|     sharpness      |      -1       |                       锐度。取值0~255                        |    ★★★     |
|     io_method      |    `mmap`     |               读取方式.`mmap`,`read`,`userptr`               |     ★      |
|     autofocus      |    `false`    |                           自动聚焦                           |     ★      |
|       focus        |      -1       |                         聚焦值.0~255                         |     ★      |
|    autoexposure    |    `false`    |                           自动曝光                           |     ★      |
|      exposure      |      100      |                           曝光值.                            |     ★      |
|        gain        |      -1       |                      曝光增益值。0-100                       |     ★      |
| auto_white_balance |    `false`    |                         自动白平衡。                         |     ★      |
|   white_balance    |     4000      |                          白平衡值。                          |     ★      |
|  camera_frame_id   | `head_camera` |                 标记当前帧是什么设备拍摄的。                 |     ★      |

# 图像数据转换

## CvBridge介绍

![](img/2.png)

CvBridge主要解决的问题是将Ros的Image数据与OpenCv的Image数据进行相互转换。

**Ros Image to OpenCv Image场景**

通常Ros Node和相机硬件进行数据交互,最终拿到的是 Ros Image类型数据。

对于这种数据,我们希望通过OpenCv库进行图片数据的操作。但是OpenCv需要的是Mat类型的数据。

因此,需要进行数据类型的转换。这种场景主要是需要对图片进行一下业务操作。

**OpenCv Image to Ros Image 场景**

OpenCv图片操作完成后的数据是Mat类型的,在业务场景中,如果其他节点需要这个数据的话,是需要订阅这种数据的。在Ros中,OpenCV的Mat数据是不可以在节点与节点间进行传输的,要传输只可以采用Ros的Image类型进行传输。此时就需要将OpenCv的Mat数据转换为Ros 的Image类型。

##  RosImage to CvMat(c++)

**依赖配置**

1. package.xml配置

   ```xml
     <build_depend>sensor_msgs</build_depend>
     <build_export_depend>sensor_msgs</build_export_depend>
     <exec_depend>sensor_msgs</exec_depend>
   
     <build_depend>cv_bridge</build_depend>
     <build_export_depend>cv_bridge</build_export_depend>
     <exec_depend>cv_bridge</exec_depend>
   
     <build_depend>image_transport</build_depend>
     <build_export_depend>image_transport</build_export_depend>
     <exec_depend>image_transport</exec_depend>
   ```

2. CMakeLists.txt配置

   ```cmake
   find_package(catkin REQUIRED COMPONENTS
       roscpp
       rosmsg
       rospy
   
       sensor_msgs
       cv_bridge
       image_transport
   )
   ```

3. 引入opencv库

   ```cmake
   find_package(OpenCV REQUIRED)
   ```

4. 添加链接库

   ```cmake
   target_link_libraries(image_subscriber
       ${catkin_LIBRARIES}
       ${OpenCV_LIBS}
   )
   ```

**转换代码**

1. 引入头

   ```c++
   #include <image_transport/image_transport.h>
   #include <cv_bridge/cv_bridge.h>
   #include <sensor_msgs/image_encodings.h>
   #include <opencv2/imgproc/imgproc.hpp>
   #include <opencv2/highgui/highgui.hpp>
   #include "sensor_msgs/Image.h"
   ```

2. 转换逻辑

   ```c++
   void topicCallback(const sensor_msgs::ImageConstPtr &msg) {
     const cv_bridge::CvImageConstPtr &ptr = cv_bridge::toCvShare(msg);
     cv::Mat mat = ptr->image;
     ...
   }
   ```

查看相机:

ros开发时python加载静态文件的路径从 .src开始往下找

参考第一种,第二种可以尝试看效果

1.py_path当前python文件,同时适用于ros环境及非ros环境加载文件

from os import path
 
 
# 当前python文件所在目录
dir_name = path.dirname(path.realpath(__file__))
#通过拼接文的件路径,找到文件left.yaml;  path.join:自动判断文件夹dir_name是否需要带/
file = path.join(dir_name, "./calibration/left.yaml")

2.

file="./src/demour/scripts1/h5/abc.h5"

或尝试加入以下这句代码

sys.path.append("src/driver2/scripts")

ubuntu链接串口

ls -al /dev/ttyU*

如以上提示连不上串口,就看下图打开(针对虚拟机) 

得到 

开启永久权限

sudo usermod -aG dialout 'demo'
sudo chmod 777 /dev/ttySo

ros 控制键盘调试

rosrun teleop_twist_keyboard teleop_twist_keyboard.py

虚拟机链接路由器:

udev 配置串口设备:

  查看是否存在串口设备

ls -al /dev/ttyU*

1.查找设备

 lsusb -vvv

定义rules文件 

 激活rules

1.拷贝到以下目录
sudo cp 58-robot.rules /etc/udev/rules.d/
或
sudo cp 58-robot.rules /lib/udev/rules.d/
2.加载文件
sudo service udev reload 
3.启动
sudo service udev restart
启动报错提示用下面的命令:
sudo systemctl daemon-reload
4.插上设备 查看是否安装完成
ls -al /dev/skser*
ls -al /dev/sulid*

 使用设备:

apt-get安装出现E: Sub-process /usr/bin/dpkg returned an error code (1)问题

cd /var/lib/dpkg/
sudo mv info/ info_bak          # 现将info文件夹更名
sudo mkdir info                 # 新建一个新的info文件夹
sudo apt-get update             # 更新
sudo apt-get -f install         # 修复
sudo mv info/* info_bak/        # 执行完上一步操作后会在新的info文件夹下生成一些文件,现将这些文件全部移到info_bak文件夹下
sudo rm -rf info                # 把自己新建的info文件夹删掉
sudo mv info_bak info           # 把以前的info文件夹重新改回名

Ubuntu安装.md阅读工具-Typora

官网安装:
https://typora.io/#linux

# or run:
# sudo apt-key adv --keyserver keyserver.ubuntu --recv-keys BA300B7755AFCFAE
wget -qO - https://typora.io/linux/public-key.asc | sudo apt-key add -
# add Typora's repository
sudo add-apt-repository 'deb https://typora.io/linux ./'
sudo apt-get update
# install typora
sudo apt-get install typora

moveit可视化配置

rosrun moveit_setup_assistant moveit_setup_assistant 

notepad 安装:

sudo add-apt-repository ppa:notepadqq-team/notepadqq
sudo apt-get update
sudo apt-get install notepadqq

opencv文档

https://docs.opencv

id制作软a链接

ln -s ~/3rdparty/3rdparty_tanglaoshi/aubo_dependents .

 安装pppoeconf

sudo apt-get install pppoe pppoeconf

图形界面配置pppoe,在控制台里输入

nm-connection-editor

inux  下 adsl 拨号上网的配置(命令行)

 pppoeconf ->输入用户名和密码;

sudo pppoeconf 

  启动或者重启动DSL拨号连接(联网)

sudo pon dsl-provider

停止DSL拨号连接(断网)

sudo poff dsl-provider

查看日志( 断网下)

sudo plog

重启pppoe网络

sudo pon dsl-provider && sudo pon dsl-provider sudo service networking restart 

频繁断网问题解决

检查pppoe的配置文件(/etc/ppp/options)

lcp-echo-failure 4
lcp-echo-interval 30
意思大概为30秒内联接4次失败就断网,把4改大点,比如30。

 问题:

原因:是读取外部文件时,文件中的数据有问题,可能xml文件标签中的数据乱码,或没有数据

欧拉角与旋转矩阵互相转换验证网站查看:

3D Rotation Converter

控制台查找文件命令:

find .  -name "*.*pp" | xargs gerp -rni "findChessboardCorners("

Eigen 库

卸载 Eigen

sudo updatedb  
locate eigen3
sudo apt autoremove libeigen3-dev
sudo rm -rf /usr/include/eigen3 /usr/lib/cmake/eigen3 /usr/share/doc/libeigen3-dev /usr/share/pkgconfig/eigen3.pc /var/lib/dpkg/info/libeigen3-dev.list /var/lib/dpkg/info/libeigen3-dev.md5sums 
sudo updatedb  
locate eigen3

执行命令:

sudo apt-get install libeigen3-dev

安装后执行以下命令

运行命令:

sudo cp -r /usr/include/eigen3/Eigen /usr/include

或 创建软连接

sudo ln -s /usr/include/eigen3/Eigen /usr/include/Eigen
//不要执行这句 
sudo ln -s /usr/include/eigen3 /usr/local/include/

#sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include 

sudo ln -s /usr/local/include/eigen3 /usr/include 

cmake中添加: 

include_directories(/usr/include/eigen3)

 

#include <KinectCamera.h>
// 要把Eigen声明放到OpenCV上边
#include <Eigen/Geometry>

#include <opencv/cxeigen.hpp>

报错:

The FindEigen.cmake Module in the cmake_modules package is deprecated.

  Please use the FindEigen3.cmake Module provided with Eigen.  Change
  instances of find_package(Eigen) to find_package(Eigen3).  Check the
  FindEigen3.cmake Module for the resulting CMake variable names.

这个芬代根.cmakecmake_modules包中的模块已弃用。

请使用Eigen提供的FindEigen3.cmake模块。改变

find_package(Eigen)到find_package(Eigen3)的实例。检查

生成的cmake变量名的FindEigen3.cmake模块。

 opencv缺依赖H5P_CLS_DATASET_CREATE_ID_g问题:自己装的库有问题,换一个opencv库

显卡驱动相关

f2 进
sudo apt update
sudo apt-get upgrade
sudo apt full-upgrade

验证终端输入  没输出表示警用成功

lsmod | grep nouveau

更新initramfs
sudo update-initramfs -u

关闭图形界面
sudo service lightdm stop

删除显卡驱动
sudo apt-get remove --purge nvidia*

查看显卡驱动

ubuntu-drivers devices
安装显卡驱动
sudo ubuntu-drivers-autoinstall
sudo apt install nvidia-410
重启查看
sudo nvidia-smi

sudo prime-select nvidia


检查安装的内核版本
uname -sr

内核网
https://www.kernel 
进行解压安装
sudo dpkg -i *.deb

reboot

Ubuntu上传项目到githup

进入要上传的文件夹中
git init
git add ./
git status
git commit -m "对文件的注释"
git remote add origin https://github/suk***/AuboDriver.git
git branch -M master
git push -u origin master

秘钥-ssh
$ git config --global user.name "su****"
$ git config --global user.email  "422*******@qq"

查看是否已经有了ssh密钥:cd ~/.ssh
如果没有密钥则不会有此文件夹,有则备份删除


ssh-keygen -t rsa -C "422******@qq"

一直按回车,不要输入任何密码

最后得到了两个文件:id_rsa和id_rsa.pub
打开id_rsa.pub文件,得到key

sk@sk-PC:~/.ssh$ ls
id_rsa  id_rsa.pub  known_hosts
sk@sk-PC:~/.ssh$ cat id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCX+VTRVTQcDwesEv8B32rmKkvEechvOEhPO6dKstiJK/cFyc0c0819EqkXpvaDWalD3n0WyriSLZCqMv8ukJT+Wv+h99VMsoWSvKCDfraBwGmzgXxkrscmuf7Un/ouEsPzX8PsPvcmj4qOtpHOQkA8x94vyS2CUXO9sX+DMGX6edO/o422168787@qq
sk@sk-PC:~/.ssh$ 


https://github/settings/keys

命令启动摄像头

1.启动Astra乐视摄像头

cd /home/sk/Astra/OpenNI_2.3.0.63/Linux/OpenNI-Linux-x64-2.3.0.63/Samples/SimpleViewer/Bin/x64-Release
./SimpleViewer 

2.启动Kinect2


cd /home/sk/libfreenect2-master/build/bin
./bin/Protonect

3.启动pcl
cd /home/sk/pcl/pcl-pcl-1.9.1/release
pcl_viewer ../test/pcl_logo.pcd


https://pypi.python/simple

1 目前国内靠谱的 pip 镜像源有:
2 
3 清华: https://pypi.tuna.tsinghua.edu/simple
4 
5 豆瓣: http://pypi.douban/simple/
6 
7 阿里: http://mirrors.aliyun/pypi/simple/   



channels:
  - defaults
show_channel_urls: true
channel_alias: https://mirrors.tuna.tsinghua.edu/anaconda
default_channels:
  - https://mirrors.tuna.tsinghua.edu/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu/anaconda/pkgs/free
  - https://mirrors.tuna.tsinghua.edu/anaconda/pkgs/r
  - https://mirrors.tuna.tsinghua.edu/anaconda/pkgs/pro
  - https://mirrors.tuna.tsinghua.edu/anaconda/pkgs/msys2

绕z轴转动的旋转矩阵:

4元素欧拉角对比网站

Quaternions - Visualisation

ros中有一个kdl的库,动力学解析,帮我们可以实现反解

[泰勒公式解决 泰勒公式一句话描述:就是用多项式函数去逼近光滑函数。]

 Documentation - ROS Wiki

 

 MoveIt Motion Planning Framework

sudo apt install ros-melodic-franka-ros
echo $ROS_DISTRO

clion dbug

bt

clion 控制台报错

/usr/include/eigen3/Eigen/src/Core/DenseStorage.h:128 : Eigen::internal::plain_array<T,Size,MatrixOrArrayOptions,32>::plain_array()[with T =float; int

 原因:

带分配结构体数据类型复杂导致的问题

解决:
结构体类型必须这么写:
std::vector<Result, Eigen::aligned_allocator<Result>> results;

pcl控制操作

 传入的参数  ./output/table_scene_0_ds.pcd
 控制台命令  ./03-TemplateRtMaker ./output/table_scene_0_ds.pcd
 控制台降采样命令 pcl_voxel_grid table_scene_0_ds.pcd table_scene_0_ds.pcd -leaf   0.003,0.003,0.003
 控制台显示点云图 pcl_viewer table_scene_0_ds.pcd
 控制台显示点云图 pcl_viewer -use_point_picking table_scene_0_ds.pcd    [shift + 鼠标左键可获取点云坐标]
 查看历史操作的命令 history
 /bin pcl_viewer ./data/chef.pcd
 /bin pcl_viewer ./data/rs1.pcd
 /bin pcl_viewer ./data/chef.pcd ./data/rs1.pcd
 /data1  pcl_viewer person.pcd object_template_*pcd
 按 u 标注尺
 按 1 切换颜色
 按 2 x方向颜色
 按 3 y方向颜色
 按 4 z方向颜色

https://github/itheima1?tab=repositories
https://github/PoplarTang

添加控制台快捷命令 

sudo vim ~/.bashrc
alias sd='source devel/setup.sh'
  • 安装UVC相机管理工具 写双目
sudo apt install uvcdynctrl
ll /dev/video*

  • 使用shell脚本修改输出

usb_mode.sh    用这个uvcdynctrl工具给设备/dev/video${id}  发送指令  '(LE)0x50ff'   可以用工具发送也可以用代码发送

#!/bin/bash
id=$1
mode=$2

uvcdynctrl -d /dev/video${id} -S 6:8  '(LE)0x50ff'
uvcdynctrl -d /dev/video${id} -S 6:15 '(LE)0x00f6'
uvcdynctrl -d /dev/video${id} -S 6:8  '(LE)0x2500'
uvcdynctrl -d /dev/video${id} -S 6:8  '(LE)0x5ffe'
uvcdynctrl -d /dev/video${id} -S 6:15 '(LE)0x0003'
uvcdynctrl -d /dev/video${id} -S 6:15 '(LE)0x0002'
uvcdynctrl -d /dev/video${id} -S 6:15 '(LE)0x0012'
uvcdynctrl -d /dev/video${id} -S 6:15 '(LE)0x0004'
uvcdynctrl -d /dev/video${id} -S 6:8  '(LE)0x76c3'
uvcdynctrl -d /dev/video${id} -S 6:10 "(LE)0x0${mode}00"

  修改脚本权限

chmod +x usb_mode.sh 

双目相机一般有四种模式

  1. 左单目模式:LEFT_EYE_MODE
  2. 右单目模式:RIGHT_EYE_MODE
  3. 红蓝模式:RED_BLUE_MODE
  4. 双目模式:BINOCULAR_MODE

启动双目相机

脚本中切换:

1. 左单目模式:LEFT_EYE_MODE

./usb_mode.sh 2 1

2.右单目模式:RIGHT_EYE_MODE

./usb_mode.sh 2 2

3.红蓝模式:RED_BLUE_MODE

./usb_mode.sh 2 3

4.双目模式:BINOCULAR_MODE

./usb_mode.sh 2 4

查看图片  接收topic发送的image图片消息 查看图片

rqt_image_view

USB设备重置

有时,可能会因为各种各样的原因,导致usb设备不能正常使用,我们可以通过c代码,给其发送reset重置指令,恢复其状态,从而避免重新拔插设备。以下我们直接编译一个工具对设备进行重置。

  • 创建usbreset.c文件,写入以下代码:
/* usbreset -- send a USB port reset to a USB device */

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <linux/usbdevice_fs.h>

int main(int argc, char **argv) {

    const char *filename;
    int fd;
    int rc;
    if (argc != 2) {
        fprintf(stderr, "Usage: usbreset device-filename");
        return 1;
    }
    filename = argv[1];

    fd = open(filename, O_WRONLY);

    if (fd < 0) {
        perror("Error opening output file");
        return 1;
    }
    printf("Resetting USB device %s", filename);

    rc = ioctl(fd, USBDEVFS_RESET, 0);
    if (rc < 0) {
        perror("Error in ioctl");
        return 1;
    }
    printf("Reset successful");
    close(fd);

    return 0;
}
  • 执行编译命令
cc usbreset.c -o usbreset

此时,可在当前目录得到编译后的可执行程序usbreset

  • 进行USB设备重置

查看设备及其驱动:sudo lsusb -t,找到其前边的总线、设备序号

ty@ty-PC:~$ lsusb
Bus 002 Device 002: ID 0bda:0411 Realtek Semiconductor Corp. 
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 007: ID 5986:066d Acer, Inc 
Bus 001 Device 005: ID 8087:0a2a Intel Corp. 
Bus 001 Device 003: ID 1532:0037 Razer USA, Ltd 
Bus 001 Device 008: ID 18e3:5031 Fitipower Integrated Technology Inc 
Bus 001 Device 004: ID 24ae:4005  
Bus 001 Device 002: ID 0bda:5411 Realtek Semiconductor Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

 USB设备重置

sudo ./usbreset /dev/bus/usb/001/008

 制作全局使用的USB设备重置功能

 任何位置使用 usbreset

sudo lsusb -t

usbreset /dev/bus/usb/001/006

如何创建ROS工作区,比catkin_workspace更方便

  1. 第一步:

cd〜/

mkdir ROS_WORKSPACE

  1. 编辑.bashrc

gedit .bashrc#在〜/下打开.bashrc

然后,将以下内容粘贴到源代码/opt/ros/indigo/setup.bash后面:

ROS_WORKSPACE = $ HOME / ROS_WORKSPACE

导出ROS_WORKSPACE

ROS_PACKAGE_PATH = $ ROS_WORKSPACE:$ ROS_PACKAGE_PATH

汇出ROS_PACKAGE_PATH

eigen库安装

Eigen

 Install eigen  看上面的(eigen安装是不需要编译的)

eigen_example

In this demo project, it illustrate the basic operation of using eigen for pose processing and basic: dot, cross, inverse operation.

  • I have already include the eigen librarires in this folder: if you want to download by your own

  • download using: git clone https://github/eigenteam/eigen-git-mirror.git eigenLibrary

There is no need to compile eigen, just link to your project as:

  • include_directories(${PROJECT_SOURCE_DIR}/eigenLibrary)

Then, under eigen_example folder:

  • cd build

  • rm -r *

  • cmake ..

  • make -j4

If you want to run the executable file:

  • ./eigenDemo

Install Sophus

  1. Download the file

git clone https://github/strasdat/Sophus.git

 shophus安装前需要

git checkout  a621ff

 

  1. Install

  • mkdir build

  • cd build

  • cmake ..

  • make check (optional, runs unit tests)

  • make install

Here are some quite example

  1. For python users, please follow this instruction

 推荐相机

https://github/stereolabs/zed-tracking-viewer

ROS提供了许多摄像头计算数据的包

stereo_image_proc - ROS Wiki

stereo_image_proc/Tutorials/ChoosingGoodStereoParameters - ROS Wiki

 

深度学习选择开发版

 rqt_reconfigure 调试

rosrun dynamic_reconfigure dynamic_reconfigure 过时了



rosrun rqt_reconfigure  rqt_reconfigure   新的

 

 

rosbag record -0 testbag /camera/rgb/image_raw   后面节点参数自己加的 /camera/rgb/image_raw

 搜相机驱动:

apt-cache cearch openni

 下面两个就是kinect2相机的驱动

 

 sudo apt install 上面查出来的

3d点云安装

apt-cache cearch pcl

安装 查询出来的pcl驱动

sudo apt install 上面查出来的

安装  ccmake

apt-cache search ccmake

 

安装ccmake

apt-get install cmake-curses-gui

输入操作命令进ros的项目中的build目录中  ccmake..      它可以告诉你一些传参的参数如何改

ccmake ..

 看的项目依赖的 library 在哪个目录中

保证主机系统与树莓派系统时钟一致

主机ip:

ping通树莓派地址

操作树莓派小车建图需要保证主机与树莓派之间的时钟是一致的

在树莓派中输入命令

sudo ntpdate 10.42.0.73

树莓派中 

树莓派机器人-中有二维码-语音\hawkbo中有二维码-语音\hawkbot树莓派ROS基础包\【理论学习】--ROS理论视频\ROS机器人系列视频+资料+代码\05第五章:机器人感知

 二维码识别安装功能包

sudo apt-get install ros-kinetic-ar-track-alvar

 

 

 

 

 

 集成语音

ros提供的识别率不高

 sdk在线版需要连接网络

讯飞开放平台-以语音交互为核心的人工智能开放平台

需要进入skd目录编译一下 make

 

catkin_make 与catkin_make_isolate --install --use-ninja 的区别是后者单独编译每一个功能包

设置代理:

本文标签: 初始化 环境