《 无人驾驶原理与实践》一2.6.4基于Husky机器人的小案例

举报
华章计算机 发表于 2019/06/01 23:01:18 2019/06/01
【摘要】 本书摘自《 无人驾驶原理与实践》一书中的第二章,第2.6.4节,编著是申泽邦 雍宾宾 周庆国 李良 李冠憬

2.6.4基于Husky机器人的小案例

       下面以面向对象的编程方式编写一个包,在~/catkin_ws/src中创建一个名为husky_highlevel_controller的包,并且新创建的包依赖roscpp和sensor_msgs:

       catkin_create_pkg husky_highlevel_controller roscpp sensor_msgs


       接下来在husky_highlevel_controller/src下创建两个源文件,分别命名为husky_highlevel_controller_nodecpp和husky_controllercpp,同时在include/husky_high_level_controller/目录下创建头文件husky_controllerhpp。
       修改CMakeListstxt文件如下。

image.png

       其中cmake_minimum_required指定catkin版本,project指定包的名称,在后面的语句中就可以通过引用变量${PROJECT_NAME}来访问这个包名称了。通过find_package找到构建程序时需要的其他包,如果CMake通过find_package找到包,它会创建包含所找到的包信息的环境变量,这些环境变量描述了包的头文件、源文件路径以及包依赖的库和库的路径。通常来说,把需要的CMake包作为catkin的COMPONENTS,即把这些包的名称写在COMPONENTS之后,这么做的原因在于构建一个简单的环境变量集合时,通过COMPONENTS找到的包的环境变量会被一并加到catkin_variables后面。
       catkin_package则用于生产本项目的宏,这个函数必须位于add_library和add_executable这类目标函数之前,通常包含5个参数:
     ●    INCLUDE_DIRS:头文件目录。
     ●    LIBRARIES:本项目库目录。
     ●    CATKIN_DEPENDS:本项目依赖的其他catkin项目。
     ●    DEPENDS:本项目依赖的其他CMake项目。
        CFG_EXTRAS:一些配置选项。
       上面的CMake代码中Build后面的语句均用于指定构建目标,在指定构建目标之前,需要指定头文件和库文件的路径,语法分别是:
        Include路径:构建需要的头文件的路径,通过include_directories()指定。
        Library路径:可执行文件构建时需要的库的路径,通过link_directories()指定。
       添加头文件和库文件路径后,通过add_executable函数指定需要构建的可执行目标,add_executable函数的第一个参数是要构建的可执行目标的名称(自行指定),后面的参数则为源文件的路径,涉及多个源文件时使用空格隔开即可。接着使用add_library指定构建该目标需要的库文件,第一个参数是构建的目标名称,后面是目标依赖的库文件列表。最后通过target_link_libraries将库链接到可执行目标,其参数如下:

      target_link_libraries(<目标名称>, <lib1>, <lib2>, , <libN>)


      在配置好包的构建文件后编写husky_highlevel_controller_nodecpp。这个源文件是一个节点的入口,用以声明节点的句柄。

image.png

image.png

       节点中实例化了一个类,接着完成这个类的头文件和源文件。

image.png

image.png

image.png

       这个节点的功能很简单,通过订阅/scan话题输出Husky机器人的激光扫描数据中非零和无穷大的点,但没有在代码中指定“/scan”这个Topic,一般通过getParam()函数获得在launch文件中指定的参数来订阅这个话题,所以接下来将实现这个launch文件。

image.png

       在这个launch文件中,给节点husky_high_level_controller指定了一个参数laser_topic,同时包含一个launch文件husky_playpenlaunch,这个launch文件实际上是启动了一个Husky机器人的Gazebo模拟环境。我们在引入这个launch文件的时候,传递了一个参数laser_enabled给它,这个参数的值设置为“true”,意味着打开了Husky机器人的激光功能。最后还添加了一个rviz节点,Rviz是ROS官方的3D可视化工具,我们稍后使用Rviz来展现激光扫描。
       使用catkin_make编译包,然后通过source命令配置环境,最后启动launch文件。

image.png

       命令行会不断显示激光的扫描数据,同时打开了Gazebo模拟环境和Rviz工具。我们将Rviz的Global Options中的Fixed Frame指定为odom,如图25所示。
       新增一个激光扫描(LaserScan)的Display,如图26所示。

image.png

       指定LaserScan的topic为“/scan”,并且将size设置为01m,激光的扫描结果如图27所示。

image.png

       机器人车在Gazebo中的情况如图28所示。

image.png


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。