搭建ROS小车——上位机篇(基于arduino mega2560,L298N)

环境

  • 上位机为树莓派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来建图,因为这个建图算法不需要利用到里程计信息,不过对激光雷达的转动频率要求比较高

你可能感兴趣的:(机器人)