文章目录
ROS环境配置
可参考
ROS入门教程-安装并配置ROS环境(Kinetic 版本)
http://wiki.ros.org/Installation/Ubuntu?distro=kinetic
配置Ubuntu仓库
“restricted,” “universe,” and “multiverse.” 可界面软件更新那进行设置。
2.配置源
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
或来自中国的源:
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'
3.配置密钥
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
或者
$ wget http://packages.ros.org/ros.key -O - | sudo apt-key add -
4.更新
sudo apt-get update
5.安装
这里介绍Desktop-Full安装: (Recommended) : ROS, rqt, rviz, robot-generic libraries, 2D/3D simulators, navigation and 2D/3D perception
sudo apt-get install ros-kinetic-desktop-full
6.解决依赖
sudo rosdep init
rosdep update
7.环境设置
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
8. 安装rosinstall,便利的工具
sudo apt-get install python-rosinstall
卸载Kinetic
用apt-get方式安装Kinetic的,卸载使用如下命令:
$ sudo apt-get remove ros-kinetic-*
卸载成功的效果:就是/opt下的ROS文件夹Kinetic被删除
ROS环境配置时,可能遇到的问题
其中最关键的地方是:ROS官网用的密钥是
$ sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net --recv-key 0xB01FA116
但是我的有问题,下面密钥可以正常使用:
$ wget http://packages.ros.org/ros.key -O - | sudo apt-key add -
这个有可能的原因是:优先访问ipV6,所以可以改成ipV4优先,再试试
2、sudo apt-get update 时报错
cat’t connect to ‘security.ubuntu.com
这个问题的主要原因是:优先使用了ipv6,导致地址找不到,所以shell一直在等待。解决办法是:
$ sudo gedit /etc/gai.conf
然后做如下修改,就是将注释删掉:
#
# For sites which prefer IPv4 connections change the last line to
#
precedence ::ffff:0:0/96 100
这个修改的意思就是将ipv4设置为优先访问。
参考:https://zach-adams.com/2015/01/apt-get-cant-connect-to-security-ubuntu-fix/
然后重新运行
$ wget http://packages.ros.org/ros.key -O - | sudo apt-key add -
sudo apt-get update
就可以了
ROS环境配置好之后,开始第一个实战小项目。
在ros根目录下创建一个master-src
mkdir src
初始化工作空间
cd src
catkin_init_workspace
编译
cd ..
catkin_make
这一步回产生build 和 devel 文件夹
#sudo resdep init
创建test节点项目
catkin_create_pkg test rospy
python源码文件
cd src/test/src
将运行的py源码文件放在里面,这里为talker.py 和listener.py,源文件代码见 附录
将python文件改为执行文件
chmod u+x talker.py //单个文件的执行
或者 chmod u+x *.py //所有py文件一次改为执行文件
运行talker
cd ..
catkin_make
source devel/setup.dash //配置工作空间,用于刷新环境,必不可少,将当前的工作空间配置了
roscore //这个开启一次即可
rosrun test talker.py
运行listenser
另起一个终端:
在ros根目录下
source devel/setup.bash //配置工作空间,用于刷新环境,必不可少,将当前的工作空间配置了
rosrun test listener.py
注意事项:
每次进行catkin_make之后,都要进行source。后面进行package创建时,当加入了新的package编译完成后,也要进行source刷新环境,否则会出现找不到“package XXX not found” 的问题
若项目固定了之后,可以将source命令加入到bashrc脚本中。
因为每次都要source都很麻烦,解决办法是,使用如下命令
echo “source ~/src/devel/setup.bash” >> ~/.bashrc
(这句话的意思就是把 source ~/tutorial_ws/devel/setup.bash这条指令加到 ~/.bashrc这个脚本后面。其实用gedit ~/.bashrc打开这个文件,然后将source ~/tutorial_ws/devel/setup.bash粘贴进去结果是一样的。如果想要删除某个package,那么打开这个./bashrc文件,删除相应的package名更方便)
这样在每次打开终端时,让系统自动刷新工作空间环境。在这个工作空间下的所有package都可以编译后就可以直接运行了,不用再source
注: echo $ROS_PACKAGE_PATH可以查看系统包含的package路径
附录
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def talker():
pub = rospy.Publisher('test_talker', String, queue_size = 10)
rospy.init_node('talker', anonymous=True)
rate = rospy.Rate(10)
while not rospy.is_shutdown():
hello_str = 'hello worls %s' % rospy.get_time()
rospy.loginfo(hello_str)
pub.publish(hello_str)
rate.sleep()
if __name__ == '__main__':
try:
talker()
except rospy.ROSInterruptException:
pass
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def callback(data):
rospy.loginfo(rospy.get_caller_id() + 'I heard %s' ,data.data)
def listener():
rospy.init_node('listener', anonymous = True)
rospy.Subscriber('test_talker', String, callback)
rospy.spin()
if __name__ == '__main__':
listener()