目录
0.使中控机能运行roscore的设置(非普遍性问题)
在安装好ROS开发环境后,运行 roscore
, 显示ping 本地服务IP。
图2-1 roscore无法运行的显示信息
解决方案:在配置文件 ./bashrc中添加如下语句:
export ROS_HOSTNAME=localhost
export ROS_MASTER_URI=http://localhost:11311
再次运行 roscoe , 启动成功:
图2-2 roscore成功运行
1.功能包依赖安装
由于版本问题,在所给的功能包中,要删除代表cartographer的功能包,并且安装博文 01.绍兴车环境编译(笔记本模拟编译) 中“3.2 cartographer的编译安装”的内容在笔记本上安装编译了cartographer功能包。
现在,需要在中控机中安装功能包编译工程中所需的依赖,建议新手使用以下命令一键安装所有melodic版本的ros功能包依赖:
sudo apt-get install ros-melodic-*
安装完成,基本在编译过程中不会因为ros的功能包依赖问题报错。
报错:
在处理时有错误发生:
/var/cache/apt/archives/ros-melodic-libphidget21_0.7.10-1bionic.20200801.013518_amd64.deb
/var/cache/apt/archives/ros-melodic-lvr2_20.7.1-1bionic.20200710.132440_amd64.deb
/var/cache/apt/archives/ros-melodic-mrpt2_2.0.4-1bionic.20200622.141446_amd64.deb
输入:sudo apt-get install -f
如果不能解决,参考 01.绍兴车环境编译(笔记本模拟编译) 中“3.1 一些功能包的编译”的 “报错4”解决方案。
2.编译功能包
-
在中控机主目录新建工作空间
mkdir -p ~/sx_ws/src cd ~/sx_ws/src catkin_init_workspace
-
使用快捷键“ctrl+h”显示隐藏文件,将笔记本工作空间/src内的功能包全部复制到中控机新建的工作空间sx_ws/src中
注意,不复制隐藏文件、CMakeLists.txt文件。(纯粹复制需要编译的功能包) -
编写整个工作空间
cd ~/sx_ws/ catkin_make_isolated
4.添加环境变量:
仅在当前终端有效:source ~/sx_ws/devel_isolated/setup.bash
在所有终端有效,需要配置.bashrc文件
-
方法1:打开 .bashrc 直接添加
source ~/sx_ws/devel_isolated/setup.bash
-
方法2:在终端使用 echo 命令进行添加
echo "source ~/sx_ws/devel_isolated/setup.bash" >> ~/.bashrc
3.配置传感器参数
3.1 配置IMU
3.1.1 配置IMU参数
- 使用命令
lsusb
,显示本机的usb设备列表:
未插入IMU:
图2-3 插入IMU之前的显示
插入IMU后:
图2-4 插入IMU后的显示
鼠标选择高亮标识了新加入的IMU 的usb消息,接下来需使用其ID信息。
-
使用
ls /dev
,查询Ubuntu上的设备文件信息:
未插入IMU之前:
图2-5 显示设备信息
-
目标:配置文件,使得IMU的设备名可以在
ls /dev
中显示:
在/etc/udev/rules.d/
目录下,新建文件:usb.rules
:
sudo gedit /etc/udev/rules.d/usb.rules
在打开的文件中,输入如下命令:
KERNEL=="ttyUSB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE:="0777", SYMLINK+="usbIMU"
KERNEL=="ttyUSB*", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", MODE:="0777", SYMLINK+="usbDIPAN"
其中是已经配置好的IMU和底盘信息,其中usbIMU代表IMU,另一个代表底盘。
- ATTRS{idVendor} :ID名前半段
- ATTRS{idProduct}:ID名后半段
配置好usb.rules文件后,重启电脑,输入 ls /dev,显示新增的usbIMU:
图2-6 在设备信息中显示usbIMU
3.1.2 启动IMU驱动文件
- 配置
~/sx_ws/src/iexpress_imu_driver/imuyesence/launch/
中的imuyesence.launch
文件,修改port_name
的值为新配置的/dev/usbIMU
:
<param name="port_name" value="/dev/usbIMU" />
- 删除该文件中语句:
<node name="base_imu_link" pkg="tf" type="static_transform_publisher" args="0 0 0 0 0 0 /i_base_link /i_imu 50"/>
- 启动该配置文件:
roslaunch imuyesence imuyesence.launch
显示如下信息,表示IMU配置成功:
图2-7 获取IMU数据
- 调试
使用rostopic list
,显示订阅消息,查看IMU消息是否被订阅:
图2-8 显示订阅消息
使用如下命令,打印IMU订阅的消息:
rostopic echo /iexpress/iexpress_imu_driver/imuyesence/imu
显示如下:
图2-9 显示IMU的订阅消息详情
3.2 配置雷达参数
具体操作可查询该雷达的产品说明书,本雷达的产品说明书在RSView软件的help中可以找到。
3.2.1 在Windows上标定雷达参数
任务1:在windows系统上配置雷达的ip和端口号。
-
**打开windows的适配器管理,配置以太网的ipv4的协议,将ip设置为雷达说明书的默认ip:
192.168.1.102
端口号设置默认:
255.255.255.0
任务2:设置雷达参数:
-
插入雷达,使用管理员模式打开RSView,显示界面如下:
图2-10 软件RSView打开显示界面 -
选择File -> Open -> Sensor Stream
图2-11 打开 Sensor Stream
选择 RS16、Mode:
图2-12 选择RS16、Mode3
- 打开Tools -> Data Port Setting
图2-13 打开Data Port Setting
如果雷达是出厂设置,端口默认为6699,7788:
图2-14 雷达说明书
将软件的端口也设置成6699、7788,即可显示点云数据
- Tools -> RS-LiDar information:
图2-15 雷达参数设置路径
Get 获取当前雷达设置。使用Set LiDAR 完成雷达的参数设置。
调整当前雷达的IP和端口(自设定)。
设置完成的两个雷达的参数如下:
图2-16 1号雷达参数
图2-17 2号雷达参数
到现在为止,雷达的参数设置成功,修改Ubuntu中雷达驱动的功能包中配置文件的参数,更改IP和端口到一致的设定。
3.2.2 在Ubuntu上标定雷达参数并测试文件
- 在Ubuntu系统上设置以太网的IP为:
192.168.1.102
- 修改雷达驱动的launch文件的IP和端口,启动launch文件,测试1颗雷达是否启动:
修改IP,端口号:
<param name="device_ip" value="192.168.1.200" />
<param name="msop_port" value="6699"/>
<param name="difop_port" value="7788"/>
打开终端,进入工作空间:
cd ~/sx_ws/
roslaunch rslidar_pointcloud_new rs_lidar_16.launch
启动信息如下:
lxr@lxr-HP-ZHAN-66-Pro-14-G3:~/sx_ws$ roslaunch rslidar_pointcloud_new rs_lidar_16.launch
... logging to /home/lxr/.ros/log/b6e6f9e4-f3fd-11ea-93fe-b05cda3b43d8/roslaunch-lxr-HP-ZHAN-66-Pro-14-G3-8097.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.
started roslaunch server http://lxr-HP-ZHAN-66-Pro-14-G3:41685/
SUMMARY
========
PARAMETERS
* /iexpress/iexpress_rs_driver/ns1/cloud_node/angle_path: /home/lxr/sx_ws/s...
* /iexpress/iexpress_rs_driver/ns1/cloud_node/channel_path: /home/lxr/sx_ws/s...
* /iexpress/iexpress_rs_driver/ns1/cloud_node/curves_path: /home/lxr/sx_ws/s...
* /iexpress/iexpress_rs_driver/ns1/cloud_node/frame_id: i_scan
* /iexpress/iexpress_rs_driver/ns1/cloud_node/intensity_mode: 1
* /iexpress/iexpress_rs_driver/ns1/cloud_node/max_distance: 200
* /iexpress/iexpress_rs_driver/ns1/cloud_node/min_distance: 0.4
* /iexpress/iexpress_rs_driver/ns1/cloud_node/model: RS16
* /iexpress/iexpress_rs_driver/ns1/cloud_node/resolution_type: 0.5cm
* /iexpress/iexpress_rs_driver/ns1/rslidar_node/cut_angle: 0
* /iexpress/iexpress_rs_driver/ns1/rslidar_node/device_ip: 192.168.1.201
* /iexpress/iexpress_rs_driver/ns1/rslidar_node/difop_port: 8877
* /iexpress/iexpress_rs_driver/ns1/rslidar_node/model: RS16
* /iexpress/iexpress_rs_driver/ns1/rslidar_node/msop_port: 9966
* /rosdistro: melodic
* /rosversion: 1.14.9
NODES
/iexpress/iexpress_rs_driver/ns1/
cloud_node (rslidar_pointcloud_new/cloud_node)
rslidar_node (rslidar_driver_new/rslidar_node)
auto-starting new master
process[master]: started with pid [8107]
ROS_MASTER_URI=http://localhost:11311
setting /run_id to b6e6f9e4-f3fd-11ea-93fe-b05cda3b43d8
process[rosout-1]: started with pid [8118]
started core service [/rosout]
process[iexpress/iexpress_rs_driver/ns1/rslidar_node-2]: started with pid [8124]
process[iexpress/iexpress_rs_driver/ns1/cloud_node-3]: started with pid [8126]
[ INFO] [1599808162.916651328]: [driver] publishing 75 packets per scan
[ INFO] [1599808162.919925052]: [driver] Cut at specific angle feature activated. Cutting rslidar points always at 0 degree.
[ INFO] [1599808162.924817734]: [cloud][rawdata] lidar model: RS16
[ INFO] [1599808162.924915954]: [driver][input] accepting packets from IP address: 192.168.1.201
[ INFO] [1599808162.924942136]: [driver][socket] Opening UDP socket: port 9966
[ INFO] [1599808162.925481408]: [cloud][rawdata] start and end angle feature activated.
[ INFO] [1599808162.925511067]: [cloud][rawdata] start_angle: 0 end_angle: 360 angle_flag: 1
[ INFO] [1599808162.925645744]: [driver][input] accepting packets from IP address: 192.168.1.201
[ INFO] [1599808162.925661783]: [driver][socket] Opening UDP socket: port 8877
[ INFO] [1599808162.926878507]: [cloud][rawdata] distance threshlod, max: 200 m, min: 0.4 m
[ INFO] [1599808162.928275594]: [cloud][rawdata] initialize resolution type: 0.5 cm, intensity mode: 1
[ INFO] [1599808162.938996878]: [cloud][rawdata] lidar model: RS16
[ INFO] [1599808162.939018893]: [cloud][rawdata] start and end angle feature activated.
[ INFO] [1599808162.939032930]: [cloud][rawdata] start_angle: 0 end_angle: 360 angle_flag: 1
[ INFO] [1599808162.939792536]: [cloud][rawdata] distance threshlod, max: 200 m, min: 0.4 m
[ INFO] [1599808162.940519816]: [cloud][rawdata] initialize resolution type: 0.5 cm, intensity mode: 1
[ INFO] [1599808163.256956783]: [cloud][rawdata] curves data is wrote in difop packet!
[ INFO] [1599808163.257098911]: [cloud][rawdata] angle data is wrote in difop packet!
[ INFO] [1599808163.257425032]: [cloud][rawdata] distance resolution is: 1 cm, intensity mode is: Mode 2
[ INFO] [1599808163.257508370]: [cloud][rawdata] lidar only support single return wave!
启动 rviz
,配置 Fixed Frame 的值为.launch启动文件中的frame_id
对应的值 i_scan
:
<param name="frame_id" value="i_scan"/>
在点击Add,添加 pointcloud2,添加Topic,下拉添加消息:
图2-18 rviz配置情况如上图所示
- 如上步所示,修改绍兴车(有2颗雷达)的.launch文件并启动。
roslaunch rslidar_pointcloud_new two_lidar.launch
图2-19 launch文件启动信息
打开rviz,配置参数,显示雷达点云:
图2-20 显示1号雷达信息
3.3 配置底盘转轮
3.3.1 配置底盘参数
首先,启动底盘的启动文件,查看是否能够正常运行:
roslaunch iexpress_omni_4_driver iexpress_omni_4_driver.launch
图2-21 底盘启动文件显示信息
使用 rostopic list
:
图2-22 当前订阅信息中包含了底盘的信息wheel_odom
使用rostopic echo /iexpress/iexpress_omni_4_driver/wheel_odom
,打印轮式里程计的信息:
图2-23 打印轮式里程计的信息
由于目前小车处于静止状态,所以轮式里程计的信息为零。
如果能够启动,配置底盘参数:
-
查阅
iexpress_omni_4_driver.launch
,确定使用的参数文件是~/sx_ws/src/iexpress_omni_4_driver/config/vehicle_params_lof5000_001.yaml
图2-19 该启动文件中使用的参数文件
vehicle_params_lof5000_001.yaml
-
配置该参数文件中的信息:
- port_name:端口名称,设置为
/dev/usbDIPAN
- encoder_resolution:编码率=电机转一圈的脉冲数*减速比
- diagonal:底盘对角线长/2
- calibrate_y、x、w:里程计标定数据,初始化为1。在车子启动后,往x,y轴各运行一段距离、车子转180度,计算“实际走的距离/里程计距离” 的比值,用来更新里程计标定数据。
- wheel_diameter_rf、lf、lr、rr:右前轮、左前轮、左后轮、右后轮的直径。
- port_name:端口名称,设置为
3.3.2 启动底盘launch文件
roslaunch iexpress_omni_4_driver iexpress_omni_4_driver.launch
参考文件
[1] 绍兴车环境编译(笔记本模拟编译)
[2] 软件RSView中help选项下的产品说明文件。