无人驾驶技术——ROS新手教程

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路径

附录

talker.py

#!/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

listener.py

#!/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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值