ROS移动机器人开发总结

郭棉锐 2019-2020机械组组长

一、代码

项目传送门

二、PC端功能包:

建图功能包:cartographer_ws

导航功能包:jetsonbot_nav

键盘控制功能包:teleop_twist_keyboard

机器人模型功能包:jetsonbot_description

三、树莓派端功能包

arduino驱动功能包:ros_arduino_bridge

雷达驱动功能包:ydlidar_master

imu驱动功能包:rasp_imu_hat_6dof

四、机器人模型

solidworks模型:sw_model

CAD文件:cad_model

urdf文件:sw_urdf

五、前期准备

1.硬件

淘宝

CAD文件–>找店家激光切割

激光雷达–>X4激光雷达 扫描仪10米 5k测距频率

arduino–>mega2560开发板+usb数据线 不建议买这么贵的

面包板、电压转换模块、面包板线、各种铜柱、螺栓螺母

IMU模块

电源模块

TB6612FNG电机驱动模块

电机 别忘了电机支架 联轴器 轮子

2.软件

1)安装双系统 ubuntu16.04(也可以用虚拟机、没有影响)

装双系统不难的 严谨点就好了

2)在双系统装ROS(kinetic)

ros各个版本大同小异,对应好相应的ubuntu版本就好了。安装过程WIKI上都有,但会有许多问题出现,大多搜搜都可解决

这里给一个可能比较会遇上而且csdn上那些远古教程解决不了的问题的解决方法:

sudo rosdep init 失败 raw.githubsercontent.com挂了

法一:
rosdep问题解决

法二:
简单粗暴

3)配置参数
a. ros_arduino_python\config\my_arduino_params.yaml

port:/dev/arduino

轮子直径 wheel_diameter:0.068 (单位:米)

轮间距:wheel_track:0.222 (单位:米)

编码器线速:encoder_resolution 16

减速比 gear_reduction:43.8

b.cartographer_ws\install_isolated\share\cartographer_ros\configuration_files\jetsonbot_2d_only_lidar.lua

参数tracking_frame设置为imu_link,使用/imu的数据;设置为base_link,则不使用(imu数据错误时可以不用imu的数据)

参数published_frame设置为base_link;

参数provide_odom_frame设置为true,需要内部提供/odom;

参数use_odometry设置为false,因为我们使用内部/odom的数据,不使用外部的;

修改参数之前,还是建议去看看官方文档,这里准比其他任何地方可靠。

c. 导航包四个配置文件
costmap_common_params.yaml
obstacle_range: 最大障碍物检测范围,超过该范围不认为是障碍物
raytrace_range: 检测自由空间的最大范围
robot_radius: 机器人本体的半径大小,单位:米,圆形机器人使用
footprint: 对于非圆形机器人可以设置该参数,机器人中心[0,0]参数可以顺时针填写,也可以逆时针填写
inflation_radius: 与障碍物的安全半径距离,如果机器人经常撞到障碍物就需要增大该值,若无法通过狭窄地方就减小该值
cost_scaling_factor:用于将inflation计算cost的比例因数,该参数越大,越不把这个inflating看着移动的cost.map_type:如果想要3D视图的就用voxel,2D视图的就用costmap参数 
observation_sources: 观察源是激光雷达
local_costmap_params.yaml
global_frame:指定本地代价地图参考系
robot_base_frame:指定机器人的base_frame
update_frequency:指定local代价地图更新频率
publish_frequency: 代价地图发布可视化信息的频率
static_map: 本地代价地图不会更新地图,设置false
rolling_window: 设置滚动窗口,使机器人始终在窗体中心位置
width: 代价地图宽度,滑动地图x维长度
height:代价地图长度,滑动地图y维长度
 resolution: 代价地图的分辨率,该参数需要与yaml文件设置的地图
transform_tolerance: 指定在tf树中frame直接的转换最大延时,单位秒
global_costmap_params.yaml
global_frame: 全局代价地图参考系
robot_base_frame: 指定机器人的基础参考系
update_frequency: 指定地图更新频率,数值太大造成CPU负担重
publish_frequency: 对于静态全局地图来说,不需不断发布
static_map: 全局地图通常是静态的,因此设置为true
rolling_window: 全局地图不会在机器人移动时候更新
transform_tolerance: 指定在tf树中frame直接的转换最大延时,单位秒
dwa_local_planner_params.yaml
DWA局部规划器配置参数

六、编译功能包

我这边的代码是已经编译过了的,所以如果要拿去用记得把编译生成的文件去掉再进行编译

PC

创建一个工作空间,将jetsonbot_descriptionteleop_twist_keyboardjetsonbot_nav放到src文件夹下面,编译即可

cartographer_ws比较特殊,要与catkin_ws分开编译

catkin_make_isolated --install --use-ninja
source install_setup.bash

树莓派

同样创建一个工作空间,将rasp_imu_hat_6dofros_arduino_bridgeydlidar-master放到src文件夹下,catkin_make编译即可

同时要做好ssh通讯和串口绑定

没有ssh服务就下载相应服务,PC端ROS与树莓派端ROS通讯、串口绑定也不复杂,这里贴两个网站供参考,PC与树莓派端ROS通讯tty串口绑定

arduino

记得将last_arduino_bridge烧录到arduino中

七、机器人启动流程

1 启动rosmaster:roscore

2 ssh远程登录树莓派 ssh USERNAME@IP

  • 启动雷达:roslaunch ydlidar lidar.launch
  • 启动底盘:roslaunch ros_arduino_python arduino.launch
  • 启动imu(可选):roslaunch serial_imu_hat_6dof serial_imu_hat.launch

3 启动cartographer建图节点

  • source install_setup.bash
  • roslaunch cartographer_ros jetsonbot_2d_only_lidar.launch

4 启动键盘控制节点

  • chmod a+x teleop_twist_keyboard.py
  • ./teleop_twist_keyboard.py

5 保存地图

  • 重开一个终端 在cartographer_ws下 source install_setup.bash配置环境变量
  • 在用户家目录下创建一个目录maps
  • 在刚刚的终端输入rosrun cartographer_ros cartographer_pbstream_to_ros_map -map_filestem=/home/guomianrui/maps/gmr_map -pbstream_filename=/home/guomianrui/maps/gmr_map.pbstream -resolution=0.05

6 启动导航包

  • roslaunch jetsonbot_nav jetsonbot_nav_nengyuan.launch

八、运行效果截图

说明:README写得可能不够完善,开学比较忙就暂时不做补充了,有错误之处烦请指正,有错即改,导航包还不完善,本文参考即可。
这台机器人是花费一段时间了的,本着开源精神将模型和代码发出来,开源不易,希望对各位小伙伴有所帮助

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

附:ros相关学习资料

  • 9
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值