目录
【Ubuntu系统换源】解决下载包慢的办法(把国外源换成国内的)
【常用指令】
进入目录文件夹:cd xxx
返回上一级目录:cd ..
返回根目录:cd /
查看目录文件夹文件:ls
查看文件夹下文件大小:df -h
以管理员身份复制目录:sudo cp xx / xx
以管理员身份用gedit打开文件:sudo gedit 【gedit是文档编辑器】
管理员身份更新包:sudo apt-get update 【常用于换源后的操作】
管理员身份检查更新:sudo apt-get upgrade 【重新检查更新】
创建文件:mkdir xx
删除文件:rm xx 【rm -f xx 不询问直接删】
查看这个文件的路径名字:pwd
【Ros命令】
catkin_create_pkg 自定义包名 依赖包 === 创建新的ROS功能包
sudo apt install xxx === 安装 ROS功能包
sudo apt purge xxx ==== 删除某个功能包
rospack list === 列出所有功能包
rospack find 包名 === 查找某个功能包是否存在,如果存在返回安装路径
roscd 包名 === 进入某个功能包
rosls 包名 === 列出某个包下的文件
apt search xxx = == 搜索某个功能包
rosed 包名 文件名 === 修改功能包文件
搜索功能包:apt seach ros-noetic-* | grep -i gmapping
【Ubuntu】
【软碟通】制作系统U盘
UltraISO软碟通中文官方网站 - 光盘映像文件制作/编辑/转换工具
【编译器RoboWare Studio】
更适合Ros宝宝的Vscode
机器人操作系统ROS-Roboware Studio教程(ROS melodic) - 知乎 (zhihu.com)
Ubuntu 18.04 安装 RoboWare_robo ware-CSDN博客
【命令行终端】
Linux 常用操作命令大全(最后更新时间:2022年1月)_linux常用命令-CSDN博客
示例:root@app00:~#
root //用户名,root为超级用户
@ //分隔符
app00 //主机名称
~ //当前所在目录,默认用户目录为~,会随着目录切换而变化,例如:(root@app00:/bin# ,当前位置在bin目录下)
# //表示当前用户是超级用户,普通用户为$,例如:("yao@app00:/root$" ,表示使用用户"yao"访问/root文件夹)
【gedit_文档编辑器_插件】自动补全 / 代码风格
Ubuntu 默认编辑器 gedit 优化 - 知乎 (zhihu.com)
【Ubuntu系统换源】解决下载包慢的办法(把国外源换成国内的)
Ubuntu 23.04、22.04、20.04、18.04国内源--阿里云、中科大、163、清华更新源(sources.list)-CSDN博客
【apt-get_包下载】跟下载手机应用软件一样
Ubuntu基础教程之apt-get命令-腾讯云开发者社区-腾讯云 (tencent.com)
【创建工作空间】
mkdir -p ~/catkin_ws/src 创建工作文件夹【工作空间】
cd ~/catkin_ws/ 进入工作文件夹
catkin_make 编译工作空间
src - 功能包/源代码
devel - 配置文件
build - 编译后的文件
source devel/setup.bash 将setup.bash文件source一下
echo source devel/setup.bash >> ~/.bashrc # 将source后写入.bashrc文件
(为什么要source脚本文件:关于ros工作空间devel下setup.bash的理解_guagua21的博客-CSDN博客)
简单理解:写入.bashrc为了每次启动终端都自动启动脚本,识别Ros的环境
一、硬件【IMU功能包】
简介:IMU传感器,你所需要知道的全部 - 知乎 (zhihu.com)
----放在工作空间下的src(source资源)文件夹下面
IMU传感器是加速度计和陀螺仪传感器的组合,被用来检测加速度和角速度以表示运动和运动强度,就像手机里面的陀螺仪。
ls /dev/tty<tab> # 查看IMU的串口信息
cd ~/Ros-Autocar # 进入工作空间
catkin_make # 编译
roslaunch imu_launch imu_msg.launch # 启动节点
rostopic echo /IMU_data # 查看IMU的数据话题
rostopic echo /imu_0x91_package # 查看IMU的另外一个数据话题
串口号:ttyUSB0
tf坐标系名称:base_link
话题名称:IMU_data
*使用rviz可视化imu还需要在launch文件夹中加一些东西
串口简介:Ubuntu关于串口的操作(查看串口信息、串口助手、串口权限)_ubuntu 串口-CSDN博客
二、硬件【Laser雷达】
载体:镭神智能科技LS01B激光雷达
Ubuntu16.04+ROS下,安装镭神智能科技LS01B激光雷达_镭神ls01 ros-CSDN博客
其公司功能包名:ls01b_v2
lsusb # 查看usb信息
将雷达ls01x功能包拷在工作空间下
catkin_make # 编译,每次编译前需要删除已经编译好的devel 和 built
source ~/ROS-Autocar/devel/setup.bash # 设置bash环境变量
sudo chmod +777 /dev/ttyUSB0 # 给串口添加权限
roslaunch ls01b_v2 ls01b_v2.launch # 启动功能包--各个节点--雷达开转
rostopic echo /scan # 查看话题雷达扫描到的各个数据
功能包ls01b_v2.launch文件
雷达链接的串口名称:dev/ttyUSB0
*使用rviz可视化LaserScan还需要在launch文件夹中加一些东西
【tf坐标转换之node节点信息】
<launch>
<node pkg="tf" type="static_transform_publisher" name="link1_broadcaster" args="1 0 0 0 0 0 1 link1_parent link1 100" />
</launch>
static_transform_publisher工具用于发布两个参考系之间的静态坐标变换,两个参考系一般不发生相对位置变化
name是自己取的,给这个node取一个名字
args 有两种格式,一种是位移+旋转角,一种是四元数表达:
static_transform_publisher x y z yaw pitch roll frame_id child_frame_id period_in_ms
static_transform_publisher x y z qx qy qz qw frame_id child_frame_id period_in_ms
frame_id和 child_frame_id就对应参与变换的两个坐标系
period_in_ms是发布频率,一般默认值为100ms
三、硬件【编码器】
载体:RS485编码器
其公司功能包名:encoder_driver
简单理解作用:为机器人提供位置信息和速度信息,以支持机器人进行自主导航、目标定位等任务。具体而言,编码器可以通过测量轮子或关节的旋转角度,计算出机器人的线速度和角速度,并且可以根据这些信息更新机器人的位置状态和姿态状态。
--在windows下调整硬件编码器的波特率
--将编码器Usb插到电脑上:端口-COM5(如果没有,缺少驱动-CH340Usb转串口驱动)
--波特率:9600 -> 57600(车)
--角速度采样时间:(16进制指令)01 06 00 0A XX XX 【01 06 00 0A】是调节指令 【XX XX】是时间 -> 00 14(20秒)
导包到工作空间
编译:catkin_make
脚本添加权限:sudo chmod +777 ~/Ros-Autocar/src/encoder_driver/src/Encoder_vel.py
串口添加权限:sudo chmod +777 /dev/ttyUSB0
ROS~启动!! : roscore
切换目录:cd ~Ros-Autocar/src/encoder_driver/src
启动脚本:python3 Encoder_vel.py
报错缺少文件:sudo apt install python3-pip(需要安装pip)
安装缺少文件:pip3 install pyserial
看看编码器的话题:rostopic echo / encoder
看看编码器的话题:rostopic echo / encoder_imu_odom
【串口通信pyserial与serial】
https://blog.csdn.net/Electrical_IT/article/details/107201561
通信:[基于ROS构建移动机器人]第三篇:用pyserial实现ros与stm32的通讯 - 知乎 (zhihu.com)
四、串口配置【Udev串口配置】
ROS 中 USB设备 udev 文件编写_ros u盘读写编程_在路上_continue的博客-CSDN博客
ROS基础八之创建USB设备udev_usb udev sudo-CSDN博客
udev是一种动态设备管理机制,负责管理和分配设备节点。使用udev规则来定义USB设备,保证设备的读写权限,同时每次加载USB设备时都有固定的名称。
1.【imu串口】位姿
ls /dev/ttyUSB* # 看看有哪些个接口 插拔
udevadm info --attribute-walk --name=/dev/ttyUSB3 # 获取与指定设备相关的udev属性信息,包括设备的路径、名称、供应商ID、产品ID、驱动程序等 --> 这里我们看一下imu的usb插口信息
lsusb # 换个方式看一下usb口 -- 特别是ID信息
拷贝已给出的软件包:racecar 和 racecar_driver 至工作空间
后编译:catkin_make
lsusb
和 udevadm info --attribute-walk --name=/dev/ttyUSB3
是两个不同的命令,用于获取不同类型的设备信息。
-
lsusb
:这个命令用于列出已连接到系统的USB设备信息。它主要显示USB设备的厂商ID、产品ID以及设备名称等基本信息。lsusb
命令适用于USB设备的检测和识别,对于其他类型的设备可能无法提供详细的属性信息。 -
udevadm info --attribute-walk --name=/dev/ttyUSB3
:这个命令是使用udev机制获取指定设备属性的详细信息。通过指定设备路径(例如/dev/ttyUSB3
),它可以显示与该设备相关的udev属性,包括设备路径、供应商ID、产品ID、驱动程序等详细信息。这个命令可以用于深入了解设备并进行配置、驱动选择等操作。
因此,lsusb
主要用于查看USB设备的基本信息,而 udevadm info --attribute-walk --name=/dev/ttyUSB3
则提供了更详细的设备属性信息,但它们适用于不同类型的设备。可以根据需要选择使用哪个命令来获取特定设备的信息。
sudo cp ./imu.rules /etc/udev/rules.d # 将imu的启动规则复制到Ubuntu系统下,每次开机自动会加载imu规则,这样就节省了时间【开机自启动】
需要修改一下imu.rules的规则串口id
在 imu.rules
文件中,ATTRS
是udev规则中的一个关键字,用于指定设备的属性匹配条件。
ATTRS
后面紧跟着设备的属性名称和属性值,用于匹配对应属性值的设备。例如,ATTRS{idVendor}
表示设备的供应商ID属性,ATTRS{idProduct}
表示设备的产品ID属性。
通过使用 ATTRS
关键字,你可以根据设备的属性来匹配特定的IMU设备。这对于识别和配置特定型号或品牌的IMU设备非常有用。
下面是一个示例 imu.rules
文件的片段,展示了如何使用 ATTRS
进行设备属性匹配:
# IMU Device Rule
SUBSYSTEM=="tty", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", MODE="0666", SYMLINK+="imu"
上述规则表示当检测到供应商ID为 1234
、产品ID为 5678
的IMU设备时,设置该设备的权限为 0666
(允许所有用户读写),并创建一个符号链接 /dev/imu
指向该设备。
~/ROS-Autocar/src/racecar/src/series_imu 此目录文件将所以ttyUSB0 --> 改为 imu
改完后需要重新编译:catkin_make
sudo chmod +777 /dev/imu # 给这个imu串口文件添加权限
roslaunch imu_launch imu_msg.launch # 启动节点
rostopic echo /IMU_data # 查看IMU的数据话题
rostopic echo /imu_0x91_package # 查看IMU的另外一个数据话题
2.【laser串口】雷达
这里雷达的串口配置和IMU是一样的,注意的是要看你的雷达USB插在哪里的,那他的ttyUSB*就需要改一下
sudo cp ./laser.rules /etc/udev/rules.d # 这里也是将开机规则拷贝进去
roslaunch ls01b_v2 ls01b_v2.launch # 启动功能包--各个节点--雷达开转
rostopic echo /scan # 查看话题雷达扫描到的各个数据
3.【encoder串口】编码器
跟前面的imu和laser配置一样,但是在一个Python文件中需要改一下
port = rospy.get_param('~serial_port', '/dev/ttyUSB0')
改为:
port = rospy.get_param('~serial_port', 'encoder')
ROS~启动!! : roscore
切换目录:cd ~Ros-Autocar/src/encoder_driver/src
启动脚本:python3 Encoder_vel.py
看看你的:rostopic echo /encoder
4.【car串口】底层驱动板
和前面一样,sudo cp将规则导入udev中
五、【tf坐标系】
包:racecar 和 racecaar_driver 重新导入
catkin_make # 编译
但是缺少包:ros-noetic-joy
sudo apt-get install ros-noetic-joy # 缺啥下啥
catkin_make # 再编译
但是缺少move_baseConfig.cmake
sudo apt-get install ros-noetic-navigation # 缺啥下啥
catkin_make # 再再编译
没报错,成功
在目录下:ROS-Autocar / src / racecar / launch 可以看到Run_car.launch文件
打开了TF树配置car_tf.launch.xml
打开了雷达、IMU、驱动板、编码器的文件/包
----先看看TF树:目录:ROS-Autocar / src / racecar / launch / includes
tf三个转换关系:
1./base_footprint -> /basee_link
2./basee_link -> laser_link
3./basee_link -> IMU_link
----再看看雷达包:目录:ROS-Autocar / src / racecar / launch / ls01b_lidar.launch
里面就是激光雷达的节点参数,类似ls01b_v2的launch
---再看看IMU包:目录:ROS-Autocar / src / imu_launch / launch / imu_0x91_msg.launch
里面打开了节点,但是最终还是指向ROS-Autocar / src / serial_imu / src / serial_imu.cpp 文件
在serial_imu.cpp文件里面记得改一下base_link --> imu_link
catkin_make # 对任何cpp文件改动,包括引入、新增、删除等,都需要编译哦
source ./devel/setup.bash # 链接一下
roslaunch racecar Run_car.launch # 打开车运行车的launch文件
# 这行代码【同时】打开了雷达、IMU、编码器、驱动板等等
# 就是把它们的文件写进了总体的launch文件,这样打开一个就相当于打开了全部传感器
rostopic echo /encoder # 获取编码器信息
rostopic echo /scan # 获取雷达扫描信息
rostopic echo /IMU_data # 获取IMU位姿信息
rosrun rqt_tf_tree rqt_tf_tree # 用自带的包运行节点,看看tf树
六、【底盘控制】四个轮子kuku转(节点信息)
roslaunch racecar Run_car.launch # 传感器全开
rosrun racecar racecar_teleop.py # 键盘控制
u i o
左 中 右
w s
增 减
他给出的racecar_teleop.py可以打开Python程序,看看他怎么实现用python控制前进
rosrun rqt_graph rqt_graph # 看看节点信息
【rqt可视化】
这是一个可视化包,用来看看节点的信息、tf树等等,非常友好
ROS学习(六):ROS GUI开发工具(rqt)-CSDN博客
rosrun rqt_plot rqt_plot //画出发布在topic上的数据变化图
rosrun rqt_graph rqt_graph //画出node关系图
rosrun rqt_console rqt_console //属于ROS日志框架(logging framework)的一部分,用来显示节点的输出信息
rosrun rqt_reconfigure rqt_reconfigure //参数动态配置工具
rosrun rqt_tf_tree rqt_tf_tree //tf树
七、【激光雷达里程计】
本质是激光雷达--> 算里程 通过二维点云信息,反算里程计
包:rf2o_laser_odometry
【激光雷达里程计(Laser Odometry)】
是一种通过激光雷达数据来估计机器人在三维空间中的位置和姿态变化的方法。它使用激光雷达扫描数据以及机器人的运动信息,通过特定的算法来推断机器人在环境中的移动距离和旋转角度。
激光雷达里程计通常用于机器人导航和定位系统中,特别是在移动机器人需要进行精确定位和建图时非常有用。通过使用激光雷达扫描数据,可以获得周围环境的准确三维点云信息,而里程计则利用这些点云数据推断机器人的运动。
激光雷达里程计的原理基本上是通过比较连续帧之间的激光点云数据,来计算机器人在世界坐标系中的位置和姿态变化。它通常采用扩展卡尔曼滤波(Extended Kalman Filter,EKF)或非线性优化等技术,结合激光扫描数据和机器人的运动模型,来进行姿态和位置的估计。
具体步骤包括以下几个方面:
- 接收激光雷达数据和机器人的里程计数据。
- 将激光雷达点云数据转换为某个参考坐标系下的点云数据。
- 提取两次激光扫描之间的特征匹配,例如地面特征或环境物体的特征点。
- 通过激光点云之间的对应关系,计算机器人在世界坐标系中的位置和姿态变化。
- 根据机器人的运动模型,更新机器人的位姿估计。
- 重复上述步骤,以获得连续的机器人位姿估计。
使用激光雷达里程计可以实现比较准确的机器人定位和导航。它被广泛应用于自主驾驶车辆、无人机、机器人地图构建等领域。
【rf2o_laser_odometry包】
是一种基于激光雷达的里程计算法,是 Laser Odometry
的其中一种实现方式。它通过提取先前扫描和当前扫描之间的特征点,并使用逆深度特征来跟踪它们,从而估计机器人的位置和姿态变化。
与传统的基于激光雷达的里程计算法不同,rf2o_laser_odometry
使用了逆深度特征来表示激光雷达扫描数据,而不是使用传统的点特征或线特征。逆深度特征可以更好地描述具有明显几何结构的环境,例如平面和边缘等,因此能够更准确地估计机器人的运动。
具体来说,rf2o_laser_odometry
的实现主要分为以下三个步骤:
- 特征提取:在每个激光雷达扫描中,通过匹配 先前扫描 和 当前扫描 找到一组特征点,这些特征点是静态环境的显著特征。
- 特征匹配和跟踪:使用一种称为逆深度特征的方法,对这些特征点进行描述,然后在下一次扫描中找到与先前扫描中的特征点相匹配的特征点,并根据这些匹配确定运动。
- 位姿估计:使用前面两个步骤提取的特征点和特征描述符,通过非线性优化算法来计算机器人的位置和姿态变化。
rf2o_laser_odometry
的优点是它可以更好地处理复杂环境中的动态物体,因为它只依赖于先前和当前扫描之间的静态特征点。此外,由于它使用逆深度特征,可以获得更准确的位置和姿态估计,从而使机器人定位更加精确。
码一下:ROS中odom、map坐标系的理解ROS中odom、map坐标系的理解-CSDN博客
导包:复制到工作空间src文件夹下面
catkin_make # 编译
改一下:Ros-Autocar / src / rf2o_laser_odometry / launch 的 rf2o_laser_odometry.launch文件
/laser_scan/ --改为--> /scan/
/odom/ --改为--> odom/
/base_pose_ground_tryth/ --改为--> 删掉
再添加一些个坐标变换节点node --> 解决节点之间通信的问题
还需要修改一些个语句
catkin_make # 编译
roslaunch ls01b_v2 ls01b_v2.launch # 打开激光雷达launch文件
roslaunch rf2o_laser_odometry rf2o_laser_odometry.launch # 打开激光里程计的luanch文件
rosrun rviz rviz # 启动可视化
添加话题信息 odometry / odom_rf2o 即可看到小车的激光雷达里程显示的位姿
八、【信息数据融合】IMU与编码器
包:encoder_imu_odom
IMU通信文件修改——1:ROS-Autocar / src / serial_imu / src / serial_imu.cpp
ros::Publisher IMU_pub = n.advertise<senor_ssgs::Imu>("/IMU_data", 20); # 这是发布话题信息
IMU通信文件修改——2:ROS-Autocar / src / serial_imu / src / sub_spec.cpp
/IMU_data --> /imu_data
catkin_make # 编译
roslaunch imu_launch imu_msg.launch # 获取imu数据
rosrun encoder_driver Encoder_vel.py # 编码器进程
roslaunch encoder_driver wheel_odom.launch # 编码器、imu融合
rostopic echo /encoder_imu_odom # 查看话题信息
九、【Linux系统备份】
Rescuezilla软件 -- 图形化硬盘分区处理软件
Rescuezilla – 大土土随笔 (datutusuibi.com)
十、【远程连接】VNC
sudo apt-get install x11vnc -y # 在小车电脑里面下载一个vnc
sudo x11vnc -storepasswd /etc/x11vnc.pass # 加密nvc
sudo gedit /etc/systemd/system/x11vnc.service # 打开vnc启动项
在打开启动项 -- 写入一些信息
sudo install net-tool # 下载网络调试包
ifconfig # 查看ip地址
在远程控制笔记本电脑安装VNC:Download VNC Viewer | VNC® Connect (realvnc.com)
新建链接 -- VNC Server : ip地址 name: XXX(自取)
输入密码:你在Ubuntu上面自己设计的密码
接下来配置虚拟环境 -- 在小车电脑上面安装虚拟屏幕界面 -- VNC相互通信(界面)
做一个虚拟显示器
sudo apt update # 更新软件
sudo apt install install xserver-xorg-video-dummy # 安装虚拟界面包
cd /usr/share/X11/xorg.config.d # 切换路径
sudo gedit xorg.com # 打开文件
在xorg.com写入一些参数 -- 删除此参数即可实现远程与小车界面同步显示
保存后cp一个VNC文件到桌面【备份】
在笔记本使用VNC即可连接远程电脑NVC -- 图形化界面相互连接
虚拟界面:【精选】Ubuntu 20.04 虚拟显示器 1080P 配置_ubuntu 诱骗显示-CSDN博客
怎么用Python写获取Ros雷达的lsb0v2的数据信息
看看muti_goal的数据获取_发布
十一、【多点导航】
导包:muti_goal【自己编写】
其中有两个文件
getpoints.py
goal_loop.py
看看这两个文件实现小车的获取
未完待续。。。。
2023.10.13-10.29
渝北仙桃数据谷