天天看點

ubuntu下使用ccmake和cmake版本工具實踐在 linux 下使用 CMake 建構應用程式Qbo_julius_model

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模式即可。