环境
- 上位机为树莓派3B+
- 环境:ubuntu mate16.04 + ros kinetic
- ros master在电脑上,环境为ubuntu18.04 +ros melodic
- 考虑到之后可能会拓展别的功能,节点都在树莓派上运行会比较卡,这里使用了ROS的分布式通讯,主机为我电脑的linux系统,从机为树莓派
ROS分布式多机通讯的配置与实现
功能包
树莓派端:
只创建了一个工作空间,放了ros_arduino_bridge和sc_mini(国科光芯激光雷达)两个功能包,这款雷达可能没什么人用,之前搜资料搜的很辛苦,如果需要可以私聊
├─ros_arduino_bridge
│ ├─ros_arduino_bridge
│ ├─ros_arduino_firmware
│ │ └─src
│ │ └─libraries
│ │ ├─MegaRobogaiaPololu
│ │ └─ROSArduinoBridge
│ ├─ros_arduino_msgs
│ │ ├─msg
│ │ └─srv
│ └─ros_arduino_python
│ ├─config
│ ├─launch
│ ├─nodes
│ └─src
│ └─ros_arduino_python
├─sc_mini
│ ├─include
│ │ └─sc_mini
│ ├─launch
│ ├─rviz
│ └─src
-
ros_arduino_bridge功能包
-
需要修改ros_arduino_python/config中yaml文件,这里我们制作了备份文件(my_arduino_params.yaml),修改里边的参数,详情请看代码
# For a robot that uses base_footprint, change base_frame to base_link
base_frame: base_link #这个主要有base_link和base_footprint两种,差不多,不过这里使用了base_link,其他地方也要统一,在tf坐标变换也是用了这个名字
# === Robot drivetrain parameters 单位是米
wheel_diameter: 0.065 //轮宽
wheel_track: 0.210 //轮距
encoder_resolution: 13 //编码器线数,我的电机转一圈脉冲为390
gear_reduction: 30 //减速比
motors_reversed: True //这里需要注意,如果上位机控制的时候跟你设定的转向不同,可能是这里出错了,这时候我们只要把T改为False即可
-
启动arduino节点只需要
roslaunch ros_arduino_python arduino.launch
如果遇到错误,可能是没有将nodes文件夹中的文件改变为可执行文件,直接右键——属性——权限,可执行文件一栏打上勾就可以了
不过还是建议看一看节点开启的代码,读一下方便之后修改
PC端
PC端创建了一个工作空间,放置了sw导出的模型功能包,导航功能包,建图功能包(我使用了gmapping,代码中cartographer_ws是师兄的代码,不过我编译不成功),sc_mini(这里用来启动可视化界面)以及键盘控制节点,这个也需要设置为可执行文件
另外,我们需要在树莓派上进行串口绑定 ,每次接入arduino和激光雷达时就不需要考虑他们的顺序,这里可以参考这篇文章
遇到的问题
- PC端与树莓派端的通讯,获取串口信息后建议按照博客中的顺序编写.rules文件,因为我参考了别的博客写了按照别的顺序写入发现不行
- 不知道如何在上位机进行pid调试,这个等回学校后再研究研究
- 建图时由于转向过快导致建图出问题,打算试一下hector_slam来建图,因为这个建图算法不需要利用到里程计信息,不过对激光雷达的转动频率要求比较高
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)