折腾半天ubuntu下的linux,重装多次,总算可以勉强代替windows,这才开始ros的学习。
安装就出了大问题,由于对linux系统知识的匮乏,最开始自己分区到了/var文件,结果导致空间不足,为此重装多次,深以为教训,这里不提。
安装的官方文档如下:ros官方
中文版个人推荐:ros不能再详细对安装教程
遇到对错误基本都再该博客上得以解决。
提一下创建工作空间的问题。
工作空间代码如下,linux基础薄弱,理解可能有误,望指正:
$ mkdir -p ~/catkin_ws/src $ cd ~/catkin_ws/src $ catkin_init_workspace #新建一个catkin_ws/src文件目录,定位到该目录,并初始化工作空间 $ cd ~/catkin_ws/ $ catkin_make #定位到目录,安装catkin $ source devel/setup.bash $ echo $ROS_PACKAGE_PATH #设置环境变量 $ cd ~/catkin_ws/src $ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp #定位到/src,并安装设置python和cpp语言对依赖package,即用python或者c++编程 $ cd ~/catkin_ws $ catkin_make $ . ~/catkin_ws/devel/setup.bash #创建catkin工作空间,并安装bash $cd ~/catkin_ws/src/beginner_tutorials/src
$gedit hello_world.cpp #定位到beginner,用gedit创建一个cpp文件
在cpp文件上写入一个最简单的helloworld程序:
#include <ros/ros.h> int main(int argc, char** argv) { ros::init(argc, argv, "hello_meta_package_node"); ros::NodeHandle nh; ROS_INFO("Hello ROS!"); ros::spin(); }
将ros函数变量(c++)添加编辑到Cmakelist,txt文件最末尾。文件位置是在
/catkin_ws/src/beginner_tutorials/src
添加:
add_executable(hello_worldsrc/hello_world.cpp)
target_link_libraries(hello_world ${catkin_LIBRARIES} )
定位到:
$cd ~/catkin_ws
$catkin_make
运行。
ctrl+alt+T调用出另一个终端,输入
$ roscore
回到原终端,运行,rosrun
$rosrun beginner_tutorials hello_world
运行结果是
[INFO] [1488885879.948466473]: Hello ROS!
该结果表示创建工作空间成功。
期间遇到错误如下:
1.添加Cmakelist.txt对c++库对支持时,将代码添加到了文件开头,导致catkin_make时,遇见如下错误代码:
CMakeFiles/hello_world.dir/src/hello_world.cpp.o:在函数‘main’中: hello_world.cpp:(.text+0x61):对‘ros::init(int&, char**, std::string const&, unsigned int)’未定义的引用 hello_world.cpp:(.text+0xbd):对‘ros::NodeHandle::NodeHandle(std::string const&, std::map<std::string, std::string, std::less<std::string>, std::allocator<std::pair<std::string const, std::string> > > const&)’未定义的引用 ………… ………… CMakeFiles/hello_world.dir/src/hello_world.cpp.o:在函数‘main’中: hello_world.cpp:(.text+0x61):对‘ros::init(int&, char**, std::string const&, unsigned int)’未定义的引用 hello_world.cpp:(.text+0xbd):对‘ros::NodeHandle::NodeHandle(std::string const&, std::map<std::string, std::string, std::less<std::string>, std::allocator<std::pair<std::string const, std::string> > > const&)’未定义的引
2.解决方法:Cmakelist.txt调整代码位置。
2.rosrun之后,遇见如下错误代码:
[ERROR] [1488885671.367081873]: [registerPublisher] Failed to contact master at [localhost:11311]. Retrying..
解决方法,因为ros对特有机制,必须roscore之后才能rosrun,因此只需要再另一个终端上输入rosrun即可。
改进:
运行cpp可以使用launch,rosrun本身也只能运行一个cpp文件,而launch可以运行多个。
使用代码如下:
$ roscdbeginner_tutorials $ mkdir launch $ cd launch $gedit hello_world.launch
hello_world.launch内容:
<launch> <node pkg="beginner_tutorials" name="hello_world" type="hello_world"> </node> </launch>
$roslaunchbeginner_tutorials hello_world.launch
为了看到信息,我们要打开rqt_console
$rqt_console$roslaunchbeginner_tutorials hello_world.launch