欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ROS移动机器人开发总结

程序员文章站 2022-06-04 15:01:13
...

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 aaa@qq.com

  • 启动雷达: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移动机器人开发总结
ROS移动机器人开发总结
ROS移动机器人开发总结

附:ros相关学习资料