运行起来后是什么样的通信结构。
PR2机器人
这么多东西,怎么管理进行,并且怎么通信。
节点管理器(作为管家管理进程,master)
node首先要向master注册,之后就可以点对点通信。
所以首先启动master
roscore
运行以后会启动以下三个
node是一个ros进程,在ros中叫节点。
一个package中可以有多个可执行文件,运行以后,加载在内存中,就作为一个node。node是动态的概念,可执行文件是静态的。
node以功能划分,不同功能放在不同node中。
启动node
rosrun [pkg_name] [node_name]
rosnode命令
当有多个node时,可以通过lanuch文件启动。
roslaunch [pkg_name] [file_name.launch]
启动规则在lanuch中。
lanuch文件
下面是pr2机器人的launch中需要启动的note。需要注意的是,一般把启动的packge命名为bringup
实践
在重德智能github
https://github.com/DroidAITech/ROS-Academy-for-Beginners/tree/melodic
git clone这个软件包到src
然后回到工作空间安装依赖
我们直接安装ros一个功能包所需要的依赖一个较常使用的命令是
rosdep install --from-paths src --ignore-src --rosdistro=melodic -y
这个命令是用于安装工作空间中 src 路径下所有package的依赖项(由pacakge.xml文件指定)。
参考ROS:安装一个功能包所有的依赖
问题1
E: 有几个软件包无法下载,要不运行 apt-get update 或者加上 --fix-missing 的选项再试试?这里我都试了,最终解决办法是再添加源文件
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
参考博客ROS安装(国内源)
运行lunch文件
roslaunch启动节点
roslaunch robot_sim_demo robot_spawn.launch
问题2
substitution args not supported: No module named ‘rospkg’
解决
pip3 install -U rospkg
问题3
再运行,有个error
gazebo 报错 [Err] [REST.cc:205] Error in REST request
解决:
gazebo 报错 [Err] [REST.cc:205] Error in REST request 解决
或者有时后需要改回去
查看节点
rosnode list
rosnode info /cmd_vel_mux
问题4
不显示图上物体
解决
未解决。。。
问题5
运行脚本,控制运动:
rosrun robot_sim_demo robot keyboard teleop.py
如果正常运行的话这时候再rosnode list就会显示处这个node
出现问题
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(msg)?
考虑是python版本问题,将文件中的usr/bin/env python改为/usr/bin/python
因为查看/usr/bin下python发现,python指向python2,但是很奇怪再桌面查看版本却是python3。这个原因是因为设置anaconda时将其路径写在环境变量里,因此emmmm,但是如果在python文件的头文件改为#!/usr/bin/python则是默认python。
关于python路径讲解请看博文
如何在Anaconda的python和系统自带的python之间切换
同时我们注意,python版本有系统版本,anaconda版本和anaconda虚拟版本之间的区别。
ps:NODE就是一个process