学习古月ROS探索总结(六)(八)键盘控制小车遇到的问题以及解决办法

学习古月老师的ROS探索总结(六)使用smartcar进行仿真键盘控制时遇到几处运行出错,查找了许多博客最后解决。
我使用的是Ubuntu16.04 + ROS Kinect。
按照博客里所说,先创建三个xacro文件。
在这里插入图片描述然后是launch文件,这里如果跟原文一样的话我的版本运行不了,我在(六)这篇博客的评论里找到了一个解决办法。
在这里插入图片描述如这位朋友所述,只需要把最后一行的urdf.vcg改为urdf.rviz,再把arbotix节点处的type = “driver.py” 改为 “arbotix_driver”,至于smartcar_arbotix.yaml,我们在~SmartCar/src/smartcar_description/config文件夹下创建,把以下语句复制进去:

port: /dev/ttyUSB0
baud: 115200
rate: 20
sync_write: True
sync_read: True
read_rate: 20
write_rate: 20

controllers: {
   #  Pololu motors: 1856 cpr = 0.3888105m travel = 4773 ticks per meter (empirical: 4100)
   base_controller: {type: diff_controller, base_frame_id: base_link, base_width: 0.26, ticks_meter: 4100, Kp: 12, Kd: 12, Ki: 0, Ko: 50, accel_limit: 1.0 }
}

然后运行,又惊喜的报错说没有arbotix_ros包,然后使用sudo apt-get install ros-kinetic-arbotix*也无法安装,很无奈。
在网上找到的方法,为了方便把这个包直接装在当前ros工作区。

cd ~/SmartCar/src
git clone https://github.com/vanadiumlabs/arbotix_ros.git
cd ..
catkin_make

再次尝试roslaunch smartcar_description smartcar_display.rviz.launch 终于成功。
接下来继续学习键盘控制,在~/SmartCar/src创建了一个新的package叫做smartcar_teleop,此时src里已经包括了三个包,分别是arbotix_ros、smartcar_description、smartcar_teleop,然后按照博客中的代码创建一个cpp文件,一个py文件,这两个都可以实现键盘控制。
在这里插入图片描述
我们知道,C++是需要先编译生成可执行文件才能运行的语言,python是在运行过程翻译成可执行语句的,为了编译cpp文件,需要修改CMakeLists.txt文件,当然指的是smartcar_teleop这个包内的,原博客说将以下三句添加至文件底部:

rosbuild_add_boost_directories()
rosbuild_add_executable(smartcar_keyboard_teleop src/keyboard.cpp)
target_link_libraries(smartcar_keyboard_teleop boost_thread)

可是我编译却显示undefined reference to symbol XXX
在这里插入图片描述尝试了添加这些在CMakeLists.txt中,

set(LIBS 
${PROJECT_SOURCE_DIR}/../../../lib/libboost_filesystem.so 
${PROJECT_SOURCE_DIR}/../../../lib/libboost_system.so 
-lboost_system
)

都不起作用,最后意外看到一篇博客提到在target_link_libraries中添加boost_system和boost_filesystem,尝试了一下成功了。
具体操作是把添加在文件底部的第三行代码改成

target_link_libraries(smartcar_keyboard_teleop boost_thread boost_system boost_filesystem)

然后我们进入工作区使用rosmake smartcar_teleop编译,成功的话会在smartcar_teleop包的bin文件夹看到一个可执行文件smartcar_keyboard_teleop,这个就是我们用来rosrun的nodename。具体操作:
1、打开一个终端

cd SmartCar
roslaunch smartcar_description smartcar_display.rviz.launch

出现rviz界面
2、打开新的终端

cd SmartCar
rosrun smartcar_teleop smartcar_keyboard_teleop

3、选中第二个终端,然后wasd控制小车,按住shift使用WASD可以跑得更快
假如我们建立teleop包的时候使用

catkin_create_pkg smartcar_teleop rospy geometry_msgs std_msgs roscpp

我们在CMakeLists.txt底部添加

add_executable(smartcar_keyboard_teleop src/keyboard.cpp)  
target_link_libraries(smartcar_keyboard_teleop boost_thread ${catkin_LIBRARIES})

然后进入工作区,使用catkin_make进行编译,同样可以成功。
现在C++程序已经可以实现键盘控制了,那再试一试python程序,由于不需要编译所以直接把.py文件建好即可运行,具体操作:
1、打开一个终端

cd SmartCar
roslaunch smartcar_description smartcar_display.rviz.launch

出现rviz界面
2、打开新的终端

cd SmartCar
rosrun smartcar_teleop teleop.py

3、选中第二个终端,然后wasd控制小车,按住shift使用WASD可以跑得更快,使用Caps Lock切换大小写也可。

有时候会出现py文件没法执行的错误,一般来说是执行权限的问题,在py文件所在的位置打开终端,chmod +x XXX.py即可。

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值