建立ROS的代码环境

PARAMETERS
 * /rosdistro: jade
 * /rosversion: 1.11.16

 一、创建ROS工作空间(catkin_workspace)

        参考:http://wiki.ros.org/catkin/Tutorials/create_a_workspace
              http://wiki.ros.org/catkin/Tutorials/using_a_workspace
        1、定位ROS的setup.bash

             source /opt/ros/indigo/setup.bash


        2、创建工作空间目录,并初始化。

            这一步会在src目录下面产生CMakefile.txt链接文件


            $ mkdir -p ~/m_ros_ws/src
            $ cd ~/m_ros_wss/src
            $ catkin_init_workspace


        3、编译工作空间。

           此步骤会在m_ros_ws工作空间目录下产生build、devel两个目录  

            $ cd ~/catkin_ws/
            $ catkin_make

        在build目录下会产生很多setup.*sh文件,source任何一个文件都会使当前目录成为顶层环境目录,当然可以加入~/.bashrc文件
            source ~/m_ros_ws/devel/setup.bash就不用每次都要定位一次了。
            将上面的这行加入~/.bashrc,在登陆shell终端时会读取到当前的工作空间,使用rospack find package_name指令就会找到当前的包
                    使用rosrun pkg_name node_name 就可以直接执行该程序包下的节点
        检测定位的结果使用 echo $ROS_PACKAGE_PATH
            显示如下: /home/sl/m_ros_ws/src:/opt/ros/jade/share:/opt/ros/jade/stacks
            说明这个工作空间(/home/sl/m_ros_ws/src)已经被操作系统识别了
        4、使用工作空间。
             在工作空间中编译程序包(packages)
             使用catkin_make工具,这个比较简单。可选的可以使用cmake、make
                简要步骤:
                    $ cd ~/m_ros_ws/src/m_package/src  #进入程序包下的src目录
                    # Add/Edit source files           #编辑源码文件
                    $ cd ~/m_ros_ws/src/m_package      #进入程序包的顶层目录
                    # Update CMakeFiles.txt to reflect any changes to your sources#编辑更新CMakefile.txt
                    $ cd ~/m_ros_ws                    #进入工作空间顶层目录
                    $ catkin_make -DCMAKE_BUILD_TYPE=Release  #使用catkin_make编译,编译发布方式Release

                通过上述步骤,工作空间的源码空间(~/m_ros_ws/src)就会被编译进其编译空间(~/m_ros_ws/build)
            所有的源码文件、python库文件、脚本文件、其他的静态文件还将保存在src目录下。所有的生成的文件如路文件,可执行文件,生成的代码都将放进开发目录(~/m_ros_ws/devel)下,这个目录下也会保存生成的setup.*sh文件,它在被定位时,使工作空间进入环境目录
            如果想给catkin_make传递任何参数,可以使用catkin_make para 如catkin_make install (等同于cd ~/m_ros_ws/build && make install)这样,将会在工作空间中产生安装空间目录(~/m_ros_ws/install),这个安装空间会包含其自己的setup.*sh文件,定位这个文件会将安装空间覆盖在环境顶部。使用安装空间目录和开发空间目录下的setup.*sh定位环境都是可以的,一般是使用devel目录。install目录也是有用的,比如在编译ROS安装时,可以加进你的工作空间下的安装包。

二、创建ROS程序包,使用catkin工具

        参考:http://wiki.ros.org/catkin/Tutorials/CreatingPackage
        关于ros程序包:我的理解ros程序包package和stack是ros文件系统级的基本单元,使用roscd命令可以直接定位到包所在的文件路径

     1、ROS程序包的组成
        package.xml ——提供有关程序包的元信息
        CMakeLists.txt ——catkin版本的
          每个package目录下只能有一个程序包,但在catkin工作空间中可以有多个程序目录包
     2、创建一个catkin程序包
        catkin_create_pkg <package_name> [depend1] [depend2] [depend3] 包名和依赖包名
        程序包的依赖关系保存在程序包的package.xml文件中
        自定义package.xml  描述标签<description>可以写描述程序包的一句话
                   维护者标签<maintainer> 维护者邮箱
                   许可标签<license> BSD
                   依赖项标签3部分,包含buildtool_depend项,build_depend项,run_depend项
        自定义CMakeLists.txt

        每次改动程序包,就需要在工作空间调用catkin_make来编译一下
### 编写ROS代码入门指南 对于初学者来说,学习编写ROS(Robot Operating System)代码的最佳方式是从简单的例子入手并逐步深入理解其工作原理。在过去三年中的中国ROS暑期学校里,超过1000名参与者通过快速而深入的学习机会掌握了ROS的基础与高级开发技能[^1]。 #### 创建第一个ROS节点 创建一个基本的ROS程序通常涉及以下几个方面: - **设置环境**:确保已经安装好ROS,并配置好了工作空间。 - **定义包**:使用`catkin_create_pkg`命令来建立一个新的软件包。 - **编写发布者/订阅者模式下的C++或Python脚本**:这是最基础也是最常见的通信形式之一,在这里将以Python为例展示如何实现消息传递功能。 下面是一个简单的“Hello World”示例,展示了如何构建一个能够发送字符串信息到特定话题上的发布者节点以及接收该主题下数据的订阅者节点。 ```python #!/usr/bin/env python import rospy from std_msgs.msg import String def talker(): pub = rospy.Publisher('chatter', String, queue_size=10) rospy.init_node('talker', anonymous=True) rate = rospy.Rate(10) # 10hz while not rospy.is_shutdown(): hello_str = "hello world %s" % rospy.get_time() rospy.loginfo(hello_str) pub.publish(hello_str) rate.sleep() if __name__ == '__main__': try: talker() except rospy.ROSTimeMovedBackwardsException as e: pass ``` 此段代码实现了每秒十次向名为`chatter`的话题广播当前时间戳附带的文字串的功能。为了测试这个发布者的输出效果,还需要另一个用于监听同一话题内容的订阅者端代码如下所示: ```python #!/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("chatter", String, callback) # spin() simply keeps python from exiting until this node is stopped rospy.spin() if __name__ == '__main__': listener() ``` 当运行这两个节点时——即启动上述两个Python文件作为独立进程执行,则可以在终端观察到来自于发布者的日志记录被成功捕获并打印出来。 #### 进一步探索 除了掌握基本的消息传输机制外,还可以尝试打开样例项目里的开放课程《HelloWorldBuilder》,这有助于更直观地感受实际应用中ROS的工作流程[^2]。 另外值得注意的是,在处理复杂机器人任务如路径规划和平行车入库等问题上,可能还会涉及到诸如非线性优化求解器(Ceres Solver)[^3]的应用场景;而在具体实施过程中也可能加入额外逻辑改进方案,比如使车辆进入预定轨迹前后保持直线行驶状态等操作[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值