鱼香ROS :实物建图与导航可以借鉴 Nav2 cartographer:--SLAM开源库--
一、终端热键使用总结
1、编译
colcon build 注意整体编译需要在工作空间文件下进行编译
colcon build --packages-select fishbot_cartographer 针对工具包fishbot_cartographer单独编译
2、工具使用
rqt_graph 显示rqt当前所运行的节点
3、新建文件命令
touch fishbot_2d.lua 新建.lua文件,其中 fishbot_2d为文件名
touch launch/boom.py 新建launch文件,其中 boom.py为文件名
4、话题
ros2 topic list -t 显示昂前话题与内容
ros2 topic echo /topic_name 打印当前话题
ros2 topic info /joint_states 查看某话题的类型
ros2 interfaces show sensor_msgs/msg/JointState 根据上面获得的类型type( sensor_msgs/msg/JointState)查看更详细的信息
5、记录
ros2 bag record topic-name1 -a 记录某个节点的数据或者全部节点的数据,可用来复盘
ros2 bag play xxx.db3 前提是在录制文件文件夹内,才能播放录制节点
6、vi界面命令行
-
h - 向左移动光标 j - 向下移动光标 k - 向上移动光标
-
l - 向右移动光标 i - 切换到插入模式 x - 删除光标下的字符
- dd - 删除当前行 w - 保存文件 q - 退出 vi
-
:q! − 退出 vi 而不保存更改
二、运动学内容
三、问题解决总结
1、在gazebo中加入差分驱动插件后rostopic没有cmd_vel与odom话题
ls /opt/ros/foxy/lib/libgazebo_ros*
使用以上命令查看所有的动态链接库,发现没有urdf话题定义中所需的插件,重新安装插件解决问题,安装程序如下:
sudo apt install ros-foxy-gazebo-* //所用版本为foxy
2、安装Nav2依赖出现以下问题:
ERROR: the following packages/stacks could not have their rosdep keys resolved
to system dependencies:
nav2_bringup: Cannot locate rosdep definition for [slam_toolbox]
nav2_bt_navigator: Cannot locate rosdep definition for [behaviortree_cpp_v3]
nav2_behavior_tree: Cannot locate rosdep definition for [behaviortree_cpp_v3]
cartographer_ros: Cannot locate rosdep definition for [urdfdom_headers]
smac_planner: Cannot locate rosdep definition for [ompl]
Continuing to install resolvable dependencies...
#All required rosdeps installed successfully
可以理解为缺少依赖,使用安装指令对依赖进行安装即可:
sudo apt-get install ros-你的ROS版本-你缺少的东西
我用的是foxy,缺少的依赖分别有:slam_toolbox behaviortree_cpp_v3 urdfdom_headers ompl,分别填入其中即可。注意依赖中的下划线需要改成“-”
3、10.9使用FishBot进行自主导航篇-----配置好xml与txt文件后编译失败
失败原因为修改的xml文件中那句话有问题:
catkin_pkg.package.InvalidPackage: Error(s) in package '/home/dh/fishbot_ws/src/fishbot_navigation2/package.xml':
Error(s):
- The generic dependency on 'nav2_bringup' is redundant with: exec_depend
后来再次检查xml文件中的内容,发现有些不对劲:
局部程序,发现有两个地方存在nav2_bringup
<depend>nav2_bringup</depend>
<test_depend>ament_lint_auto</test_depend>
<test_depend>ament_lint_common</test_depend>
<exec_depend>nav2_bringup</exec_depend>
将里面的<depend>行注释掉,保留<exec_depend>部分编译成功
4、继上一个问题解决后,导航时出现gazebo与rviz2地图偏移导致导航异常的问题?
需要进行姿态初始化(选中机器人在Gazebo位置差不多的点,左键点击不要松开,移动鼠标给定方向)。如果不在Gazebo位置差不多的点进行初始化,就会造成该问题。但是导航次数多了会在狭窄的空间堵住,且点云2D图会有很多噪点。
5、继前一段时间雷达无法在虚拟机采集数据,又重新选择配置工控机,出现以下问题:
a)在安装gcc-multilib g++-multilib时总是失败,百度原因是需要换源。还原之后出现新的Failed to fetch的问题,此处原因有两个。
第一个是在命令中使用了: sudo dpkg --add-architecture i386
然后导致所有源出现Failed to fetch的问题,发现问题后用:sudo dpkg --remove-architecture i386解决问题。
第二个是工控机CPU 架构是arm64,一般下载的源需要做修改,如下:
deb https://mirrors.aliyun.com/ubuntu focal-proposed main restricted universe multiverse//修改之前 deb https://mirrors.aliyun.com/ubuntu-ports focal-proposed main restricted universe multiverse//修改之后,多了一个-ports
5、 SLAM阶段在编译工作空间时,出现下面问题:
CMake Error: The source "/home/neardi/work_space/robosense_ws/src/pointcloud_to_laserscan-foxy/CMakeLists.txt" does not match the source "/home/neardi/work_space/robosense_ws/src/pointcloud_to_laserscan/CMakeLists.txt" used to generate cache. Re-run cmake with a different source directory.
将路径下的cmake文件删掉,若还是不行,可以把工作空间中build文件下对应的工具包删掉,重新编译即可。
6、 在工作空间中创建功能包用
ros2 pkg create fishbot_cartographer
与直接mkdir文件夹有什么不同呢? 功能包具体是用来做什么的呢?
功能包是用来存储节点的,这个链接是关于功能包的一些科普。
一般不能直接用mkdir创建功能包,功能包应该有一些依赖以及功能包类型确定。
7、 怎样才能写好一个launch文件,太难了啊?
什么是launch文件