新工作:制作一个送咖啡机器人——第一周
来北京一个月,一直蜗居在一个小屋里,没有钱花+前途迷茫的感觉真是浑身难受。
我现在的任务是接手之前几个客座生的项目,用Turtlebot做一个送咖啡机器人。第一周的时间用来搭建一个完整的demo
0x01 ROS系统
不用买什么书,建议直接在官方的翻译很烂的Tutorials中学习。需要掌握的基本知识有:
- 安装ROS
- 配置环境
- 文件系统工具
rospack
roscd
` - catkin管理工具包 (因为我经常使用
catkin_make_isolate
所以我在 ~/.bash_alias 中添加了一行alias make_robot='cd ~/project/catkin_ws ; catkin_make_isolated --install --use-ninja ; cd -'
) - 节点(node)
roscore
rosnode list/info/ping
rosrun
- 话题(Topic) 键盘/代码控制小乌龟到处跑,
rqt_graph
rqt_plot
rostopic echo
rostopic list -v
rostopic type
rosmsg show
rostopic pub [topic] [msg_type] [args]
- 服务/参数
rosservice list/type/call
rossrv
rosparam list/get/set/dump/load
- 调试/运行
rqt_console
rqt_logger_level
roslaunch
0x02 SLAM: Cartographer ROS for TurtleBots
我按照官方教程没有出错,可能因为我这边原生ipv6翻墙。如果在catkin_make_isolated
这一步出问题了,可以看这篇。
装完以后记得运行一下官方教程的demo。
前面说的Cartographer ROS for TurtleBots
的文档只有安装和使用demo的教程,完整的文档在Cartographer ROS里。Google问题之前先看完文档
——Cartographer 中出现的问题——
(1) 清理旧的编译文件
在我的笔记本上测试没问题后,安装到机器人的过程中却出了一个BUG。error: ‘cartographer_ros_msgs::SubmapQuery::Request’ has no member named ‘submap_index’
在 github 中有一篇Issue提到了这个问题, 原因是师兄留给我的电脑中有老版本的cartographer_ros没有定义submap_index
,在我重新安装的时候除了冲突。
解决方案是在 catkin_make_isolated 之前 clean 一下目录(我不会clean所以把除了src之外的目录都删掉了-_-)
(2) 在ubuntu 16.04下,执行到 rosdep install
的时候报错
1 | $ rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y |
我把这行命令后面加上 --os=ubuntu:xenial
问题解决
1 | $ rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y --os=ubuntu:xenial |
我提交了一个issue,因为是rosdep的原因,被关闭了。
0x03 Lidar: rplidar
直接按照官方教程装好,测试可用
Robot roslaunch rplidar_ros rplidar_robot.launch
notebook roslaunch cartographer_ros demo_lidar.launch
0x04 底盘 Turltlebot-kobuki
基本的安装、使用方法这都有《Kobuki入门教程》
roslaunch kobuki_keyop safe_keyop.launch
0x05 kobuki + rplidar + Cartographer 实时构建地图
前面三个工具包调试成功以后,我们就可以用键盘控制kobuki移动,用rplidar采集数据通过Cartographer 实时构建地图啦。
《ROS与SLAM入门教程-cartographer在Turltlebot的应用3-构建地图》可以参考(里面好像有点小错误)。需要注意的是,新增加的turtlebot_lidar.launch
和turtlebot_lidar_2d.launch
是根据原有的turtlebot.launch
和turtlebot_urg_lidar_2d.launch
修改而来的,同学们可以用diff
命令查看他们的区别。
0x06 Cartographer-Turltlebot + rplidar + move_base 实时建图 + 自动导航
之前师兄用的 Cartographer-ROS,搞得比较麻烦,Cartographer-Turltlebot 都封装好了,会更方便一些。直接运行这个launch文件就可以在 rviz
里面用2d nav goal
导航了。其中,因为雷达不是安装在机器人的正中间,所以rplidar_robot.launch
是在原来的rplidar.launch
的基础上添加了一个tf;yocs_velocity_smoother
是个平滑器(如果一个节点发布速度命令不能保证其平滑度,在节点和cmd_vel_mux之间增加这个平滑器);move_base
的那些参数是师兄遗留下来的,我还没看>_<
1 | <launch> |
0x07 其它
整个机器人基本能正常使用了,没有加优化效果感觉也还不错。机器人在接近障碍的时候可能会原地转一圈(可能是不知道自己用的是雷达而不是双目摄像头吧>_<)。
英语好的可以看这个很牛逼的教程《做一个送咖啡机器人》