automake與autoconf 一起工作,用于生成configure Makefile。輸入檔案為Makefile.am
cmake更進一步。而rosmake是在ros系統中對于cmake的封裝使用。而catkin_make則為groovy之後更強大的版本工具。
cmake與ccmake(圖形化界面)
sudo apt-get install cmake-curses-gui
(This is on Debian but Ubuntu usually has the same packages; youmight possibly have to turn on the universe repository.)
In general, use
apt-cache search
to find specificpackage names.
在 linux 下使用 CMake 建構應用程式
本文介紹了一個跨平台的自動化建構系統 CMake 在 linux 上的使用方法。 CMake 是一個比 automake 更加容易使用的工具,能夠使程式員從複雜的編譯連接配接過程中解脫出來。文中通過一些例子介紹使用 CMake 處理多源檔案目錄的方法、查找并使用其他開發包的方法以及生成 debug 版和 release 版程式的方法。
http://www.ibm.com/developerworks/cn/linux/l-cn-cmake/index.html
具體這裡,需要做一個工作,就是将qbo_arduqbo驅動包安裝到正常的ubuntu上來運作。需要做一個版本比對工作。即将舊的rosmake包轉換為catkin包讓其能夠運作。
另一個方向,是将rbx1包安裝到openqbo等這些使用rosmake的機器上來運作。新轉舊的。這個意義不大,僅用于示範功能。
用到了rosws工具。它是rosinstall工具包的一部分。 rosws is part of the rosinstall package. See py-rosws-stacks.
cerel_port與qbo_cerel_ports difference
mkdir: cannot create directory `build': Permission denied
注意差別:
chmod -r 777 src/audio_control 與
chmod -r 777 src/audio_control/的差别。可通過ls -l 目錄 來檢視此級目錄是否有寫權限。
遇到如下問題:
/home/ppeix/tutorials/catkin_ws/src/qbo_arduqbo/src/controllers/srf10_controller.cpp:42:12: error: ‘sensor_msgs::PointCloud’ has no member named ‘set_points_size’
/home/ppeix/tutorials/catkin_ws/src/qbo_arduqbo/src/controllers/srf10_controller.cpp:43:12: error: ‘sensor_msgs::PointCloud’ has no member named ‘set_channels_size’
排查後發現由于elec和hydro版本之間的sensor_msgs/PointCloud.h定義有變化導緻的。需要修改CPP源碼,去掉對這兩個成員函數的調用。
sudo chmod 777 ../tutorials/catkin_ws/src/*
scp connection refused
ssh: connect to host 10.96.46.12 port 22: Connection refused
需要安裝 服務子產品openssh-server
解決辦法:sudo apt-get install ssh openssh-server
[100%] Building CXX object CMakeFiles/qbo_listen.dir/src/julius.cpp.o
/home/ppeix/tutorials/catkin_ws/src/qbo_listen/src/julius.cpp:18:30: fatal error: julius/juliuslib.h: No such file or directory
compilation terminated.
julius
sudo apt-get install julius
sudo apt-get install libjulius-dev
Dependencies:
julius
libjulius-dev
libasound2-dev
Linking CXX executable ../bin/qbo_listen
CMakeFiles/qbo_listen.dir/src/julius.cpp.o: In function `main':
/home/ppeix/tutorials/catkin_ws/src/qbo_listen/src/julius.cpp:387: undefined reference to `ros::package::getPath(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
collect2: ld returned 1 exit status
make[3]: *** [../bin/qbo_listen] Error 1
The problem is solved...
It seems that the roslib package isn't a dependency of roscpp anymore. Adding the roslib package as dependency to my package makes it linkable.
roscpp manifest.xml in electric
...<dependpackage="roslib"/>
運作qbo_listen時,缺少一些必備的檔案。經過比對github.com上的和openqbo上實際安裝的内容。缺少qbo_listen/config 檔案夾。
Qbo_julius_model
This is the Julius Acoustic and language Model PackageThese are the files included. But new languages could be added:
/usr/share/qbo-julius-model/en/hmmdefs
/usr/share/qbo-julius-model/en/lexicon
/usr/share/qbo-julius-model/en/phonems
/usr/share/qbo-julius-model/en/tiedlist
/usr/share/qbo-julius-model/es/hmmdefs
/usr/share/qbo-julius-model/es/lexicon
/usr/share/qbo-julius-model/es/phonems
/usr/share/qbo-julius-model/es/tiedlist
還有上面的内容。
還需要額外安裝libjulius-dev包,來解決缺少julius/juliuslib.h頭檔案的問題。這個可以根據qbo_listen的dependency list來實際安裝。
recog= j_create_instance_from_jconf(jconf);
j_adin_init(recog)
boolean
00186 adin_initialize(Recog *recog)
00199 jlog("STAT: ###### initialize input device\n");
00200
00201 /* select input device: file, mic, netaudio, etc... */
00202 if (adin_select(adin, jconf->input.speech_input) == FALSE) {
00203 jlog("ERROR: m_adin: failed to select input device\n");
00204 return FALSE;
00205 }
adin_oss_begin中列印出adin_oss:
adin_alsa_begin中列印出adin_alsa:
而具體調用哪一個,用的是:
./libsent/src/adin/adin_mic_linux.c中的adin_mic_open.這裡面是用宏定義來區分的。
看來,編譯的時候,需要制定是HAS_ALSA呢還是指定HAS_OSS或者是HAS_PULSEAUDIO或者是HAS_ESD.
典型問題:openqbo上重新編譯qbo_audio_control時 rosmake 顯示成功,但qbo_audio_control執行檔案沒有更新。
1.屏蔽Speaker處代碼。rosmake顯示正常。但roslaunch qbo_audio_control 提示仍找不到Speaker。
2.qbo_audio_control.cpp檔案中添加錯誤代碼。再次rosmake 仍顯示成功。
3. 發現多了一個ROS_NOBUILD檔案。通過rosmake -h 看到通過rosmake -i或--mark-installed可以設定該檔案。用于标記包已經安裝過。是以這裡如果需要重新安裝,就要删掉ROS_NOBUILD檔案,然後再rosmake編譯。删除操作可通過rosmake -u或--unmark-installed來實作。
4.删掉ROS_NOBUILD檔案之後,rosmake qbo_audio_control可以正常運作。遇到mkdir permission denied問題。将qbo_audio_control的整個目錄777模式即可。