Browse Source

change python/candbc. complete. not test.

yuchuli 5 months ago
parent
commit
e6acb4f875

+ 32 - 3
src/python/candbc/cansend.py

@@ -1,4 +1,33 @@
+import can
+from can.message import Message
+import time
+ 
+class MyListener(can.Listener):
+    def __init__(self):
+        super(MyListener, self).__init__()
+ 
+    def on_message_received(self, msg: Message) -> None:
+        """
+        example
+        when receive message 0x123,transmit message 0x456
+        """
+        pass
+
+
+
+class adccan:
+    def __init__(self,canch,bitrate,dbitrate) -> None:
+          self.bus = can.interface.Bus(interface='socketcan', channel=canch, bitrate=bitrate,data_bitrate=dbitrate)
+          listeners = [
+        		MyListener   # my listener
+    		]
+          notifier = can.Notifier(self.bus, listeners)
+    def sendcandata(self,addr,msg):
+          transmit_msg = can.Message(arbitration_id=addr,
+                                       dlc=len(msg),
+                                       data=msg,
+                                       is_extended_id=False)
+          self.bus.send(transmit_msg)
+
+
 
-def sendcandata(addr,msg,bus):
-#	print("can send.")
-	pass

+ 7 - 3
src/python/candbc/cheryes.py

@@ -6,6 +6,10 @@ from cansend import *
 import threading  
 import time  
 
+#pip3 install python-can
+
+mcan = adccan('can0',500000,2000000)
+
 dbcpath = "./ADCC_CH.dbc"
 
 dbcmsgs = [
@@ -139,7 +143,7 @@ def wheel_task():
 #	print("fwheel: ",fwheel)
 	hex_str = msgdata.hex().upper()  
 #	print(hex_str)  
-	sendcandata(addr,bytes(msgdata),bus)
+	mcan.sendcandata(addr,bytes(msgdata))
 	if (keyexit == False):
 		threading.Timer(0.01, wheel_task).start()
 
@@ -177,7 +181,7 @@ def drive_task():
 #	print("DRIVE: ",fwheel)
 	hex_str = msgdata.hex().upper()  
 #	print(hex_str)  
-	sendcandata(addr,bytes(msgdata),bus)
+	mcan.sendcandata(addr,bytes(msgdata))
 #	print("drive task.")
 	if (keyexit == False):
 		threading.Timer(0.01, drive_task).start()
@@ -216,7 +220,7 @@ def brake_task():
 #	print("BRAKE: ",fwheel)
 	hex_str = msgdata.hex().upper()  
 #	print(hex_str)  
-	sendcandata(addr,bytes(msgdata),bus)
+	mcan.sendcandata(addr,bytes(msgdata))
 #	print("brake task.");
 	if (keyexit == False):
 		threading.Timer(1.0, brake_task).start()

File diff suppressed because it is too large
+ 512 - 484
src/python/candbc/packer_pyx.cpp


File diff suppressed because it is too large
+ 378 - 347
src/python/candbc/parser_pyx.cpp


+ 1 - 1
src/python/candbc/setuppacker.py

@@ -7,7 +7,7 @@ ext_module = Extension(
     "packer",                    # 模块名(Python 中将要导入的名称)  
     sources=["packer_pyx.pyx"],      # Cython 源文件  
     libraries=["candbc"],        # 链接的库名(不包括前缀lib和扩展名.so)  
-    library_dirs=["/home/yuchuli/learn/cython/candbc"], # 包含.so文件的目录  
+    library_dirs=["./"], # 包含.so文件的目录  
     # 如果需要包含头文件,可以使用 include_dirs  
     # include_dirs=["/path/to/include"],  
 )  

+ 1 - 1
src/python/candbc/setupparser.py

@@ -7,7 +7,7 @@ ext_module = Extension(
     "parser",                    # 模块名(Python 中将要导入的名称)  
     sources=["parser_pyx.pyx"],      # Cython 源文件  
     libraries=["candbc"],        # 链接的库名(不包括前缀lib和扩展名.so)  
-    library_dirs=["/home/yuchuli/learn/cython/candbc"], # 包含.so文件的目录  
+    library_dirs=["./"], # 包含.so文件的目录  
     # 如果需要包含头文件,可以使用 include_dirs  
     # include_dirs=["/path/to/include"],  
 )  

+ 25 - 11
src/tool/pointcloudviewer_open3d/main.cpp

@@ -149,22 +149,17 @@ void ListenPointCloud(const char * strdata,const unsigned int nSize,const unsign
         points_buffer.push_back(Eigen::Vector3d(x, y, z));
         intensities_buffer.push_back(intens);
 
-        if(xp.intensity>10)
-        {
+//        if(xp.intensity>10)
+//        {
         point_cloud->push_back(xp);
 
         ++point_cloud->width;
-        }
+//        }
          p++;
 
   //      std::cout<<" x is "<<xp.x<<" y is "<<xp.y<<std::endl;
     }
 
-    if(gcloud_ptr != nullptr)
-    {
-//        gvis.RemoveGeometry(gcloud_ptr);
-    }
-
     std::vector<float> times_buffer(points_buffer.size(), 0.0f);
     open3d::core::Tensor positions =
         open3d::core::eigen_converter::EigenVector3dVectorToTensor(
@@ -178,9 +173,25 @@ void ListenPointCloud(const char * strdata,const unsigned int nSize,const unsign
                                      open3d::core::Dtype::Float32);
     cloud.SetPointAttr("intensity", intensity);
     cloud.SetPointAttr("time", time);
-    gcloud_ptr = std::make_shared<open3d::geometry::PointCloud>(
-                cloud.ToLegacy().PaintUniformColor({1.0, 1.0, 1.0}));
-    gvis.AddGeometry(gcloud_ptr);
+
+    if(gcloud_ptr != nullptr)
+    {
+//        gvis.RemoveGeometry(gcloud_ptr);
+        gcloud_ptr = std::make_shared<open3d::geometry::PointCloud>(
+                    cloud.ToLegacy().PaintUniformColor({1.0, 1.0, 1.0}));
+        gvis.AddGeometry(gcloud_ptr);
+
+    }
+    else
+    {
+        gvis.RemoveGeometry(gcloud_ptr);
+        gcloud_ptr = std::make_shared<open3d::geometry::PointCloud>(
+                    cloud.ToLegacy().PaintUniformColor({1.0, 1.0, 1.0}));
+        gvis.AddGeometry(gcloud_ptr);//gvis.UpdateGeometry(gcloud_ptr);
+        gvis.UpdateRender();
+    }
+
+
 
 
 
@@ -202,9 +213,12 @@ int main(int argc, char *argv[])
 
     snprintf(gstr_memname,255,"lidar_pc");
 
+
     void * pa = iv::modulecomm::RegisterRecv(gstr_memname,ListenPointCloud);
 
     gvis.CreateVisualizerWindow("Point Cloud Viewer", 1600, 900);
+
+    open3d::visualization::gui::SceneWidget;
     gvis.GetRenderOption().background_color_ = {0.0, 0.0, 0.0};
     gvis.GetRenderOption().point_color_option_ =
         open3d::visualization::RenderOption::PointColorOption::Color;

Some files were not shown because too many files changed in this diff